X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/8156d2b941dfcf8773cd733a4e9994740e77f56a..6522c126265875505b3f616c867ef7d655a4da80:/src/views-components/form-fields/search-bar-form-fields.tsx

diff --git a/src/views-components/form-fields/search-bar-form-fields.tsx b/src/views-components/form-fields/search-bar-form-fields.tsx
index 269113218c..777fa824df 100644
--- a/src/views-components/form-fields/search-bar-form-fields.tsx
+++ b/src/views-components/form-fields/search-bar-form-fields.tsx
@@ -2,77 +2,110 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import * as React from "react";
-import { Field } from "redux-form";
-import { TextField } from "~/components/text-field/text-field";
-import { Checkbox, FormControlLabel } from '@material-ui/core';
+import React from "react";
+import { Field, WrappedFieldProps, FieldArray } from 'redux-form';
+import { TextField, DateTextField } from "components/text-field/text-field";
+import { CheckboxField } from 'components/checkbox-field/checkbox-field';
+import { NativeSelectField } from 'components/select-field/select-field';
+import { ResourceKind } from 'models/resource';
+import { HomeTreePicker } from 'views-components/projects-tree-picker/home-tree-picker';
+import { SEARCH_BAR_ADVANCED_FORM_PICKER_ID } from 'store/search-bar/search-bar-actions';
+import { SearchBarAdvancedPropertiesView } from 'views-components/search-bar/search-bar-advanced-properties-view';
+import { TreeItem } from "components/tree/tree";
+import { ProjectsTreePickerItem } from "views-components/projects-tree-picker/generic-projects-tree-picker";
+import { PropertyKeyField, } from 'views-components/resource-properties-form/property-key-field';
+import { PropertyValueField } from 'views-components/resource-properties-form/property-value-field';
+import { connect } from "react-redux";
+import { RootState } from "store/store";
 
 export const SearchBarTypeField = () =>
     <Field
         name='type'
-        component={TextField}
-        label="Type"/>;
+        component={NativeSelectField as any}
+        items={[
+            { key: '', value: 'Any' },
+            { key: ResourceKind.COLLECTION, value: 'Collection' },
+            { key: ResourceKind.PROJECT, value: 'Project' },
+            { key: ResourceKind.PROCESS, value: 'Process' }
+        ]} />;
 
-export const SearchBarClusterField = () =>
-    <Field
+
+interface SearchBarClusterFieldProps {
+    clusters: { key: string, value: string }[];
+}
+
+export const SearchBarClusterField = connect(
+    (state: RootState) => ({
+        clusters: [{key: '', value: 'Any'}].concat(
+            state.auth.sessions
+                .filter(s => s.loggedIn)
+                .map(s => ({
+                    key: s.clusterId,
+                    value: s.clusterId
+                })))
+    }))((props: SearchBarClusterFieldProps) => <Field
         name='cluster'
-        component={TextField}
-        label="Cluster name" />;
+        component={NativeSelectField as any}
+        items={props.clusters}/>
+    );
+
+export const SearchBarProjectField = () =>
+    <Field
+        name='projectUuid'
+        component={ProjectsPicker} />;
 
-export const SearchBarProjectField = () => 
+const ProjectsPicker = (props: WrappedFieldProps) =>
+    <div style={{ height: '100px', display: 'flex', flexDirection: 'column', overflow: 'overlay' }}>
+        <HomeTreePicker
+            pickerId={SEARCH_BAR_ADVANCED_FORM_PICKER_ID}
+            toggleItemActive={
+                (_: any, { id }: TreeItem<ProjectsTreePickerItem>) => {
+                    props.input.onChange(id);
+                }
+            } />
+    </div>;
+
+export const SearchBarTrashField = () =>
     <Field
-        name='project'
-        component={TextField}
-        label="Project name" />;
-
-export const SearchBarTrashField = () => 
-    <FormControlLabel
-        control={
-            <Checkbox
-                checked={false}
-                value="true"
-                color="primary"
-            />
-        }
+        name='inTrash'
+        component={CheckboxField}
         label="In trash" />;
 
-export const SearchBarDataFromField = () => 
+export const SearchBarPastVersionsField = () =>
     <Field
-        name='dataFrom'
-        component={TextField}
-        label="From" />;
+        name='pastVersions'
+        component={CheckboxField}
+        label="Past versions" />;
 
-export const SearchBarDataToField = () =>
+export const SearchBarDateFromField = () =>
     <Field
-        name='dataTo'
-        component={TextField}
-        label="To" />;
+        name='dateFrom'
+        component={DateTextField as any} />;
 
-export const SearchBarKeyField = () => 
+export const SearchBarDateToField = () =>
     <Field
-        name='key'
-        component={TextField}
-        label="Key" />;
+        name='dateTo'
+        component={DateTextField as any} />;
+
+export const SearchBarPropertiesField = () =>
+    <FieldArray
+        name="properties"
+        component={SearchBarAdvancedPropertiesView as any} />;
+
+export const SearchBarKeyField = () =>
+    <PropertyKeyField skipValidation={true} />;
 
-export const SearchBarValueField = () => 
+export const SearchBarValueField = () =>
+    <PropertyValueField skipValidation={true} />;
+
+export const SearchBarSaveSearchField = () =>
     <Field
-        name='value'
-        component={TextField}
-        label="Value" />;
-
-export const SearchBarSaveSearchField = () => 
-    <FormControlLabel
-        control={
-            <Checkbox
-                checked={false}
-                value="true"
-                color="primary"
-            />
-        }
-        label="Save search query" />;
-
-export const SearchBarQuerySearchField = () => 
+        name='saveQuery'
+        component={CheckboxField}
+        label="Save query" />;
+
+export const SearchBarQuerySearchField = () =>
     <Field
-        name='searchQuery'
-        component={TextField}
-        label="Search query name" />;
\ No newline at end of file
+        name='queryName'
+        component={TextField as any}
+        label="Query name" />;
