e7e7836e87ba6e1dcf63851bb99d1d82125f3fd9
[arvados.git] / src / views-components / dialog-copy / dialog-copy.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from "react";
6 import { memoize } from "lodash/fp";
7 import { InjectedFormProps, Field } from "redux-form";
8 import { WithDialogProps } from "store/dialog/with-dialog";
9 import { FormDialog } from "components/form-dialog/form-dialog";
10 import { ProjectTreePickerField } from "views-components/projects-tree-picker/tree-picker-field";
11 import { COPY_NAME_VALIDATION, COPY_FILE_VALIDATION } from "validators/validators";
12 import { TextField } from "components/text-field/text-field";
13 import { CopyFormDialogData } from "store/copy-dialog/copy-dialog";
14 import { PickerIdProp } from "store/tree-picker/picker-id";
15
16 type CopyFormDialogProps = WithDialogProps<string> & InjectedFormProps<CopyFormDialogData>;
17
18 export const DialogCopy = (props: CopyFormDialogProps & PickerIdProp) => {
19     console.log("single dialog copy", props);
20
21     return (
22         <FormDialog
23             dialogTitle="Make a copy"
24             formFields={CopyDialogFields(props.pickerId)}
25             submitLabel="Copy"
26             {...props}
27         />
28     );
29 };
30
31 const CopyDialogFields = memoize((pickerId: string) => () => (
32     <>
33         <Field
34             name="name"
35             component={TextField as any}
36             validate={COPY_NAME_VALIDATION}
37             label="Enter a new name for the copy"
38         />
39         <Field
40             name="ownerUuid"
41             component={ProjectTreePickerField}
42             validate={COPY_FILE_VALIDATION}
43             pickerId={pickerId}
44         />
45     </>
46 ));
47
48 export const DialogMultiCopy = (props: CopyFormDialogProps & PickerIdProp) => {
49     console.log("multi dialog copy", props);
50
51     return (
52         <FormDialog
53             dialogTitle="Make a copy"
54             formFields={CopyMultiDialogFields(props.pickerId)}
55             submitLabel="Copy"
56             {...props}
57         />
58     );
59 };
60
61 const CopyMultiDialogFields = memoize((pickerId: string) => () => (
62     <Field
63         name="ownerUuid"
64         component={ProjectTreePickerField}
65         validate={COPY_FILE_VALIDATION}
66         pickerId={pickerId}
67     />
68 ));