rez-table-listing-mui 1.3.43 → 1.3.45

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.
Files changed (41) hide show
  1. package/dist/index.d.ts +70 -10
  2. package/dist/index.js +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.mjs +1 -1
  5. package/dist/index.mjs.map +1 -1
  6. package/package.json +1 -1
  7. package/src/listing/components/common/saved-filter-modal/index.tsx +517 -0
  8. package/src/listing/components/filter/components/attributes-filter.tsx +2 -2
  9. package/src/listing/components/filter/components/forms/components/Dropdown.tsx +2 -2
  10. package/src/listing/components/filter/components/forms/components/Filter-criteria.tsx +9 -7
  11. package/src/listing/components/filter/components/forms/components/Textfield.tsx +2 -4
  12. package/src/listing/components/filter/components/forms/components/filter-criteria-list.tsx +1 -0
  13. package/src/listing/components/filter/components/forms/index.tsx +23 -14
  14. package/src/listing/components/filter/components/forms/utils/filter-date-input-resolver.tsx +3 -3
  15. package/src/listing/components/filter/components/main-filter.tsx +6 -6
  16. package/src/listing/components/filter/components/saved-edit-filter.tsx +5 -3
  17. package/src/listing/components/filter/components/saved-filter.tsx +300 -124
  18. package/src/listing/components/filter/components/search/index.tsx +1 -0
  19. package/src/listing/components/filter/components/single-filter-rendering.tsx +3 -3
  20. package/src/listing/components/filter/index.tsx +130 -5
  21. package/src/listing/components/index-table.tsx +9 -0
  22. package/src/listing/components/login/index.tsx +3 -6
  23. package/src/listing/components/table-dnd.tsx +6 -0
  24. package/src/listing/components/table-head-dnd-cell.tsx +7 -0
  25. package/src/listing/components/table-head-popover.tsx +24 -3
  26. package/src/listing/components/table-head.tsx +10 -0
  27. package/src/listing/components/table-settings/components/column.tsx +85 -26
  28. package/src/listing/components/table-settings/components/quick-tab.tsx +395 -77
  29. package/src/listing/components/table-settings/components/sorting.tsx +60 -20
  30. package/src/listing/components/table-settings/index.tsx +12 -2
  31. package/src/listing/components/table.tsx +6 -0
  32. package/src/listing/libs/hooks/useEntityTableAPI.tsx +20 -5
  33. package/src/listing/libs/utils/apiColumn.ts +8 -3
  34. package/src/listing/libs/utils/common.ts +2 -1
  35. package/src/listing/libs/utils/hydrate-saved-filters.ts +2 -2
  36. package/src/listing/types/common.ts +1 -0
  37. package/src/listing/types/filter-settings.ts +8 -2
  38. package/src/listing/types/filter.ts +51 -4
  39. package/src/listing/types/table.ts +9 -0
  40. package/src/view/FIlterWrapper.tsx +15 -0
  41. package/src/view/ListingView.tsx +178 -63
