rez-table-listing-mui 1.3.39 → 1.3.41
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/package.json +1 -1
- package/src/listing/components/common/saved-filter-modal/index.tsx +517 -0
- package/src/listing/components/filter/components/forms/components/Filter-criteria.tsx +4 -1
- package/src/listing/components/filter/components/forms/components/filter-criteria-list.tsx +1 -0
- package/src/listing/components/filter/components/forms/index.tsx +23 -14
- package/src/listing/components/filter/components/main-filter.tsx +6 -6
- package/src/listing/components/filter/components/saved-edit-filter.tsx +5 -3
- package/src/listing/components/filter/components/saved-filter.tsx +300 -124
- package/src/listing/components/filter/components/search/index.tsx +1 -0
- package/src/listing/components/filter/components/single-filter-rendering.tsx +3 -3
- package/src/listing/components/filter/index.tsx +130 -5
- package/src/listing/components/login/index.tsx +3 -6
- package/src/listing/libs/hooks/useEntityTableAPI.tsx +3 -0
- package/src/listing/libs/utils/common.ts +1 -0
- package/src/listing/types/filter.ts +48 -1
- package/src/view/FIlterWrapper.tsx +15 -0
- package/src/view/ListingView.tsx +1 -1
- package/dist/index.d.ts +0 -563
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -2
- package/dist/index.mjs.map +0 -1
|
@@ -15,6 +15,7 @@ import AttributesFilter from "./components/attributes-filter";
|
|
|
15
15
|
import { filterStyles } from "./style";
|
|
16
16
|
import { deepMergeObjects } from "../../libs/utils/deep-merge-objects";
|
|
17
17
|
import SingleFilterRendering from "./components/single-filter-rendering";
|
|
18
|
+
import SavedFilterModalView from "../common/saved-filter-modal";
|
|
18
19
|
|
|
19
20
|
export function TableFilter({
|
|
20
21
|
onClose,
|
|
@@ -32,6 +33,8 @@ export function TableFilter({
|
|
|
32
33
|
|
|
33
34
|
// remove this
|
|
34
35
|
const [saveFilterModalOpen, setSaveFilterModalOpen] = useState(false);
|
|
36
|
+
const [savedFilterModalOpen, setSavedFilterModalOpen] = useState(false);
|
|
37
|
+
|
|
35
38
|
const [deleteFilterModalOpen, setDeleteFilterModalOpen] = useState(false);
|
|
36
39
|
|
|
37
40
|
const [searchTerm, setSearchTerm] = useState<string>("");
|
|
@@ -114,6 +117,97 @@ export function TableFilter({
|
|
|
114
117
|
type: "text",
|
|
115
118
|
};
|
|
116
119
|
|
|
120
|
+
const hasSavedFilterRecords = Boolean(columnsData?.saved_filter?.length);
|
|
121
|
+
|
|
122
|
+
// const handleSaveFilterButtonClick = () => {
|
|
123
|
+
// if (editMode) {
|
|
124
|
+
// setSavedFilterModalOpen(true);
|
|
125
|
+
// return;
|
|
126
|
+
// }
|
|
127
|
+
|
|
128
|
+
// setSavedFilterModalOpen(true);
|
|
129
|
+
// };
|
|
130
|
+
|
|
131
|
+
// const handleSaveFilterButtonClick = () => {
|
|
132
|
+
// // Reset filterMaster fields when creating a new filter
|
|
133
|
+
// if (!editMode) {
|
|
134
|
+
// setFilterMaster((prev) => ({
|
|
135
|
+
// ...prev,
|
|
136
|
+
// saved_filters: {
|
|
137
|
+
// selectedId: "",
|
|
138
|
+
// selectedName: "",
|
|
139
|
+
// selectedCode: "",
|
|
140
|
+
// description: "",
|
|
141
|
+
// shareWithTeam: false,
|
|
142
|
+
// allowTeamEdit: false,
|
|
143
|
+
// },
|
|
144
|
+
// }));
|
|
145
|
+
// }
|
|
146
|
+
|
|
147
|
+
// setSavedFilterModalOpen(true);
|
|
148
|
+
// };
|
|
149
|
+
|
|
150
|
+
const handleSaveFilterButtonClick = () => {
|
|
151
|
+
if (!editMode) {
|
|
152
|
+
setFilterMaster((prev) => {
|
|
153
|
+
if (!prev) return prev;
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
...prev,
|
|
157
|
+
saved_filters: {
|
|
158
|
+
...prev.saved_filters,
|
|
159
|
+
shareWithTeam: false,
|
|
160
|
+
allowTeamEdit: false,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
setSavedFilterModalOpen(true);
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const handleSavedFilterModalSave = () => {
|
|
170
|
+
const selectedId = filterMaster?.saved_filters?.selectedId;
|
|
171
|
+
const selectedName = filterMaster?.saved_filters?.selectedName || "";
|
|
172
|
+
const description = filterMaster?.saved_filters?.description || "";
|
|
173
|
+
|
|
174
|
+
const selectedCode = filterMaster?.saved_filters?.selectedCode;
|
|
175
|
+
|
|
176
|
+
const newFilterMasterState = {
|
|
177
|
+
...filterMaster,
|
|
178
|
+
saved_filters: {
|
|
179
|
+
...(filterMaster?.saved_filters ?? {}),
|
|
180
|
+
selectedId,
|
|
181
|
+
selectedName,
|
|
182
|
+
selectedCode,
|
|
183
|
+
description,
|
|
184
|
+
},
|
|
185
|
+
} as FilterMasterStateProps;
|
|
186
|
+
|
|
187
|
+
setFilterMaster(newFilterMasterState);
|
|
188
|
+
|
|
189
|
+
const newState = {
|
|
190
|
+
filterMaster: newFilterMasterState,
|
|
191
|
+
filters,
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
onChangeFunction && onChangeFunction(newState);
|
|
195
|
+
|
|
196
|
+
if (editMode) {
|
|
197
|
+
onUpdateFilter && onUpdateFilter(selectedName);
|
|
198
|
+
const isSingleSavedFilterEditMode =
|
|
199
|
+
filterComponentOptions?.tabOptions?.savedFilter?.editMode;
|
|
200
|
+
if (!isSingleSavedFilterEditMode) {
|
|
201
|
+
setEditMode(false);
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
onSaveFilter && onSaveFilter(selectedName);
|
|
205
|
+
setTabValue(1);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
setSavedFilterModalOpen(false);
|
|
209
|
+
};
|
|
210
|
+
|
|
117
211
|
const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {
|
|
118
212
|
const tabType = tabMapping[newValue]?.label;
|
|
119
213
|
|
|
@@ -122,6 +216,22 @@ export function TableFilter({
|
|
|
122
216
|
}
|
|
123
217
|
|
|
124
218
|
setTabValue(newValue);
|
|
219
|
+
if (newValue === 0) {
|
|
220
|
+
setFilterMaster((prev) => {
|
|
221
|
+
if (!prev) return prev;
|
|
222
|
+
return {
|
|
223
|
+
...prev,
|
|
224
|
+
saved_filters: {
|
|
225
|
+
...(prev.saved_filters ?? {}),
|
|
226
|
+
selectedId: "",
|
|
227
|
+
selectedName: "",
|
|
228
|
+
description: "",
|
|
229
|
+
is_shared: false,
|
|
230
|
+
is_editable: false,
|
|
231
|
+
},
|
|
232
|
+
};
|
|
233
|
+
});
|
|
234
|
+
}
|
|
125
235
|
|
|
126
236
|
if (tabType === "Filter") {
|
|
127
237
|
setEditMode(false);
|
|
@@ -144,9 +254,12 @@ export function TableFilter({
|
|
|
144
254
|
|
|
145
255
|
if (tabType?.label === "Saved Filter") {
|
|
146
256
|
patches.saved_filters = {
|
|
257
|
+
...(filterMaster?.saved_filters ?? {}),
|
|
147
258
|
selectedId: "",
|
|
148
259
|
selectedName: "",
|
|
149
260
|
selectedCode: "",
|
|
261
|
+
is_shared: undefined,
|
|
262
|
+
is_editable: undefined,
|
|
150
263
|
};
|
|
151
264
|
} else if (tabType?.label === "Attributes") {
|
|
152
265
|
patches.attributes = { radio: [], selected: "" };
|
|
@@ -218,7 +331,7 @@ export function TableFilter({
|
|
|
218
331
|
{...commonProps}
|
|
219
332
|
{...savedFilterProps}
|
|
220
333
|
{...attributesProps}
|
|
221
|
-
|
|
334
|
+
onSaveFilterButtonClick={handleSaveFilterButtonClick}
|
|
222
335
|
filterComponentOptions={finalComponentOptions}
|
|
223
336
|
/>
|
|
224
337
|
)}
|
|
@@ -231,7 +344,7 @@ export function TableFilter({
|
|
|
231
344
|
>
|
|
232
345
|
<MainFilter
|
|
233
346
|
{...commonProps}
|
|
234
|
-
|
|
347
|
+
onSaveFilterButtonClick={handleSaveFilterButtonClick}
|
|
235
348
|
filterComponentOptions={finalComponentOptions}
|
|
236
349
|
/>
|
|
237
350
|
</CustomTabPanel>
|
|
@@ -246,7 +359,7 @@ export function TableFilter({
|
|
|
246
359
|
<SavedFilter
|
|
247
360
|
{...commonProps}
|
|
248
361
|
{...savedFilterProps}
|
|
249
|
-
|
|
362
|
+
onSaveFilterButtonClick={handleSaveFilterButtonClick}
|
|
250
363
|
filterComponentOptions={finalComponentOptions}
|
|
251
364
|
/>
|
|
252
365
|
</CustomTabPanel>
|
|
@@ -298,14 +411,17 @@ export function TableFilter({
|
|
|
298
411
|
inputValue || filterMaster?.saved_filters?.selectedName;
|
|
299
412
|
const selectedCode =
|
|
300
413
|
filterMaster?.saved_filters?.selectedCode;
|
|
414
|
+
const description =
|
|
415
|
+
inputValue || filterMaster?.saved_filters?.description;
|
|
301
416
|
|
|
302
417
|
const newFilterMasterState = {
|
|
303
418
|
...filterMaster,
|
|
304
419
|
saved_filters: {
|
|
305
|
-
...filterMaster?.
|
|
420
|
+
...(filterMaster?.saved_filters ?? {}),
|
|
306
421
|
selectedId,
|
|
307
422
|
selectedName,
|
|
308
423
|
selectedCode,
|
|
424
|
+
description,
|
|
309
425
|
},
|
|
310
426
|
} as FilterMasterStateProps;
|
|
311
427
|
|
|
@@ -429,7 +545,7 @@ export function TableFilter({
|
|
|
429
545
|
const newFilterMasterState = {
|
|
430
546
|
...filterMaster,
|
|
431
547
|
saved_filters: {
|
|
432
|
-
...filterMaster?.
|
|
548
|
+
...(filterMaster?.saved_filters ?? {}),
|
|
433
549
|
selectedId,
|
|
434
550
|
selectedName,
|
|
435
551
|
selectedCode,
|
|
@@ -520,6 +636,15 @@ export function TableFilter({
|
|
|
520
636
|
maxWidth="xs"
|
|
521
637
|
/>
|
|
522
638
|
)}
|
|
639
|
+
<SavedFilterModalView
|
|
640
|
+
open={savedFilterModalOpen}
|
|
641
|
+
onClose={() => setSavedFilterModalOpen(false)}
|
|
642
|
+
onSave={handleSavedFilterModalSave}
|
|
643
|
+
filterMaster={tableStates.filterMaster}
|
|
644
|
+
setFilterMaster={tableStates.setFilterMaster}
|
|
645
|
+
hasSavedFilters={hasSavedFilterRecords}
|
|
646
|
+
columnsData={columnsData}
|
|
647
|
+
/>
|
|
523
648
|
</Box>
|
|
524
649
|
);
|
|
525
650
|
}
|
|
@@ -7,9 +7,9 @@ const LoginButton = () => {
|
|
|
7
7
|
|
|
8
8
|
const handleLogin = async () => {
|
|
9
9
|
setLoading(true);
|
|
10
|
-
const api_url = "https://api.eth-qa.rezolut.in/api/
|
|
11
|
-
// const api_url = "http://localhost:
|
|
12
|
-
const email_id = "
|
|
10
|
+
const api_url = "https://api.eth-qa.rezolut.in/api/enrol/auth";
|
|
11
|
+
// const api_url = "http://localhost:6011/api/auth";
|
|
12
|
+
const email_id = "shraddha.nandurkar@rezolut.in";
|
|
13
13
|
const email_otp = "123456";
|
|
14
14
|
const sub_domain = "universal";
|
|
15
15
|
|
|
@@ -21,8 +21,6 @@ const LoginButton = () => {
|
|
|
21
21
|
subdomain: sub_domain,
|
|
22
22
|
})
|
|
23
23
|
.then(async (emailAPIResponse) => {
|
|
24
|
-
console.log(emailAPIResponse.data);
|
|
25
|
-
|
|
26
24
|
await axios
|
|
27
25
|
.post(`${api_url}/sso/otp/generate`, {
|
|
28
26
|
identifier: email_id,
|
|
@@ -40,7 +38,6 @@ const LoginButton = () => {
|
|
|
40
38
|
subdomain: "universal",
|
|
41
39
|
})
|
|
42
40
|
.then((otpVerifyResponse) => {
|
|
43
|
-
console.log(otpVerifyResponse.data);
|
|
44
41
|
const token = otpVerifyResponse.data.accessToken;
|
|
45
42
|
|
|
46
43
|
if (token) {
|
|
@@ -163,9 +163,12 @@ export const useDeleteFilterAPI = (tableStates: CraftTableOptionsProps) => {
|
|
|
163
163
|
const newFilterMasterState = {
|
|
164
164
|
...filterMaster,
|
|
165
165
|
saved_filters: {
|
|
166
|
+
...(filterMaster?.saved_filters ?? {}),
|
|
166
167
|
selectedId: "",
|
|
167
168
|
selectedName: "",
|
|
168
169
|
selectedCode: "",
|
|
170
|
+
shareWithTeam: undefined,
|
|
171
|
+
allowTeamEdit: undefined,
|
|
169
172
|
},
|
|
170
173
|
activeFilterTabIndex: -1,
|
|
171
174
|
};
|
|
@@ -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",
|
|
@@ -15,6 +15,38 @@ export interface FilterOperationListProps {
|
|
|
15
15
|
code: string;
|
|
16
16
|
label: string;
|
|
17
17
|
value: string;
|
|
18
|
+
is_shared: boolean;
|
|
19
|
+
is_editable: boolean;
|
|
20
|
+
is_owner: boolean;
|
|
21
|
+
created_by: string;
|
|
22
|
+
// user_id: number;
|
|
23
|
+
description: string | null;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface FilterSharedListProps {
|
|
27
|
+
created_date: string; // ISO date string
|
|
28
|
+
entity_type: string;
|
|
29
|
+
id: string;
|
|
30
|
+
name: string;
|
|
31
|
+
status: string;
|
|
32
|
+
parent_type: string | null;
|
|
33
|
+
parent_id: string | number | null;
|
|
34
|
+
code: string;
|
|
35
|
+
created_by: string;
|
|
36
|
+
modified_by: string | null;
|
|
37
|
+
modified_date: string | null;
|
|
38
|
+
enterprise_id: number;
|
|
39
|
+
organization_id: number;
|
|
40
|
+
appcode: string | null;
|
|
41
|
+
level_id: string;
|
|
42
|
+
level_type: string;
|
|
43
|
+
mapped_entity_type: string;
|
|
44
|
+
user_id: number;
|
|
45
|
+
is_default: boolean;
|
|
46
|
+
filter_scope: string;
|
|
47
|
+
is_shared: boolean;
|
|
48
|
+
is_editable: boolean | string; // API gives "true" (string) so support both
|
|
49
|
+
description: string | null;
|
|
18
50
|
}
|
|
19
51
|
|
|
20
52
|
export type FilterInputDataTypes =
|
|
@@ -58,6 +90,7 @@ export interface FilterColumnsDataProps {
|
|
|
58
90
|
column_list: FilterColumnsListProps[];
|
|
59
91
|
operation_list: OperationMapProps;
|
|
60
92
|
saved_filter: FilterOperationListProps[];
|
|
93
|
+
shared_filter: FilterOperationListProps[];
|
|
61
94
|
}
|
|
62
95
|
|
|
63
96
|
export interface FilterDropdownDataProps {
|
|
@@ -215,6 +248,7 @@ export interface createSavedFilterPayload {
|
|
|
215
248
|
enterprise_id?: number;
|
|
216
249
|
user_id?: number;
|
|
217
250
|
is_default: boolean;
|
|
251
|
+
description: string | null;
|
|
218
252
|
mapped_entity_type: string;
|
|
219
253
|
status?: string;
|
|
220
254
|
entity_type: string;
|
|
@@ -234,6 +268,7 @@ export interface updateSavedFilterPayload {
|
|
|
234
268
|
name: string;
|
|
235
269
|
is_default: boolean;
|
|
236
270
|
id: string | number;
|
|
271
|
+
|
|
237
272
|
status?: string;
|
|
238
273
|
entity_type: string;
|
|
239
274
|
mapped_entity_type: string;
|
|
@@ -242,12 +277,14 @@ export interface updateSavedFilterPayload {
|
|
|
242
277
|
|
|
243
278
|
export interface FilterFormComponentProps {
|
|
244
279
|
columnsData: FilterColumnsDataProps;
|
|
280
|
+
saved_filter?: any;
|
|
281
|
+
shared_filter?: any;
|
|
245
282
|
dropdownData: FilterDropdownDataProps;
|
|
246
283
|
tableStates: CraftTableOptionsProps;
|
|
247
284
|
editMode?: boolean;
|
|
248
285
|
setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
249
286
|
setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
250
|
-
|
|
287
|
+
onSaveFilterButtonClick?: () => void;
|
|
251
288
|
tabValue?: number;
|
|
252
289
|
onChangeFunction: ({
|
|
253
290
|
updatedFilters,
|
|
@@ -256,6 +293,11 @@ export interface FilterFormComponentProps {
|
|
|
256
293
|
filterComponentOptions?: FilterComponentOptions;
|
|
257
294
|
}
|
|
258
295
|
|
|
296
|
+
export interface SavedFilterSharingPreference {
|
|
297
|
+
shareWithTeam?: boolean;
|
|
298
|
+
allowTeamEdit?: boolean;
|
|
299
|
+
}
|
|
300
|
+
|
|
259
301
|
export interface FilterMasterStateProps {
|
|
260
302
|
attributes: {
|
|
261
303
|
selected: string;
|
|
@@ -265,8 +307,13 @@ export interface FilterMasterStateProps {
|
|
|
265
307
|
selectedId: string;
|
|
266
308
|
selectedName: string;
|
|
267
309
|
selectedCode?: string;
|
|
310
|
+
description?: string;
|
|
311
|
+
is_shared?: boolean;
|
|
312
|
+
is_editable?: boolean;
|
|
313
|
+
is_owner?: boolean;
|
|
268
314
|
};
|
|
269
315
|
activeFilterTabIndex: number;
|
|
316
|
+
shared_filters_meta?: Record<string, SavedFilterSharingPreference>;
|
|
270
317
|
}
|
|
271
318
|
|
|
272
319
|
export interface AttributesFilterProps {
|
|
@@ -87,6 +87,9 @@ const CraftTableFilterWrapper = ({
|
|
|
87
87
|
// API to handle saving a filter
|
|
88
88
|
const handleSaveFilter = (name: string) => {
|
|
89
89
|
const quickFilter = filters.map((f: any) => ({ ...f }));
|
|
90
|
+
const shareWithTeam = filterMaster?.saved_filters?.is_shared ?? false;
|
|
91
|
+
const allowTeamEdit = filterMaster?.saved_filters?.is_editable ?? false;
|
|
92
|
+
const description = filterMaster?.saved_filters?.description ?? "";
|
|
90
93
|
|
|
91
94
|
const payload = {
|
|
92
95
|
name,
|
|
@@ -94,7 +97,10 @@ const CraftTableFilterWrapper = ({
|
|
|
94
97
|
mapped_entity_type: ENTITY_TYPE, // For that entity type
|
|
95
98
|
status: "ACTIVE",
|
|
96
99
|
entity_type: "SFM", // FIXED entity type
|
|
100
|
+
description: description,
|
|
97
101
|
filterDetails: quickFilter,
|
|
102
|
+
is_shared: shareWithTeam,
|
|
103
|
+
is_editable: allowTeamEdit,
|
|
98
104
|
};
|
|
99
105
|
const entity_type = "SFM";
|
|
100
106
|
savedMutation.mutate(
|
|
@@ -111,6 +117,9 @@ const CraftTableFilterWrapper = ({
|
|
|
111
117
|
...prev?.saved_filters,
|
|
112
118
|
selectedId: newFilterId.toString(),
|
|
113
119
|
selectedName: name,
|
|
120
|
+
description: description,
|
|
121
|
+
is_shared: shareWithTeam,
|
|
122
|
+
is_editable: allowTeamEdit,
|
|
114
123
|
},
|
|
115
124
|
activeFilterTabIndex: 1,
|
|
116
125
|
} as FilterMasterStateProps)
|
|
@@ -127,6 +136,9 @@ const CraftTableFilterWrapper = ({
|
|
|
127
136
|
filter_operator: f.filter_operator,
|
|
128
137
|
filter_value: f.filter_value,
|
|
129
138
|
}));
|
|
139
|
+
const shareWithTeam = filterMaster?.saved_filters?.is_shared ?? false;
|
|
140
|
+
const allowTeamEdit = filterMaster?.saved_filters?.is_editable ?? false;
|
|
141
|
+
const description = filterMaster?.saved_filters?.description ?? "";
|
|
130
142
|
|
|
131
143
|
const payload = {
|
|
132
144
|
name: filterMaster?.saved_filters?.selectedName, // Name of the filter
|
|
@@ -134,8 +146,11 @@ const CraftTableFilterWrapper = ({
|
|
|
134
146
|
id: filterMaster?.saved_filters?.selectedId,
|
|
135
147
|
mapped_entity_type: ENTITY_TYPE,
|
|
136
148
|
status: "ACTIVE",
|
|
149
|
+
description: description,
|
|
137
150
|
entity_type: "SFM",
|
|
138
151
|
filterDetails: quickFilter,
|
|
152
|
+
is_shared: shareWithTeam, // Now true/false from state
|
|
153
|
+
is_editable: allowTeamEdit,
|
|
139
154
|
};
|
|
140
155
|
const entity_type = "SFM";
|
|
141
156
|
updateMutation.mutate({ entity_type, payload });
|