[ARVADOS-WORKBENCH2] created: 1.2.0-121-g0e9bf3f

Git user git at public.curoverse.com
Wed Aug 22 05:28:41 EDT 2018


        at  0e9bf3f713937af55e9b8677ca8c87eeddeae4da (commit)


commit 0e9bf3f713937af55e9b8677ca8c87eeddeae4da
Author: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>
Date:   Wed Aug 22 11:28:20 2018 +0200

    project-copy-using-form-dialog
    
    Feature #13988
    
    Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>

diff --git a/src/store/project-copy-dialog/project-copy-dialog.ts b/src/store/project-copy-dialog/project-copy-dialog.ts
new file mode 100644
index 0000000..dbf3f8f
--- /dev/null
+++ b/src/store/project-copy-dialog/project-copy-dialog.ts
@@ -0,0 +1,9 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+export interface ProjectCopyFormDialogData {
+    name: string;
+    projectUuid: string;
+    uuid: string;
+}
\ No newline at end of file
diff --git a/src/store/project-copy-project-dialog/project-copy-project-dialog.ts b/src/store/project-copy-project-dialog/project-copy-project-dialog.ts
new file mode 100644
index 0000000..768b25e
--- /dev/null
+++ b/src/store/project-copy-project-dialog/project-copy-project-dialog.ts
@@ -0,0 +1,19 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { Dispatch } from "redux";
+import { dialogActions } from "~/store/dialog/dialog-actions";
+import { initialize } from 'redux-form';
+import { resetPickerProjectTree } from '~/store/project-tree-picker/project-tree-picker-actions';
+import { ProjectCopyFormDialogData } from "~/store/project-copy-dialog/project-copy-dialog";
+
+export const PROJECT_COPY_DIALOG = 'projectCopy';
+
+export const openProjectCopyDialog = (data: { projectUuid: string, name: string }) =>
+    (dispatch: Dispatch) => {
+        dispatch<any>(resetPickerProjectTree());
+        const initialData: ProjectCopyFormDialogData = { name: `Copy of: ${data.name}`, projectUuid: '', uuid: data.projectUuid };
+        dispatch<any>(initialize(PROJECT_COPY_DIALOG, initialData));
+        dispatch(dialogActions.OPEN_DIALOG({ id: PROJECT_COPY_DIALOG, data: {} }));
+    };
\ No newline at end of file
diff --git a/src/validators/validators.tsx b/src/validators/validators.tsx
index 106c74d..92f917e 100644
--- a/src/validators/validators.tsx
+++ b/src/validators/validators.tsx
@@ -16,6 +16,6 @@ export const COLLECTION_DESCRIPTION_VALIDATION = [maxLength(255)];
 export const COLLECTION_PROJECT_VALIDATION = [require];
 
 export const COPY_NAME_VALIDATION = [require, maxLength(255)];
-export const MAKE_A_COPY_VALIDATION = [require, maxLength(255)];
+export const MAKE_A_COPY_VALIDATION = [require];
 
 export const MOVE_TO_VALIDATION = [require];
diff --git a/src/views-components/context-menu/action-sets/collection-action-set.ts b/src/views-components/context-menu/action-sets/collection-action-set.ts
index 5fb4f2d..d02c987 100644
--- a/src/views-components/context-menu/action-sets/collection-action-set.ts
+++ b/src/views-components/context-menu/action-sets/collection-action-set.ts
@@ -9,7 +9,7 @@ import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, ProvenanceGra
 import { openUpdater } from "~/store/collections/updater/collection-updater-action";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
 import { openMoveCollectionDialog } from '~/store/move-collection-dialog/move-collection-dialog';
