rez-table-listing-mui 1.3.29 → 1.3.30

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.
@@ -1,1144 +1,1036 @@
1
- // import { Box, Button, IconButton, TextField, Typography } from "@mui/material";
2
- // import { CloseIcon, DeleteIcon } from "../../../../../assets/svg";
3
- // import {
4
- // FilterColumnsDataProps,
5
- // FilterComponentOptions,
6
- // FilterDropdownDataProps,
7
- // FilterMasterStateProps,
8
- // FilterStateProps,
9
- // } from "../../../../types/filter";
10
- // import { Controller, useForm } from "react-hook-form";
11
- // import React, { useEffect, useMemo, useCallback } from "react";
12
- // import FormDropdown from "./components/Dropdown";
13
- // import { CraftTableOptionsProps } from "../../../../types/table-options";
14
- // import FilterCriteria from "./components/Filter-criteria";
15
- // import CustomSearch from "../search";
16
- // import { customDebounce } from "../../../../libs/utils/debounce";
17
- // import { filterFormStyles } from "../../style";
18
- // import { onFilterChangeFunctionProps } from "../../../../types/common";
19
- // import { resolveFilterInput } from "./utils/filter-date-input-resolver";
1
+ import { Box, Button, IconButton, TextField, Typography } from "@mui/material";
2
+ import { CloseIcon, DeleteIcon } from "../../../../../assets/svg";
3
+ import {
4
+ FilterColumnsDataProps,
5
+ FilterComponentOptions,
6
+ FilterDropdownDataProps,
7
+ FilterMasterStateProps,
8
+ FilterStateProps,
9
+ } from "../../../../types/filter";
10
+ import { Controller, useForm } from "react-hook-form";
11
+ import React, { useEffect, useMemo, useCallback } from "react";
12
+ import FormDropdown from "./components/Dropdown";
13
+ import { CraftTableOptionsProps } from "../../../../types/table-options";
14
+ import FilterCriteria from "./components/Filter-criteria";
15
+ import CustomSearch from "../search";
16
+ import { customDebounce } from "../../../../libs/utils/debounce";
17
+ import { filterFormStyles } from "../../style";
18
+ import { onFilterChangeFunctionProps } from "../../../../types/common";
19
+ import { resolveFilterInput } from "./utils/filter-date-input-resolver";
20
20
 
21
- // interface FormValues {
22
- // filterName: string;
23
- // [key: string]:
24
- // | {
25
- // value: string | string[];
26
- // operator: string;
27
- // }
28
- // | string;
29
- // }
21
+ interface FormValues {
22
+ filterName: string;
23
+ [key: string]:
24
+ | {
25
+ value: string | string[];
26
+ operator: string;
27
+ }
28
+ | string;
29
+ }
30
30
 
