rez-table-listing-mui 1.0.32 → 1.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +11 -4
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/src/App.tsx +31 -29
- package/src/components/filter/components/attributes-filter.tsx +186 -13
- package/src/components/filter/components/forms/components/Date.tsx +94 -16
- package/src/components/filter/components/forms/components/Dropdown.tsx +12 -7
- package/src/components/filter/components/forms/components/Filter-criteria.tsx +47 -40
- package/src/components/filter/components/forms/components/Multi-Select.tsx +6 -1
- package/src/components/filter/components/forms/components/Select.tsx +9 -0
- package/src/components/filter/components/forms/components/Textfield.tsx +6 -0
- package/src/components/filter/components/forms/index.tsx +135 -211
- package/src/components/filter/components/main-filter.tsx +2 -7
- package/src/components/filter/components/saved-edit-filter.tsx +15 -17
- package/src/components/filter/components/saved-filter.tsx +2 -1
- package/src/components/filter/components/search/index.tsx +0 -1
- package/src/components/filter/components/tabs/custom-tab-panel.tsx +7 -3
- package/src/components/filter/components/tabs/index.tsx +8 -8
- package/src/components/filter/index.tsx +187 -172
- package/src/components/filter/style.ts +106 -0
- package/src/components/index-table.tsx +87 -63
- package/src/components/index.scss +33 -0
- package/src/components/topbar/index.tsx +7 -33
- package/src/index.ts +2 -0
- package/src/libs/utils/common.ts +1 -1
- package/src/types/filter.ts +1 -0
- package/src/types/table.ts +7 -2
- package/src/components/filter/components/forms/components/Attributes-select.tsx +0 -192
|
@@ -9,6 +9,7 @@ interface FormSelectProps {
|
|
|
9
9
|
dropdownData: Record<string, DropdownOption[]>;
|
|
10
10
|
isLoading?: boolean;
|
|
11
11
|
sx?: SxProps<Theme>;
|
|
12
|
+
onValueChange?: () => void;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
const FormSelect = ({
|
|
@@ -17,6 +18,7 @@ const FormSelect = ({
|
|
|
17
18
|
dropdownData,
|
|
18
19
|
isLoading = false,
|
|
19
20
|
sx,
|
|
21
|
+
onValueChange,
|
|
20
22
|
}: FormSelectProps) => {
|
|
21
23
|
// Use dropdownData if available, otherwise fallback to filter's dropdown_list
|
|
22
24
|
const dropdownOptions =
|
|
@@ -33,10 +35,17 @@ const FormSelect = ({
|
|
|
33
35
|
{...field}
|
|
34
36
|
disabled={isLoading}
|
|
35
37
|
sx={{
|
|
38
|
+
"&.Mui-focused fieldset": {
|
|
39
|
+
borderColor: "#7A5AF8 !important",
|
|
40
|
+
},
|
|
36
41
|
"& .MuiOutlinedInput-input": {
|
|
37
42
|
padding: "12px 20px",
|
|
38
43
|
},
|
|
39
44
|
}}
|
|
45
|
+
onChange={(e) => {
|
|
46
|
+
field.onChange(e);
|
|
47
|
+
onValueChange?.();
|
|
48
|
+
}}
|
|
40
49
|
>
|
|
41
50
|
{dropdownOptions.map((item, idx) => (
|
|
42
51
|
<MenuItem key={idx} value={item.value}>
|
|
@@ -7,12 +7,14 @@ interface FormTextfieldProps {
|
|
|
7
7
|
filter: UpdatedFilterStateProps;
|
|
8
8
|
control: any;
|
|
9
9
|
isLoading?: boolean;
|
|
10
|
+
onValueChange?: () => void;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
const FormTextfield = ({
|
|
13
14
|
filter,
|
|
14
15
|
control,
|
|
15
16
|
isLoading = false,
|
|
17
|
+
onValueChange,
|
|
16
18
|
}: FormTextfieldProps) => {
|
|
17
19
|
return (
|
|
18
20
|
<Controller
|
|
@@ -34,6 +36,10 @@ const FormTextfield = ({
|
|
|
34
36
|
type={filter.data_type || "text"}
|
|
35
37
|
placeholder={"Enter value"}
|
|
36
38
|
disabled={isLoading}
|
|
39
|
+
onChange={(e) => {
|
|
40
|
+
field.onChange(e);
|
|
41
|
+
onValueChange?.();
|
|
42
|
+
}}
|
|
37
43
|
/>
|
|
38
44
|
)}
|
|
39
45
|
/>
|
|
@@ -24,6 +24,7 @@ import { CraftTableOptionsProps } from "../../../../types/table-options";
|
|
|
24
24
|
import FilterCriteria from "./components/Filter-criteria";
|
|
25
25
|
import CustomSearch from "../search";
|
|
26
26
|
import { customDebounce } from "../../../../libs/utils/debounce";
|
|
27
|
+
import { filterFormStyles } from "../../style";
|
|
27
28
|
|
|
28
29
|
interface FormValues {
|
|
29
30
|
filterName: string;
|
|
@@ -43,7 +44,6 @@ const FilterForm = ({
|
|
|
43
44
|
selectedFilters,
|
|
44
45
|
setSelectedFilters,
|
|
45
46
|
handleRemoveFilter,
|
|
46
|
-
handleClearAllFilters,
|
|
47
47
|
editMode = false,
|
|
48
48
|
tableStates,
|
|
49
49
|
setSavedFilterModalOpen,
|
|
@@ -58,13 +58,13 @@ const FilterForm = ({
|
|
|
58
58
|
React.SetStateAction<UpdatedFilterStateProps[]>
|
|
59
59
|
>;
|
|
60
60
|
handleRemoveFilter: (filter_attribute: string) => void;
|
|
61
|
-
handleClearAllFilters: () => void;
|
|
62
61
|
editMode?: boolean;
|
|
63
62
|
tableStates: CraftTableOptionsProps;
|
|
64
63
|
setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
65
64
|
setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
66
65
|
}) => {
|
|
67
|
-
const { filterMaster, setFilters, setFilterMaster } =
|
|
66
|
+
const { filterMaster, setFilters, setFilterMaster, setPagination } =
|
|
67
|
+
tableStates;
|
|
68
68
|
|
|
69
69
|
const filterName = filterMaster?.saved_filters?.selectedName || "";
|
|
70
70
|
|
|
@@ -82,6 +82,7 @@ const FilterForm = ({
|
|
|
82
82
|
|
|
83
83
|
return {
|
|
84
84
|
filterName: filterName ?? "",
|
|
85
|
+
dummyChange: "",
|
|
85
86
|
...filterValues,
|
|
86
87
|
};
|
|
87
88
|
}, [selectedFilters, filterName]);
|
|
@@ -91,63 +92,55 @@ const FilterForm = ({
|
|
|
91
92
|
watch,
|
|
92
93
|
reset,
|
|
93
94
|
formState: { isDirty },
|
|
94
|
-
unregister,
|
|
95
95
|
setValue,
|
|
96
|
-
|
|
96
|
+
unregister,
|
|
97
|
+
} = useForm<FormValues & { dummyChange: string }>({
|
|
97
98
|
mode: "onChange",
|
|
98
99
|
defaultValues,
|
|
99
100
|
resetOptions: {
|
|
100
|
-
keepDirtyValues: false,
|
|
101
|
-
keepErrors: false,
|
|
101
|
+
keepDirtyValues: false,
|
|
102
|
+
keepErrors: false,
|
|
102
103
|
},
|
|
103
104
|
});
|
|
104
105
|
|
|
105
|
-
// Watch for form changes
|
|
106
106
|
const formValues = watch();
|
|
107
107
|
|
|
108
|
-
// Reset form when filters change
|
|
109
108
|
useEffect(() => {
|
|
110
109
|
if (!isDirty) reset(defaultValues);
|
|
111
110
|
}, [selectedFilters, filterName]);
|
|
112
111
|
|
|
113
|
-
// Create a debounced version of the filter update function
|
|
114
112
|
const debouncedUpdateFilters = useCallback(
|
|
115
113
|
customDebounce((updatedFilters: UpdatedFilterStateProps[]) => {
|
|
116
114
|
setSelectedFilters(updatedFilters);
|
|
117
115
|
setFilters(updatedFilters);
|
|
118
|
-
}, 1000),
|
|
116
|
+
}, 1000),
|
|
119
117
|
[setSelectedFilters, setFilters]
|
|
120
118
|
);
|
|
121
119
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
operator: string;
|
|
130
|
-
};
|
|
120
|
+
const updateFiltersFromForm = useCallback(() => {
|
|
121
|
+
const updatedFilters = selectedFilters.map((filter) => {
|
|
122
|
+
if (filter.name && typeof formValues[filter.name] === "object") {
|
|
123
|
+
const filterValue = formValues[filter.name] as {
|
|
124
|
+
value: string | string[];
|
|
125
|
+
operator: string;
|
|
126
|
+
};
|
|
131
127
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
128
|
+
return {
|
|
129
|
+
...filter,
|
|
130
|
+
filter_value: filterValue.value,
|
|
131
|
+
filter_operator: filterValue.operator,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return filter;
|
|
135
|
+
});
|
|
140
136
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
}, [formValues, isDirty, selectedFilters, debouncedUpdateFilters]);
|
|
137
|
+
setPagination((prev) => ({ ...prev, pageIndex: 0 }));
|
|
138
|
+
debouncedUpdateFilters(updatedFilters);
|
|
139
|
+
}, [formValues, selectedFilters, debouncedUpdateFilters]);
|
|
145
140
|
|
|
146
|
-
// Cleanup effect
|
|
147
141
|
useEffect(() => {
|
|
148
142
|
return () => {
|
|
149
|
-
|
|
150
|
-
reset(defaultValues);
|
|
143
|
+
reset();
|
|
151
144
|
selectedFilters.forEach((filter) => {
|
|
152
145
|
if (filter.name) {
|
|
153
146
|
unregister(filter.name);
|
|
@@ -156,15 +149,9 @@ const FilterForm = ({
|
|
|
156
149
|
};
|
|
157
150
|
}, []);
|
|
158
151
|
|
|
159
|
-
const editModeStylingBorder = {
|
|
160
|
-
border: "1px solid #c5c5c5",
|
|
161
|
-
borderRadius: "6px",
|
|
162
|
-
padding: "5px 10px 10px 10px",
|
|
163
|
-
};
|
|
164
|
-
|
|
165
152
|
return (
|
|
166
153
|
<form>
|
|
167
|
-
<Box sx={editMode ?
|
|
154
|
+
<Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
|
|
168
155
|
{editMode && (
|
|
169
156
|
<Box
|
|
170
157
|
sx={{
|
|
@@ -190,10 +177,9 @@ const FilterForm = ({
|
|
|
190
177
|
fullWidth
|
|
191
178
|
size="small"
|
|
192
179
|
placeholder="Filter Name"
|
|
193
|
-
value={field.value}
|
|
180
|
+
value={filterName || field.value}
|
|
194
181
|
onChange={(e) => {
|
|
195
182
|
field.onChange(e);
|
|
196
|
-
|
|
197
183
|
if (editMode) {
|
|
198
184
|
setFilterMaster(
|
|
199
185
|
(prev) =>
|
|
@@ -227,9 +213,9 @@ const FilterForm = ({
|
|
|
227
213
|
<Box onClick={(e) => e.stopPropagation()}>
|
|
228
214
|
<IconButton
|
|
229
215
|
size="small"
|
|
230
|
-
onClick={() =>
|
|
231
|
-
setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
|
|
232
|
-
}
|
|
216
|
+
onClick={() =>
|
|
217
|
+
setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
|
|
218
|
+
}
|
|
233
219
|
>
|
|
234
220
|
<DeleteIcon />
|
|
235
221
|
</IconButton>
|
|
@@ -237,178 +223,117 @@ const FilterForm = ({
|
|
|
237
223
|
</Box>
|
|
238
224
|
)}
|
|
239
225
|
|
|
240
|
-
<
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
{/* Render search input */}
|
|
249
|
-
{!editMode && (
|
|
250
|
-
<CustomSearch value={searchTerm} onChange={setSearchTerm} />
|
|
251
|
-
)}
|
|
226
|
+
<Box sx={filterFormStyles.formFlexContainer}>
|
|
227
|
+
<FilterCriteria
|
|
228
|
+
columnsData={columnsData}
|
|
229
|
+
tableStates={tableStates}
|
|
230
|
+
setSelectedFilters={setSelectedFilters}
|
|
231
|
+
searchTerm={searchTerm}
|
|
232
|
+
setSearchTerm={setSearchTerm}
|
|
233
|
+
/>
|
|
252
234
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
filter.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
257
|
-
filter.filter_value
|
|
258
|
-
?.toString()
|
|
259
|
-
.toLowerCase()
|
|
260
|
-
.includes(searchTerm.toLowerCase())
|
|
261
|
-
)
|
|
262
|
-
.map((filter) => {
|
|
263
|
-
const { dropdown_list = [] } = filter;
|
|
235
|
+
{!editMode && (
|
|
236
|
+
<CustomSearch value={searchTerm} onChange={setSearchTerm} />
|
|
237
|
+
)}
|
|
264
238
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}}
|
|
278
|
-
>
|
|
239
|
+
{selectedFilters
|
|
240
|
+
.filter(
|
|
241
|
+
(filter) =>
|
|
242
|
+
filter.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
|
|
243
|
+
filter.filter_value
|
|
244
|
+
?.toString()
|
|
245
|
+
.toLowerCase()
|
|
246
|
+
.includes(searchTerm.toLowerCase())
|
|
247
|
+
)
|
|
248
|
+
.map((filter) => {
|
|
249
|
+
const { dropdown_list = [] } = filter;
|
|
250
|
+
return (
|
|
279
251
|
<Box
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
justifyContent: "flex-start",
|
|
283
|
-
alignItems: "center",
|
|
284
|
-
gap: 2,
|
|
285
|
-
}}
|
|
252
|
+
key={filter.filter_attribute}
|
|
253
|
+
sx={filterFormStyles.formListItem}
|
|
286
254
|
>
|
|
287
|
-
<
|
|
288
|
-
sx={
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
}}
|
|
293
|
-
>
|
|
294
|
-
{filter.name}
|
|
295
|
-
</Typography>
|
|
296
|
-
<FormDropdown
|
|
297
|
-
filter={filter}
|
|
298
|
-
control={control}
|
|
299
|
-
dropdownList={dropdown_list}
|
|
300
|
-
sx={{
|
|
301
|
-
fontSize: "13px",
|
|
302
|
-
minWidth: 50,
|
|
303
|
-
border: "none",
|
|
304
|
-
boxShadow: "none",
|
|
305
|
-
}}
|
|
306
|
-
/>
|
|
307
|
-
<IconButton
|
|
308
|
-
sx={{ marginLeft: "auto" }}
|
|
309
|
-
onClick={() => {
|
|
310
|
-
const fieldName = `${filter.name}.value`;
|
|
311
|
-
unregister(fieldName);
|
|
312
|
-
|
|
313
|
-
setValue("filterName", formValues.filterName, {
|
|
314
|
-
shouldDirty: true,
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
handleRemoveFilter(filter.filter_attribute);
|
|
318
|
-
}}
|
|
319
|
-
size="small"
|
|
320
|
-
>
|
|
321
|
-
<CloseIcon />
|
|
322
|
-
</IconButton>
|
|
323
|
-
</Box>
|
|
324
|
-
|
|
325
|
-
<Box>
|
|
326
|
-
{filter.data_type === "text" ? (
|
|
327
|
-
<FormTextfield filter={filter} control={control} />
|
|
328
|
-
) : filter.data_type === "number" ? (
|
|
329
|
-
<FormTextfield filter={filter} control={control} />
|
|
330
|
-
) : filter.data_type === "date" ? (
|
|
331
|
-
<FormDatePicker
|
|
332
|
-
filter={filter}
|
|
333
|
-
control={control}
|
|
334
|
-
sx={{
|
|
335
|
-
"& .MuiOutlinedInput-root": {
|
|
336
|
-
borderRadius: "6px",
|
|
337
|
-
fontSize: "14px",
|
|
338
|
-
bgcolor: "#ffffff",
|
|
339
|
-
"& fieldset": { borderColor: "#c1c1c1" },
|
|
340
|
-
"&.Mui-focused fieldset": {
|
|
341
|
-
borderColor: "#7A5AF8",
|
|
342
|
-
},
|
|
343
|
-
},
|
|
344
|
-
}}
|
|
345
|
-
/>
|
|
346
|
-
) : filter.data_type === "select" ? (
|
|
347
|
-
<FormSelect
|
|
255
|
+
<Box sx={filterFormStyles.formListItemHeader}>
|
|
256
|
+
<Typography sx={filterFormStyles.formListItemHeaderName}>
|
|
257
|
+
{filter.name}
|
|
258
|
+
</Typography>
|
|
259
|
+
<FormDropdown
|
|
348
260
|
filter={filter}
|
|
349
261
|
control={control}
|
|
350
|
-
|
|
351
|
-
sx={
|
|
352
|
-
|
|
353
|
-
borderRadius: "6px",
|
|
354
|
-
fontSize: "14px",
|
|
355
|
-
bgcolor: "#ffffff",
|
|
356
|
-
"& fieldset": { borderColor: "#c1c1c1" },
|
|
357
|
-
"&.Mui-focused fieldset": {
|
|
358
|
-
borderColor: "#7A5AF8",
|
|
359
|
-
},
|
|
360
|
-
},
|
|
361
|
-
}}
|
|
262
|
+
dropdownList={dropdown_list}
|
|
263
|
+
sx={filterFormStyles.formListItemHeaderDropdown}
|
|
264
|
+
onValueChange={updateFiltersFromForm}
|
|
362
265
|
/>
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
"
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
}
|
|
377
|
-
|
|
266
|
+
<IconButton
|
|
267
|
+
sx={{ marginLeft: "auto" }}
|
|
268
|
+
onClick={() => {
|
|
269
|
+
unregister(`${filter.name}.value`);
|
|
270
|
+
unregister(`${filter.name}.operator`);
|
|
271
|
+
|
|
272
|
+
// ✅ Toggle dummy field to force form dirty
|
|
273
|
+
const dummy = watch("dummyChange");
|
|
274
|
+
setValue(
|
|
275
|
+
"dummyChange",
|
|
276
|
+
dummy === "changed" ? "reset" : "changed",
|
|
277
|
+
{
|
|
278
|
+
shouldDirty: true,
|
|
279
|
+
}
|
|
280
|
+
);
|
|
281
|
+
|
|
282
|
+
handleRemoveFilter(filter.filter_attribute);
|
|
378
283
|
}}
|
|
379
|
-
/>
|
|
380
|
-
) : (
|
|
381
|
-
<FormControl
|
|
382
|
-
fullWidth
|
|
383
284
|
size="small"
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
285
|
+
>
|
|
286
|
+
<CloseIcon />
|
|
287
|
+
</IconButton>
|
|
288
|
+
</Box>
|
|
289
|
+
|
|
290
|
+
<Box>
|
|
291
|
+
{filter.data_type === "text" ||
|
|
292
|
+
filter.data_type === "number" ? (
|
|
293
|
+
<FormTextfield
|
|
294
|
+
filter={filter}
|
|
295
|
+
control={control}
|
|
296
|
+
onValueChange={updateFiltersFromForm}
|
|
297
|
+
/>
|
|
298
|
+
) : filter.data_type === "year" ? (
|
|
299
|
+
<FormDatePicker
|
|
300
|
+
filter={filter}
|
|
301
|
+
control={control}
|
|
302
|
+
views={["year"]}
|
|
303
|
+
onValueChange={updateFiltersFromForm}
|
|
304
|
+
/>
|
|
305
|
+
) : filter.data_type === "date" ? (
|
|
306
|
+
<FormDatePicker
|
|
307
|
+
filter={filter}
|
|
308
|
+
control={control}
|
|
309
|
+
onValueChange={updateFiltersFromForm}
|
|
310
|
+
/>
|
|
311
|
+
) : filter.data_type === "select" ? (
|
|
312
|
+
<FormSelect
|
|
313
|
+
filter={filter}
|
|
314
|
+
control={control}
|
|
315
|
+
dropdownData={dropdownData}
|
|
316
|
+
onValueChange={updateFiltersFromForm}
|
|
317
|
+
/>
|
|
318
|
+
) : filter.data_type === "multiselect" ? (
|
|
319
|
+
<FormMultiSelect
|
|
320
|
+
filter={filter}
|
|
321
|
+
control={control}
|
|
322
|
+
dropdownData={dropdownData}
|
|
323
|
+
onValueChange={updateFiltersFromForm}
|
|
324
|
+
/>
|
|
325
|
+
) : (
|
|
326
|
+
<FormControl fullWidth size="small" />
|
|
327
|
+
)}
|
|
328
|
+
</Box>
|
|
397
329
|
</Box>
|
|
398
|
-
|
|
399
|
-
)
|
|
400
|
-
|
|
330
|
+
);
|
|
331
|
+
})}
|
|
332
|
+
</Box>
|
|
401
333
|
</Box>
|
|
402
334
|
|
|
403
335
|
{selectedFilters.length > 0 && (
|
|
404
|
-
<Box
|
|
405
|
-
sx={{
|
|
406
|
-
display: "flex",
|
|
407
|
-
justifyContent: "center",
|
|
408
|
-
gap: 1,
|
|
409
|
-
mt: 3,
|
|
410
|
-
}}
|
|
411
|
-
>
|
|
336
|
+
<Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
|
|
412
337
|
<Button
|
|
413
338
|
variant="outlined"
|
|
414
339
|
sx={{
|
|
@@ -420,8 +345,8 @@ const FilterForm = ({
|
|
|
420
345
|
}}
|
|
421
346
|
fullWidth
|
|
422
347
|
onClick={() => {
|
|
423
|
-
|
|
424
|
-
|
|
348
|
+
setFilters([]);
|
|
349
|
+
setSelectedFilters([]);
|
|
425
350
|
}}
|
|
426
351
|
>
|
|
427
352
|
Clear All
|
|
@@ -430,16 +355,15 @@ const FilterForm = ({
|
|
|
430
355
|
<Button
|
|
431
356
|
variant="contained"
|
|
432
357
|
fullWidth
|
|
358
|
+
disabled={!isDirty && editMode}
|
|
433
359
|
sx={{
|
|
434
360
|
color: "white",
|
|
435
361
|
backgroundColor: "#7A5AF8",
|
|
436
362
|
"&.Mui-disabled": {
|
|
437
|
-
backgroundColor: "#d7cefd",
|
|
363
|
+
backgroundColor: "#d7cefd",
|
|
438
364
|
color: "rgba(255, 255, 255, 0.7)",
|
|
439
365
|
},
|
|
440
366
|
}}
|
|
441
|
-
// onClick={() => setSaveFilterModalOpen(true)}
|
|
442
|
-
// disabled={editMode && !isDirty}
|
|
443
367
|
onClick={() => {
|
|
444
368
|
setSavedFilterModalOpen && setSavedFilterModalOpen(true);
|
|
445
369
|
}}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
FilterFormComponentProps,
|
|
6
6
|
FilterMasterStateProps,
|
|
7
7
|
} from "../../../types/filter";
|
|
8
|
+
import { filterStyles } from "../style";
|
|
8
9
|
|
|
9
10
|
const MainFilter = ({
|
|
10
11
|
columnsData,
|
|
@@ -37,13 +38,8 @@ const MainFilter = ({
|
|
|
37
38
|
);
|
|
38
39
|
};
|
|
39
40
|
|
|
40
|
-
const handleClearAllFilters = () => {
|
|
41
|
-
setFilters([]);
|
|
42
|
-
setSelectedFilters([]);
|
|
43
|
-
};
|
|
44
|
-
|
|
45
41
|
return (
|
|
46
|
-
<Box>
|
|
42
|
+
<Box sx={filterStyles.filterMainComponentWrapper}>
|
|
47
43
|
{/* Set selectedFilters state */}
|
|
48
44
|
|
|
49
45
|
{/* Render selectedFilters state */}
|
|
@@ -54,7 +50,6 @@ const MainFilter = ({
|
|
|
54
50
|
selectedFilters={selectedFilters}
|
|
55
51
|
setSelectedFilters={setSelectedFilters}
|
|
56
52
|
handleRemoveFilter={handleRemoveFilter}
|
|
57
|
-
handleClearAllFilters={handleClearAllFilters}
|
|
58
53
|
tableStates={tableStates}
|
|
59
54
|
setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
60
55
|
dropdownData={dropdownData}
|
|
@@ -47,9 +47,21 @@ const SavedFilterEditComponent = ({
|
|
|
47
47
|
);
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
-
const
|
|
50
|
+
const handleBackButtonClick = () => {
|
|
51
|
+
setEditMode && setEditMode(false);
|
|
51
52
|
setFilters([]);
|
|
52
|
-
|
|
53
|
+
setFilterMaster(
|
|
54
|
+
(prev) =>
|
|
55
|
+
({
|
|
56
|
+
...prev,
|
|
57
|
+
saved_filters: {
|
|
58
|
+
...prev?.saved_filters,
|
|
59
|
+
selectedId: "",
|
|
60
|
+
selectedName: "",
|
|
61
|
+
},
|
|
62
|
+
activeFilterTabIndex: -1,
|
|
63
|
+
} as FilterMasterStateProps)
|
|
64
|
+
);
|
|
53
65
|
};
|
|
54
66
|
|
|
55
67
|
return (
|
|
@@ -63,20 +75,7 @@ const SavedFilterEditComponent = ({
|
|
|
63
75
|
cursor: "pointer",
|
|
64
76
|
mb: 2,
|
|
65
77
|
}}
|
|
66
|
-
onClick={
|
|
67
|
-
setEditMode && setEditMode(false);
|
|
68
|
-
setFilters([]);
|
|
69
|
-
setFilterMaster(
|
|
70
|
-
(prev) =>
|
|
71
|
-
({
|
|
72
|
-
...prev,
|
|
73
|
-
saved_filters: {
|
|
74
|
-
...prev?.saved_filters,
|
|
75
|
-
selectedId: "",
|
|
76
|
-
},
|
|
77
|
-
} as FilterMasterStateProps)
|
|
78
|
-
);
|
|
79
|
-
}}
|
|
78
|
+
onClick={handleBackButtonClick}
|
|
80
79
|
>
|
|
81
80
|
<BackArrow sx={{ width: "13px", height: "13px" }} />
|
|
82
81
|
<Typography variant="body2" sx={{ color: "#8592A3" }}>
|
|
@@ -90,7 +89,6 @@ const SavedFilterEditComponent = ({
|
|
|
90
89
|
selectedFilters={selectedFilters}
|
|
91
90
|
setSelectedFilters={setSelectedFilters}
|
|
92
91
|
handleRemoveFilter={handleRemoveFilter}
|
|
93
|
-
handleClearAllFilters={handleClearAllFilters}
|
|
94
92
|
editMode={editMode}
|
|
95
93
|
tableStates={tableStates}
|
|
96
94
|
columnsData={columnsData}
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
import CustomSearch from "./search";
|
|
16
16
|
import { DeleteIcon } from "../../../assets/svg";
|
|
17
17
|
import SavedFilterEditComponent from "./saved-edit-filter";
|
|
18
|
+
import { filterStyles } from "../style";
|
|
18
19
|
|
|
19
20
|
const SavedFilter = ({
|
|
20
21
|
columnsData,
|
|
@@ -124,7 +125,7 @@ const SavedFilter = ({
|
|
|
124
125
|
);
|
|
125
126
|
|
|
126
127
|
return (
|
|
127
|
-
<Box>
|
|
128
|
+
<Box sx={filterStyles.filterMainComponentWrapper}>
|
|
128
129
|
{/* Render search input and list */}
|
|
129
130
|
{!editMode && renderList()}
|
|
130
131
|
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import Box from "@mui/material/Box";
|
|
3
|
+
import { SxProps, Theme } from "@mui/material";
|
|
3
4
|
|
|
4
5
|
interface TabPanelProps {
|
|
5
6
|
children?: React.ReactNode;
|
|
6
7
|
index: number;
|
|
7
8
|
value: number;
|
|
9
|
+
sx?: SxProps<Theme>;
|
|
8
10
|
}
|
|
9
11
|
|
|
10
12
|
const CustomTabPanel = ({
|
|
11
13
|
children,
|
|
12
14
|
value,
|
|
13
15
|
index,
|
|
14
|
-
|
|
16
|
+
sx,
|
|
17
|
+
...props
|
|
15
18
|
}: TabPanelProps) => {
|
|
16
19
|
return (
|
|
17
20
|
<div
|
|
@@ -19,9 +22,10 @@ const CustomTabPanel = ({
|
|
|
19
22
|
hidden={value !== index}
|
|
20
23
|
id={`simple-tabpanel-${index}`}
|
|
21
24
|
aria-labelledby={`simple-tab-${index}`}
|
|
22
|
-
{
|
|
25
|
+
style={{ height: "100%" }}
|
|
26
|
+
{...props}
|
|
23
27
|
>
|
|
24
|
-
{value === index && <Box sx={{
|
|
28
|
+
{value === index && <Box sx={{ height: "100%", ...sx }}>{children}</Box>}
|
|
25
29
|
</div>
|
|
26
30
|
);
|
|
27
31
|
};
|