-import { openProjectCopyDialog } from "~/views-components/project-copy-dialog/project-copy-dialog";
+import { openProjectCopyDialog } from "~/store/project-copy-project-dialog/project-copy-project-dialog";
 
 export const collectionActionSet: ContextMenuActionSet = [[
     {
diff --git a/src/views-components/context-menu/action-sets/collection-resource-action-set.ts b/src/views-components/context-menu/action-sets/collection-resource-action-set.ts
index ab93f6b..1870c2f 100644
--- a/src/views-components/context-menu/action-sets/collection-resource-action-set.ts
+++ b/src/views-components/context-menu/action-sets/collection-resource-action-set.ts
@@ -9,7 +9,7 @@ import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, RemoveIcon }
 import { openUpdater } from "~/store/collections/updater/collection-updater-action";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
 import { openMoveCollectionDialog } from '~/store/move-collection-dialog/move-collection-dialog';
-import { openProjectCopyDialog } from "~/views-components/project-copy-dialog/project-copy-dialog";
+import { openProjectCopyDialog } from '~/store/project-copy-project-dialog/project-copy-project-dialog';
 
 export const collectionResourceActionSet: ContextMenuActionSet = [[
     {
diff --git a/src/views-components/context-menu/action-sets/project-action-set.ts b/src/views-components/context-menu/action-sets/project-action-set.ts
index 01e6004..3948b8c 100644
--- a/src/views-components/context-menu/action-sets/project-action-set.ts
+++ b/src/views-components/context-menu/action-sets/project-action-set.ts
@@ -12,7 +12,7 @@ import { toggleFavorite } from "~/store/favorites/favorites-actions";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
 import { PROJECT_CREATE_DIALOG } from "../../dialog-create/dialog-project-create";
 import { openMoveProjectDialog } from '~/store/move-project-dialog/move-project-dialog';
-import { openProjectCopyDialog } from "~/views-components/project-copy-dialog/project-copy-dialog";
+import { openProjectCopyDialog } from "~/store/project-copy-project-dialog/project-copy-project-dialog";
 
 export const projectActionSet: ContextMenuActionSet = [[
     {
diff --git a/src/views-components/project-copy-dialog/project-copy-dialog.tsx b/src/views-components/project-copy-dialog/project-copy-dialog.tsx
index dedf507..5237772 100644
--- a/src/views-components/project-copy-dialog/project-copy-dialog.tsx
+++ b/src/views-components/project-copy-dialog/project-copy-dialog.tsx
@@ -1,29 +1,53 @@
 // Copyright (C) The Arvados Authors. All rights reserved.
 //
 // SPDX-License-Identifier: AGPL-3.0
-import { Dispatch, compose } from "redux";
-import { withDialog } from "~/store/dialog/with-dialog";
-import { dialogActions } from "~/store/dialog/dialog-actions";
-import { ProjectCopy, CopyFormData } from "~/components/project-copy/project-copy";
-import { reduxForm, startSubmit, stopSubmit, initialize } from 'redux-form';
-import { resetPickerProjectTree } from "~/store/project-tree-picker/project-tree-picker-actions";
 
-export const PROJECT_COPY_DIALOG = 'projectCopy';
-export const openProjectCopyDialog = (data: { projectUuid: string, name: string }) =>
-    (dispatch: Dispatch) => {
-        dispatch<any>(resetPickerProjectTree());
-        const initialData: CopyFormData = { name: `Copy of: ${data.name}`, projectUuid: '', uuid: data.projectUuid };
-        dispatch<any>(initialize(PROJECT_COPY_DIALOG, initialData));
-        dispatch(dialogActions.OPEN_DIALOG({ id: PROJECT_COPY_DIALOG, data: {} }));
-    };
+import * as React from "react";
+import { InjectedFormProps, Field, WrappedFieldProps } from 'redux-form';
+import { WithDialogProps } from '~/store/dialog/with-dialog';
+import { FormDialog } from '~/components/form-dialog/form-dialog';
+import { ProjectTreePicker } from '~/views-components/project-tree-picker/project-tree-picker';
+import { Typography } from "@material-ui/core";
+import { COPY_NAME_VALIDATION, MAKE_A_COPY_VALIDATION } from '~/validators/validators';
+import { TextField } from "~/components/text-field/text-field";
+import { ProjectCopyFormDialogData } from "~/store/project-copy-dialog/project-copy-dialog";
 
-export const ProjectCopyDialog = compose(
-    withDialog(PROJECT_COPY_DIALOG),
-    reduxForm({
-        form: PROJECT_COPY_DIALOG,
-        onSubmit: (data, dispatch) => {
-            dispatch(startSubmit(PROJECT_COPY_DIALOG));
-            setTimeout(() => dispatch(stopSubmit(PROJECT_COPY_DIALOG, { name: 'Invalid path' })), 2000);
-        }
-    })
-)(ProjectCopy);
\ No newline at end of file
+export const ProjectCopyFormDialog = (props: WithDialogProps<string> & InjectedFormProps<ProjectCopyFormDialogData>) =>
+    <FormDialog
+        dialogTitle='Make a copy'
+        formFields={ProjectCopyFields}
+        submitLabel='Copy'
+        {...props}
+    />;
+
+const ProjectCopyFields = () => <div>
+    <ProjectCopyNameField />
+    <ProjectCopyDialogFields />
+</div>;
+
+const ProjectCopyNameField = () =>
+    <Field
+        name='name'
+        component={TextField}
+        validate={COPY_NAME_VALIDATION}
+        label="Enter a new name for the copy" />;
+
+const ProjectCopyDialogFields = () =>
+    <Field
+        name="projectUuid"
+        component={ProjectPicker}
+        validate={MAKE_A_COPY_VALIDATION} />;
+
+const ProjectPicker = (props: WrappedFieldProps) =>
+    <div style={{ height: '200px', display: 'flex', flexDirection: 'column' }}>
+        <ProjectTreePicker onChange={handleChange(props)} />
+        {props.meta.dirty && props.meta.error &&
+            <Typography variant='caption' color='error'>
+                {props.meta.error}
+            </Typography>}
+    </div>;
+
+const handleChange = (props: WrappedFieldProps) => (value: string) =>
+    props.input.value === value
+        ? props.input.onChange('')
+        : props.input.onChange(value);
\ No newline at end of file
diff --git a/src/views-components/project-copy-project-dialog/project-copy-project-dialog.tsx b/src/views-components/project-copy-project-dialog/project-copy-project-dialog.tsx
new file mode 100644
index 0000000..468603f
--- /dev/null
+++ b/src/views-components/project-copy-project-dialog/project-copy-project-dialog.tsx
@@ -0,0 +1,20 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+import { compose } from "redux";
+import { withDialog } from "~/store/dialog/with-dialog";
+import { reduxForm, startSubmit, stopSubmit } from 'redux-form';
+import { PROJECT_COPY_DIALOG } from '~/store/project-copy-project-dialog/project-copy-project-dialog';
+import { ProjectCopyFormDialog } from "~/views-components/project-copy-dialog/project-copy-dialog";
+
+export const ProjectCopyDialog = compose(
+    withDialog(PROJECT_COPY_DIALOG),
+    reduxForm({
+        form: PROJECT_COPY_DIALOG,
+        onSubmit: (data, dispatch) => {
+            dispatch(startSubmit(PROJECT_COPY_DIALOG));
+            setTimeout(() => dispatch(stopSubmit(PROJECT_COPY_DIALOG, { name: 'Invalid path' })), 2000);
+        }
+    })
+)(ProjectCopyFormDialog);
\ No newline at end of file
diff --git a/src/views/workbench/workbench.tsx b/src/views/workbench/workbench.tsx
index ed11eb1..89bd71e 100644
--- a/src/views/workbench/workbench.tsx
+++ b/src/views/workbench/workbench.tsx
@@ -50,10 +50,10 @@ import { DialogCollectionCreateWithSelectedFile } from '~/views-components/creat
 import { COLLECTION_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-collection-create';
 import { PROJECT_CREATE_DIALOG } from '~/views-components/dialog-create/dialog-project-create';
 import { UploadCollectionFilesDialog } from '~/views-components/upload-collection-files-dialog/upload-collection-files-dialog';
-import { ProjectCopyDialog } from '~/views-components/project-copy-dialog/project-copy-dialog';
 import { CollectionPartialCopyDialog } from '../../views-components/collection-partial-copy-dialog/collection-partial-copy-dialog';
 import { MoveProjectDialog } from '~/views-components/move-project-dialog/move-project-dialog';
 import { MoveCollectionDialog } from '~/views-components/move-collection-dialog/move-collection-dialog';
+import { ProjectCopyDialog } from '~/views-components/project-copy-project-dialog/project-copy-project-dialog';
 
 const DRAWER_WITDH = 240;
 const APP_BAR_HEIGHT = 100;

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list