31
- // const FilterForm = ({
32
- // columnsData,
33
- // dropdownData,
34
- // searchTerm = "",
35
- // setSearchTerm,
36
- // handleRemoveFilter,
37
- // editMode = false,
38
- // tableStates,
39
- // setSavedFilterModalOpen,
40
- // setDeleteFilterModalOpen,
41
- // onChangeFunction,
42
- // filterComponentOptions,
43
- // }: {
44
- // columnsData: FilterColumnsDataProps;
45
- // dropdownData: FilterDropdownDataProps;
46
- // searchTerm?: string;
47
- // setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
48
- // handleRemoveFilter: (filter_attribute: string) => void;
49
- // editMode?: boolean;
50
- // tableStates: CraftTableOptionsProps;
51
- // setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
52
- // setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
53
- // onChangeFunction: ({
54
- // updatedFilters,
55
- // filterMaster,
56
- // }: onFilterChangeFunctionProps) => void;
57
- // filterComponentOptions?: FilterComponentOptions;
58
- // }) => {
59
- // const { filterMaster, filters, setFilters, setFilterMaster, setPagination } =
60
- // tableStates;
31
+ const FilterForm = ({
32
+ columnsData,
33
+ dropdownData,
34
+ searchTerm = "",
35
+ setSearchTerm,
36
+ handleRemoveFilter,
37
+ editMode = false,
38
+ tableStates,
39
+ setSavedFilterModalOpen,
40
+ setDeleteFilterModalOpen,
41
+ onChangeFunction,
42
+ filterComponentOptions,
43
+ }: {
44
+ columnsData: FilterColumnsDataProps;
45
+ dropdownData: FilterDropdownDataProps;
46
+ searchTerm?: string;
47
+ setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
48
+ handleRemoveFilter: (filter_attribute: string) => void;
49
+ editMode?: boolean;
50
+ tableStates: CraftTableOptionsProps;
51
+ setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
52
+ setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
53
+ onChangeFunction: ({
54
+ updatedFilters,
55
+ filterMaster,
56
+ }: onFilterChangeFunctionProps) => void;
57
+ filterComponentOptions?: FilterComponentOptions;
58
+ }) => {
59
+ const { filterMaster, filters, setFilters, setFilterMaster, setPagination } =
60
+ tableStates;
61
61
 
62
- // const showSaveButton =
63
- // filterComponentOptions?.tabOptions?.mainFilter?.showSaveButton;
64
- // const showClearAllButton =
65
- // filterComponentOptions?.tabOptions?.mainFilter?.showClearAllButton;
66
- // const customButtons =
67
- // filterComponentOptions?.tabOptions?.mainFilter?.customButtons;
62
+ const showSaveButton =
63
+ filterComponentOptions?.tabOptions?.mainFilter?.showSaveButton;
64
+ const showClearAllButton =
65
+ filterComponentOptions?.tabOptions?.mainFilter?.showClearAllButton;
66
+ const customButtons =
67
+ filterComponentOptions?.tabOptions?.mainFilter?.customButtons;
68
68
 
69
- // const filterName = filterMaster?.saved_filters?.selectedName || "";
69
+ const filterName = filterMaster?.saved_filters?.selectedName || "";
70
70
 
71
- // const defaultValues = useMemo(() => {
72
- // const filterValues = filters?.reduce((acc, curr) => {
73
- // if (curr?.filter_attribute_name) {
74
- // acc[curr?.filter_attribute_name] = {
75
- // value: curr?.filter_value ?? "",
76
- // operator:
77
- // curr?.filter_operator ?? curr?.dropdown_list?.[0]?.value ?? "",
78
- // };
79
- // }
80
- // return acc;
81
- // }, {} as Record<string, { value: string | string[]; operator: string }>);
71
+ const defaultValues = useMemo(() => {
72
+ const filterValues = filters?.reduce((acc, curr) => {
73
+ if (curr?.filter_attribute_name) {
74
+ acc[curr?.filter_attribute_name] = {
75
+ value: curr?.filter_value ?? "",
76
+ operator:
77
+ curr?.filter_operator ?? curr?.dropdown_list?.[0]?.value ?? "",
78
+ };
79
+ }
80
+ return acc;
81
+ }, {} as Record<string, { value: string | string[]; operator: string }>);
82
82
 
83
- // return {
84
- // filterName: filterName ?? "",
85
- // dummyChange: "",
86
- // ...filterValues,
87
- // };
88
- // }, [filters, filterName]);
83
+ return {
84
+ filterName: filterName ?? "",
85
+ dummyChange: "",
86
+ ...filterValues,
87
+ };
88
+ }, [filters, filterName]);
89
89
 
90
- // const { control, watch, reset, setValue, unregister } = useForm<
91
- // FormValues & { dummyChange: string }
92
- // >({
93
- // mode: "onChange",
94
- // defaultValues,
95
- // resetOptions: {
96
- // keepDirtyValues: false,
97
- // keepErrors: false,
98
- // },
99
- // });
90
+ const { control, watch, reset, setValue, unregister } = useForm<
91
+ FormValues & { dummyChange: string }
92
+ >({
93
+ mode: "onChange",
94
+ defaultValues,
95
+ resetOptions: {
96
+ keepDirtyValues: false,
97
+ keepErrors: false,
98
+ },
99
+ });
100
100
 
101
- // const formValues = watch();
101
+ const formValues = watch();
102
102
 
103
- // useEffect(() => {
104
- // reset(defaultValues);
105
- // }, [filters]);
103
+ useEffect(() => {
104
+ reset(defaultValues);
105
+ }, [filters]);
106
106
 
107
- // const debouncedUpdateFilters = useCallback(
108
- // customDebounce((updatedFilters: FilterStateProps[]) => {
109
- // setFilters(updatedFilters);
107
+ const debouncedUpdateFilters = useCallback(
108
+ customDebounce((updatedFilters: FilterStateProps[]) => {
109
+ setFilters(updatedFilters);
110
110
 
111
- // const newState = {
112
- // filterMaster: filterMaster,
113
- // filters: updatedFilters,
114
- // };
111
+ const newState = {
112
+ filterMaster: filterMaster,
113
+ filters: updatedFilters,
114
+ };
115
115
 
116
- // onChangeFunction && onChangeFunction(newState);
117
- // }, 1000),
118
- // [setFilters]
119
- // );
116
+ onChangeFunction && onChangeFunction(newState);
117
+ }, 1000),
118
+ [setFilters]
119
+ );
120
120
 
121
- // const updateFiltersFromForm = useCallback(() => {
122
- // const updatedFilters = filters?.map((filter) => {
123
- // if (
124
- // filter?.filter_attribute_name &&
125
- // typeof formValues[filter?.filter_attribute_name] === "object"
126
- // ) {
127
- // const filterValue = formValues[filter?.filter_attribute_name] as {
128
- // value: string | string[];
129
- // operator: string;
130
- // };
121
+ const updateFiltersFromForm = useCallback(() => {
122
+ const updatedFilters = filters?.map((filter) => {
123
+ if (
124
+ filter?.filter_attribute_name &&
125
+ typeof formValues[filter?.filter_attribute_name] === "object"
126
+ ) {
127
+ const filterValue = formValues[filter?.filter_attribute_name] as {
128
+ value: string | string[];
129
+ operator: string;
130
+ };
131
131
 
132
- // return {
133
- // ...filter,
134
- // filter_value: filterValue.value,
135
- // filter_operator: filterValue.operator,
136
- // };
137
- // }
138
- // return filter;
139
- // });
132
+ return {
133
+ ...filter,
134
+ filter_value: filterValue.value,
135
+ filter_operator: filterValue.operator,
136
+ };
137
+ }
138
+ return filter;
139
+ });
140
140
 
141
- // setPagination((prev) => ({ ...prev, pageIndex: 0 }));
142
- // debouncedUpdateFilters(updatedFilters);
143
- // }, [formValues, filters, debouncedUpdateFilters]);
141
+ setPagination((prev) => ({ ...prev, pageIndex: 0 }));
142
+ debouncedUpdateFilters(updatedFilters);
143
+ }, [formValues, filters, debouncedUpdateFilters]);
144
144
 
145
- // useEffect(() => {
146
- // return () => {
147
- // reset();
148
- // filters?.forEach((filter) => {
149
- // if (filter?.filter_attribute_name) {
150
- // unregister(filter?.filter_attribute_name);
151
- // }
152
- // });
153
- // };
154
- // }, []);
145
+ useEffect(() => {
146
+ return () => {
147
+ reset();
148
+ filters?.forEach((filter) => {
149
+ if (filter?.filter_attribute_name) {
150
+ unregister(filter?.filter_attribute_name);
151
+ }
152
+ });
153
+ };
154
+ }, []);
155
155
 
156
- // const groupedFilters = useMemo(() => {
157
- // return filters?.reduce((acc, filter) => {
158
- // const key = filter?.filter_entity_name || "";
159
- // if (!acc[key]) {
160
- // acc[key] = [];
161
- // }
162
- // acc[key].push(filter);
163
- // return acc;
164
- // }, {} as Record<string, FilterStateProps[]>);
165
- // }, [filters]);
156
+ const groupedFilters = useMemo(() => {
157
+ return filters?.reduce((acc, filter) => {
158
+ const key = filter?.filter_entity_name || "";
159
+ if (!acc[key]) {
160
+ acc[key] = [];
161
+ }
162
+ acc[key].push(filter);
163
+ return acc;
164
+ }, {} as Record<string, FilterStateProps[]>);
165
+ }, [filters]);
166
166
 
167
- // const handleRemoveEntityType = (entityType: string) => {
168
- // const remainingFilters = filters?.filter(
169
- // (f) => f.filter_entity_name !== entityType
170
- // );
167
+ const handleRemoveEntityType = (entityType: string) => {
168
+ const remainingFilters = filters?.filter(
169
+ (f) => f.filter_entity_name !== entityType
170
+ );
171
171
 
172
- // // unregister all fields belonging to this entity type
173
- // filters?.forEach((f) => {
174
- // if (f?.filter_entity_name === entityType && f?.filter_attribute_name) {
175
- // unregister(`${f?.filter_attribute_name}.value`);
176
- // unregister(`${f?.filter_attribute_name}.operator`);
177
- // }
178
- // });
172
+ // unregister all fields belonging to this entity type
173
+ filters?.forEach((f) => {
174
+ if (f?.filter_entity_name === entityType && f?.filter_attribute_name) {
175
+ unregister(`${f?.filter_attribute_name}.value`);
176
+ unregister(`${f?.filter_attribute_name}.operator`);
177
+ }
178
+ });
179
179
 
180
- // setFilters(remainingFilters);
180
+ setFilters(remainingFilters);
181
181
 
182
- // const newState = {
183
- // filterMaster,
184
- // filters: remainingFilters,
185
- // };
182
+ const newState = {
183
+ filterMaster,
184
+ filters: remainingFilters,
185
+ };
186
186
 
187
- // onChangeFunction && onChangeFunction(newState);
188
- // };
187
+ onChangeFunction && onChangeFunction(newState);
188
+ };
189
189
 
190
- // return (
191
- // <form
192
- // onSubmit={(e) => {
193
- // e.preventDefault(); // This prevents the page from reloading
194
- // }}
195
- // >
196
- // <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
197
- // {editMode && (
198
- // <Box
199
- // sx={{
200
- // "& .MuiOutlinedInput-root": {
201
- // borderRadius: "6px",
202
- // fontSize: "14px",
203
- // bgcolor: "#fafafa",
204
- // "& fieldset": { borderColor: "#c1c1c1" },
205
- // "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
206
- // },
207
- // display: "flex",
208
- // alignItems: "center",
209
- // justifyContent: "center",
210
- // padding: "0.5rem 0 1rem 0",
211
- // gap: 1,
212
- // }}
213
- // >
214
- // <Controller
215
- // name="filterName"
216
- // control={control}
217
- // render={({ field }) => (
218
- // <TextField
219
- // fullWidth
220
- // size="small"
221
- // placeholder="Filter Name"
222
- // value={filterName || field.value}
223
- // onChange={(e) => {
224
- // field.onChange(e);
225
- // if (editMode) {
226
- // setFilterMaster(
227
- // (prev) =>
228
- // ({
229
- // ...prev,
230
- // saved_filters: {
231
- // ...prev?.saved_filters,
232
- // selectedName: e.target.value,
233
- // },
234
- // } as FilterMasterStateProps)
235
- // );
236
- // }
237
- // }}
238
- // inputRef={field.ref}
239
- // sx={{
240
- // maxWidth: 400,
190
+ return (
191
+ <form
192
+ onSubmit={(e) => {
193
+ e.preventDefault(); // This prevents the page from reloading
194
+ }}
195
+ >
196
+ <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
197
+ {editMode && (
198
+ <Box
199
+ sx={{
200
+ "& .MuiOutlinedInput-root": {
201
+ borderRadius: "6px",
202
+ fontSize: "14px",
203
+ bgcolor: "#fafafa",
204
+ "& fieldset": { borderColor: "#c1c1c1" },
205
+ "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
206
+ },
207
+ display: "flex",
208
+ alignItems: "center",
209
+ justifyContent: "center",
210
+ padding: "0.5rem 0 1rem 0",
211
+ gap: 1,
212
+ }}
213
+ >
214
+ <Controller
215
+ name="filterName"
216
+ control={control}
217
+ render={({ field }) => (
218
+ <TextField
219
+ fullWidth
220
+ size="small"
221
+ placeholder="Filter Name"
222
+ value={filterName || field.value}
223
+ onChange={(e) => {
224
+ field.onChange(e);
225
+ if (editMode) {
226
+ setFilterMaster(
227
+ (prev) =>
228
+ ({
229
+ ...prev,
230
+ saved_filters: {
231
+ ...prev?.saved_filters,
232
+ selectedName: e.target.value,
233
+ },
234
+ } as FilterMasterStateProps)
235
+ );
236
+ }
237
+ }}
238
+ inputRef={field.ref}
239
+ sx={{
240
+ maxWidth: 400,
241
241
 
242
- // "& .MuiOutlinedInput-root": {
243
- // bgcolor: "white",
244
- // borderRadius: "0px",
245
- // fontSize: "14px",
246
- // color: "#272524",
247
- // fontWeight: "500",
248
- // "& fieldset": { borderColor: "#c5c5c5" },
249
- // "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
250
- // },
251
- // }}
252
- // />
253
- // )}
254
- // />
255
- // <Box onClick={(e) => e.stopPropagation()}>
256
- // <IconButton
257
- // size="small"
258
- // onClick={() =>
259
- // setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
260
- // }
261
- // >
262
- // <DeleteIcon />
263
- // </IconButton>
264
- // </Box>
265
- // </Box>
266
- // )}
242
+ "& .MuiOutlinedInput-root": {
243
+ bgcolor: "white",
244
+ borderRadius: "0px",
245
+ fontSize: "14px",
246
+ color: "#272524",
247
+ fontWeight: "500",
248
+ "& fieldset": { borderColor: "#c5c5c5" },
249
+ "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
250
+ },
251
+ }}
252
+ />
253
+ )}
254
+ />
255
+ <Box onClick={(e) => e.stopPropagation()}>
256
+ <IconButton
257
+ size="small"
258
+ onClick={() =>
259
+ setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
260
+ }
261
+ >
262
+ <DeleteIcon />
263
+ </IconButton>
264
+ </Box>
265
+ </Box>
266
+ )}
267
267
 
268
- // <Box
269
- // className="filter-criteria-form"
270
- // sx={filterFormStyles.formFlexContainer}
271
- // >
272
- // <FilterCriteria
273
- // columnsData={columnsData}
274
- // tableStates={tableStates}
275
- // onChangeFunction={onChangeFunction}
276
- // filterComponentOptions={filterComponentOptions}
277
- // />
268
+ <Box
269
+ className="filter-criteria-form"
270
+ sx={filterFormStyles.formFlexContainer}
271
+ >
272
+ <FilterCriteria
273
+ columnsData={columnsData}
274
+ tableStates={tableStates}
275
+ onChangeFunction={onChangeFunction}
276
+ filterComponentOptions={filterComponentOptions}
277
+ />
278
278
 
279
- // {!editMode && (
280
- // <CustomSearch value={searchTerm} onChange={setSearchTerm} />
281
- // )}
279
+ {!editMode && (
280
+ <CustomSearch value={searchTerm} onChange={setSearchTerm} />
281
+ )}
282
282
 
283
- // <Box
284
- // className="filter-form-inputs"
285
- // sx={filterFormStyles.formFlexContainer}
286
- // >
287
- // {Object.entries(groupedFilters).map(([entityType, filters]) => (
288
- // <Box
289
- // key={entityType}
290
- // sx={{
291
- // border: "1px solid #c5c5c5",
292
- // borderRadius: 2,
293
- // overflow: "hidden",
294
- // }}
295
- // >
296
- // {/* Group Header */}
297
- // <Box
298
- // className="group-header"
299
- // sx={filterFormStyles.formListSectionHeader}
300
- // >
301
- // <Typography fontSize={14}>{entityType}</Typography>
302
- // <IconButton
303
- // size="small"
304
- // onClick={() => handleRemoveEntityType(entityType)}
305
- // >
306
- // <CloseIcon />
307
- // </IconButton>
308
- // </Box>
283
+ <Box
284
+ className="filter-form-inputs"
285
+ sx={filterFormStyles.formFlexContainer}
286
+ >
287
+ {Object.entries(groupedFilters).map(([entityType, filters]) => (
288
+ <Box
289
+ key={entityType}
290
+ sx={{
291
+ border: "1px solid #c5c5c5",
292
+ borderRadius: 2,
293
+ overflow: "hidden",
294
+ }}
295
+ >
296
+ {/* Group Header */}
297
+ <Box
298
+ className="group-header"
299
+ sx={filterFormStyles.formListSectionHeader}
300
+ >
301
+ <Typography fontSize={14}>{entityType}</Typography>
302
+ <IconButton
303
+ size="small"
304
+ onClick={() => handleRemoveEntityType(entityType)}
305
+ >
306
+ <CloseIcon />
307
+ </IconButton>
308
+ </Box>
309
309
 
310
- // {filters
311
- // .filter(
312
- // (filter) =>
313
- // filter?.filter_attribute_name
314
- // ?.toLowerCase()
315
- // .includes(searchTerm.toLowerCase()) ||
316
- // filter.filter_value
317
- // ?.toString()
318
- // .toLowerCase()
319
- // .includes(searchTerm.toLowerCase())
320
- // )
321
- // .reverse()
322
- // .map((filter) => {
323
- // const dropdown_list = filter.dropdown_list || [];
324
- // return (
325
- // <Box
326
- // key={filter.filter_attribute}
327
- // sx={filterFormStyles.formListItem}
328
- // >
329
- // <Box sx={filterFormStyles.formListItemHeader}>
330
- // <Typography
331
- // sx={filterFormStyles.formListItemHeaderName}
332
- // >
333
- // {filter?.filter_attribute_name}
334
- // </Typography>
335
- // <FormDropdown
336
- // filter={filter}
337
- // control={control}
338
- // setValue={setValue}
339
- // dropdownList={dropdown_list}
340
- // sx={filterFormStyles.formListItemHeaderDropdown}
341
- // onValueChange={updateFiltersFromForm}
342
- // />
343
- // <IconButton
344
- // sx={{ marginLeft: "auto" }}
345
- // onClick={() => {
346
- // unregister(
347
- // `${filter?.filter_attribute_name}.value`
348
- // );
349
- // unregister(
350
- // `${filter?.filter_attribute_name}.operator`
351
- // );
310
+ {filters
311
+ .filter(
312
+ (filter) =>
313
+ filter?.filter_attribute_name
314
+ ?.toLowerCase()
315
+ .includes(searchTerm.toLowerCase()) ||
316
+ filter.filter_value
317
+ ?.toString()
318
+ .toLowerCase()
319
+ .includes(searchTerm.toLowerCase())
320
+ )
321
+ .reverse()
322
+ .map((filter) => {
323
+ const dropdown_list = filter.dropdown_list || [];
324
+ return (
325
+ <Box
326
+ key={filter.filter_attribute}
327
+ sx={filterFormStyles.formListItem}
328
+ >
329
+ <Box sx={filterFormStyles.formListItemHeader}>
330
+ <Typography
331
+ sx={filterFormStyles.formListItemHeaderName}
332
+ >
333
+ {filter?.filter_attribute_name}
334
+ </Typography>
335
+ <FormDropdown
336
+ filter={filter}
337
+ control={control}
338
+ setValue={setValue}
339
+ dropdownList={dropdown_list}
340
+ sx={filterFormStyles.formListItemHeaderDropdown}
341
+ onValueChange={updateFiltersFromForm}
342
+ />
343
+ <IconButton
344
+ sx={{ marginLeft: "auto" }}
345
+ onClick={() => {
346
+ unregister(
347
+ `${filter?.filter_attribute_name}.value`
348
+ );
349
+ unregister(
350
+ `${filter?.filter_attribute_name}.operator`
351
+ );
352
352
 
353
- // // Toggle dummy field to force form dirty
354
- // const dummy = watch("dummyChange");
355
- // setValue(
356
- // "dummyChange",
357
- // dummy === "changed" ? "reset" : "changed",
358
- // {
359
- // shouldDirty: true,
360
- // }
361
- // );
353
+ // Toggle dummy field to force form dirty
354
+ const dummy = watch("dummyChange");
355
+ setValue(
356
+ "dummyChange",
357
+ dummy === "changed" ? "reset" : "changed",
358
+ {
359
+ shouldDirty: true,
360
+ }
361
+ );
362
362
 
363
- // handleRemoveFilter(filter.filter_attribute);
364
- // }}
365
- // size="small"
366
- // >
367
- // <CloseIcon />
368
- // </IconButton>
369
- // </Box>
363
+ handleRemoveFilter(filter.filter_attribute);
364
+ }}
365
+ size="small"
366
+ >
367
+ <CloseIcon />
368
+ </IconButton>
369
+ </Box>
370
370
 
371
- // <Box>
372
- // {(() => {
373
- // const fieldValue = formValues[
374
- // filter?.filter_attribute_name as keyof FormValues
375
- // ] as
376
- // | { value: string | string[]; operator: string }
377
- // | undefined;
371
+ <Box>
372
+ {(() => {
373
+ const fieldValue = formValues[
374
+ filter?.filter_attribute_name as keyof FormValues
375
+ ] as
376
+ | { value: string | string[]; operator: string }
377
+ | undefined;
378
378
 
379
- // const operator = fieldValue?.operator;
379
+ const operator = fieldValue?.operator;
380
380
 
381
- // return resolveFilterInput({
382
- // filter,
383
- // operator,
384
- // control,
385
- // dropdownData,
386
- // updateFiltersFromForm,
387
- // });
388
- // })()}
389
- // </Box>
390
- // </Box>
391
- // );
392
- // })}
393
- // </Box>
394
- // ))}
395
- // </Box>
396
- // </Box>
397
- // </Box>
381
+ return resolveFilterInput({
382
+ filter,
383
+ operator,
384
+ control,
385
+ dropdownData,
386
+ updateFiltersFromForm,
387
+ });
388
+ })()}
389
+ </Box>
390
+ </Box>
391
+ );
392
+ })}
393
+ </Box>
394
+ ))}
395
+ </Box>
396
+ </Box>
397
+ </Box>
398
398
 
399
- // {filters?.length > 0 && (showClearAllButton || showSaveButton) && (
400
- // <Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
401
- // {showClearAllButton && (
402
- // <Button
403
- // variant="outlined"
404
- // sx={{
405
- // color: "#7A5AF8",
406
- // border: `1px solid #7A5AF8`,
407
- // borderRadius: "6px",
408
- // textTransform: "none",
409
- // fontSize: "14px",
410
- // }}
411
- // fullWidth
412
- // onClick={() => {
413
- // setFilters([]);
399
+ {filters?.length > 0 && (showClearAllButton || showSaveButton) && (
400
+ <Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
401
+ {showClearAllButton && (
402
+ <Button
403
+ variant="outlined"
404
+ sx={{
405
+ color: "#7A5AF8",
406
+ border: `1px solid #7A5AF8`,
407
+ borderRadius: "6px",
408
+ textTransform: "none",
409
+ fontSize: "14px",
410
+ }}
411
+ fullWidth
412
+ onClick={() => {
413
+ setFilters([]);
414
414
 
415
- // const filterMaster = {
416
- // ...tableStates.filterMaster,
417
- // activeFilterTabIndex: -1,
418
- // };
415
+ const filterMaster = {
416
+ ...tableStates.filterMaster,
417
+ activeFilterTabIndex: -1,
418
+ };
419
419
 
420
- // const newState = {
421
- // filterMaster: filterMaster,
422
- // filters: [],
423
- // };
420
+ const newState = {
421
+ filterMaster: filterMaster,
422
+ filters: [],
423
+ };
424
424
 
425
- // onChangeFunction && onChangeFunction(newState);
426
- // }}
427
- // >
428
- // Clear All
429
- // </Button>
430
- // )}
425
+ onChangeFunction && onChangeFunction(newState);
426
+ }}
427
+ >
428
+ Clear All
429
+ </Button>
430
+ )}
431
431
 
432
- // {showSaveButton && (
433
- // <Button
434
- // variant="contained"
435
- // fullWidth
436
- // sx={{
437
- // color: "white",
438
- // backgroundColor: "#7A5AF8",
439
- // "&.Mui-disabled": {
440
- // backgroundColor: "#d7cefd",
441
- // color: "rgba(255, 255, 255, 0.7)",
442
- // },
443
- // }}
444
- // onClick={() => {
445
- // setSavedFilterModalOpen && setSavedFilterModalOpen(true);
446
- // }}
447
- // >
448
- // Save Filter
449
- // </Button>
450
- // )}
432
+ {showSaveButton && (
433
+ <Button
434
+ variant="contained"
435
+ fullWidth
436
+ sx={{
437
+ color: "white",
438
+ backgroundColor: "#7A5AF8",
439
+ "&.Mui-disabled": {
440
+ backgroundColor: "#d7cefd",
441
+ color: "rgba(255, 255, 255, 0.7)",
442
+ },
443
+ }}
444
+ onClick={() => {
445
+ setSavedFilterModalOpen && setSavedFilterModalOpen(true);
446
+ }}
447
+ >
448
+ Save Filter
449
+ </Button>
450
+ )}
451
451
 
452
- // {/* Custom buttons from props */}
453
- // {customButtons?.map((btn, idx) => (
454
- // <Button
455
- // key={idx}
456
- // fullWidth
457
- // variant={btn?.variant ?? "outlined"}
458
- // sx={btn?.sx}
459
- // {...btn}
460
- // >
461
- // {btn?.label}
462
- // </Button>
463
- // ))}
464
- // </Box>
465
- // )}
466
- // </form>
467
- // );
468
- // };
452
+ {/* Custom buttons from props */}
453
+ {customButtons?.map((btn, idx) => (
454
+ <Button
455
+ key={idx}
456
+ fullWidth
457
+ variant={btn?.variant ?? "outlined"}
458
+ sx={btn?.sx}
459
+ {...btn}
460
+ >
461
+ {btn?.label}
462
+ </Button>
463
+ ))}
464
+ </Box>
465
+ )}
466
+ </form>
467
+ );
468
+ };
469
469
 