@@ -33,7 +33,7 @@ export const resolveFilterInput = ({
33
33
  dropdownData: any;
34
34
  updateFiltersFromForm: () => void;
35
35
  }) => {
36
- const dataType = filter?.filter_attribute_element_type;
36
+ const dataType = filter?.filter_attribute_data_type;
37
37
 
38
38
  // TEXT / NUMBER → always textfield
39
39
  if (dataType === "text" || dataType === "number") {
@@ -84,9 +84,9 @@ export const resolveFilterInput = ({
84
84
 
85
85
  // SELECT / MULTISELECT / RADIO / CHECKBOX
86
86
  if (
87
- filter?.filter_attribute_element_type !== undefined &&
87
+ filter?.filter_attribute_data_type !== undefined &&
88
88
  ["select", "multiselect", "radio", "checkbox"].includes(
89
- filter?.filter_attribute_element_type
89
+ filter?.filter_attribute_data_type
90
90
  )
91
91
  ) {
92
92
  return (
@@ -11,7 +11,7 @@ const MainFilter = ({
11
11
  columnsData,
12
12
  dropdownData,
13
13
  tableStates,
14
- setSavedFilterModalOpen,
14
+ onSaveFilterButtonClick,
15
15
  onChangeFunction,
16
16
  filterComponentOptions,
17
17
  }: FilterFormComponentProps) => {
@@ -22,10 +22,10 @@ const MainFilter = ({
22
22
  useEffect(() => {
23
23
  setFilterMaster(
24
24
  (prev) =>
25
- ({
26
- ...prev,
27
- activeFilterTabIndex: 0,
28
- } as FilterMasterStateProps)
25
+ ({
26
+ ...prev,
27
+ activeFilterTabIndex: 0,
28
+ } as FilterMasterStateProps)
29
29
  );
30
30
  }, []);
31
31
 
@@ -61,7 +61,7 @@ const MainFilter = ({
61
61
  setSearchTerm={setSearchTerm}
62
62
  handleRemoveFilter={handleRemoveFilter}
63
63
  tableStates={tableStates}
64
- setSavedFilterModalOpen={setSavedFilterModalOpen}
64
+ onSaveFilterButtonClick={onSaveFilterButtonClick}
65
65
  dropdownData={dropdownData}
66
66
  onChangeFunction={onChangeFunction}
67
67
  filterComponentOptions={filterComponentOptions}
@@ -18,7 +18,7 @@ const SavedFilterEditComponent = ({
18
18
  setEditMode,
19
19
  searchTerm,
20
20
  setSearchTerm,
21
- setSavedFilterModalOpen,
21
+ onSaveFilterButtonClick,
22
22
  setDeleteFilterModalOpen,
23
23
  onChangeFunction,
24
24
  filterComponentOptions,
@@ -30,7 +30,7 @@ const SavedFilterEditComponent = ({
30
30
  setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;
31
31
  searchTerm?: string;
32
32
  setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
33
- setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
33
+ onSaveFilterButtonClick?: () => void;
34
34
  setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
35
35
  onChangeFunction: ({
36
36
  updatedFilters,
@@ -62,6 +62,8 @@ const SavedFilterEditComponent = ({
62
62
  selectedId: "",
63
63
  selectedName: "",
64
64
  selectedCode: "",
65
+ shareWithTeam: false,
66
+ allowTeamEdit: false,
65
67
  },
66
68
  activeFilterTabIndex: -1,
67
69
  } as FilterMasterStateProps)
@@ -99,7 +101,7 @@ const SavedFilterEditComponent = ({
99
101
  dropdownData={dropdownData}
100
102
  searchTerm={searchTerm}
101
103
  setSearchTerm={setSearchTerm}
102
- setSavedFilterModalOpen={setSavedFilterModalOpen}
104
+ onSaveFilterButtonClick={onSaveFilterButtonClick}
103
105
  setDeleteFilterModalOpen={setDeleteFilterModalOpen}
104
106
  onChangeFunction={onChangeFunction}
105
107
  filterComponentOptions={filterComponentOptions}
@@ -5,7 +5,11 @@ import {
5
5
  FilterOperationListProps,
6
6
  } from "../../../types/filter";
7
7
  import {
8
+ Accordion,
9
+ AccordionDetails,
10
+ AccordionSummary,
8
11
  Box,
12
+ Divider,
9
13
  IconButton,
10
14
  List,
11
15
  ListItem,
@@ -15,8 +19,8 @@ import {
15
19
  import CustomSearch from "./search";
16
20
  import { DeleteIcon, EditIcon } from "../../../../assets/svg";
17
21
  import SavedFilterEditComponent from "./saved-edit-filter";
18
- import { filterStyles } from "../style";
19
22
  import { CheckBox } from "../../../../assets/svg";
23
+ import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
20
24
 
21
25
  const SavedFilter = ({
22
26
  columnsData,
@@ -25,31 +29,77 @@ const SavedFilter = ({
25
29
  editMode,
26
30
  setEditMode,
27
31
  setDeleteFilterModalOpen,
28
- setSavedFilterModalOpen,
32
+ onSaveFilterButtonClick,
29
33
  tabValue,
30
34
  onChangeFunction,
31
35
  filterComponentOptions,
32
36
  }: FilterFormComponentProps) => {
33
37
  const { filters, filterMaster, setFilterMaster, setFilterToDelete } =
34
38
  tableStates;
39
+
35
40
  const [searchTerm, setSearchTerm] = useState<string>("");
36
41
 
37
- // reset savedFilterEditValue when component unmounts
42
+ const MyFilter = (f: any): FilterOperationListProps => {
43
+ return {
44
+ label: f.name || f.label || "Unnamed Filter",
45
+ value: f.id || f.value,
46
+ code: f.code ?? "",
47
+ is_shared: false,
48
+ created_by: f.created_by || "",
49
+ description: f.description || "",
50
+ is_owner: true, // My filter = always owner
51
+ is_editable: f.is_editable === true || f.is_editable === "true",
52
+ };
53
+ };
54
+
55
+ const SharedFilter = (f: any): FilterOperationListProps => {
56
+ const prefs =
57
+ f.sharedPreferences || f.preferences || f.meta || f.shared_meta || {};
58
+
59
+ return {
60
+ label: f.name || f.label || "Unnamed Filter",
61
+ value: f.id || f.value,
62
+ code: f.code ?? "",
63
+ is_shared: f.is_shared ?? prefs.is_shared ?? true,
64
+ created_by: f.created_by || "shared_filter",
65
+ description: f.description || "",
66
+ is_owner: f.is_owner === true || prefs.is_owner === "true",
67
+ is_editable:
68
+ f.is_editable === true ||
69
+ f.is_editable === "true" ||
70
+ prefs.is_editable === true ||
71
+ prefs.is_editable === "true",
72
+ };
73
+ };
74
+
75
+ // SEPARATE DATA MAPPINGS
76
+
77
+ const myFilters: FilterOperationListProps[] =
78
+ columnsData?.saved_filter?.map(MyFilter) ?? [];
79
+
80
+ const sharedFilters: FilterOperationListProps[] =
81
+ columnsData?.shared_filter?.map(SharedFilter) ?? [];
82
+
83
+ // Reset on unmount
38
84
  useEffect(() => {
39
85
  return () => {
40
- const editModeFromTabOptions =
86
+ const editModeFromTab =
41
87
  filterComponentOptions?.tabOptions?.savedFilter?.editMode;
42
- if (!editModeFromTabOptions) {
88
+
89
+ if (!editModeFromTab) {
43
90
  setEditMode && setEditMode(false);
44
91
  setFilterMaster(
45
92
  (prev) =>
46
93
  ({
47
94
  ...prev,
48
95
  saved_filters: {
49
- ...prev?.attributes,
96
+ ...(prev?.saved_filters ?? {}),
50
97
  selectedId: "",
51
98
  selectedName: "",
99
+ description: "",
52
100
  selectedCode: "",
101
+ shareWithTeam: undefined,
102
+ allowTeamEdit: undefined,
53
103
  },
54
104
  } as FilterMasterStateProps)
55
105
  );
@@ -57,14 +107,20 @@ const SavedFilter = ({
57
107
  };
58
108
  }, []);
59
109
 
60
- const handleListItemClick = (filter: FilterOperationListProps) => {
61
- const newFilterMasterState = {
110
+ // APPLY FILTER
111
+
112
+ const applyFilterStates = (filter: FilterOperationListProps) => {
113
+ const newFilterMaster = {
62
114
  ...filterMaster,
63
115
  saved_filters: {
64
- ...filterMaster?.attributes,
65
- selectedId: filter?.value,
66
- selectedName: filter?.label,
67
- selectedCode: filter?.code,
116
+ ...(filterMaster?.saved_filters ?? {}),
117
+ selectedId: filter.value,
118
+ selectedName: filter.label,
119
+ description: filter.description,
120
+ selectedCode: filter.code,
121
+ shareWithTeam: filter.is_shared,
122
+ allowTeamEdit: filter.is_editable,
123
+ is_owner: filter.is_owner,
68
124
  },
69
125
  attributes: {
70
126
  ...filterMaster?.attributes,
@@ -73,125 +129,161 @@ const SavedFilter = ({
73
129
  activeFilterTabIndex: tabValue,
74
130
  } as FilterMasterStateProps;
75
131
 
76
- setFilterMaster(newFilterMasterState);
77
-
78
- const newState = {
79
- filterMaster: newFilterMasterState,
80
- filters: filters,
81
- };
132
+ setFilterMaster(newFilterMaster);
82
133
 
83
- onChangeFunction && onChangeFunction(newState);
134
+ onChangeFunction &&
135
+ onChangeFunction({
136
+ filterMaster: newFilterMaster,
137
+ filters,
138
+ });
139
+ };
84
140
 
85
- // setEditfilter state on edit icon click
141
+ const handleListItemClick = (filter: FilterOperationListProps) => {
142
+ applyFilterStates(filter);
86
143
  setEditMode && setEditMode(true);
87
144
  setFilterToDelete(filter);
88
145
  };
89
146
 
90
- const handleAppyFilter = (filter: FilterOperationListProps) => {
91
- const newFilterMasterState = {
92
- ...filterMaster,
93
- saved_filters: {
94
- ...filterMaster?.attributes,
95
- selectedId: filter?.value,
96
- selectedName: filter?.label,
97
- selectedCode: filter?.code,
98
- },
99
- attributes: {
100
- ...filterMaster?.attributes,
101
- radio: [],
102
- },
103
- activeFilterTabIndex: tabValue,
104
- } as FilterMasterStateProps;
105
-
106
- setFilterMaster(newFilterMasterState);
147
+ const handleApplyFilter = (filter: FilterOperationListProps) => {
148
+ applyFilterStates(filter);
149
+ };
107
150
 
108
- const newState = {
109
- filterMaster: newFilterMasterState,
110
- filters: filters,
111
- };
151
+ const [openAccordion, setOpenAccordion] = useState<"my" | "shared" | null>(
152
+ "my"
153
+ );
112
154
 
113
- onChangeFunction && onChangeFunction(newState);
155
+ const toggleAccodion = (accordion: "my" | "shared" | null) => {
156
+ setOpenAccordion((prev) => (prev === accordion ? null : accordion));
114
157
  };
115
158
 
116
- const renderList = () => (
117
- <>
118
- <CustomSearch
119
- value={searchTerm}
120
- onChange={setSearchTerm}
121
- className="search-input"
122
- />
123
-
124
- {columnsData?.saved_filter?.length === 0 ? (
125
- <Typography sx={{ mt: 2 }}>No saved filters yet.</Typography>
126
- ) : (
127
- <List
128
- sx={{
129
- display: "flex",
130
- flexDirection: "column",
131
- gap: 1,
132
- mt: 2,
133
- }}
134
- >
135
- {columnsData?.saved_filter
136
- ?.filter((filter) =>
137
- filter.label?.toLowerCase().includes(searchTerm.toLowerCase())
138
- )
139
- ?.map((filter) => (
140
- <ListItem
141
- key={filter?.value}
159
+ // RENDER: MY FILTERS
160
+
161
+ const renderMyFilters = (source: FilterOperationListProps[]) =>
162
+ source.length === 0 ? (
163
+ <Typography>No My Filters</Typography>
164
+ ) : (
165
+ <List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
166
+ {source
167
+ .filter((f) =>
168
+ f.label?.toLowerCase().includes(searchTerm.toLowerCase())
169
+ )
170
+ .map((filter) => (
171
+ <ListItem
172
+ key={filter.value}
173
+ sx={{
174
+ cursor: "pointer",
175
+ borderRadius: "8px",
176
+ bgcolor: "#f2f6f8ff",
177
+ display: "flex",
178
+ justifyContent: "space-between",
179
+ gap: 1,
180
+ alignItems: "center",
181
+ "&:hover .action-icons": {
182
+ opacity: 1,
183
+ visibility: "visible",
184
+ },
185
+ }}
186
+ onClick={() => handleApplyFilter(filter)}
187
+ >
188
+ {filter.value === filterMaster?.saved_filters?.selectedId && (
189
+ <Box sx={{ display: "flex", alignItems: "center" }}>
190
+ <CheckBox />
191
+ </Box>
192
+ )}
193
+
194
+ <ListItemText primary={filter.label} />
195
+
196
+ <Box
197
+ onClick={(e) => e.stopPropagation()}
198
+ className="action-icons"
142
199
  sx={{
143
- cursor: "pointer",
144
- border:
145
- filter?.value ===
146
- tableStates?.filterMaster?.saved_filters?.selectedId
147
- ? `3px solid #7a5af8`
148
- : "1px solid #C5C5C5",
149
- borderRadius: "8px",
150
200
  display: "flex",
151
- justifyContent: "space-between",
152
201
  gap: 1,
153
- alignItems: "center",
154
- "&:hover .action-icons": {
155
- opacity: 1,
156
- visibility: "visible",
157
- },
202
+ opacity: 0,
203
+ visibility: "hidden",
204
+ transition: "opacity 0.2s ease, visibility 0.2s ease",
158
205
  }}
159
- onClick={() => handleAppyFilter(filter)}
160
206
  >
161
- {filter?.value ===
162
- tableStates?.filterMaster?.saved_filters?.selectedId && (
163
- <Box
164
- sx={{
165
- display: "flex",
166
- alignItems: "center",
167
- cursor: "pointer",
168
- color: "green",
169
- rounded: "full",
170
- }}
171
- >
172
- <CheckBox />
173
- </Box>
174
- )}
175
- <ListItemText primary={filter?.label} />
176
-
177
- <Box
178
- onClick={(e) => e.stopPropagation()}
179
- className="action-icons"
180
- sx={{
181
- display: "flex",
182
- gap: 1,
183
- opacity: 0,
184
- visibility: "hidden",
185
- transition: "opacity 0.2s ease, visibility 0.2s ease",
207
+ <IconButton
208
+ size="large"
209
+ onClick={() => handleListItemClick(filter)}
210
+ >
211
+ <EditIcon />
212
+ </IconButton>
213
+
214
+ <IconButton
215
+ size="small"
216
+ onClick={() => {
217
+ setFilterToDelete(filter);
218
+ setDeleteFilterModalOpen?.(true);
186
219
  }}
187
220
  >
221
+ <DeleteIcon />
222
+ </IconButton>
223
+ </Box>
224
+ </ListItem>
225
+ ))}
226
+ </List>
227
+ );
228
+
229
+ // ----------------------------------------
230
+ // RENDER: SHARED FILTERS
231
+ // ----------------------------------------
232
+ const renderSharedFilters = (source: FilterOperationListProps[]) =>
233
+ source.length === 0 ? (
234
+ <Typography>No Shared Filters</Typography>
235
+ ) : (
236
+ <List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
237
+ {source
238
+ .filter((f) =>
239
+ f.label?.toLowerCase().includes(searchTerm.toLowerCase())
240
+ )
241
+ .map((filter) => (
242
+ <ListItem
243
+ key={filter.value}
244
+ sx={{
245
+ cursor: "pointer",
246
+ borderRadius: "8px",
247
+ bgcolor: "#f2f6f8ff",
248
+ display: "flex",
249
+ justifyContent: "space-between",
250
+ gap: 1,
251
+ alignItems: "center",
252
+ "&:hover .action-icons": {
253
+ opacity: 1,
254
+ visibility: "visible",
255
+ },
256
+ }}
257
+ onClick={() => handleApplyFilter(filter)}
258
+ >
259
+ {filter.value === filterMaster?.saved_filters?.selectedId && (
260
+ <Box sx={{ display: "flex", alignItems: "center" }}>
261
+ <CheckBox />
262
+ </Box>
263
+ )}
264
+
265
+ <ListItemText primary={filter.label} />
266
+
267
+ <Box
268
+ onClick={(e) => e.stopPropagation()}
269
+ className="action-icons"
270
+ sx={{
271
+ display: "flex",
272
+ gap: 1,
273
+ opacity: 0,
274
+ visibility: "hidden",
275
+ transition: "opacity 0.2s ease, visibility 0.2s ease",
276
+ }}
277
+ >
278
+ {(filter.is_editable || filter.is_owner) && (
188
279
  <IconButton
189
280
  size="large"
190
281
  onClick={() => handleListItemClick(filter)}
191
282
  >
192
283
  <EditIcon />
193
284
  </IconButton>
194
-
285
+ )}
286
+ {filter.is_owner && (
195
287
  <IconButton
196
288
  size="small"
197
289
  onClick={() => {
@@ -201,24 +293,108 @@ const SavedFilter = ({
201
293
  >
202
294
  <DeleteIcon />
203
295
  </IconButton>
204
- </Box>
205
- </ListItem>
206
- ))}
207
- </List>
208
- )}
209
- </>
210
- );
211
-
212
- const mainBoxStyles = {
213
- ...filterStyles.filterMainComponentWrapper,
214
- ...filterStyles.scrollbarCustom,
215
- };
296
+ )}
297
+ </Box>
298
+ </ListItem>
299
+ ))}
300
+ </List>
301
+ );
216
302
 
303
+ // ----------------------------------------
304
+ // RENDER MAIN COMPONENT
305
+ // ----------------------------------------
217
306
  return (
218
- <Box sx={mainBoxStyles} className="saved-filter-component-wrapper">
219
- {/* Render search input and list */}
220
- {!editMode && renderList()}
307
+ <Box className="saved-filter-component-wrapper">
308
+ {!editMode && (
309
+ <>
310
+ {/* Search */}
311
+ <Box sx={{ mb: 2 }}>
312
+ <CustomSearch
313
+ value={searchTerm}
314
+ onChange={setSearchTerm}
315
+ className="search-input"
316
+ />
317
+ </Box>
318
+
319
+ {/* ---- My Filters ---- */}
320
+ <Box
321
+ sx={{
322
+ background: "#fff",
323
+ borderRadius: "12px",
324
+ border: "1px solid #eee",
325
+ mb: 2,
326
+ overflow: "hidden",
327
+ }}
328
+ >
329
+ <Accordion
330
+ disableGutters
331
+ elevation={0}
332
+ expanded={openAccordion === "my"}
333
+ onChange={() =>
334
+ // setOpenAccordion(openAccordion === "my" ? "shared" : "my")
335
+ toggleAccodion("my")
336
+ }
337
+ >
338
+ <AccordionSummary
339
+ expandIcon={<ExpandMoreIcon fontSize="small" />}
340
+ >
341
+ <Typography fontWeight={600}>My Filters</Typography>
342
+ </AccordionSummary>
343
+ <Divider sx={{ width: "100%" }} />
344
+ <AccordionDetails
345
+ sx={{
346
+ p: "9px",
347
+ maxHeight: "230px",
348
+ overflowY: "auto",
349
+ scrollbarWidth: "thin",
350
+ }}
351
+ >
352
+ {renderMyFilters(myFilters)}
353
+ </AccordionDetails>
354
+ </Accordion>
355
+ </Box>
356
+
357
+ {/* ---- Shared Filters ---- */}
358
+ <Box
359
+ sx={{
360
+ background: "#fff",
361
+ borderRadius: "12px",
362
+ border: "1px solid #eee",
363
+ mb: 2,
364
+ overflow: "hidden",
365
+ }}
366
+ >
367
+ <Accordion
368
+ disableGutters
369
+ elevation={0}
370
+ expanded={openAccordion === "shared"}
371
+ onChange={() =>
372
+ // setOpenAccordion(openAccordion === "shared" ? "my" : "shared")
373
+ toggleAccodion("shared")
374
+ }
375
+ >
376
+ <AccordionSummary
377
+ expandIcon={<ExpandMoreIcon fontSize="small" />}
378
+ >
379
+ <Typography fontWeight={600}>Shared Filters</Typography>
380
+ </AccordionSummary>
381
+ <Divider sx={{ width: "100%" }} />
382
+ <AccordionDetails
383
+ sx={{
384
+ p: "9px",
385
+ maxHeight: "230px",
386
+ overflowY: "auto",
387
+ scrollbarWidth: "thin",
388
+ }}
389
+ >
390
+ {renderSharedFilters(sharedFilters)}
391
+ </AccordionDetails>
392
+ </Accordion>
393
+ </Box>
394
+ </>
395
+ )}
221
396
 
397
+ {/* Edit Component */}
222
398
  {editMode && (
223
399
  <SavedFilterEditComponent
224
400
  columnsData={columnsData}
@@ -228,7 +404,7 @@ const SavedFilter = ({
228
404
  setEditMode={setEditMode}
229
405
  searchTerm={searchTerm}
230
406
  setSearchTerm={setSearchTerm}
231
- setSavedFilterModalOpen={setSavedFilterModalOpen}
407
+ onSaveFilterButtonClick={onSaveFilterButtonClick}
232
408
  setDeleteFilterModalOpen={setDeleteFilterModalOpen}
233
409
  onChangeFunction={onChangeFunction}
234
410
  filterComponentOptions={filterComponentOptions}
@@ -51,6 +51,7 @@ const CustomSearch = ({
51
51
  edge="end"
52
52
  onClick={handleClear}
53
53
  sx={{ color: "#888888", fontSize: "20px" }}
54
+ className="cross-icon"
54
55
  >
55
56
  <CloseIcon />
56
57
  </IconButton>
@@ -13,7 +13,7 @@ const SingleFilterRendering = ({
13
13
  columnsData,
14
14
  dropdownData,
15
15
  tableStates,
16
- setSavedFilterModalOpen,
16
+ onSaveFilterButtonClick,
17
17
  onChangeFunction,
18
18
  filterComponentOptions,
19
19
  editMode,
@@ -50,7 +50,7 @@ const SingleFilterRendering = ({
50
50
  {showFilter === "main" && (
51
51
  <MainFilter
52
52
  {...commonProps}
53
- setSavedFilterModalOpen={setSavedFilterModalOpen}
53
+ onSaveFilterButtonClick={onSaveFilterButtonClick}
54
54
  filterComponentOptions={filterComponentOptions}
55
55
  />
56
56
  )}
@@ -59,7 +59,7 @@ const SingleFilterRendering = ({
59
59
  <SavedFilter
60
60
  {...commonProps}
61
61
  {...editProps}
62
- setSavedFilterModalOpen={setSavedFilterModalOpen}
62
+ onSaveFilterButtonClick={onSaveFilterButtonClick}
63
63
  filterComponentOptions={filterComponentOptions}
64
64
  />
65
65
  )}