Skip to content

Commit 0c9ebf2

Browse files
committed
feat: add collapsible dataset-level filters to search page; closes #95
1 parent caba5a1 commit 0c9ebf2

File tree

3 files changed

+79
-6
lines changed

3 files changed

+79
-6
lines changed

src/pages/SearchPage.tsx

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ const SearchPage: React.FC = () => {
7171

7272
const [formData, setFormData] = useState<Record<string, any>>({});
7373
const [showSubjectFilters, setShowSubjectFilters] = useState(false);
74+
const [showDatasetFilters, setShowDatasetFilters] = useState(true); // for dataset-level filters
75+
7476
const [results, setResults] = useState<
7577
any[] | { status: string; msg: string }
7678
>([]);
@@ -130,6 +132,8 @@ const SearchPage: React.FC = () => {
130132
setFormData(initial);
131133
setAppliedFilters(initial);
132134
setHasSearched(false); // set it to true if want to auto-run search
135+
setShowSubjectFilters(true); // expand the subject-level section
136+
setShowDatasetFilters(false); // collapse the dataset-level section
133137
}
134138
}, []);
135139

@@ -184,8 +188,8 @@ const SearchPage: React.FC = () => {
184188

185189
// form UI
186190
const uiSchema = useMemo(
187-
() => generateUiSchema(formData, showSubjectFilters),
188-
[formData, showSubjectFilters]
191+
() => generateUiSchema(formData, showSubjectFilters, showDatasetFilters),
192+
[formData, showSubjectFilters, showDatasetFilters]
189193
);
190194

191195
// Create the "Subject-level Filters" button as a custom field
@@ -208,6 +212,22 @@ const SearchPage: React.FC = () => {
208212
</Button>
209213
</Box>
210214
),
215+
datasetFiltersToggle: () => (
216+
<Box sx={{ mt: 1, mb: 1 }}>
217+
<Button
218+
variant="outlined"
219+
onClick={() => setShowDatasetFilters((prev) => !prev)}
220+
sx={{
221+
color: Colors.purple,
222+
borderColor: Colors.purple,
223+
"&:hover": { transform: "scale(1.05)", borderColor: Colors.purple },
224+
}}
225+
aria-expanded={showDatasetFilters}
226+
>
227+
Dataset-Level Filters
228+
</Button>
229+
</Box>
230+
),
211231
};
212232

213233
// determine the results are subject-level or dataset-level

src/utils/SearchPageFunctions/generateUiSchema.ts

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import { Colors } from "design/theme";
44
// Controls the visibility of subject-level filters
55
export const generateUiSchema = (
66
formData: Record<string, any>,
7-
showSubjectFilters: boolean
7+
showSubjectFilters: boolean,
8+
showDatasetFilters: boolean
89
) => {
910
const activeStyle = {
1011
"ui:options": {
@@ -31,10 +32,58 @@ export const generateUiSchema = (
3132
},
3233
};
3334

35+
// collapsible sections (subject-level & dataset-level)
36+
// const subjectHiddenStyle = {
37+
// "ui:options": {
38+
// style: { display: showSubjectFilters ? "block" : "none" },
39+
// },
40+
// };
41+
42+
const datasetHiddenStyle = {
43+
"ui:options": {
44+
style: { display: showDatasetFilters ? "block" : "none" },
45+
},
46+
};
47+
3448
return {
35-
keyword: formData["keyword"] ? activeStyle : {},
36-
database:
37-
formData["database"] && formData["database"] !== "any" ? activeStyle : {},
49+
"ui:order": [
50+
"dataset_filters_toggle", // button first
51+
"database",
52+
"keyword",
53+
"subject_filters_toggle",
54+
"modality",
55+
"gender",
56+
"age_min",
57+
"age_max",
58+
"sess_min",
59+
"sess_max",
60+
"task_min",
61+
"task_max",
62+
"run_min",
63+
"run_max",
64+
"task_name",
65+
"type_name",
66+
"session_name",
67+
"run_name",
68+
"limit",
69+
"skip",
70+
"*", // anything else not listed
71+
],
72+
// keyword: formData["keyword"] ? activeStyle : {},
73+
dataset_filters_toggle: { "ui:field": "datasetFiltersToggle" },
74+
keyword: showDatasetFilters
75+
? formData["keyword"]
76+
? activeStyle
77+
: {}
78+
: datasetHiddenStyle,
79+
// database:
80+
// formData["database"] && formData["database"] !== "any" ? activeStyle : {},
81+
database: showDatasetFilters
82+
? formData["database"] && formData["database"] !== "any"
83+
? activeStyle
84+
: {}
85+
: datasetHiddenStyle,
86+
3887
// dataset: formData["dataset"] ? activeStyle : {},
3988
// limit: formData["limit"] ? activeStyle : {},
4089
// skip: formData["skip"] ? activeStyle : {},

src/utils/SearchPageFunctions/searchformSchema.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ export const baseSchema: JSONSchema7 = {
44
title: "",
55
type: "object",
66
properties: {
7+
dataset_filters_toggle: {
8+
type: "null",
9+
title: "Dataset Filters",
10+
},
711
keyword: {
812
title: "Search keyword",
913
type: "string",

0 commit comments

Comments
 (0)