470
- // export default FilterForm;
470
+ export default FilterForm;
471
471
 
472
- // !! PLEASE DO NOT DELETE THIS COMMENT BLOCK !!
473
- import {
474
- Box,
475
- Button,
476
- FormControl,
477
- IconButton,
478
- TextField,
479
- Typography,
480
- } from "@mui/material";
481
- import { CloseIcon, DeleteIcon } from "../../../../../assets/svg";
482
- import {
483
- FilterColumnsDataProps,
484
- FilterComponentOptions,
485
- FilterDropdownDataProps,
486
- FilterMasterStateProps,
487
- FilterStateProps,
488
- } from "../../../../types/filter";
489
- import { Controller, useForm } from "react-hook-form";
490
- import FormTextfield from "./components/Textfield";
491
- import React, { useEffect, useMemo, useCallback } from "react";
492
- import FormDatePicker from "./components/Date";
493
- import FormDropdown from "./components/Dropdown";
494
- import FormMultiSelect from "./components/Multi-Select";
495
- import { CraftTableOptionsProps } from "../../../../types/table-options";
496
- import FilterCriteria from "./components/Filter-criteria";
497
- import CustomSearch from "../search";
498
- import { customDebounce } from "../../../../libs/utils/debounce";
499
- import { filterFormStyles } from "../../style";
500
- import { onFilterChangeFunctionProps } from "../../../../types/common";
472
+ // !! PLEASE DO NOT DELETE THIS COMMENTED BLOCK !!
473
+ // import {
474
+ // Box,
475
+ // Button,
476
+ // FormControl,
477
+ // IconButton,
478
+ // TextField,
479
+ // Typography,
480
+ // } from "@mui/material";
481
+ // import { CloseIcon, DeleteIcon } from "../../../../../assets/svg";
482
+ // import {
483
+ // FilterColumnsDataProps,
484
+ // FilterComponentOptions,
485
+ // FilterDropdownDataProps,
486
+ // FilterMasterStateProps,
487
+ // FilterStateProps,
488
+ // } from "../../../../types/filter";
489
+ // import { Controller, useForm } from "react-hook-form";
490
+ // import FormTextfield from "./components/Textfield";
491
+ // import React, { useEffect, useMemo, useCallback } from "react";
492
+ // import FormDatePicker from "./components/Date";
493
+ // import FormDropdown from "./components/Dropdown";
494
+ // import FormMultiSelect from "./components/Multi-Select";
495
+ // import { CraftTableOptionsProps } from "../../../../types/table-options";
496
+ // import FilterCriteria from "./components/Filter-criteria";
497
+ // import CustomSearch from "../search";
498
+ // import { customDebounce } from "../../../../libs/utils/debounce";
499
+ // import { filterFormStyles } from "../../style";
500
+ // import { onFilterChangeFunctionProps } from "../../../../types/common";
501
501
 
