Merge branch '20031-collection-files-batch-operations' into main. Closes #20031
[arvados-workbench2.git] / src / views-components / projects-tree-picker / tree-picker-field.tsx
index 2afa606e363cba8a4adaaf2b118c581af2981719..17417bf554f7bafcaf92c2fa1afbc03fcd3f6a2d 100644 (file)
@@ -9,6 +9,7 @@ import { WrappedFieldProps } from 'redux-form';
 import { ProjectsTreePicker } from 'views-components/projects-tree-picker/projects-tree-picker';
 import { ProjectsTreePickerItem } from 'store/tree-picker/tree-picker-middleware';
 import { PickerIdProp } from 'store/tree-picker/picker-id';
+import { getFileOperationLocation } from "store/tree-picker/tree-picker-actions";
 
 export const ProjectTreePickerField = (props: WrappedFieldProps & PickerIdProp) =>
     <div style={{ display: 'flex', minHeight: 0, flexDirection: 'column' }}>
@@ -42,3 +43,25 @@ export const CollectionTreePickerField = (props: WrappedFieldProps & PickerIdPro
                 </Typography>}
         </div>
     </div>;
+
+const handleDirectoryChange = (props: WrappedFieldProps) =>
+    (_: any, { data }: TreeItem<ProjectsTreePickerItem>) => {
+        props.input.onChange(getFileOperationLocation(data) || '');
+    }
+
+export const DirectoryTreePickerField = (props: WrappedFieldProps & PickerIdProp) =>
+    <div style={{ display: 'flex', minHeight: 0, flexDirection: 'column' }}>
+        <div style={{ flexBasis: '275px', flexShrink: 1, minHeight: 0, display: 'flex', flexDirection: 'column' }}>
+            <ProjectsTreePicker
+                currentUuid={props.input.value.uuid}
+                pickerId={props.pickerId}
+                toggleItemActive={handleDirectoryChange(props)}
+                options={{ showOnlyOwned: false, showOnlyWritable: true }}
+                includeCollections
+                includeDirectories />
+            {props.meta.dirty && props.meta.error &&
+                <Typography variant='caption' color='error'>
+                    {props.meta.error}
+                </Typography>}
+        </div>
+    </div>;