Fix renaming collection files
authorDaniel Kos <daniel.kos@contractors.roche.com>
Mon, 6 Aug 2018 19:27:09 +0000 (21:27 +0200)
committerDaniel Kos <daniel.kos@contractors.roche.com>
Mon, 6 Aug 2018 19:27:09 +0000 (21:27 +0200)
Feature #13967

Arvados-DCO-1.1-Signed-off-by: Daniel Kos <daniel.kos@contractors.roche.com>

src/components/collection-panel-files/collection-panel-files.tsx
src/services/collection-files-service/collection-files-service.ts

index 17bbe85e0d7f1748ee23ec692d7d501e13e7cafc..afe9e8517cc4027d5e90a4fca4d6007a560ea5d1 100644 (file)
@@ -8,6 +8,10 @@ import { FileTreeData } from '../file-tree/file-tree-data';
 import { FileTree } from '../file-tree/file-tree';
 import { IconButton, Grid, Typography, StyleRulesCallback, withStyles, WithStyles, CardHeader, CardContent, Card, Button } from '@material-ui/core';
 import { CustomizeTableIcon } from '../icon/icon';
+import { connect, DispatchProp } from "react-redux";
+import { Dispatch } from "redux";
+import { RootState } from "../../store/store";
+import { ServiceRepository } from "../../services/services";
 
 export interface CollectionPanelFilesProps {
     items: Array<TreeItem<FileTreeData>>;
@@ -36,14 +40,24 @@ const styles: StyleRulesCallback<CssRules> = theme => ({
     }
 });
 
-export const CollectionPanelFiles = withStyles(styles)(
-    ({ onItemMenuOpen, onOptionsMenuOpen, classes, ...treeProps }: CollectionPanelFilesProps & WithStyles<CssRules>) =>
+const renameFile = () => (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
+  services.collectionFilesService.renameTest();
+};
+
+
+export const CollectionPanelFiles =
+    connect()(
+    withStyles(styles)(
+    ({ onItemMenuOpen, onOptionsMenuOpen, classes, dispatch, ...treeProps }: CollectionPanelFilesProps & DispatchProp & WithStyles<CssRules>) =>
         <Card className={classes.root}>
             <CardHeader
                 title="Files"
                 action={
-                    <Button 
-                        variant='raised' 
+                    <Button onClick={
+                        () => {
+                            dispatch<any>(renameFile());
+                        }}
+                        variant='raised'
                         color='primary'
                         size='small'>
                         Upload data
@@ -65,4 +79,5 @@ export const CollectionPanelFiles = withStyles(styles)(
                     </Typography>
             </Grid>
             <FileTree onMenuOpen={onItemMenuOpen} {...treeProps} />
-        </Card>);
+        </Card>)
+);
index 3b320eb6c9780f7bd407ee01ce9be2902d4d313f..dfeed0b7032de2fec5e7b654345113292b4ce39d 100644 (file)
@@ -6,6 +6,8 @@ import { CollectionService } from "../collection-service/collection-service";
 import { parseKeepManifestText, stringifyKeepManifest } from "./collection-manifest-parser";
 import { mapManifestToCollectionFilesTree } from "./collection-manifest-mapper";
 import { CollectionFile } from "../../models/collection-file";
+import { CommonResourceService } from "../../common/api/common-resource-service";
+import * as _ from "lodash";
 
 export class CollectionFilesService {
 
@@ -26,19 +28,21 @@ export class CollectionFilesService {
     async renameFile(collectionUuid: string, file: { name: string, path: string }, newName: string) {
         const collection = await this.collectionService.get(collectionUuid);
         const manifest = parseKeepManifestText(collection.manifestText);
-        const updatedManifest = manifest.map(stream =>
-            stream.name === file.path
+        const updatedManifest = manifest.map(
+            stream => stream.name === file.path
                 ? {
                     ...stream,
-                    files: stream.files.map(f =>
-                        f.name === file.name
+                    files: stream.files.map(
+                        f => f.name === file.name
                             ? { ...f, name: newName }
-                            : f)
+                            : f
+                    )
                 }
                 : stream
         );
         const manifestText = stringifyKeepManifest(updatedManifest);
-        return this.collectionService.update(collectionUuid, { ...collection, manifestText });
+        const data = { ...collection, manifestText };
+        return this.collectionService.update(collectionUuid, CommonResourceService.mapKeys(_.snakeCase)(data));
     }
 
     async deleteFile(collectionUuid: string, file: { name: string, path: string }) {
@@ -56,4 +60,10 @@ export class CollectionFilesService {
         return this.collectionService.update(collectionUuid, { manifestText });
     }
 
-}
\ No newline at end of file
+    renameTest() {
+        const u = this.renameFile('qr1hi-4zz18-n0sx074erl4p0ph', {
+            name: 'extracted2.txt.png',
+            path: ''
+        }, 'extracted-new.txt.png');
+    }
+}