rez-table-listing-mui 1.3.32 → 1.3.33

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,3 +1,248 @@
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
+
1
246
  import { useEffect, useState } from "react";
2
247
  import {
3
248
  FilterFormComponentProps,
@@ -49,8 +294,10 @@ const SavedFilter = ({
49
294
  value: f.id || f.value,
50
295
  code: f.code ?? "",
51
296
  is_shared: f.is_shared ?? prefs.is_shared ?? false,
297
+ created_by: f.created_by || "shared_filter",
298
+ description: f.description || "",
299
+ is_owner: f.is_owner === true || prefs.is_owner === "true",
52
300
 
53
- // 🔥 STRING ko BOOLEAN banaya
54
301
  is_editable:
55
302
  f.is_editable === true ||
56
303
  f.is_editable === "true" ||
@@ -61,9 +308,11 @@ const SavedFilter = ({
61
308
 
62
309
  const mappedSavedFilter: FilterOperationListProps[] =
63
310
  columnsData?.saved_filter?.map(normalizeFilter) ?? [];
311
+ console.log("mappedSavedFilter", mappedSavedFilter);
64
312
 
65
313
  const mappedSharedFilter: FilterOperationListProps[] =
66
314
  columnsData?.shared_filter?.map(normalizeFilter) ?? [];
315
+ console.log("mappedSharedFilter", mappedSharedFilter);
67
316
 
68
317
  // Reset on unmount
69
318
  useEffect(() => {
@@ -81,6 +330,7 @@ const SavedFilter = ({
81
330
  ...(prev?.saved_filters ?? {}),
82
331
  selectedId: "",
83
332
  selectedName: "",
333
+ description: "",
84
334
  selectedCode: "",
85
335
  shareWithTeam: undefined,
86
336
  allowTeamEdit: undefined,
@@ -98,6 +348,7 @@ const SavedFilter = ({
98
348
  ...(filterMaster?.saved_filters ?? {}),
99
349
  selectedId: filter.value,
100
350
  selectedName: filter.label,
351
+ description: filter.description,
101
352
  selectedCode: filter.code,
102
353
  shareWithTeam: filter.is_shared,
103
354
  allowTeamEdit: filter.is_editable,
@@ -127,6 +378,7 @@ const SavedFilter = ({
127
378
  const handleApplyFilter = (filter: FilterOperationListProps) => {
128
379
  applyFilterStates(filter);
129
380
  };
381
+ const [openAccordion, setOpenAccordion] = useState<"my" | "shared">("my");
130
382
 
131
383
  /**
132
384
  * renderList
@@ -196,14 +448,14 @@ const SavedFilter = ({
196
448
  gap: 1,
197
449
  opacity: 0,
198
450
  visibility: "hidden",
199
- transition: "all 0.2s ease",
451
+ transition: "opacity 0.2s ease, visibility 0.2s ease",
200
452
  }}
201
453
  >
202
- {/** Show edit icon:
203
- * - For shared lists: only if filter.is_editable === true
204
- * - For non-shared lists: show (keeps previous behavior)
205
- */}
206
- {(!isSharedList || filter.is_editable === true) && (
454
+ {(!isSharedList ||
455
+ filter.is_editable === true ||
456
+ filter.is_owner === true) && (
457
+ // ||
458
+ // String(filter.created_by) !== String(filter.user_id))
207
459
  <IconButton
208
460
  size="large"
209
461
  onClick={() => handleListItemClick(filter)}
@@ -211,7 +463,7 @@ const SavedFilter = ({
211
463
  <EditIcon />
212
464
  </IconButton>
213
465
  )}
214
- {(!isSharedList || filter.is_editable === true) && (
466
+ {filter?.is_owner === true && (
215
467
  <IconButton
216
468
  size="small"
217
469
  onClick={() => {
@@ -257,7 +509,15 @@ const SavedFilter = ({
257
509
  overflow: "hidden",
258
510
  }}
259
511
  >
260
- <Accordion defaultExpanded disableGutters elevation={0}>
512
+ <Accordion
513
+ // defaultExpanded
514
+ disableGutters
515
+ elevation={0}
516
+ expanded={openAccordion === "my"}
517
+ onChange={() =>
518
+ setOpenAccordion(openAccordion === "my" ? "shared" : "my")
519
+ }
520
+ >
261
521
  <AccordionSummary
262
522
  expandIcon={<ExpandMoreIcon fontSize="small" />}
263
523
  >
@@ -287,7 +547,14 @@ const SavedFilter = ({
287
547
  overflow: "hidden",
288
548
  }}
289
549
  >
290
- <Accordion disableGutters elevation={0}>
550
+ <Accordion
551
+ disableGutters
552
+ elevation={0}
553
+ expanded={openAccordion === "shared"}
554
+ onChange={() =>
555
+ setOpenAccordion(openAccordion === "shared" ? "my" : "shared")
556
+ }
557
+ >
291
558
  <AccordionSummary
292
559
  expandIcon={<ExpandMoreIcon fontSize="small" />}
293
560
  >
@@ -169,6 +169,8 @@ export function TableFilter({
169
169
  const handleSavedFilterModalSave = () => {
170
170
  const selectedId = filterMaster?.saved_filters?.selectedId;
171
171
  const selectedName = filterMaster?.saved_filters?.selectedName || "";
172
+ const description = filterMaster?.saved_filters?.description || "";
173
+
172
174
  const selectedCode = filterMaster?.saved_filters?.selectedCode;
173
175
 
174
176
  const newFilterMasterState = {
@@ -178,6 +180,7 @@ export function TableFilter({
178
180
  selectedId,
179
181
  selectedName,
180
182
  selectedCode,
183
+ description,
181
184
  },
182
185
  } as FilterMasterStateProps;
183
186
 
@@ -391,6 +394,8 @@ export function TableFilter({
391
394
  inputValue || filterMaster?.saved_filters?.selectedName;
392
395
  const selectedCode =
393
396
  filterMaster?.saved_filters?.selectedCode;
397
+ const description =
398
+ inputValue || filterMaster?.saved_filters?.description;
394
399
 
395
400
  const newFilterMasterState = {
396
401
  ...filterMaster,
@@ -399,6 +404,7 @@ export function TableFilter({
399
404
  selectedId,
400
405
  selectedName,
401
406
  selectedCode,
407
+ description,
402
408
  },
403
409
  } as FilterMasterStateProps;
404
410
 
@@ -80,6 +80,7 @@ export function customDebounce<T extends (...args: any[]) => any>(
80
80
  const ENVIRONMENT = "uat";
81
81
  export const ENTITY_TYPE = "LEAD";
82
82
  export const MAPPED_ENTITY_TYPE = "LYPR"; // LAP OR LYPR
83
+ export const USER_ID = 226;
83
84
 
84
85
  const environments = {
85
86
  adm_dev: "http://localhost:4010/api",
@@ -17,6 +17,10 @@ export interface FilterOperationListProps {
17
17
  value: string;
18
18
  is_shared: boolean;
19
19
  is_editable: boolean;
20
+ is_owner: boolean;
21
+ created_by: string;
22
+ user_id: number;
23
+ description: string | null;
20
24
  }
21
25
 
22
26
  export interface FilterSharedListProps {
@@ -301,6 +305,7 @@ export interface FilterMasterStateProps {
301
305
  selectedId: string;
302
306
  selectedName: string;
303
307
  selectedCode?: string;
308
+ description?: string;
304
309
  is_shared?: boolean;
305
310
  is_editable?: boolean;
306
311
  };
@@ -89,6 +89,7 @@ const CraftTableFilterWrapper = ({
89
89
  const quickFilter = filters.map((f: any) => ({ ...f }));
90
90
  const shareWithTeam = filterMaster?.saved_filters?.is_shared ?? false;
91
91
  const allowTeamEdit = filterMaster?.saved_filters?.is_editable ?? false;
92
+ const description = filterMaster?.saved_filters?.description ?? "";
92
93
 
93
94
  const payload = {
94
95
  name,
@@ -96,6 +97,7 @@ const CraftTableFilterWrapper = ({
96
97
  mapped_entity_type: ENTITY_TYPE, // For that entity type
97
98
  status: "ACTIVE",
98
99
  entity_type: "SFM", // FIXED entity type
100
+ description: description,
99
101
  filterDetails: quickFilter,
100
102
  is_shared: shareWithTeam,
101
103
  is_editable: allowTeamEdit,
@@ -115,6 +117,7 @@ const CraftTableFilterWrapper = ({
115
117
  ...prev?.saved_filters,
116
118
  selectedId: newFilterId.toString(),
117
119
  selectedName: name,
120
+ description: description,
118
121
  is_shared: shareWithTeam,
119
122
  is_editable: allowTeamEdit,
120
123
  },
@@ -135,6 +138,7 @@ const CraftTableFilterWrapper = ({
135
138
  }));
136
139
  const shareWithTeam = filterMaster?.saved_filters?.is_shared ?? false;
137
140
  const allowTeamEdit = filterMaster?.saved_filters?.is_editable ?? false;
141
+ const description = filterMaster?.saved_filters?.description ?? "";
138
142
 
139
143
  const payload = {
140
144
  name: filterMaster?.saved_filters?.selectedName, // Name of the filter
@@ -142,6 +146,7 @@ const CraftTableFilterWrapper = ({
142
146
  id: filterMaster?.saved_filters?.selectedId,
143
147
  mapped_entity_type: ENTITY_TYPE,
144
148
  status: "ACTIVE",
149
+ description: description,
145
150
  entity_type: "SFM",
146
151
  filterDetails: quickFilter,
147
152
  is_shared: shareWithTeam, // Now true/false from state