502
- interface FormValues {
503
- filterName: string;
504
- [key: string]:
505
- | {
506
- value: string | string[];
507
- operator: string;
508
- }
509
- | string;
510
- }
502
+ // interface FormValues {
503
+ // filterName: string;
504
+ // [key: string]:
505
+ // | {
506
+ // value: string | string[];
507
+ // operator: string;
508
+ // }
509
+ // | string;
510
+ // }
511
511
 
512
- const FilterForm = ({
513
- columnsData,
514
- dropdownData,
515
- searchTerm = "",
516
- setSearchTerm,
517
- handleRemoveFilter,
518
- editMode = false,
519
- tableStates,
520
- setSavedFilterModalOpen,
521
- setDeleteFilterModalOpen,
522
- onChangeFunction,
523
- filterComponentOptions,
524
- }: {
525
- columnsData: FilterColumnsDataProps;
526
- dropdownData: FilterDropdownDataProps;
527
- searchTerm?: string;
528
- setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
529
- handleRemoveFilter: (filter_attribute: string) => void;
530
- editMode?: boolean;
531
- tableStates: CraftTableOptionsProps;
532
- setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
533
- setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
534
- onChangeFunction: ({
535
- updatedFilters,
536
- filterMaster,
537
- }: onFilterChangeFunctionProps) => void;
538
- filterComponentOptions?: FilterComponentOptions;
539
- }) => {
540
- const { filterMaster, filters, setFilters, setFilterMaster, setPagination } =
541
- tableStates;
512
+ // const FilterForm = ({
513
+ // columnsData,
514
+ // dropdownData,
515
+ // searchTerm = "",
516
+ // setSearchTerm,
517
+ // handleRemoveFilter,
518
+ // editMode = false,
519
+ // tableStates,
520
+ // setSavedFilterModalOpen,
521
+ // setDeleteFilterModalOpen,
522
+ // onChangeFunction,
523
+ // filterComponentOptions,
524
+ // }: {
525
+ // columnsData: FilterColumnsDataProps;
526
+ // dropdownData: FilterDropdownDataProps;
527
+ // searchTerm?: string;
528
+ // setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
529
+ // handleRemoveFilter: (filter_attribute: string) => void;
530
+ // editMode?: boolean;
531
+ // tableStates: CraftTableOptionsProps;
532
+ // setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
533
+ // setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
534
+ // onChangeFunction: ({
535
+ // updatedFilters,
536
+ // filterMaster,
537
+ // }: onFilterChangeFunctionProps) => void;
538
+ // filterComponentOptions?: FilterComponentOptions;
539
+ // }) => {
540
+ // const { filterMaster, filters, setFilters, setFilterMaster, setPagination } =
541
+ // tableStates;
542
542
 
543
- const showSaveButton =
544
- filterComponentOptions?.tabOptions?.mainFilter?.showSaveButton;
545
- const showClearAllButton =
546
- filterComponentOptions?.tabOptions?.mainFilter?.showClearAllButton;
547
- const customButtons =
548
- filterComponentOptions?.tabOptions?.mainFilter?.customButtons;
543
+ // const showSaveButton =
544
+ // filterComponentOptions?.tabOptions?.mainFilter?.showSaveButton;
545
+ // const showClearAllButton =
546
+ // filterComponentOptions?.tabOptions?.mainFilter?.showClearAllButton;
547
+ // const customButtons =
548
+ // filterComponentOptions?.tabOptions?.mainFilter?.customButtons;
549
549
 
550
- const filterName = filterMaster?.saved_filters?.selectedName || "";
550
+ // const filterName = filterMaster?.saved_filters?.selectedName || "";
551
551
 
552
- const defaultValues = useMemo(() => {
553
- const filterValues = filters?.reduce((acc, curr) => {
554
- if (curr?.filter_attribute_name) {
555
- acc[curr?.filter_attribute_name] = {
556
- value: curr?.filter_value ?? "",
557
- operator:
558
- curr?.filter_operator ?? curr?.dropdown_list?.[0]?.value ?? "",
559
- };
560
- }
561
- return acc;
562
- }, {} as Record<string, { value: string | string[]; operator: string }>);
552
+ // const defaultValues = useMemo(() => {
553
+ // const filterValues = filters?.reduce((acc, curr) => {
554
+ // if (curr?.filter_attribute_name) {
555
+ // acc[curr?.filter_attribute_name] = {
556
+ // value: curr?.filter_value ?? "",
557
+ // operator:
558
+ // curr?.filter_operator ?? curr?.dropdown_list?.[0]?.value ?? "",
559
+ // };
560
+ // }
561
+ // return acc;
562
+ // }, {} as Record<string, { value: string | string[]; operator: string }>);
563
563
 
564
- return {
565
- filterName: filterName ?? "",
566
- dummyChange: "",
567
- ...filterValues,
568
- };
569
- }, [filters, filterName]);
564
+ // return {
565
+ // filterName: filterName ?? "",
566
+ // dummyChange: "",
567
+ // ...filterValues,
568
+ // };
569
+ // }, [filters, filterName]);
570
570
 
571
- const { control, watch, reset, setValue, unregister } = useForm<
572
- FormValues & { dummyChange: string }
573
- >({
574
- mode: "onChange",
575
- defaultValues,
576
- resetOptions: {
577
- keepDirtyValues: false,
578
- keepErrors: false,
579
- },
580
- });
571
+ // const { control, watch, reset, setValue, unregister } = useForm<
572
+ // FormValues & { dummyChange: string }
573
+ // >({
574
+ // mode: "onChange",
575
+ // defaultValues,
576
+ // resetOptions: {
577
+ // keepDirtyValues: false,
578
+ // keepErrors: false,
579
+ // },
580
+ // });
581
581
 
582
- const formValues = watch();
582
+ // const formValues = watch();
583
583
 
584
- useEffect(() => {
585
- reset(defaultValues);
586
- }, [filters]);
587
-
588
- const debouncedUpdateFilters = useCallback(
589
- customDebounce((updatedFilters: FilterStateProps[]) => {
590
- setFilters(updatedFilters);
584
+ // useEffect(() => {
585
+ // reset(defaultValues);
586
+ // }, [filters]);
591
587
 
592
- const newState = {
593
- filterMaster: filterMaster,
594
- filters: updatedFilters,
595
- };
588
+ // const debouncedUpdateFilters = useCallback(
589
+ // customDebounce((updatedFilters: FilterStateProps[]) => {
590
+ // setFilters(updatedFilters);
596
591
 
597
- onChangeFunction && onChangeFunction(newState);
598
- }, 1000),
599
- [setFilters]
600
- );
592
+ // const newState = {
593
+ // filterMaster: filterMaster,
594
+ // filters: updatedFilters,
595
+ // };
601
596
 
602
- const updateFiltersFromForm = useCallback(() => {
603
- const updatedFilters = filters?.map((filter) => {
604
- if (
605
- filter?.filter_attribute_name &&
606
- typeof formValues[filter?.filter_attribute_name] === "object"
607
- ) {
608
- const filterValue = formValues[filter?.filter_attribute_name] as {
609
- value: string | string[];
610
- operator: string;
611
- };
597
+ // onChangeFunction && onChangeFunction(newState);
598
+ // }, 1000),
599
+ // [setFilters]
600
+ // );
612
601
 
613
- return {
614
- ...filter,
615
- filter_value: filterValue.value,
616
- filter_operator: filterValue.operator,
617
- };
618
- }
619
- return filter;
620
- });
602
+ // const updateFiltersFromForm = useCallback(() => {
603
+ // const updatedFilters = filters?.map((filter) => {
604
+ // if (
605
+ // filter?.filter_attribute_name &&
606
+ // typeof formValues[filter?.filter_attribute_name] === "object"
607
+ // ) {
608
+ // const filterValue = formValues[filter?.filter_attribute_name] as {
609
+ // value: string | string[];
610
+ // operator: string;
611
+ // };
621
612
 
622
- setPagination((prev) => ({ ...prev, pageIndex: 0 }));
623
- debouncedUpdateFilters(updatedFilters);
624
- }, [formValues, filters, debouncedUpdateFilters]);
613
+ // return {
614
+ // ...filter,
615
+ // filter_value: filterValue.value,
616
+ // filter_operator: filterValue.operator,
617
+ // };
618
+ // }
619
+ // return filter;
620
+ // });
625
621
 
626
- useEffect(() => {
627
- return () => {
628
- reset();
629
- filters?.forEach((filter) => {
630
- if (filter?.filter_attribute_name) {
631
- unregister(filter?.filter_attribute_name);
632
- }
633
- });
634
- };
635
- }, []);
622
+ // setPagination((prev) => ({ ...prev, pageIndex: 0 }));
623
+ // debouncedUpdateFilters(updatedFilters);
624
+ // }, [formValues, filters, debouncedUpdateFilters]);
636
625
 
637
- const groupedFilters = useMemo(() => {
638
- return filters?.reduce((acc, filter) => {
639
- const key = filter?.filter_entity_name || "";
640
- if (!acc[key]) {
641
- acc[key] = [];
642
- }
643
- acc[key].push(filter);
644
- return acc;
645
- }, {} as Record<string, FilterStateProps[]>);
646
- }, [filters]);
626
+ // useEffect(() => {
627
+ // return () => {
628
+ // reset();
629
+ // filters?.forEach((filter) => {
630
+ // if (filter?.filter_attribute_name) {
631
+ // unregister(filter?.filter_attribute_name);
632
+ // }
633
+ // });
634
+ // };
635
+ // }, []);
647
636
 
648
- const handleRemoveEntityType = (entityType: string) => {
649
- const remainingFilters = filters?.filter(
650
- (f) => f.filter_entity_name !== entityType
651
- );
637
+ // const groupedFilters = useMemo(() => {
638
+ // return filters?.reduce((acc, filter) => {
639
+ // const key = filter?.filter_entity_name || "";
640
+ // if (!acc[key]) {
641
+ // acc[key] = [];
642
+ // }
643
+ // acc[key].push(filter);
644
+ // return acc;
645
+ // }, {} as Record<string, FilterStateProps[]>);
646
+ // }, [filters]);
652
647
 
653
- // unregister all fields belonging to this entity type
654
- filters?.forEach((f) => {
655
- if (f?.filter_entity_name === entityType && f?.filter_attribute_name) {
656
- unregister(`${f?.filter_attribute_name}.value`);
657
- unregister(`${f?.filter_attribute_name}.operator`);
658
- }
659
- });
648
+ // const handleRemoveEntityType = (entityType: string) => {
649
+ // const remainingFilters = filters?.filter(
650
+ // (f) => f.filter_entity_name !== entityType
651
+ // );
660
652
 
661
- setFilters(remainingFilters);
653
+ // // unregister all fields belonging to this entity type
654
+ // filters?.forEach((f) => {
655
+ // if (f?.filter_entity_name === entityType && f?.filter_attribute_name) {
656
+ // unregister(`${f?.filter_attribute_name}.value`);
657
+ // unregister(`${f?.filter_attribute_name}.operator`);
658
+ // }
659
+ // });
662
660
 
663
- const newState = {
664
- filterMaster,
665
- filters: remainingFilters,
666
- };
661
+ // setFilters(remainingFilters);
667
662
 
668
- onChangeFunction && onChangeFunction(newState);
669
- };
663
+ // const newState = {
664
+ // filterMaster,
665
+ // filters: remainingFilters,
666
+ // };
670
667
 
671
- return (
672
- <form
673
- onSubmit={(e) => {
674
- e.preventDefault(); // This prevents the page from reloading
675
- }}
676
- >
677
- <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
678
- {editMode && (
679
- <Box
680
- sx={{
681
- "& .MuiOutlinedInput-root": {
682
- borderRadius: "6px",
683
- fontSize: "14px",
684
- bgcolor: "#fafafa",
685
- "& fieldset": { borderColor: "#c1c1c1" },
686
- "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
687
- },
688
- display: "flex",
689
- alignItems: "center",
690
- justifyContent: "center",
691
- padding: "0.5rem 0 1rem 0",
692
- gap: 1,
693
- }}
694
- >
695
- <Controller
696
- name="filterName"
697
- control={control}
698
- render={({ field }) => (
699
- <TextField
700
- fullWidth
701
- size="small"
702
- placeholder="Filter Name"
703
- value={filterName || field.value}
704
- onChange={(e) => {
705
- field.onChange(e);
706
- if (editMode) {
707
- setFilterMaster(
708
- (prev) =>
709
- ({
710
- ...prev,
711
- saved_filters: {
712
- ...prev?.saved_filters,
713
- selectedName: e.target.value,
714
- },
715
- } as FilterMasterStateProps)
716
- );
717
- }
718
- }}
719
- inputRef={field.ref}
720
- sx={{
721
- maxWidth: 400,
668
+ // onChangeFunction && onChangeFunction(newState);
669
+ // };
722
670
 
723
- "& .MuiOutlinedInput-root": {
724
- bgcolor: "white",
725
- borderRadius: "0px",
726
- fontSize: "14px",
727
- color: "#272524",
728
- fontWeight: "500",
729
- "& fieldset": { borderColor: "#c5c5c5" },
730
- "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
731
- },
732
- }}
733
- />
734
- )}
735
- />
736
- <Box onClick={(e) => e.stopPropagation()}>
737
- <IconButton
738
- size="small"
739
- onClick={() =>
740
- setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
741
- }
742
- >
743
- <DeleteIcon />
744
- </IconButton>
745
- </Box>
746
- </Box>
747
- )}
671
+ // return (
672
+ // <form
673
+ // onSubmit={(e) => {
674
+ // e.preventDefault(); // This prevents the page from reloading
675
+ // }}
676
+ // >
677
+ // <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
678
+ // {editMode && (
679
+ // <Box
680
+ // sx={{
681
+ // "& .MuiOutlinedInput-root": {
682
+ // borderRadius: "6px",
683
+ // fontSize: "14px",
684
+ // bgcolor: "#fafafa",
685
+ // "& fieldset": { borderColor: "#c1c1c1" },
686
+ // "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
687
+ // },
688
+ // display: "flex",
689
+ // alignItems: "center",
690
+ // justifyContent: "center",
691
+ // padding: "0.5rem 0 1rem 0",
692
+ // gap: 1,
693
+ // }}
694
+ // >
695
+ // <Controller
696
+ // name="filterName"
697
+ // control={control}
698
+ // render={({ field }) => (
699
+ // <TextField
700
+ // fullWidth
701
+ // size="small"
702
+ // placeholder="Filter Name"
703
+ // value={filterName || field.value}
704
+ // onChange={(e) => {
705
+ // field.onChange(e);
706
+ // if (editMode) {
707
+ // setFilterMaster(
708
+ // (prev) =>
709
+ // ({
710
+ // ...prev,
711
+ // saved_filters: {
712
+ // ...prev?.saved_filters,
713
+ // selectedName: e.target.value,
714
+ // },
715
+ // } as FilterMasterStateProps)
716
+ // );
717
+ // }
718
+ // }}
719
+ // inputRef={field.ref}
720
+ // sx={{
721
+ // maxWidth: 400,
748
722
 
749
- <Box
750
- className="filter-criteria-form"
751
- sx={filterFormStyles.formFlexContainer}
752
- >
753
- <FilterCriteria
754
- columnsData={columnsData}
755
- tableStates={tableStates}
756
- onChangeFunction={onChangeFunction}
757
- filterComponentOptions={filterComponentOptions}
758
- />
723
+ // "& .MuiOutlinedInput-root": {
724
+ // bgcolor: "white",
725
+ // borderRadius: "0px",
726
+ // fontSize: "14px",
727
+ // color: "#272524",
728
+ // fontWeight: "500",
729
+ // "& fieldset": { borderColor: "#c5c5c5" },
730
+ // "&.Mui-focused fieldset": { borderColor: "#7A5AF8" },
731
+ // },
732
+ // }}
733
+ // />
734
+ // )}
735
+ // />
736
+ // <Box onClick={(e) => e.stopPropagation()}>
737
+ // <IconButton
738
+ // size="small"
739
+ // onClick={() =>
740
+ // setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
741
+ // }
742
+ // >
743
+ // <DeleteIcon />
744
+ // </IconButton>
745
+ // </Box>
746
+ // </Box>
747
+ // )}
759
748
 
760
- {!editMode && (
761
- <CustomSearch value={searchTerm} onChange={setSearchTerm} />
762
- )}
749
+ // <Box
750
+ // className="filter-criteria-form"
751
+ // sx={filterFormStyles.formFlexContainer}
752
+ // >
753
+ // <FilterCriteria
754
+ // columnsData={columnsData}
755
+ // tableStates={tableStates}
756
+ // onChangeFunction={onChangeFunction}
757
+ // filterComponentOptions={filterComponentOptions}
758
+ // />
763
759
 
764
- <Box
765
- className="filter-form-inputs"
766
- sx={filterFormStyles.formFlexContainer}
767
- >
768
- {Object.entries(groupedFilters).map(([entityType, filters]) => (
769
- <Box
770
- key={entityType}
771
- sx={{
772
- border: "1px solid #c5c5c5",
773
- borderRadius: 2,
774
- overflow: "hidden",
775
- }}
776
- >
777
- {/* Group Header */}
778
- <Box
779
- className="group-header"
780
- sx={filterFormStyles.formListSectionHeader}
781
- >
782
- <Typography fontSize={14}>{entityType}</Typography>
783
- <IconButton
784
- size="small"
785
- onClick={() => handleRemoveEntityType(entityType)}
786
- >
787
- <CloseIcon />
788
- </IconButton>
789
- </Box>
760
+ // {!editMode && (
761
+ // <CustomSearch value={searchTerm} onChange={setSearchTerm} />
762
+ // )}
790
763
 
791
- {filters
792
- .filter(
793
- (filter) =>
794
- filter?.filter_attribute_name
795
- ?.toLowerCase()
796
- .includes(searchTerm.toLowerCase()) ||
797
- filter.filter_value
798
- ?.toString()
799
- .toLowerCase()
800
- .includes(searchTerm.toLowerCase())
801
- )
802
- .reverse()
803
- .map((filter) => {
804
- const dropdown_list = filter.dropdown_list || [];
805
- return (
806
- <Box
807
- key={filter.filter_attribute}
808
- sx={filterFormStyles.formListItem}
809
- >
810
- <Box sx={filterFormStyles.formListItemHeader}>
811
- <Typography
812
- sx={filterFormStyles.formListItemHeaderName}
813
- >
814
- {filter?.filter_attribute_name}
815
- </Typography>
816
- <FormDropdown
817
- filter={filter}
818
- control={control}
819
- setValue={setValue}
820
- dropdownList={dropdown_list}
821
- sx={filterFormStyles.formListItemHeaderDropdown}
822
- onValueChange={updateFiltersFromForm}
823
- />
824
- <IconButton
825
- sx={{ marginLeft: "auto" }}
826
- onClick={() => {
827
- unregister(
828
- `${filter?.filter_attribute_name}.value`
829
- );
830
- unregister(
831
- `${filter?.filter_attribute_name}.operator`
832
- );
764
+ // <Box
765
+ // className="filter-form-inputs"
766
+ // sx={filterFormStyles.formFlexContainer}
767
+ // >
768
+ // {Object.entries(groupedFilters).map(([entityType, filters]) => (
769
+ // <Box
770
+ // key={entityType}
771
+ // sx={{
772
+ // border: "1px solid #c5c5c5",
773
+ // borderRadius: 2,
774
+ // overflow: "hidden",
775
+ // }}
776
+ // >
777
+ // {/* Group Header */}
778
+ // <Box
779
+ // className="group-header"
780
+ // sx={filterFormStyles.formListSectionHeader}
781
+ // >
782
+ // <Typography fontSize={14}>{entityType}</Typography>
783
+ // <IconButton
784
+ // size="small"
785
+ // onClick={() => handleRemoveEntityType(entityType)}
786
+ // >
787
+ // <CloseIcon />
788
+ // </IconButton>
789
+ // </Box>
833
790
 
834
- // ✅ Toggle dummy field to force form dirty
835
- const dummy = watch("dummyChange");
836
- setValue(
837
- "dummyChange",
838
- dummy === "changed" ? "reset" : "changed",
839
- {
840
- shouldDirty: true,
841
- }
842
- );
791
+ // {filters
792
+ // .filter(
793
+ // (filter) =>
794
+ // filter?.filter_attribute_name
795
+ // ?.toLowerCase()
796
+ // .includes(searchTerm.toLowerCase()) ||
797
+ // filter.filter_value
798
+ // ?.toString()
799
+ // .toLowerCase()
800
+ // .includes(searchTerm.toLowerCase())
801
+ // )
802
+ // .reverse()
803
+ // .map((filter) => {
804
+ // const dropdown_list = filter.dropdown_list || [];
805
+ // return (
806
+ // <Box
807
+ // key={filter.filter_attribute}
808
+ // sx={filterFormStyles.formListItem}
809
+ // >
810
+ // <Box sx={filterFormStyles.formListItemHeader}>
811
+ // <Typography
812
+ // sx={filterFormStyles.formListItemHeaderName}
813
+ // >
814
+ // {filter?.filter_attribute_name}
815
+ // </Typography>
816
+ // <FormDropdown
817
+ // filter={filter}
818
+ // control={control}
819
+ // setValue={setValue}
820
+ // dropdownList={dropdown_list}
821
+ // sx={filterFormStyles.formListItemHeaderDropdown}
822
+ // onValueChange={updateFiltersFromForm}
823
+ // />
824
+ // <IconButton
825
+ // sx={{ marginLeft: "auto" }}
826
+ // onClick={() => {
827
+ // unregister(
828
+ // `${filter?.filter_attribute_name}.value`
829
+ // );
830
+ // unregister(
831
+ // `${filter?.filter_attribute_name}.operator`
832
+ // );
843
833
 
844
- handleRemoveFilter(filter.filter_attribute);
845
- }}
846
- size="small"
847
- >
848
- <CloseIcon />
849
- </IconButton>
850
- </Box>
834
+ // // Toggle dummy field to force form dirty
835
+ // const dummy = watch("dummyChange");
836
+ // setValue(
837
+ // "dummyChange",
838
+ // dummy === "changed" ? "reset" : "changed",
839
+ // {
840
+ // shouldDirty: true,
841
+ // }
842
+ // );
851
843
 
852
- <Box>
853
- {(() => {
854
- const fieldValue = formValues[
855
- filter?.filter_attribute_name as string
856
- ] as
857
- | { value: string | string[]; operator: string }
858
- | undefined;
844
+ // handleRemoveFilter(filter.filter_attribute);
845
+ // }}
846
+ // size="small"
847
+ // >
848
+ // <CloseIcon />
849
+ // </IconButton>
850
+ // </Box>
859
851
 
860
- console.log("fieldValue:", fieldValue);
852
+ // <Box>
853
+ // {(() => {
854
+ // const fieldValue = formValues[
855
+ // filter?.filter_attribute_name as string
856
+ // ] as
857
+ // | { value: string | string[]; operator: string }
858
+ // | undefined;
861
859
 
862
- const operator = fieldValue?.operator;
863
- console.log("Operator", operator);
864
-
865
- // Operators that should show a Date Picker
866
- const dateAllowedOperators = [
867
- "equal",
868
- "before",
869
- "after",
870
- "between",
871
- "is",
872
- "today",
873
- "is_before",
874
- "is_after",
875
- "is_on_or_before",
876
- "is_on_or_after",
877
- "empty",
878
- "not_empty",
879
- ];
880
-
881
- const showDatePicker =
882
- filter?.filter_attribute_data_type === "date" &&
883
- operator &&
884
- dateAllowedOperators.includes(operator);
885
-
886
- // Should textfield shown instead for date?
887
- // const showTextInsteadOfDate =
888
- // !operator ||
889
- // !dateAllowedOperators.includes(operator);
890
-
891
- // Now render exactly same logic except date override
892
- if (
893
- filter?.filter_attribute_data_type === "text" ||
894
- filter?.filter_attribute_data_type === "number"
895
- ) {
896
- return (
897
- <FormTextfield
898
- filter={filter}
899
- control={control}
900
- onValueChange={updateFiltersFromForm}
901
- />
902
- );
903
- }
904
-
905
- if (filter?.filter_attribute_data_type === "year") {
906
- return (
907
- <FormDatePicker
908
- filter={filter}
909
- control={control}
910
- views={["year"]}
911
- onValueChange={updateFiltersFromForm}
912
- />
913
- );
914
- }
915
-
916
- // DATE LOGIC
917
- if (showDatePicker) {
918
- console.log("Inside Date", showDatePicker);
919
- return (
920
- <FormDatePicker
921
- filter={filter}
922
- control={control}
923
- onValueChange={updateFiltersFromForm}
924
- />
925
- );
926
- } else {
927
- return (
928
- <FormTextfield
929
- filter={filter}
930
- control={control}
931
- onValueChange={updateFiltersFromForm}
932
- />
933
- );
934
- }
935
-
936
- // if (showTextInsteadOfDate) {
937
- // console.log(
938
- // "Inside Show text",
939
- // showTextInsteadOfDate
940
- // );
941
-
942
- // return (
943
- // <FormTextfield
944
- // filter={filter}
945
- // control={control}
946
- // onValueChange={updateFiltersFromForm}
947
- // />
948
- // );
949
- // }
950
-
951
- if (
952
- filter?.filter_attribute_data_type === "select"
953
- ) {
954
- return (
955
- <FormMultiSelect
956
- filter={filter}
957
- control={control}
958
- dropdownData={dropdownData}
959
- onValueChange={updateFiltersFromForm}
960
- />
961
- );
962
- }
963
-
964
- if (
965
- filter?.filter_attribute_data_type ===
966
- "multiselect"
967
- ) {
968
- return (
969
- <FormMultiSelect
970
- filter={filter}
971
- control={control}
972
- dropdownData={dropdownData}
973
- onValueChange={updateFiltersFromForm}
974
- />
975
- );
976
- }
977
-
978
- // if (
979
- // filter?.filter_attribute_data_type === "radio"
980
- // ) {
981
- // return (
982
- // <FormMultiSelect
983
- // filter={filter}
984
- // control={control}
985
- // dropdownData={dropdownData}
986
- // onValueChange={updateFiltersFromForm}
987
- // />
988
- // );
989
- // }
990
-
991
- // if (
992
- // filter?.filter_attribute_data_type === "checkbox"
993
- // ) {
994
- // return (
995
- // <FormMultiSelect
996
- // filter={filter}
997
- // control={control}
998
- // dropdownData={dropdownData}
999
- // onValueChange={updateFiltersFromForm}
1000
- // />
1001
- // );
1002
- // }
1003
-
1004
- return <FormControl fullWidth size="small" />;
1005
- })()}
1006
- </Box>
860
+ // const operator = fieldValue?.operator;
1007
861
 
1008
- {/* <Box>
1009
- {filter?.filter_attribute_data_type === "text" ||
1010
- filter?.filter_attribute_data_type === "number" ? (
1011
- <FormTextfield
1012
- filter={filter}
1013
- control={control}
1014
- onValueChange={updateFiltersFromForm}
1015
- />
1016
- ) : filter?.filter_attribute_data_type === "year" ? (
1017
- <FormDatePicker
1018
- filter={filter}
1019
- control={control}
1020
- views={["year"]}
1021
- onValueChange={updateFiltersFromForm}
1022
- />
1023
- ) : filter?.filter_attribute_data_type === "date" ? (
1024
- <FormDatePicker
1025
- filter={filter}
1026
- control={control}
1027
- onValueChange={updateFiltersFromForm}
1028
- />
1029
- ) : filter?.filter_attribute_data_type ===
1030
- "select" ? (
1031
- <FormMultiSelect
1032
- filter={filter}
1033
- control={control}
1034
- dropdownData={dropdownData}
1035
- onValueChange={updateFiltersFromForm}
1036
- />
1037
- ) : filter?.filter_attribute_data_type ===
1038
- "multiselect" ? (
1039
- <FormMultiSelect
1040
- filter={filter}
1041
- control={control}
1042
- dropdownData={dropdownData}
1043
- onValueChange={updateFiltersFromForm}
1044
- />
1045
- ) : filter?.filter_attribute_data_type === "radio" ? (
1046
- <FormMultiSelect
1047
- filter={filter}
1048
- control={control}
1049
- dropdownData={dropdownData}
1050
- onValueChange={updateFiltersFromForm}
1051
- />
1052
- ) : filter?.filter_attribute_data_type ===
1053
- "checkbox" ? (
1054
- <FormMultiSelect
1055
- filter={filter}
1056
- control={control}
1057
- dropdownData={dropdownData}
1058
- onValueChange={updateFiltersFromForm}
1059
- />
1060
- ) : (
1061
- <FormControl fullWidth size="small" />
1062
- )}
1063
- </Box> */}
1064
- </Box>
1065
- );
1066
- })}
1067
- </Box>
1068
- ))}
1069
- </Box>
1070
- </Box>
1071
- </Box>
862
+ // // Operators that should show a Date Picker
863
+ // const dateAllowedOperators = [
864
+ // "equal",
865
+ // "before",
866
+ // "after",
867
+ // "between",
868
+ // "is",
869
+ // "today",
870
+ // "is_before",
871
+ // "is_after",
872
+ // "is_on_or_before",
873
+ // "is_on_or_after",
874
+ // "empty",
875
+ // "not_empty",
876
+ // ];
877
+
878
+ // const showDatePicker =
879
+ // filter?.filter_attribute_data_type === "date" &&
880
+ // operator &&
881
+ // dateAllowedOperators.includes(operator);
882
+
883
+ // if (
884
+ // filter?.filter_attribute_data_type === "text" ||
885
+ // filter?.filter_attribute_data_type === "number"
886
+ // ) {
887
+ // return (
888
+ // <FormTextfield
889
+ // filter={filter}
890
+ // control={control}
891
+ // onValueChange={updateFiltersFromForm}
892
+ // />
893
+ // );
894
+ // }
895
+
896
+ // if (
897
+ // filter?.filter_attribute_data_type === "select"
898
+ // ) {
899
+ // return (
900
+ // <FormMultiSelect
901
+ // filter={filter}
902
+ // control={control}
903
+ // dropdownData={dropdownData}
904
+ // onValueChange={updateFiltersFromForm}
905
+ // />
906
+ // );
907
+ // }
908
+
909
+ // if (
910
+ // filter?.filter_attribute_data_type ===
911
+ // "multiselect"
912
+ // ) {
913
+ // return (
914
+ // <FormMultiSelect
915
+ // filter={filter}
916
+ // control={control}
917
+ // dropdownData={dropdownData}
918
+ // onValueChange={updateFiltersFromForm}
919
+ // />
920
+ // );
921
+ // }
922
+
923
+ // if (filter?.filter_attribute_data_type === "year") {
924
+ // return (
925
+ // <FormDatePicker
926
+ // filter={filter}
927
+ // control={control}
928
+ // views={["year"]}
929
+ // onValueChange={updateFiltersFromForm}
930
+ // />
931
+ // );
932
+ // }
933
+
934
+ // // DATE LOGIC
935
+ // if (showDatePicker) {
936
+ // return (
937
+ // <FormDatePicker
938
+ // filter={filter}
939
+ // control={control}
940
+ // onValueChange={updateFiltersFromForm}
941
+ // />
942
+ // );
943
+ // } else {
944
+ // return (
945
+ // <FormTextfield
946
+ // filter={filter}
947
+ // control={control}
948
+ // onValueChange={updateFiltersFromForm}
949
+ // />
950
+ // );
951
+ // }
1072
952
 
1073
- {filters?.length > 0 && (showClearAllButton || showSaveButton) && (
1074
- <Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
1075
- {showClearAllButton && (
1076
- <Button
1077
- variant="outlined"
1078
- sx={{
1079
- color: "#7A5AF8",
1080
- border: `1px solid #7A5AF8`,
1081
- borderRadius: "6px",
1082
- textTransform: "none",
1083
- fontSize: "14px",
1084
- }}
1085
- fullWidth
1086
- onClick={() => {
1087
- setFilters([]);
953
+ // return <FormControl fullWidth size="small" />;
954
+ // })()}
955
+ // </Box>
956
+ // </Box>
957
+ // );
958
+ // })}
959
+ // </Box>
960
+ // ))}
961
+ // </Box>
962
+ // </Box>
963
+ // </Box>
1088
964
 
1089
- const filterMaster = {
1090
- ...tableStates.filterMaster,
1091
- activeFilterTabIndex: -1,
1092
- };
965
+ // {filters?.length > 0 && (showClearAllButton || showSaveButton) && (
966
+ // <Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
967
+ // {showClearAllButton && (
968
+ // <Button
969
+ // variant="outlined"
970
+ // sx={{
971
+ // color: "#7A5AF8",
972
+ // border: `1px solid #7A5AF8`,
973
+ // borderRadius: "6px",
974
+ // textTransform: "none",
975
+ // fontSize: "14px",
976
+ // }}
977
+ // fullWidth
978
+ // onClick={() => {
979
+ // setFilters([]);
1093
980
 
1094
- const newState = {
1095
- filterMaster: filterMaster,
1096
- filters: [],
1097
- };
981
+ // const filterMaster = {
982
+ // ...tableStates.filterMaster,
983
+ // activeFilterTabIndex: -1,
984
+ // };
1098
985
 
1099
- onChangeFunction && onChangeFunction(newState);
1100
- }}
1101
- >
1102
- Clear All
1103
- </Button>
1104
- )}
986
+ // const newState = {
987
+ // filterMaster: filterMaster,
988
+ // filters: [],
989
+ // };
1105
990
 
1106
- {showSaveButton && (
1107
- <Button
1108
- variant="contained"
1109
- fullWidth
1110
- sx={{
1111
- color: "white",
1112
- backgroundColor: "#7A5AF8",
1113
- "&.Mui-disabled": {
1114
- backgroundColor: "#d7cefd",
1115
- color: "rgba(255, 255, 255, 0.7)",
1116
- },
1117
- }}
1118
- onClick={() => {
1119
- setSavedFilterModalOpen && setSavedFilterModalOpen(true);
1120
- }}
1121
- >
1122
- Save Filter
1123
- </Button>
1124
- )}
991
+ // onChangeFunction && onChangeFunction(newState);
992
+ // }}
993
+ // >
994
+ // Clear All
995
+ // </Button>
996
+ // )}
1125
997
 
1126
- {/* Custom buttons from props */}
1127
- {customButtons?.map((btn, idx) => (
1128
- <Button
1129
- key={idx}
1130
- fullWidth
1131
- variant={btn?.variant ?? "outlined"}
1132
- sx={btn?.sx}
1133
- {...btn}
1134
- >
1135
- {btn?.label}
1136
- </Button>
1137
- ))}
1138
- </Box>
1139
- )}
1140
- </form>
1141
- );
1142
- };
998
+ // {showSaveButton && (
999
+ // <Button
1000
+ // variant="contained"
1001
+ // fullWidth
1002
+ // sx={{
1003
+ // color: "white",
1004
+ // backgroundColor: "#7A5AF8",
1005
+ // "&.Mui-disabled": {
1006
+ // backgroundColor: "#d7cefd",
1007
+ // color: "rgba(255, 255, 255, 0.7)",
1008
+ // },
1009
+ // }}
1010
+ // onClick={() => {
1011
+ // setSavedFilterModalOpen && setSavedFilterModalOpen(true);
1012
+ // }}
1013
+ // >
1014
+ // Save Filter
1015
+ // </Button>
1016
+ // )}
1143
1017
 
1144
- export default FilterForm;
1018
+ // {/* Custom buttons from props */}
1019
+ // {customButtons?.map((btn, idx) => (
1020
+ // <Button
1021
+ // key={idx}
1022
+ // fullWidth
1023
+ // variant={btn?.variant ?? "outlined"}
1024
+ // sx={btn?.sx}
1025
+ // {...btn}
1026
+ // >
1027
+ // {btn?.label}
1028
+ // </Button>
1029
+ // ))}
1030
+ // </Box>
1031
+ // )}
1032
+ // </form>
1033
+ // );
1034
+ // };
1035
+
1036
+ // export default FilterForm;