rez-table-listing-mui 1.2.19 → 1.3.1
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 +2 -3
- package/src/index.ts +1 -0
- package/src/listing/components/common/loader/loader.tsx +1 -0
- package/src/listing/components/filter/components/attributes-filter.tsx +3 -91
- package/src/listing/components/filter/components/forms/components/Date.tsx +2 -2
- package/src/listing/components/filter/components/forms/components/Dropdown.tsx +2 -2
- package/src/listing/components/filter/components/forms/components/Filter-criteria.tsx +31 -82
- package/src/listing/components/filter/components/forms/components/Multi-Select.tsx +2 -2
- package/src/listing/components/filter/components/forms/components/Select.tsx +2 -2
- package/src/listing/components/filter/components/forms/components/Textfield.tsx +2 -2
- package/src/listing/components/filter/components/forms/components/empty-list.tsx +17 -0
- package/src/listing/components/filter/components/forms/components/filter-criteria-entity-list.tsx +92 -0
- package/src/listing/components/filter/components/forms/components/filter-criteria-list.tsx +104 -0
- package/src/listing/components/filter/components/forms/components/styles.tsx +2 -1
- package/src/listing/components/filter/components/forms/index.tsx +238 -174
- package/src/listing/components/filter/components/main-filter.tsx +6 -14
- package/src/listing/components/filter/components/saved-edit-filter.tsx +0 -31
- package/src/listing/components/filter/components/saved-filter.tsx +0 -22
- package/src/listing/components/filter/components/search/index.tsx +2 -2
- package/src/listing/components/filter/index.tsx +162 -130
- package/src/listing/components/filter/style.ts +20 -3
- package/src/listing/libs/hooks/useCraftTable.tsx +9 -0
- package/src/listing/libs/hooks/useEntityTableAPI.tsx +25 -0
- package/src/listing/libs/utils/apiColumn.ts +27 -1
- package/src/listing/libs/utils/deep-merge-objects.ts +18 -0
- package/src/listing/types/common.ts +0 -2
- package/src/listing/types/filter.ts +54 -7
- package/src/listing/types/table-options.ts +8 -0
- package/src/view/FIlterWrapper.tsx +45 -6
- package/dist/index.d.ts +0 -361
- 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
|
@@ -22,8 +22,6 @@ const SavedFilter = ({
|
|
|
22
22
|
columnsData,
|
|
23
23
|
dropdownData,
|
|
24
24
|
tableStates,
|
|
25
|
-
selectedFilters,
|
|
26
|
-
setSelectedFilters,
|
|
27
25
|
editMode,
|
|
28
26
|
setEditMode,
|
|
29
27
|
setDeleteFilterModalOpen,
|
|
@@ -51,29 +49,11 @@ const SavedFilter = ({
|
|
|
51
49
|
} as FilterMasterStateProps)
|
|
52
50
|
);
|
|
53
51
|
|
|
54
|
-
setSelectedFilters([]);
|
|
55
52
|
setEditMode && setEditMode(false);
|
|
56
53
|
};
|
|
57
54
|
}, []);
|
|
58
55
|
|
|
59
56
|
const handleListItemClick = (filter: FilterOperationListProps) => {
|
|
60
|
-
// setFilterMaster(
|
|
61
|
-
// (prev) =>
|
|
62
|
-
// ({
|
|
63
|
-
// ...prev,
|
|
64
|
-
// saved_filters: {
|
|
65
|
-
// ...prev?.attributes,
|
|
66
|
-
// selectedId: filter?.value,
|
|
67
|
-
// selectedName: filter?.label,
|
|
68
|
-
// },
|
|
69
|
-
// attributes: {
|
|
70
|
-
// ...filterMaster?.attributes,
|
|
71
|
-
// radio: [],
|
|
72
|
-
// },
|
|
73
|
-
// activeFilterTabIndex: tabValue,
|
|
74
|
-
// } as FilterMasterStateProps)
|
|
75
|
-
// );
|
|
76
|
-
|
|
77
57
|
const newFilterMasterState = {
|
|
78
58
|
...filterMaster,
|
|
79
59
|
saved_filters: {
|
|
@@ -238,8 +218,6 @@ const SavedFilter = ({
|
|
|
238
218
|
columnsData={columnsData}
|
|
239
219
|
dropdownData={dropdownData}
|
|
240
220
|
tableStates={tableStates}
|
|
241
|
-
selectedFilters={selectedFilters}
|
|
242
|
-
setSelectedFilters={setSelectedFilters}
|
|
243
221
|
editMode={editMode}
|
|
244
222
|
setEditMode={setEditMode}
|
|
245
223
|
searchTerm={searchTerm}
|
|
@@ -40,7 +40,7 @@ const CustomSearch = ({
|
|
|
40
40
|
startAdornment: (
|
|
41
41
|
<InputAdornment position="start">
|
|
42
42
|
<SearchIcon
|
|
43
|
-
sx={{ color: "#888888", fontSize: "20px" }}
|
|
43
|
+
sx={{ color: "#888888", fontSize: "20px", paddingLeft: 1.5 }}
|
|
44
44
|
className="search-icon-svg"
|
|
45
45
|
/>
|
|
46
46
|
</InputAdornment>
|
|
@@ -50,7 +50,7 @@ const CustomSearch = ({
|
|
|
50
50
|
<IconButton
|
|
51
51
|
edge="end"
|
|
52
52
|
onClick={handleClear}
|
|
53
|
-
sx={{ color: "#888888", fontSize: "20px" }}
|
|
53
|
+
sx={{ color: "#888888", fontSize: "20px", paddingRight: 1.5 }}
|
|
54
54
|
>
|
|
55
55
|
<CloseIcon />
|
|
56
56
|
</IconButton>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, { useState } from "react";
|
|
2
2
|
import { Box, IconButton, Typography } from "@mui/material";
|
|
3
3
|
import CloseIcon from "@mui/icons-material/Close";
|
|
4
4
|
import {
|
|
5
|
+
FilterComponentOptions,
|
|
5
6
|
FilterDrawerProps,
|
|
6
7
|
FilterMasterStateProps,
|
|
7
|
-
UpdatedFilterStateProps,
|
|
8
8
|
} from "../../types/filter";
|
|
9
9
|
|
|
10
10
|
import ConfirmModal, { InputField } from "../common/confirm-modal";
|
|
@@ -14,6 +14,7 @@ import MainFilter from "./components/main-filter";
|
|
|
14
14
|
import SavedFilter from "./components/saved-filter";
|
|
15
15
|
import AttributesFilter from "./components/attributes-filter";
|
|
16
16
|
import { filterStyles } from "./style";
|
|
17
|
+
import { deepMergeObjects } from "../../libs/utils/deep-merge-objects";
|
|
17
18
|
|
|
18
19
|
export function TableFilter({
|
|
19
20
|
onClose,
|
|
@@ -24,17 +25,10 @@ export function TableFilter({
|
|
|
24
25
|
onUpdateFilter,
|
|
25
26
|
dropdownData,
|
|
26
27
|
onChangeFunction,
|
|
28
|
+
filterComponentOptions,
|
|
27
29
|
}: FilterDrawerProps) {
|
|
28
30
|
const [tabValue, setTabValue] = useState(0);
|
|
29
31
|
const [editMode, setEditMode] = useState(false);
|
|
30
|
-
const [selectedFilters, setSelectedFilters] = useState<
|
|
31
|
-
UpdatedFilterStateProps[]
|
|
32
|
-
>([]);
|
|
33
|
-
|
|
34
|
-
// tabs
|
|
35
|
-
const FILTER_TAB = 0;
|
|
36
|
-
const SAVED_TAB = 1;
|
|
37
|
-
const ATTR_TAB = 2;
|
|
38
32
|
|
|
39
33
|
// remove this
|
|
40
34
|
const [saveFilterModalOpen, setSaveFilterModalOpen] = useState(false);
|
|
@@ -51,6 +45,40 @@ export function TableFilter({
|
|
|
51
45
|
setShowFilterOption,
|
|
52
46
|
} = tableStates;
|
|
53
47
|
|
|
48
|
+
const defaultOptions: FilterComponentOptions = {
|
|
49
|
+
showMainHeader: true,
|
|
50
|
+
showTabs: true,
|
|
51
|
+
tabOptions: {
|
|
52
|
+
mainFilter: {
|
|
53
|
+
showSaveButton: true,
|
|
54
|
+
showClearAllButton: true,
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
showMainFilter: true,
|
|
58
|
+
showSavedFilter: true,
|
|
59
|
+
showAttributesFilter: true,
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const finalComponentOptions = deepMergeObjects<FilterComponentOptions>(
|
|
63
|
+
defaultOptions,
|
|
64
|
+
filterComponentOptions ?? {}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const showMainHeader = finalComponentOptions?.showMainHeader;
|
|
68
|
+
const showTabs = finalComponentOptions?.showTabs;
|
|
69
|
+
const showMainFilter = showTabs && finalComponentOptions?.showMainFilter;
|
|
70
|
+
const showSavedFilter = showTabs && finalComponentOptions?.showSavedFilter;
|
|
71
|
+
const showAttributesFilter =
|
|
72
|
+
showTabs && finalComponentOptions?.showAttributesFilter;
|
|
73
|
+
|
|
74
|
+
type TabType = "main" | "saved" | "attributes";
|
|
75
|
+
|
|
76
|
+
// Map tabs to type
|
|
77
|
+
const tabMapping: TabType[] = [];
|
|
78
|
+
if (showMainFilter) tabMapping.push("main");
|
|
79
|
+
if (showSavedFilter) tabMapping.push("saved");
|
|
80
|
+
if (showAttributesFilter) tabMapping.push("attributes");
|
|
81
|
+
|
|
54
82
|
const clearAttributeRadio = () => {
|
|
55
83
|
const newFilterMaster = {
|
|
56
84
|
...filterMaster,
|
|
@@ -58,17 +86,10 @@ export function TableFilter({
|
|
|
58
86
|
...filterMaster?.attributes,
|
|
59
87
|
radio: [],
|
|
60
88
|
},
|
|
61
|
-
activeFilterTabIndex:
|
|
89
|
+
activeFilterTabIndex: 0,
|
|
62
90
|
};
|
|
63
91
|
|
|
64
92
|
setFilterMaster(newFilterMaster as FilterMasterStateProps);
|
|
65
|
-
|
|
66
|
-
// const newState = {
|
|
67
|
-
// filterMaster: newFilterMaster,
|
|
68
|
-
// filters: filters,
|
|
69
|
-
// };
|
|
70
|
-
|
|
71
|
-
// onChangeFunction && onChangeFunction(newState);
|
|
72
93
|
};
|
|
73
94
|
|
|
74
95
|
const filterNameInput: InputField = {
|
|
@@ -78,145 +99,156 @@ export function TableFilter({
|
|
|
78
99
|
type: "text",
|
|
79
100
|
};
|
|
80
101
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const updated = filters?.map((filter) => {
|
|
88
|
-
const matchingColumn = columnsData?.column_list.find(
|
|
89
|
-
(column) => column.attribute_key === filter.filter_attribute
|
|
90
|
-
);
|
|
91
|
-
const matchingDropdownList =
|
|
92
|
-
columnsData.operation_list[matchingColumn?.data_type || "text"];
|
|
93
|
-
|
|
94
|
-
return {
|
|
95
|
-
...filter,
|
|
96
|
-
id: matchingColumn?.id ?? "",
|
|
97
|
-
name: matchingColumn?.name,
|
|
98
|
-
data_type: matchingColumn?.data_type,
|
|
99
|
-
dropdown_list: matchingDropdownList,
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
setSelectedFilters(updated || []);
|
|
104
|
-
}, [filters, columnsData, tabValue]);
|
|
102
|
+
//FOR TABS
|
|
103
|
+
const tabItems: TabItem[] = [
|
|
104
|
+
{ label: "Filter" },
|
|
105
|
+
{ label: "Saved Filter" },
|
|
106
|
+
{ label: "Attributes" },
|
|
107
|
+
];
|
|
105
108
|
|
|
106
109
|
const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {
|
|
107
|
-
|
|
110
|
+
const tabType = tabMapping[newValue];
|
|
111
|
+
|
|
112
|
+
if (tabType === "attributes" && tabMapping[tabValue] === "main") {
|
|
108
113
|
clearAttributeRadio();
|
|
109
114
|
}
|
|
110
115
|
|
|
111
116
|
setTabValue(newValue);
|
|
112
|
-
|
|
117
|
+
|
|
118
|
+
if (tabType === "main") {
|
|
113
119
|
setEditMode(false);
|
|
114
|
-
|
|
120
|
+
|
|
121
|
+
setFilterMaster(
|
|
122
|
+
(prev) =>
|
|
123
|
+
({ ...prev, activeFilterTabIndex: 0 } as FilterMasterStateProps)
|
|
124
|
+
);
|
|
115
125
|
}
|
|
116
126
|
};
|
|
117
127
|
|
|
118
|
-
//FOR TABS
|
|
119
|
-
const tabItems: TabItem[] = [
|
|
120
|
-
{ label: "Filter" },
|
|
121
|
-
{ label: "Saved Filter" },
|
|
122
|
-
{ label: "Attributes" },
|
|
123
|
-
];
|
|
124
|
-
|
|
125
128
|
const handleTabCrossClick = (index: number) => {
|
|
126
|
-
|
|
129
|
+
const tabType = tabMapping[index];
|
|
130
|
+
|
|
127
131
|
setFilters([]);
|
|
128
|
-
setSelectedFilters([]);
|
|
129
132
|
|
|
130
|
-
|
|
131
|
-
if (index === 1) setEditMode(false);
|
|
133
|
+
if (tabType === "saved") setEditMode(false);
|
|
132
134
|
|
|
133
|
-
const patches:
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
135
|
+
const patches: Partial<FilterMasterStateProps> = {};
|
|
136
|
+
|
|
137
|
+
if (tabType === "saved") {
|
|
138
|
+
patches.saved_filters = { selectedId: "", selectedName: "" };
|
|
139
|
+
} else if (tabType === "attributes") {
|
|
140
|
+
patches.attributes = { radio: [], selected: "" };
|
|
141
|
+
}
|
|
138
142
|
|
|
139
143
|
const newFilterMasterState = {
|
|
140
144
|
...filterMaster,
|
|
141
145
|
activeFilterTabIndex: -1,
|
|
142
|
-
...
|
|
146
|
+
...patches,
|
|
143
147
|
} as FilterMasterStateProps;
|
|
144
148
|
|
|
145
149
|
setFilterMaster(newFilterMasterState);
|
|
146
150
|
|
|
147
|
-
|
|
148
|
-
filterMaster: newFilterMasterState,
|
|
149
|
-
filters: filters,
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
onChangeFunction && onChangeFunction(newState);
|
|
151
|
+
onChangeFunction &&
|
|
152
|
+
onChangeFunction({ filterMaster: newFilterMasterState, filters });
|
|
153
153
|
};
|
|
154
154
|
|
|
155
155
|
return (
|
|
156
156
|
<Box sx={filterStyles.filterContainer}>
|
|
157
|
-
|
|
158
|
-
<
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
e
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
<MainFilter
|
|
183
|
-
columnsData={columnsData}
|
|
184
|
-
tableStates={tableStates}
|
|
185
|
-
selectedFilters={selectedFilters}
|
|
186
|
-
setSelectedFilters={setSelectedFilters}
|
|
187
|
-
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
188
|
-
dropdownData={dropdownData}
|
|
189
|
-
onChangeFunction={onChangeFunction}
|
|
157
|
+
{showMainHeader && (
|
|
158
|
+
<Box sx={filterStyles.filterMainHeader}>
|
|
159
|
+
<Typography variant="h6" fontWeight="bold" fontSize="18px">
|
|
160
|
+
Filter
|
|
161
|
+
</Typography>
|
|
162
|
+
<IconButton
|
|
163
|
+
onClick={(e) => {
|
|
164
|
+
e.stopPropagation();
|
|
165
|
+
onClose && onClose();
|
|
166
|
+
setShowFilterOption(false);
|
|
167
|
+
}}
|
|
168
|
+
aria-label="close"
|
|
169
|
+
>
|
|
170
|
+
<CloseIcon fontSize="small" />
|
|
171
|
+
</IconButton>
|
|
172
|
+
</Box>
|
|
173
|
+
)}
|
|
174
|
+
|
|
175
|
+
{showTabs && (
|
|
176
|
+
<CustomTabs
|
|
177
|
+
value={tabValue}
|
|
178
|
+
onChange={handleTabChange}
|
|
179
|
+
tabItems={tabItems}
|
|
180
|
+
activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}
|
|
181
|
+
handleCrossClick={handleTabCrossClick}
|
|
190
182
|
/>
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
<
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
183
|
+
)}
|
|
184
|
+
|
|
185
|
+
{!showTabs && (
|
|
186
|
+
<Box sx={{ padding: "1.5rem 0.75rem", height: "100%" }}>
|
|
187
|
+
<MainFilter
|
|
188
|
+
columnsData={columnsData}
|
|
189
|
+
tableStates={tableStates}
|
|
190
|
+
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
191
|
+
dropdownData={dropdownData}
|
|
192
|
+
onChangeFunction={onChangeFunction}
|
|
193
|
+
filterComponentOptions={finalComponentOptions}
|
|
194
|
+
/>
|
|
195
|
+
</Box>
|
|
196
|
+
)}
|
|
197
|
+
|
|
198
|
+
{showMainFilter && (
|
|
199
|
+
<CustomTabPanel
|
|
200
|
+
value={tabValue}
|
|
201
|
+
index={tabMapping.indexOf("main")}
|
|
202
|
+
sx={{ p: "1.5rem 0.75rem" }}
|
|
203
|
+
>
|
|
204
|
+
<MainFilter
|
|
205
|
+
columnsData={columnsData}
|
|
206
|
+
tableStates={tableStates}
|
|
207
|
+
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
208
|
+
dropdownData={dropdownData}
|
|
209
|
+
onChangeFunction={onChangeFunction}
|
|
210
|
+
filterComponentOptions={finalComponentOptions}
|
|
211
|
+
/>
|
|
212
|
+
</CustomTabPanel>
|
|
213
|
+
)}
|
|
214
|
+
|
|
215
|
+
{showSavedFilter && (
|
|
216
|
+
<CustomTabPanel
|
|
217
|
+
value={tabValue}
|
|
218
|
+
index={tabMapping.indexOf("saved")}
|
|
219
|
+
sx={{ p: "1.5rem 0.75rem" }}
|
|
220
|
+
>
|
|
221
|
+
<SavedFilter
|
|
222
|
+
columnsData={columnsData}
|
|
223
|
+
tableStates={tableStates}
|
|
224
|
+
editMode={editMode}
|
|
225
|
+
setEditMode={setEditMode}
|
|
226
|
+
setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
227
|
+
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
228
|
+
dropdownData={dropdownData}
|
|
229
|
+
tabValue={tabValue}
|
|
230
|
+
onChangeFunction={onChangeFunction}
|
|
231
|
+
/>
|
|
232
|
+
</CustomTabPanel>
|
|
233
|
+
)}
|
|
234
|
+
|
|
235
|
+
{showAttributesFilter && (
|
|
236
|
+
<CustomTabPanel
|
|
237
|
+
value={tabValue}
|
|
238
|
+
index={tabMapping.indexOf("attributes")}
|
|
239
|
+
sx={{ p: "1.5rem 0.75rem" }}
|
|
240
|
+
>
|
|
241
|
+
<AttributesFilter
|
|
242
|
+
columnsData={columnsData}
|
|
243
|
+
tableStates={tableStates}
|
|
244
|
+
dropdownData={dropdownData}
|
|
245
|
+
searchTerm={searchTerm}
|
|
246
|
+
setSearchTerm={setSearchTerm}
|
|
247
|
+
tabValue={tabValue}
|
|
248
|
+
onChangeFunction={onChangeFunction}
|
|
249
|
+
/>
|
|
250
|
+
</CustomTabPanel>
|
|
251
|
+
)}
|
|
220
252
|
|
|
221
253
|
<ConfirmModal
|
|
222
254
|
open={saveFilterModalOpen}
|
|
@@ -12,6 +12,7 @@ interface filterFormStyleType {
|
|
|
12
12
|
formEditModeStyle: SxProps<Theme>;
|
|
13
13
|
formFlexContainer: SxProps<Theme>;
|
|
14
14
|
formListItem: SxProps<Theme>;
|
|
15
|
+
formListSectionHeader: SxProps<Theme>;
|
|
15
16
|
formListItemHeader: SxProps<Theme>;
|
|
16
17
|
formListItemHeaderName: SxProps<Theme>;
|
|
17
18
|
formListItemHeaderDropdown: SxProps<Theme>;
|
|
@@ -95,13 +96,21 @@ export const filterFormStyles: filterFormStyleType = {
|
|
|
95
96
|
|
|
96
97
|
formListItem: {
|
|
97
98
|
p: 1,
|
|
98
|
-
|
|
99
|
-
backgroundColor: "#FAFAFA",
|
|
99
|
+
backgroundColor: "#FFFFFF",
|
|
100
100
|
display: "flex",
|
|
101
101
|
flexDirection: "column",
|
|
102
102
|
gap: 0.5,
|
|
103
103
|
},
|
|
104
104
|
|
|
105
|
+
formListSectionHeader: {
|
|
106
|
+
display: "flex",
|
|
107
|
+
alignItems: "center",
|
|
108
|
+
justifyContent: "space-between",
|
|
109
|
+
gap: 1,
|
|
110
|
+
p: 1,
|
|
111
|
+
backgroundColor: "#FAFAF9",
|
|
112
|
+
},
|
|
113
|
+
|
|
105
114
|
formListItemHeader: {
|
|
106
115
|
display: "flex",
|
|
107
116
|
justifyContent: "flex-start",
|
|
@@ -116,9 +125,17 @@ export const filterFormStyles: filterFormStyleType = {
|
|
|
116
125
|
},
|
|
117
126
|
|
|
118
127
|
formListItemHeaderDropdown: {
|
|
119
|
-
fontSize: "
|
|
128
|
+
fontSize: "12px",
|
|
120
129
|
minWidth: 50,
|
|
121
130
|
border: "none",
|
|
122
131
|
boxShadow: "none",
|
|
132
|
+
|
|
133
|
+
"& .MuiSelect-root": {
|
|
134
|
+
fontSize: "0.75rem",
|
|
135
|
+
|
|
136
|
+
"& .MuiSelect-select": {
|
|
137
|
+
paddingBottom: "0rem",
|
|
138
|
+
},
|
|
139
|
+
},
|
|
123
140
|
},
|
|
124
141
|
};
|
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
import { useState } from "react";
|
|
9
9
|
import { CraftTableOptionsProps } from "../../types/table-options";
|
|
10
10
|
import {
|
|
11
|
+
FilterDataMainFilterEntityListProps,
|
|
12
|
+
FilterDataProps,
|
|
11
13
|
FilterMasterStateProps,
|
|
12
14
|
FilterOperationListProps,
|
|
13
15
|
FilterStateProps,
|
|
@@ -43,6 +45,9 @@ export function useCraftTable(paginationPageSize: number = 25) {
|
|
|
43
45
|
|
|
44
46
|
//For filter criteria paper
|
|
45
47
|
const [showFilterOptions, setShowFilterOption] = useState<boolean>(false);
|
|
48
|
+
const [filterData, setFilterData] = useState<FilterDataProps | null>(null);
|
|
49
|
+
const [selectedFilterEntity, setSelectedFilterEntity] =
|
|
50
|
+
useState<FilterDataMainFilterEntityListProps>();
|
|
46
51
|
|
|
47
52
|
if (pagination.pageIndex < 0 || pagination.pageSize <= 0) {
|
|
48
53
|
throw new Error(
|
|
@@ -83,6 +88,10 @@ export function useCraftTable(paginationPageSize: number = 25) {
|
|
|
83
88
|
setShowFilterOption: setShowFilterOption,
|
|
84
89
|
columnPinning: columnPinning,
|
|
85
90
|
setColumnPinning: setColumnPinning,
|
|
91
|
+
filterData: filterData,
|
|
92
|
+
setFilterData: setFilterData,
|
|
93
|
+
selectedFilterEntity: selectedFilterEntity,
|
|
94
|
+
setSelectedFilterEntity: setSelectedFilterEntity,
|
|
86
95
|
};
|
|
87
96
|
|
|
88
97
|
return craftTableOptions;
|
|
@@ -15,6 +15,8 @@ import {
|
|
|
15
15
|
commonGetDropdownDataAPI,
|
|
16
16
|
createSavedFilter,
|
|
17
17
|
deleteSavedFilter,
|
|
18
|
+
getFilterEntityList,
|
|
19
|
+
getFilterCriteriaByEntity,
|
|
18
20
|
getSettingsData,
|
|
19
21
|
saveSettingsData,
|
|
20
22
|
updateSavedFilter,
|
|
@@ -22,6 +24,7 @@ import {
|
|
|
22
24
|
} from "../utils/apiColumn";
|
|
23
25
|
import {
|
|
24
26
|
FilterColumnsDataProps,
|
|
27
|
+
FilterDataMainFilterEntityListProps,
|
|
25
28
|
FilterMasterStateProps,
|
|
26
29
|
} from "../../types/filter";
|
|
27
30
|
import { CraftTableOptionsProps } from "../../types/table-options";
|
|
@@ -297,3 +300,25 @@ export const useGetSettingsDataAPI = (entity_type: string) => {
|
|
|
297
300
|
|
|
298
301
|
return { getSettingsAPIData };
|
|
299
302
|
};
|
|
303
|
+
|
|
304
|
+
export const useGetFilterEntityListAndCriteria = ({
|
|
305
|
+
entity_type,
|
|
306
|
+
selectedFilterEntity,
|
|
307
|
+
}: {
|
|
308
|
+
entity_type: string;
|
|
309
|
+
selectedFilterEntity: FilterDataMainFilterEntityListProps | undefined;
|
|
310
|
+
}) => {
|
|
311
|
+
const filterEntityList = useQuery({
|
|
312
|
+
queryKey: ["filterEntityList", entity_type],
|
|
313
|
+
queryFn: () => getFilterEntityList(entity_type),
|
|
314
|
+
enabled: !!entity_type,
|
|
315
|
+
});
|
|
316
|
+
|
|
317
|
+
const filterEntityWiseCriteria = useQuery({
|
|
318
|
+
queryKey: ["filterEntityWiseCriteria", selectedFilterEntity],
|
|
319
|
+
queryFn: () => getFilterCriteriaByEntity(selectedFilterEntity),
|
|
320
|
+
enabled: !!selectedFilterEntity,
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
return { filterEntityList, filterEntityWiseCriteria };
|
|
324
|
+
};
|
|
@@ -2,6 +2,7 @@ import { api, MAPPED_ENTITY_TYPE } from "./common";
|
|
|
2
2
|
import {
|
|
3
3
|
createSavedFilterPayload,
|
|
4
4
|
deleteSavedFilterPayload,
|
|
5
|
+
FilterDataMainFilterEntityListProps,
|
|
5
6
|
updateSavedFilterPayload,
|
|
6
7
|
} from "../../types/filter";
|
|
7
8
|
import { viewSettingsDropDownAPIProps } from "../../types/common";
|
|
@@ -126,7 +127,10 @@ export const updateSavedFilter = async (
|
|
|
126
127
|
// ALL View Settings API
|
|
127
128
|
export const saveSettingsData = async (payload: any) => {
|
|
128
129
|
try {
|
|
129
|
-
const response = await api.post(
|
|
130
|
+
const response = await api.post(
|
|
131
|
+
`/entity/create?entity_type=${MAPPED_ENTITY_TYPE}`,
|
|
132
|
+
payload
|
|
133
|
+
);
|
|
130
134
|
return response.data;
|
|
131
135
|
} catch (error) {
|
|
132
136
|
console.error("Failed to save settings data:", error);
|
|
@@ -157,3 +161,25 @@ export const viewSettingsDropDown = async ({
|
|
|
157
161
|
|
|
158
162
|
return response.data;
|
|
159
163
|
};
|
|
164
|
+
|
|
165
|
+
export const getFilterEntityList = async (entity_type: string) => {
|
|
166
|
+
const response = await api.get(`/entity-relation/${entity_type}`);
|
|
167
|
+
|
|
168
|
+
return response.data;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
export const getFilterCriteriaByEntity = async (
|
|
172
|
+
selectedFilterEntity: FilterDataMainFilterEntityListProps | undefined
|
|
173
|
+
) => {
|
|
174
|
+
const params = { entity_type: selectedFilterEntity?.value };
|
|
175
|
+
|
|
176
|
+
const response = await api.post(
|
|
177
|
+
`meta/get-filter-data`,
|
|
178
|
+
{},
|
|
179
|
+
{
|
|
180
|
+
params,
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
return response.data;
|
|
185
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function deepMergeObjects<T>(target: T, source: Partial<T>): T {
|
|
2
|
+
const output = { ...target };
|
|
3
|
+
for (const key in source) {
|
|
4
|
+
if (
|
|
5
|
+
source[key] &&
|
|
6
|
+
typeof source[key] === "object" &&
|
|
7
|
+
!Array.isArray(source[key])
|
|
8
|
+
) {
|
|
9
|
+
output[key] = deepMergeObjects(
|
|
10
|
+
(target as any)[key] || {},
|
|
11
|
+
(source as any)[key]
|
|
12
|
+
);
|
|
13
|
+
} else {
|
|
14
|
+
(output as any)[key] = source[key];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return output;
|
|
18
|
+
}
|