rez-table-listing-mui 1.3.33 → 1.3.35
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 +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/listing/components/common/saved-filter-modal/index.tsx +16 -6
- package/src/listing/components/filter/components/forms/index.tsx +13 -11
- package/src/listing/components/filter/components/saved-filter.tsx +114 -606
- package/src/listing/components/filter/index.tsx +17 -0
- package/src/listing/components/login/index.tsx +1 -1
- package/src/listing/types/filter.ts +4 -1
- package/src/view/ListingView.tsx +1 -1
|
@@ -1,248 +1,3 @@
|
|
|
1
|
-
// import { useEffect, useState } from "react";
|
|
2
|
-
// import {
|
|
3
|
-
// FilterFormComponentProps,
|
|
4
|
-
// FilterMasterStateProps,
|
|
5
|
-
// FilterOperationListProps,
|
|
6
|
-
// } from "../../../types/filter";
|
|
7
|
-
// import {
|
|
8
|
-
// Box,
|
|
9
|
-
// IconButton,
|
|
10
|
-
// List,
|
|
11
|
-
// ListItem,
|
|
12
|
-
// ListItemText,
|
|
13
|
-
// Typography,
|
|
14
|
-
// } from "@mui/material";
|
|
15
|
-
// import CustomSearch from "./search";
|
|
16
|
-
// import { DeleteIcon, EditIcon } from "../../../../assets/svg";
|
|
17
|
-
// import SavedFilterEditComponent from "./saved-edit-filter";
|
|
18
|
-
// import { filterStyles } from "../style";
|
|
19
|
-
// import { CheckBox } from "../../../../assets/svg";
|
|
20
|
-
|
|
21
|
-
// const SavedFilter = ({
|
|
22
|
-
// columnsData,
|
|
23
|
-
// dropdownData,
|
|
24
|
-
// tableStates,
|
|
25
|
-
// editMode,
|
|
26
|
-
// setEditMode,
|
|
27
|
-
// setDeleteFilterModalOpen,
|
|
28
|
-
// setSavedFilterModalOpen,
|
|
29
|
-
// tabValue,
|
|
30
|
-
// onChangeFunction,
|
|
31
|
-
// filterComponentOptions,
|
|
32
|
-
// }: FilterFormComponentProps) => {
|
|
33
|
-
// const { filters, filterMaster, setFilterMaster, setFilterToDelete } =
|
|
34
|
-
// tableStates;
|
|
35
|
-
// const [searchTerm, setSearchTerm] = useState<string>("");
|
|
36
|
-
|
|
37
|
-
// // reset savedFilterEditValue when component unmounts
|
|
38
|
-
// useEffect(() => {
|
|
39
|
-
// return () => {
|
|
40
|
-
// const editModeFromTabOptions =
|
|
41
|
-
// filterComponentOptions?.tabOptions?.savedFilter?.editMode;
|
|
42
|
-
// if (!editModeFromTabOptions) {
|
|
43
|
-
// setEditMode && setEditMode(false);
|
|
44
|
-
// setFilterMaster(
|
|
45
|
-
// (prev) =>
|
|
46
|
-
// ({
|
|
47
|
-
// ...prev,
|
|
48
|
-
// saved_filters: {
|
|
49
|
-
// ...prev?.attributes,
|
|
50
|
-
// selectedId: "",
|
|
51
|
-
// selectedName: "",
|
|
52
|
-
// selectedCode: "",
|
|
53
|
-
// },
|
|
54
|
-
// } as FilterMasterStateProps)
|
|
55
|
-
// );
|
|
56
|
-
// }
|
|
57
|
-
// };
|
|
58
|
-
// }, []);
|
|
59
|
-
|
|
60
|
-
// const handleListItemClick = (filter: FilterOperationListProps) => {
|
|
61
|
-
// const newFilterMasterState = {
|
|
62
|
-
// ...filterMaster,
|
|
63
|
-
// saved_filters: {
|
|
64
|
-
// ...filterMaster?.attributes,
|
|
65
|
-
// selectedId: filter?.value,
|
|
66
|
-
// selectedName: filter?.label,
|
|
67
|
-
// selectedCode: filter?.code,
|
|
68
|
-
// },
|
|
69
|
-
// attributes: {
|
|
70
|
-
// ...filterMaster?.attributes,
|
|
71
|
-
// radio: [],
|
|
72
|
-
// },
|
|
73
|
-
// activeFilterTabIndex: tabValue,
|
|
74
|
-
// } as FilterMasterStateProps;
|
|
75
|
-
|
|
76
|
-
// setFilterMaster(newFilterMasterState);
|
|
77
|
-
|
|
78
|
-
// const newState = {
|
|
79
|
-
// filterMaster: newFilterMasterState,
|
|
80
|
-
// filters: filters,
|
|
81
|
-
// };
|
|
82
|
-
|
|
83
|
-
// onChangeFunction && onChangeFunction(newState);
|
|
84
|
-
|
|
85
|
-
// // setEditfilter state on edit icon click
|
|
86
|
-
// setEditMode && setEditMode(true);
|
|
87
|
-
// setFilterToDelete(filter);
|
|
88
|
-
// };
|
|
89
|
-
|
|
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);
|
|
107
|
-
|
|
108
|
-
// const newState = {
|
|
109
|
-
// filterMaster: newFilterMasterState,
|
|
110
|
-
// filters: filters,
|
|
111
|
-
// };
|
|
112
|
-
|
|
113
|
-
// onChangeFunction && onChangeFunction(newState);
|
|
114
|
-
// };
|
|
115
|
-
|
|
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}
|
|
142
|
-
// 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
|
-
// display: "flex",
|
|
151
|
-
// justifyContent: "space-between",
|
|
152
|
-
// gap: 1,
|
|
153
|
-
// alignItems: "center",
|
|
154
|
-
// "&:hover .action-icons": {
|
|
155
|
-
// opacity: 1,
|
|
156
|
-
// visibility: "visible",
|
|
157
|
-
// },
|
|
158
|
-
// }}
|
|
159
|
-
// onClick={() => handleAppyFilter(filter)}
|
|
160
|
-
// >
|
|
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",
|
|
186
|
-
// }}
|
|
187
|
-
// >
|
|
188
|
-
// <IconButton
|
|
189
|
-
// size="large"
|
|
190
|
-
// onClick={() => handleListItemClick(filter)}
|
|
191
|
-
// >
|
|
192
|
-
// <EditIcon />
|
|
193
|
-
// </IconButton>
|
|
194
|
-
|
|
195
|
-
// <IconButton
|
|
196
|
-
// size="small"
|
|
197
|
-
// onClick={() => {
|
|
198
|
-
// setFilterToDelete(filter);
|
|
199
|
-
// setDeleteFilterModalOpen?.(true);
|
|
200
|
-
// }}
|
|
201
|
-
// >
|
|
202
|
-
// <DeleteIcon />
|
|
203
|
-
// </IconButton>
|
|
204
|
-
// </Box>
|
|
205
|
-
// </ListItem>
|
|
206
|
-
// ))}
|
|
207
|
-
// </List>
|
|
208
|
-
// )}
|
|
209
|
-
// </>
|
|
210
|
-
// );
|
|
211
|
-
|
|
212
|
-
// const mainBoxStyles = {
|
|
213
|
-
// ...filterStyles.filterMainComponentWrapper,
|
|
214
|
-
// ...filterStyles.scrollbarCustom,
|
|
215
|
-
// };
|
|
216
|
-
|
|
217
|
-
// return (
|
|
218
|
-
// <Box sx={mainBoxStyles} className="saved-filter-component-wrapper">
|
|
219
|
-
// {/* Render search input and list */}
|
|
220
|
-
// {!editMode && renderList()}
|
|
221
|
-
|
|
222
|
-
// {editMode && (
|
|
223
|
-
// <SavedFilterEditComponent
|
|
224
|
-
// columnsData={columnsData}
|
|
225
|
-
// dropdownData={dropdownData}
|
|
226
|
-
// tableStates={tableStates}
|
|
227
|
-
// editMode={editMode}
|
|
228
|
-
// setEditMode={setEditMode}
|
|
229
|
-
// searchTerm={searchTerm}
|
|
230
|
-
// setSearchTerm={setSearchTerm}
|
|
231
|
-
// setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
232
|
-
// setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
233
|
-
// onChangeFunction={onChangeFunction}
|
|
234
|
-
// filterComponentOptions={filterComponentOptions}
|
|
235
|
-
// />
|
|
236
|
-
// )}
|
|
237
|
-
// </Box>
|
|
238
|
-
// );
|
|
239
|
-
// };
|
|
240
|
-
|
|
241
|
-
// export default SavedFilter;
|
|
242
|
-
|
|
243
|
-
// do not delete this logic rework this
|
|
244
|
-
// ----------------------------------------------------------------------------------------------------------------------------
|
|
245
|
-
|
|
246
1
|
import { useEffect, useState } from "react";
|
|
247
2
|
import {
|
|
248
3
|
FilterFormComponentProps,
|
|
@@ -264,7 +19,6 @@ import {
|
|
|
264
19
|
import CustomSearch from "./search";
|
|
265
20
|
import { DeleteIcon, EditIcon } from "../../../../assets/svg";
|
|
266
21
|
import SavedFilterEditComponent from "./saved-edit-filter";
|
|
267
|
-
// import { filterStyles } from "../style";
|
|
268
22
|
import { CheckBox } from "../../../../assets/svg";
|
|
269
23
|
import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
|
270
24
|
|
|
@@ -285,7 +39,20 @@ const SavedFilter = ({
|
|
|
285
39
|
|
|
286
40
|
const [searchTerm, setSearchTerm] = useState<string>("");
|
|
287
41
|
|
|
288
|
-
const
|
|
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 => {
|
|
289
56
|
const prefs =
|
|
290
57
|
f.sharedPreferences || f.preferences || f.meta || f.shared_meta || {};
|
|
291
58
|
|
|
@@ -293,11 +60,10 @@ const SavedFilter = ({
|
|
|
293
60
|
label: f.name || f.label || "Unnamed Filter",
|
|
294
61
|
value: f.id || f.value,
|
|
295
62
|
code: f.code ?? "",
|
|
296
|
-
is_shared: f.is_shared ?? prefs.is_shared ??
|
|
63
|
+
is_shared: f.is_shared ?? prefs.is_shared ?? true,
|
|
297
64
|
created_by: f.created_by || "shared_filter",
|
|
298
65
|
description: f.description || "",
|
|
299
66
|
is_owner: f.is_owner === true || prefs.is_owner === "true",
|
|
300
|
-
|
|
301
67
|
is_editable:
|
|
302
68
|
f.is_editable === true ||
|
|
303
69
|
f.is_editable === "true" ||
|
|
@@ -306,13 +72,13 @@ const SavedFilter = ({
|
|
|
306
72
|
};
|
|
307
73
|
};
|
|
308
74
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
75
|
+
// SEPARATE DATA MAPPINGS
|
|
76
|
+
|
|
77
|
+
const myFilters: FilterOperationListProps[] =
|
|
78
|
+
columnsData?.saved_filter?.map(MyFilter) ?? [];
|
|
312
79
|
|
|
313
|
-
const
|
|
314
|
-
columnsData?.shared_filter?.map(
|
|
315
|
-
console.log("mappedSharedFilter", mappedSharedFilter);
|
|
80
|
+
const sharedFilters: FilterOperationListProps[] =
|
|
81
|
+
columnsData?.shared_filter?.map(SharedFilter) ?? [];
|
|
316
82
|
|
|
317
83
|
// Reset on unmount
|
|
318
84
|
useEffect(() => {
|
|
@@ -341,6 +107,8 @@ const SavedFilter = ({
|
|
|
341
107
|
};
|
|
342
108
|
}, []);
|
|
343
109
|
|
|
110
|
+
// APPLY FILTER
|
|
111
|
+
|
|
344
112
|
const applyFilterStates = (filter: FilterOperationListProps) => {
|
|
345
113
|
const newFilterMaster = {
|
|
346
114
|
...filterMaster,
|
|
@@ -378,32 +146,87 @@ const SavedFilter = ({
|
|
|
378
146
|
const handleApplyFilter = (filter: FilterOperationListProps) => {
|
|
379
147
|
applyFilterStates(filter);
|
|
380
148
|
};
|
|
149
|
+
|
|
381
150
|
const [openAccordion, setOpenAccordion] = useState<"my" | "shared">("my");
|
|
382
151
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
152
|
+
// RENDER: MY FILTERS
|
|
153
|
+
|
|
154
|
+
const renderMyFilters = (source: FilterOperationListProps[]) =>
|
|
155
|
+
source.length === 0 ? (
|
|
156
|
+
<Typography>No My Filters</Typography>
|
|
157
|
+
) : (
|
|
158
|
+
<List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
|
|
159
|
+
{source
|
|
160
|
+
.filter((f) =>
|
|
161
|
+
f.label?.toLowerCase().includes(searchTerm.toLowerCase())
|
|
162
|
+
)
|
|
163
|
+
.map((filter) => (
|
|
164
|
+
<ListItem
|
|
165
|
+
key={filter.value}
|
|
166
|
+
sx={{
|
|
167
|
+
cursor: "pointer",
|
|
168
|
+
borderRadius: "8px",
|
|
169
|
+
bgcolor: "#f2f6f8ff",
|
|
170
|
+
display: "flex",
|
|
171
|
+
justifyContent: "space-between",
|
|
172
|
+
gap: 1,
|
|
173
|
+
alignItems: "center",
|
|
174
|
+
"&:hover .action-icons": {
|
|
175
|
+
opacity: 1,
|
|
176
|
+
visibility: "visible",
|
|
177
|
+
},
|
|
178
|
+
}}
|
|
179
|
+
onClick={() => handleApplyFilter(filter)}
|
|
180
|
+
>
|
|
181
|
+
{filter.value === filterMaster?.saved_filters?.selectedId && (
|
|
182
|
+
<Box sx={{ display: "flex", alignItems: "center" }}>
|
|
183
|
+
<CheckBox />
|
|
184
|
+
</Box>
|
|
185
|
+
)}
|
|
186
|
+
|
|
187
|
+
<ListItemText primary={filter.label} />
|
|
188
|
+
|
|
189
|
+
<Box
|
|
190
|
+
onClick={(e) => e.stopPropagation()}
|
|
191
|
+
className="action-icons"
|
|
192
|
+
sx={{
|
|
193
|
+
display: "flex",
|
|
194
|
+
gap: 1,
|
|
195
|
+
opacity: 0,
|
|
196
|
+
visibility: "hidden",
|
|
197
|
+
transition: "opacity 0.2s ease, visibility 0.2s ease",
|
|
198
|
+
}}
|
|
199
|
+
>
|
|
200
|
+
<IconButton
|
|
201
|
+
size="large"
|
|
202
|
+
onClick={() => handleListItemClick(filter)}
|
|
203
|
+
>
|
|
204
|
+
<EditIcon />
|
|
205
|
+
</IconButton>
|
|
206
|
+
|
|
207
|
+
<IconButton
|
|
208
|
+
size="small"
|
|
209
|
+
onClick={() => {
|
|
210
|
+
setFilterToDelete(filter);
|
|
211
|
+
setDeleteFilterModalOpen?.(true);
|
|
212
|
+
}}
|
|
213
|
+
>
|
|
214
|
+
<DeleteIcon />
|
|
215
|
+
</IconButton>
|
|
216
|
+
</Box>
|
|
217
|
+
</ListItem>
|
|
218
|
+
))}
|
|
219
|
+
</List>
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// ----------------------------------------
|
|
223
|
+
// RENDER: SHARED FILTERS
|
|
224
|
+
// ----------------------------------------
|
|
225
|
+
const renderSharedFilters = (source: FilterOperationListProps[]) =>
|
|
397
226
|
source.length === 0 ? (
|
|
398
|
-
<Typography>
|
|
227
|
+
<Typography>No Shared Filters</Typography>
|
|
399
228
|
) : (
|
|
400
|
-
<List
|
|
401
|
-
sx={{
|
|
402
|
-
display: "flex",
|
|
403
|
-
flexDirection: "column",
|
|
404
|
-
gap: 1,
|
|
405
|
-
}}
|
|
406
|
-
>
|
|
229
|
+
<List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
|
|
407
230
|
{source
|
|
408
231
|
.filter((f) =>
|
|
409
232
|
f.label?.toLowerCase().includes(searchTerm.toLowerCase())
|
|
@@ -413,11 +236,6 @@ const SavedFilter = ({
|
|
|
413
236
|
key={filter.value}
|
|
414
237
|
sx={{
|
|
415
238
|
cursor: "pointer",
|
|
416
|
-
// border:
|
|
417
|
-
// filter.value ===
|
|
418
|
-
// tableStates?.filterMaster?.saved_filters?.selectedId
|
|
419
|
-
// ? `3px solid #7a5af8`
|
|
420
|
-
// : "1px solid #C5C5C5",
|
|
421
239
|
borderRadius: "8px",
|
|
422
240
|
bgcolor: "#f2f6f8ff",
|
|
423
241
|
display: "flex",
|
|
@@ -431,8 +249,7 @@ const SavedFilter = ({
|
|
|
431
249
|
}}
|
|
432
250
|
onClick={() => handleApplyFilter(filter)}
|
|
433
251
|
>
|
|
434
|
-
{filter.value ===
|
|
435
|
-
tableStates?.filterMaster?.saved_filters?.selectedId && (
|
|
252
|
+
{filter.value === filterMaster?.saved_filters?.selectedId && (
|
|
436
253
|
<Box sx={{ display: "flex", alignItems: "center" }}>
|
|
437
254
|
<CheckBox />
|
|
438
255
|
</Box>
|
|
@@ -451,11 +268,7 @@ const SavedFilter = ({
|
|
|
451
268
|
transition: "opacity 0.2s ease, visibility 0.2s ease",
|
|
452
269
|
}}
|
|
453
270
|
>
|
|
454
|
-
{(
|
|
455
|
-
filter.is_editable === true ||
|
|
456
|
-
filter.is_owner === true) && (
|
|
457
|
-
// ||
|
|
458
|
-
// String(filter.created_by) !== String(filter.user_id))
|
|
271
|
+
{(filter.is_editable || filter.is_owner) && (
|
|
459
272
|
<IconButton
|
|
460
273
|
size="large"
|
|
461
274
|
onClick={() => handleListItemClick(filter)}
|
|
@@ -463,7 +276,7 @@ const SavedFilter = ({
|
|
|
463
276
|
<EditIcon />
|
|
464
277
|
</IconButton>
|
|
465
278
|
)}
|
|
466
|
-
{filter
|
|
279
|
+
{filter.is_owner && (
|
|
467
280
|
<IconButton
|
|
468
281
|
size="small"
|
|
469
282
|
onClick={() => {
|
|
@@ -480,17 +293,14 @@ const SavedFilter = ({
|
|
|
480
293
|
</List>
|
|
481
294
|
);
|
|
482
295
|
|
|
296
|
+
// ----------------------------------------
|
|
297
|
+
// RENDER MAIN COMPONENT
|
|
298
|
+
// ----------------------------------------
|
|
483
299
|
return (
|
|
484
|
-
<Box
|
|
485
|
-
// sx={{
|
|
486
|
-
// ...filterStyles.filterMainComponentWrapper,
|
|
487
|
-
// ...filterStyles.scrollbarCustom,
|
|
488
|
-
// }}
|
|
489
|
-
className="saved-filter-component-wrapper"
|
|
490
|
-
>
|
|
300
|
+
<Box className="saved-filter-component-wrapper">
|
|
491
301
|
{!editMode && (
|
|
492
302
|
<>
|
|
493
|
-
{/* Search
|
|
303
|
+
{/* Search */}
|
|
494
304
|
<Box sx={{ mb: 2 }}>
|
|
495
305
|
<CustomSearch
|
|
496
306
|
value={searchTerm}
|
|
@@ -499,7 +309,7 @@ const SavedFilter = ({
|
|
|
499
309
|
/>
|
|
500
310
|
</Box>
|
|
501
311
|
|
|
502
|
-
{/* ---- My Filters
|
|
312
|
+
{/* ---- My Filters ---- */}
|
|
503
313
|
<Box
|
|
504
314
|
sx={{
|
|
505
315
|
background: "#fff",
|
|
@@ -510,7 +320,6 @@ const SavedFilter = ({
|
|
|
510
320
|
}}
|
|
511
321
|
>
|
|
512
322
|
<Accordion
|
|
513
|
-
// defaultExpanded
|
|
514
323
|
disableGutters
|
|
515
324
|
elevation={0}
|
|
516
325
|
expanded={openAccordion === "my"}
|
|
@@ -527,17 +336,17 @@ const SavedFilter = ({
|
|
|
527
336
|
<AccordionDetails
|
|
528
337
|
sx={{
|
|
529
338
|
p: "9px",
|
|
530
|
-
maxHeight: "
|
|
339
|
+
maxHeight: "230px",
|
|
531
340
|
overflowY: "auto",
|
|
532
341
|
scrollbarWidth: "thin",
|
|
533
342
|
}}
|
|
534
343
|
>
|
|
535
|
-
{
|
|
344
|
+
{renderMyFilters(myFilters)}
|
|
536
345
|
</AccordionDetails>
|
|
537
346
|
</Accordion>
|
|
538
347
|
</Box>
|
|
539
348
|
|
|
540
|
-
{/* ---- Shared Filters
|
|
349
|
+
{/* ---- Shared Filters ---- */}
|
|
541
350
|
<Box
|
|
542
351
|
sx={{
|
|
543
352
|
background: "#fff",
|
|
@@ -561,16 +370,15 @@ const SavedFilter = ({
|
|
|
561
370
|
<Typography fontWeight={600}>Shared Filters</Typography>
|
|
562
371
|
</AccordionSummary>
|
|
563
372
|
<Divider sx={{ width: "100%" }} />
|
|
564
|
-
|
|
565
373
|
<AccordionDetails
|
|
566
374
|
sx={{
|
|
567
375
|
p: "9px",
|
|
568
|
-
maxHeight: "
|
|
376
|
+
maxHeight: "230px",
|
|
569
377
|
overflowY: "auto",
|
|
570
378
|
scrollbarWidth: "thin",
|
|
571
379
|
}}
|
|
572
380
|
>
|
|
573
|
-
{
|
|
381
|
+
{renderSharedFilters(sharedFilters)}
|
|
574
382
|
</AccordionDetails>
|
|
575
383
|
</Accordion>
|
|
576
384
|
</Box>
|
|
@@ -598,303 +406,3 @@ const SavedFilter = ({
|
|
|
598
406
|
};
|
|
599
407
|
|
|
600
408
|
export default SavedFilter;
|
|
601
|
-
|
|
602
|
-
// import { useEffect, useState } from "react";
|
|
603
|
-
// import {
|
|
604
|
-
// FilterFormComponentProps,
|
|
605
|
-
// FilterMasterStateProps,
|
|
606
|
-
// } from "../../../types/filter";
|
|
607
|
-
// import {
|
|
608
|
-
// Accordion,
|
|
609
|
-
// AccordionDetails,
|
|
610
|
-
// AccordionSummary,
|
|
611
|
-
// Box,
|
|
612
|
-
// Divider,
|
|
613
|
-
// IconButton,
|
|
614
|
-
// List,
|
|
615
|
-
// ListItem,
|
|
616
|
-
// ListItemText,
|
|
617
|
-
// Typography,
|
|
618
|
-
// } from "@mui/material";
|
|
619
|
-
// import CustomSearch from "./search";
|
|
620
|
-
// import { DeleteIcon, EditIcon } from "../../../../assets/svg";
|
|
621
|
-
// import SavedFilterEditComponent from "./saved-edit-filter";
|
|
622
|
-
// import { CheckBox } from "../../../../assets/svg";
|
|
623
|
-
// import ExpandMoreIcon from "@mui/icons-material/ExpandMore";
|
|
624
|
-
|
|
625
|
-
// const SavedFilter = ({
|
|
626
|
-
// columnsData,
|
|
627
|
-
// dropdownData,
|
|
628
|
-
// tableStates,
|
|
629
|
-
// editMode,
|
|
630
|
-
// setEditMode,
|
|
631
|
-
// setDeleteFilterModalOpen,
|
|
632
|
-
// onSaveFilterButtonClick,
|
|
633
|
-
// tabValue,
|
|
634
|
-
// onChangeFunction,
|
|
635
|
-
// filterComponentOptions,
|
|
636
|
-
// }: FilterFormComponentProps) => {
|
|
637
|
-
// const { filters, filterMaster, setFilterMaster, setFilterToDelete } =
|
|
638
|
-
// tableStates;
|
|
639
|
-
|
|
640
|
-
// const [searchTerm, setSearchTerm] = useState<string>("");
|
|
641
|
-
|
|
642
|
-
// // ------------------------------
|
|
643
|
-
// // APPLY FILTER STATE (same logic)
|
|
644
|
-
// // ------------------------------
|
|
645
|
-
// const applyFilterStates = (filter: any) => {
|
|
646
|
-
// const newFilterMaster = {
|
|
647
|
-
// ...filterMaster,
|
|
648
|
-
// saved_filters: {
|
|
649
|
-
// ...(filterMaster?.saved_filters ?? {}),
|
|
650
|
-
// selectedId: filter?.value || filter?.id,
|
|
651
|
-
// selectedName: filter?.label || filter?.name,
|
|
652
|
-
// selectedCode: filter?.code,
|
|
653
|
-
// shareWithTeam: filter?.is_shared,
|
|
654
|
-
// allowTeamEdit: filter?.is_editable,
|
|
655
|
-
// },
|
|
656
|
-
// attributes: {
|
|
657
|
-
// ...filterMaster?.attributes,
|
|
658
|
-
// radio: [],
|
|
659
|
-
// },
|
|
660
|
-
// activeFilterTabIndex: tabValue,
|
|
661
|
-
// } as FilterMasterStateProps;
|
|
662
|
-
|
|
663
|
-
// setFilterMaster(newFilterMaster);
|
|
664
|
-
|
|
665
|
-
// onChangeFunction &&
|
|
666
|
-
// onChangeFunction({
|
|
667
|
-
// filterMaster: newFilterMaster,
|
|
668
|
-
// filters,
|
|
669
|
-
// });
|
|
670
|
-
// };
|
|
671
|
-
|
|
672
|
-
// const handleListItemClick = (filter: any) => {
|
|
673
|
-
// applyFilterStates(filter);
|
|
674
|
-
// setEditMode && setEditMode(true);
|
|
675
|
-
// setFilterToDelete(filter);
|
|
676
|
-
// };
|
|
677
|
-
|
|
678
|
-
// const handleApplyFilter = (filter: any) => {
|
|
679
|
-
// applyFilterStates(filter);
|
|
680
|
-
// };
|
|
681
|
-
|
|
682
|
-
// // ============================
|
|
683
|
-
// // ⭐ RENDER SAVED FILTER LIST
|
|
684
|
-
// // ============================
|
|
685
|
-
// const renderSavedFilterList = () => {
|
|
686
|
-
// const list = columnsData?.saved_filter ?? [];
|
|
687
|
-
|
|
688
|
-
// return list.length === 0 ? (
|
|
689
|
-
// <Typography>No saved filters yet.</Typography>
|
|
690
|
-
// ) : (
|
|
691
|
-
// <List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
|
|
692
|
-
// {list
|
|
693
|
-
// .filter((f: any) =>
|
|
694
|
-
// f.label?.toLowerCase().includes(searchTerm.toLowerCase())
|
|
695
|
-
// )
|
|
696
|
-
// .map((filter: any) => (
|
|
697
|
-
// <ListItem
|
|
698
|
-
// key={filter.value}
|
|
699
|
-
// sx={{
|
|
700
|
-
// cursor: "pointer",
|
|
701
|
-
// borderRadius: "8px",
|
|
702
|
-
// bgcolor: "#f2f6f8ff",
|
|
703
|
-
// display: "flex",
|
|
704
|
-
// justifyContent: "space-between",
|
|
705
|
-
// gap: 1,
|
|
706
|
-
// alignItems: "center",
|
|
707
|
-
// "&:hover .action-icons": {
|
|
708
|
-
// opacity: 1,
|
|
709
|
-
// visibility: "visible",
|
|
710
|
-
// },
|
|
711
|
-
// }}
|
|
712
|
-
// onClick={() => handleApplyFilter(filter)}
|
|
713
|
-
// >
|
|
714
|
-
// {filter.value === filterMaster?.saved_filters?.selectedId && (
|
|
715
|
-
// <Box sx={{ display: "flex", alignItems: "center" }}>
|
|
716
|
-
// <CheckBox />
|
|
717
|
-
// </Box>
|
|
718
|
-
// )}
|
|
719
|
-
|
|
720
|
-
// <ListItemText primary={filter.label} />
|
|
721
|
-
|
|
722
|
-
// <Box
|
|
723
|
-
// onClick={(e) => e.stopPropagation()}
|
|
724
|
-
// className="action-icons"
|
|
725
|
-
// sx={{
|
|
726
|
-
// display: "flex",
|
|
727
|
-
// gap: 1,
|
|
728
|
-
// opacity: 0,
|
|
729
|
-
// visibility: "hidden",
|
|
730
|
-
// transition: "all 0.2s ease",
|
|
731
|
-
// }}
|
|
732
|
-
// >
|
|
733
|
-
// <IconButton
|
|
734
|
-
// size="large"
|
|
735
|
-
// onClick={() => handleListItemClick(filter)}
|
|
736
|
-
// >
|
|
737
|
-
// <EditIcon />
|
|
738
|
-
// </IconButton>
|
|
739
|
-
|
|
740
|
-
// <IconButton
|
|
741
|
-
// size="small"
|
|
742
|
-
// onClick={() => {
|
|
743
|
-
// setFilterToDelete(filter);
|
|
744
|
-
// setDeleteFilterModalOpen?.(true);
|
|
745
|
-
// }}
|
|
746
|
-
// >
|
|
747
|
-
// <DeleteIcon />
|
|
748
|
-
// </IconButton>
|
|
749
|
-
// </Box>
|
|
750
|
-
// </ListItem>
|
|
751
|
-
// ))}
|
|
752
|
-
// </List>
|
|
753
|
-
// );
|
|
754
|
-
// };
|
|
755
|
-
|
|
756
|
-
// // ============================
|
|
757
|
-
// // ⭐ RENDER SHARED FILTER LIST
|
|
758
|
-
// // ============================
|
|
759
|
-
// const renderSharedFilterList = () => {
|
|
760
|
-
// const list = columnsData?.shared_filter ?? [];
|
|
761
|
-
|
|
762
|
-
// return list.length === 0 ? (
|
|
763
|
-
// <Typography>No shared filters yet.</Typography>
|
|
764
|
-
// ) : (
|
|
765
|
-
// <List sx={{ display: "flex", flexDirection: "column", gap: 1 }}>
|
|
766
|
-
// {list
|
|
767
|
-
// .filter((f: any) =>
|
|
768
|
-
// f.name?.toLowerCase().includes(searchTerm.toLowerCase())
|
|
769
|
-
// )
|
|
770
|
-
// .map((filter: any) => (
|
|
771
|
-
// <ListItem
|
|
772
|
-
// key={filter.id}
|
|
773
|
-
// sx={{
|
|
774
|
-
// cursor: "pointer",
|
|
775
|
-
// borderRadius: "8px",
|
|
776
|
-
// bgcolor: "#f2f6f8ff",
|
|
777
|
-
// display: "flex",
|
|
778
|
-
// justifyContent: "space-between",
|
|
779
|
-
// gap: 1,
|
|
780
|
-
// alignItems: "center",
|
|
781
|
-
// }}
|
|
782
|
-
// onClick={() =>
|
|
783
|
-
// handleApplyFilter({
|
|
784
|
-
// id: filter.id,
|
|
785
|
-
// value: filter.id,
|
|
786
|
-
// name: filter.name,
|
|
787
|
-
// label: filter.name,
|
|
788
|
-
// code: filter.code,
|
|
789
|
-
// })
|
|
790
|
-
// }
|
|
791
|
-
// >
|
|
792
|
-
// {filter.id === filterMaster?.saved_filters?.selectedId && (
|
|
793
|
-
// <Box sx={{ display: "flex", alignItems: "center" }}>
|
|
794
|
-
// <CheckBox />
|
|
795
|
-
// </Box>
|
|
796
|
-
// )}
|
|
797
|
-
|
|
798
|
-
// <ListItemText primary={filter.name} />
|
|
799
|
-
// </ListItem>
|
|
800
|
-
// ))}
|
|
801
|
-
// </List>
|
|
802
|
-
// );
|
|
803
|
-
// };
|
|
804
|
-
|
|
805
|
-
// return (
|
|
806
|
-
// <Box className="saved-filter-component-wrapper">
|
|
807
|
-
// {!editMode && (
|
|
808
|
-
// <>
|
|
809
|
-
// <Box sx={{ mb: 2 }}>
|
|
810
|
-
// <CustomSearch
|
|
811
|
-
// value={searchTerm}
|
|
812
|
-
// onChange={setSearchTerm}
|
|
813
|
-
// className="search-input"
|
|
814
|
-
// />
|
|
815
|
-
// </Box>
|
|
816
|
-
|
|
817
|
-
// {/* ---- My Filters ---- */}
|
|
818
|
-
// <Box
|
|
819
|
-
// sx={{
|
|
820
|
-
// background: "#fff",
|
|
821
|
-
// borderRadius: "12px",
|
|
822
|
-
// border: "1px solid #eee",
|
|
823
|
-
// mb: 2,
|
|
824
|
-
// overflow: "hidden",
|
|
825
|
-
// }}
|
|
826
|
-
// >
|
|
827
|
-
// <Accordion defaultExpanded disableGutters elevation={0}>
|
|
828
|
-
// <AccordionSummary
|
|
829
|
-
// expandIcon={<ExpandMoreIcon fontSize="small" />}
|
|
830
|
-
// >
|
|
831
|
-
// <Typography fontWeight={600}>My Filters</Typography>
|
|
832
|
-
// </AccordionSummary>
|
|
833
|
-
|
|
834
|
-
// <Divider />
|
|
835
|
-
// <AccordionDetails
|
|
836
|
-
// sx={{
|
|
837
|
-
// p: "9px",
|
|
838
|
-
// maxHeight: "320px",
|
|
839
|
-
// overflowY: "auto",
|
|
840
|
-
// scrollbarWidth: "thin",
|
|
841
|
-
// }}
|
|
842
|
-
// >
|
|
843
|
-
// {renderSavedFilterList()}
|
|
844
|
-
// </AccordionDetails>
|
|
845
|
-
// </Accordion>
|
|
846
|
-
// </Box>
|
|
847
|
-
|
|
848
|
-
// {/* ---- Shared Filters ---- */}
|
|
849
|
-
// <Box
|
|
850
|
-
// sx={{
|
|
851
|
-
// background: "#fff",
|
|
852
|
-
// borderRadius: "12px",
|
|
853
|
-
// border: "1px solid #eee",
|
|
854
|
-
// mb: 2,
|
|
855
|
-
// overflow: "hidden",
|
|
856
|
-
// }}
|
|
857
|
-
// >
|
|
858
|
-
// <Accordion disableGutters elevation={0}>
|
|
859
|
-
// <AccordionSummary
|
|
860
|
-
// expandIcon={<ExpandMoreIcon fontSize="small" />}
|
|
861
|
-
// >
|
|
862
|
-
// <Typography fontWeight={600}>Shared Filters</Typography>
|
|
863
|
-
// </AccordionSummary>
|
|
864
|
-
|
|
865
|
-
// <Divider />
|
|
866
|
-
// <AccordionDetails
|
|
867
|
-
// sx={{
|
|
868
|
-
// p: "9px",
|
|
869
|
-
// maxHeight: "320px",
|
|
870
|
-
// overflowY: "auto",
|
|
871
|
-
// scrollbarWidth: "thin",
|
|
872
|
-
// }}
|
|
873
|
-
// >
|
|
874
|
-
// {renderSharedFilterList()}
|
|
875
|
-
// </AccordionDetails>
|
|
876
|
-
// </Accordion>
|
|
877
|
-
// </Box>
|
|
878
|
-
// </>
|
|
879
|
-
// )}
|
|
880
|
-
|
|
881
|
-
// {editMode && (
|
|
882
|
-
// <SavedFilterEditComponent
|
|
883
|
-
// columnsData={columnsData}
|
|
884
|
-
// dropdownData={dropdownData}
|
|
885
|
-
// tableStates={tableStates}
|
|
886
|
-
// editMode={editMode}
|
|
887
|
-
// setEditMode={setEditMode}
|
|
888
|
-
// searchTerm={searchTerm}
|
|
889
|
-
// setSearchTerm={setSearchTerm}
|
|
890
|
-
// onSaveFilterButtonClick={onSaveFilterButtonClick}
|
|
891
|
-
// setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
892
|
-
// onChangeFunction={onChangeFunction}
|
|
893
|
-
// filterComponentOptions={filterComponentOptions}
|
|
894
|
-
// />
|
|
895
|
-
// )}
|
|
896
|
-
// </Box>
|
|
897
|
-
// );
|
|
898
|
-
// };
|
|
899
|
-
|
|
900
|
-
// export default SavedFilter;
|