rez-table-listing-mui 1.3.8 → 1.3.10
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 +10 -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/App.tsx +12 -0
- package/src/listing/components/filter/components/saved-edit-filter.tsx +26 -22
- package/src/listing/components/filter/components/saved-filter.tsx +13 -6
- package/src/listing/components/filter/components/single-filter-rendering.tsx +74 -0
- package/src/listing/components/filter/index.tsx +72 -53
- package/src/listing/components/index.scss +3 -3
- package/src/listing/libs/hooks/useEntityTableAPI.tsx +1 -0
- package/src/listing/libs/hooks/useEntityTableHooks.ts +1 -1
- package/src/listing/libs/utils/apiColumn.ts +1 -1
- package/src/listing/types/filter.ts +11 -0
- package/src/testing-grounds/filter-in-modal/saved-filter-modal.tsx +181 -0
package/package.json
CHANGED
package/src/App.tsx
CHANGED
|
@@ -2,11 +2,13 @@ import { useState } from "react";
|
|
|
2
2
|
import LoginButton from "./listing/components/login";
|
|
3
3
|
import ListingView from "./view/ListingView";
|
|
4
4
|
import KanbanView from "./view/KanbanView";
|
|
5
|
+
import SavedFilterModal from "./testing-grounds/filter-in-modal/saved-filter-modal";
|
|
5
6
|
|
|
6
7
|
function App() {
|
|
7
8
|
const [currentView, setCurrentView] = useState<"listing" | "kanban">(
|
|
8
9
|
"listing"
|
|
9
10
|
);
|
|
11
|
+
const [openSavedFilterModal, setOpenSavedFilterModal] = useState(false);
|
|
10
12
|
|
|
11
13
|
const renderView = () => {
|
|
12
14
|
switch (currentView) {
|
|
@@ -57,10 +59,20 @@ function App() {
|
|
|
57
59
|
>
|
|
58
60
|
Kanban View
|
|
59
61
|
</button>
|
|
62
|
+
<button
|
|
63
|
+
style={containedBtn}
|
|
64
|
+
onClick={() => setOpenSavedFilterModal(true)}
|
|
65
|
+
>
|
|
66
|
+
Saved Filter modal
|
|
67
|
+
</button>
|
|
60
68
|
</div>
|
|
61
69
|
|
|
62
70
|
{/* Conditional Content */}
|
|
63
71
|
{renderView()}
|
|
72
|
+
<SavedFilterModal
|
|
73
|
+
open={openSavedFilterModal}
|
|
74
|
+
setOpen={setOpenSavedFilterModal}
|
|
75
|
+
/>
|
|
64
76
|
</div>
|
|
65
77
|
);
|
|
66
78
|
}
|
|
@@ -3,6 +3,7 @@ import FilterForm from "./forms";
|
|
|
3
3
|
import BackArrow from "@mui/icons-material/ArrowBackIosNew";
|
|
4
4
|
import {
|
|
5
5
|
FilterColumnsDataProps,
|
|
6
|
+
FilterComponentOptions,
|
|
6
7
|
FilterDropdownDataProps,
|
|
7
8
|
FilterMasterStateProps,
|
|
8
9
|
} from "../../../types/filter";
|
|
@@ -17,11 +18,10 @@ const SavedFilterEditComponent = ({
|
|
|
17
18
|
setEditMode,
|
|
18
19
|
searchTerm,
|
|
19
20
|
setSearchTerm,
|
|
20
|
-
criteriaSearchTerm,
|
|
21
|
-
setCriteriaSearchTerm,
|
|
22
21
|
setSavedFilterModalOpen,
|
|
23
22
|
setDeleteFilterModalOpen,
|
|
24
23
|
onChangeFunction,
|
|
24
|
+
filterComponentOptions,
|
|
25
25
|
}: {
|
|
26
26
|
columnsData: FilterColumnsDataProps;
|
|
27
27
|
dropdownData: FilterDropdownDataProps;
|
|
@@ -30,17 +30,19 @@ const SavedFilterEditComponent = ({
|
|
|
30
30
|
setEditMode?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
31
31
|
searchTerm?: string;
|
|
32
32
|
setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
|
|
33
|
-
criteriaSearchTerm?: string;
|
|
34
|
-
setCriteriaSearchTerm: React.Dispatch<React.SetStateAction<string>>;
|
|
35
33
|
setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
36
34
|
setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
|
|
37
35
|
onChangeFunction: ({
|
|
38
36
|
updatedFilters,
|
|
39
37
|
filterMaster,
|
|
40
38
|
}: onFilterChangeFunctionProps) => void;
|
|
39
|
+
filterComponentOptions?: FilterComponentOptions;
|
|
41
40
|
}) => {
|
|
42
41
|
const { setFilters, setFilterMaster } = tableStates;
|
|
43
42
|
|
|
43
|
+
const showBackButton =
|
|
44
|
+
filterComponentOptions?.tabOptions?.savedFilter?.showBackButton;
|
|
45
|
+
|
|
44
46
|
const handleRemoveFilter = (filter_attribute: string) => {
|
|
45
47
|
setFilters((prev) =>
|
|
46
48
|
prev.filter((filter) => filter?.filter_attribute !== filter_attribute)
|
|
@@ -59,6 +61,7 @@ const SavedFilterEditComponent = ({
|
|
|
59
61
|
...prev?.saved_filters,
|
|
60
62
|
selectedId: "",
|
|
61
63
|
selectedName: "",
|
|
64
|
+
selectedCode: "",
|
|
62
65
|
},
|
|
63
66
|
activeFilterTabIndex: -1,
|
|
64
67
|
} as FilterMasterStateProps)
|
|
@@ -67,23 +70,25 @@ const SavedFilterEditComponent = ({
|
|
|
67
70
|
|
|
68
71
|
return (
|
|
69
72
|
<>
|
|
70
|
-
|
|
71
|
-
<Box
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
73
|
+
{showBackButton && (
|
|
74
|
+
<Box>
|
|
75
|
+
<Box
|
|
76
|
+
sx={{
|
|
77
|
+
display: "flex",
|
|
78
|
+
alignItems: "center",
|
|
79
|
+
gap: 1,
|
|
80
|
+
cursor: "pointer",
|
|
81
|
+
mb: 2,
|
|
82
|
+
}}
|
|
83
|
+
onClick={handleBackButtonClick}
|
|
84
|
+
>
|
|
85
|
+
<BackArrow sx={{ width: "13px", height: "13px" }} />
|
|
86
|
+
<Typography variant="body2" sx={{ color: "#8592A3" }}>
|
|
87
|
+
Back To Saved Filters
|
|
88
|
+
</Typography>
|
|
89
|
+
</Box>
|
|
85
90
|
</Box>
|
|
86
|
-
|
|
91
|
+
)}
|
|
87
92
|
|
|
88
93
|
{/* Render selectedFilters state */}
|
|
89
94
|
<FilterForm
|
|
@@ -94,11 +99,10 @@ const SavedFilterEditComponent = ({
|
|
|
94
99
|
dropdownData={dropdownData}
|
|
95
100
|
searchTerm={searchTerm}
|
|
96
101
|
setSearchTerm={setSearchTerm}
|
|
97
|
-
criteriaSearchTerm={criteriaSearchTerm}
|
|
98
|
-
setCriteriaSearchTerm={setCriteriaSearchTerm}
|
|
99
102
|
setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
100
103
|
setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
101
104
|
onChangeFunction={onChangeFunction}
|
|
105
|
+
filterComponentOptions={filterComponentOptions}
|
|
102
106
|
/>
|
|
103
107
|
</>
|
|
104
108
|
);
|
|
@@ -28,15 +28,18 @@ const SavedFilter = ({
|
|
|
28
28
|
setSavedFilterModalOpen,
|
|
29
29
|
tabValue,
|
|
30
30
|
onChangeFunction,
|
|
31
|
+
filterComponentOptions,
|
|
31
32
|
}: FilterFormComponentProps) => {
|
|
32
33
|
const { filters, filterMaster, setFilterMaster, setFilterToDelete } =
|
|
33
34
|
tableStates;
|
|
34
35
|
const [searchTerm, setSearchTerm] = useState<string>("");
|
|
35
|
-
const [criteriaSearchTerm, setCriteriaSearchTerm] = useState<string>("");
|
|
36
36
|
|
|
37
37
|
// reset savedFilterEditValue when component unmounts
|
|
38
38
|
useEffect(() => {
|
|
39
39
|
return () => {
|
|
40
|
+
const editModeFromTabOptions =
|
|
41
|
+
filterComponentOptions?.tabOptions?.savedFilter?.editMode;
|
|
42
|
+
|
|
40
43
|
setFilterMaster(
|
|
41
44
|
(prev) =>
|
|
42
45
|
({
|
|
@@ -45,11 +48,14 @@ const SavedFilter = ({
|
|
|
45
48
|
...prev?.attributes,
|
|
46
49
|
selectedId: "",
|
|
47
50
|
selectedName: "",
|
|
51
|
+
selectedCode: "",
|
|
48
52
|
},
|
|
49
53
|
} as FilterMasterStateProps)
|
|
50
54
|
);
|
|
51
55
|
|
|
52
|
-
|
|
56
|
+
if (!editModeFromTabOptions) {
|
|
57
|
+
setEditMode && setEditMode(false);
|
|
58
|
+
}
|
|
53
59
|
};
|
|
54
60
|
}, []);
|
|
55
61
|
|
|
@@ -60,6 +66,7 @@ const SavedFilter = ({
|
|
|
60
66
|
...filterMaster?.attributes,
|
|
61
67
|
selectedId: filter?.value,
|
|
62
68
|
selectedName: filter?.label,
|
|
69
|
+
selectedCode: filter?.code,
|
|
63
70
|
},
|
|
64
71
|
attributes: {
|
|
65
72
|
...filterMaster?.attributes,
|
|
@@ -89,6 +96,7 @@ const SavedFilter = ({
|
|
|
89
96
|
...filterMaster?.attributes,
|
|
90
97
|
selectedId: filter?.value,
|
|
91
98
|
selectedName: filter?.label,
|
|
99
|
+
selectedCode: filter?.code,
|
|
92
100
|
},
|
|
93
101
|
attributes: {
|
|
94
102
|
...filterMaster?.attributes,
|
|
@@ -213,7 +221,7 @@ const SavedFilter = ({
|
|
|
213
221
|
{/* Render search input and list */}
|
|
214
222
|
{!editMode && renderList()}
|
|
215
223
|
|
|
216
|
-
{editMode
|
|
224
|
+
{editMode && (
|
|
217
225
|
<SavedFilterEditComponent
|
|
218
226
|
columnsData={columnsData}
|
|
219
227
|
dropdownData={dropdownData}
|
|
@@ -222,13 +230,12 @@ const SavedFilter = ({
|
|
|
222
230
|
setEditMode={setEditMode}
|
|
223
231
|
searchTerm={searchTerm}
|
|
224
232
|
setSearchTerm={setSearchTerm}
|
|
225
|
-
criteriaSearchTerm={criteriaSearchTerm}
|
|
226
|
-
setCriteriaSearchTerm={setCriteriaSearchTerm}
|
|
227
233
|
setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
228
234
|
setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
229
235
|
onChangeFunction={onChangeFunction}
|
|
236
|
+
filterComponentOptions={filterComponentOptions}
|
|
230
237
|
/>
|
|
231
|
-
)
|
|
238
|
+
)}
|
|
232
239
|
</Box>
|
|
233
240
|
);
|
|
234
241
|
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Box } from "@mui/material";
|
|
2
|
+
import { FilterFormComponentProps } from "../../../types/filter";
|
|
3
|
+
import MainFilter from "./main-filter";
|
|
4
|
+
import SavedFilter from "./saved-filter";
|
|
5
|
+
import AttributesFilter from "./attributes-filter";
|
|
6
|
+
|
|
7
|
+
interface Props extends FilterFormComponentProps {
|
|
8
|
+
searchTerm: string;
|
|
9
|
+
setSearchTerm: React.Dispatch<React.SetStateAction<string>>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const SingleFilterRendering = ({
|
|
13
|
+
columnsData,
|
|
14
|
+
dropdownData,
|
|
15
|
+
tableStates,
|
|
16
|
+
setSavedFilterModalOpen,
|
|
17
|
+
onChangeFunction,
|
|
18
|
+
filterComponentOptions,
|
|
19
|
+
editMode,
|
|
20
|
+
setEditMode,
|
|
21
|
+
setDeleteFilterModalOpen,
|
|
22
|
+
tabValue,
|
|
23
|
+
searchTerm,
|
|
24
|
+
setSearchTerm,
|
|
25
|
+
}: Props) => {
|
|
26
|
+
const showFilter = filterComponentOptions?.tabOptions?.showFilter;
|
|
27
|
+
|
|
28
|
+
const commonProps = {
|
|
29
|
+
columnsData,
|
|
30
|
+
dropdownData,
|
|
31
|
+
tableStates,
|
|
32
|
+
onChangeFunction,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const editProps = {
|
|
36
|
+
editMode,
|
|
37
|
+
setEditMode,
|
|
38
|
+
setDeleteFilterModalOpen,
|
|
39
|
+
tabValue,
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const attributesProps = {
|
|
43
|
+
searchTerm,
|
|
44
|
+
setSearchTerm,
|
|
45
|
+
tabValue,
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
return (
|
|
49
|
+
<Box sx={{ padding: "1.5rem 0.75rem", height: "100%" }}>
|
|
50
|
+
{showFilter === "main" && (
|
|
51
|
+
<MainFilter
|
|
52
|
+
{...commonProps}
|
|
53
|
+
setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
54
|
+
filterComponentOptions={filterComponentOptions}
|
|
55
|
+
/>
|
|
56
|
+
)}
|
|
57
|
+
|
|
58
|
+
{showFilter === "saved" && (
|
|
59
|
+
<SavedFilter
|
|
60
|
+
{...commonProps}
|
|
61
|
+
{...editProps}
|
|
62
|
+
setSavedFilterModalOpen={setSavedFilterModalOpen}
|
|
63
|
+
filterComponentOptions={filterComponentOptions}
|
|
64
|
+
/>
|
|
65
|
+
)}
|
|
66
|
+
|
|
67
|
+
{showFilter === "attributes" && (
|
|
68
|
+
<AttributesFilter {...commonProps} {...attributesProps} />
|
|
69
|
+
)}
|
|
70
|
+
</Box>
|
|
71
|
+
);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export default SingleFilterRendering;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
2
|
import { Box, IconButton, Typography } from "@mui/material";
|
|
3
3
|
import CloseIcon from "@mui/icons-material/Close";
|
|
4
4
|
import {
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
FilterDrawerProps,
|
|
7
7
|
FilterMasterStateProps,
|
|
8
8
|
} from "../../types/filter";
|
|
9
|
-
|
|
10
9
|
import ConfirmModal, { InputField } from "../common/confirm-modal";
|
|
11
10
|
import CustomTabPanel from "./components/tabs/custom-tab-panel";
|
|
12
11
|
import CustomTabs, { TabItem } from "./components/tabs/index";
|
|
@@ -15,6 +14,7 @@ import SavedFilter from "./components/saved-filter";
|
|
|
15
14
|
import AttributesFilter from "./components/attributes-filter";
|
|
16
15
|
import { filterStyles } from "./style";
|
|
17
16
|
import { deepMergeObjects } from "../../libs/utils/deep-merge-objects";
|
|
17
|
+
import SingleFilterRendering from "./components/single-filter-rendering";
|
|
18
18
|
|
|
19
19
|
export function TableFilter({
|
|
20
20
|
onClose,
|
|
@@ -50,10 +50,16 @@ export function TableFilter({
|
|
|
50
50
|
mainHeaderTitle: "Filter",
|
|
51
51
|
showTabs: true,
|
|
52
52
|
tabOptions: {
|
|
53
|
+
isSingleFilter: false,
|
|
54
|
+
showFilter: "main",
|
|
53
55
|
mainFilter: {
|
|
54
56
|
showSaveButton: true,
|
|
55
57
|
showClearAllButton: true,
|
|
56
58
|
},
|
|
59
|
+
savedFilter: {
|
|
60
|
+
showBackButton: true,
|
|
61
|
+
editMode: false,
|
|
62
|
+
},
|
|
57
63
|
},
|
|
58
64
|
showMainFilter: true,
|
|
59
65
|
showSavedFilter: true,
|
|
@@ -72,14 +78,20 @@ export function TableFilter({
|
|
|
72
78
|
const showSavedFilter = showTabs && finalComponentOptions?.showSavedFilter;
|
|
73
79
|
const showAttributesFilter =
|
|
74
80
|
showTabs && finalComponentOptions?.showAttributesFilter;
|
|
81
|
+
const editModeFromTabOptions =
|
|
82
|
+
finalComponentOptions?.tabOptions?.savedFilter?.editMode;
|
|
75
83
|
|
|
76
|
-
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (editModeFromTabOptions) {
|
|
86
|
+
setEditMode(editModeFromTabOptions);
|
|
87
|
+
}
|
|
88
|
+
}, [editModeFromTabOptions]);
|
|
77
89
|
|
|
78
90
|
// Map tabs to type
|
|
79
|
-
const tabMapping:
|
|
80
|
-
if (showMainFilter) tabMapping.push("
|
|
81
|
-
if (showSavedFilter) tabMapping.push("
|
|
82
|
-
if (showAttributesFilter) tabMapping.push("
|
|
91
|
+
const tabMapping: TabItem[] = [];
|
|
92
|
+
if (showMainFilter) tabMapping.push({ label: "Filter" });
|
|
93
|
+
if (showSavedFilter) tabMapping.push({ label: "Saved Filter" });
|
|
94
|
+
if (showAttributesFilter) tabMapping.push({ label: "Attributes" });
|
|
83
95
|
|
|
84
96
|
const clearAttributeRadio = () => {
|
|
85
97
|
const newFilterMaster = {
|
|
@@ -101,23 +113,16 @@ export function TableFilter({
|
|
|
101
113
|
type: "text",
|
|
102
114
|
};
|
|
103
115
|
|
|
104
|
-
//FOR TABS
|
|
105
|
-
const tabItems: TabItem[] = [
|
|
106
|
-
{ label: "Filter" },
|
|
107
|
-
{ label: "Saved Filter" },
|
|
108
|
-
{ label: "Attributes" },
|
|
109
|
-
];
|
|
110
|
-
|
|
111
116
|
const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {
|
|
112
|
-
const tabType = tabMapping[newValue];
|
|
117
|
+
const tabType = tabMapping[newValue]?.label;
|
|
113
118
|
|
|
114
|
-
if (tabType === "
|
|
119
|
+
if (tabType === "Attributes" && tabMapping[tabValue]?.label === "Filter") {
|
|
115
120
|
clearAttributeRadio();
|
|
116
121
|
}
|
|
117
122
|
|
|
118
123
|
setTabValue(newValue);
|
|
119
124
|
|
|
120
|
-
if (tabType === "
|
|
125
|
+
if (tabType === "Filter") {
|
|
121
126
|
setEditMode(false);
|
|
122
127
|
|
|
123
128
|
setFilterMaster(
|
|
@@ -132,13 +137,17 @@ export function TableFilter({
|
|
|
132
137
|
|
|
133
138
|
setFilters([]);
|
|
134
139
|
|
|
135
|
-
if (tabType === "
|
|
140
|
+
if (tabType?.label === "Saved Filter") setEditMode(false);
|
|
136
141
|
|
|
137
142
|
const patches: Partial<FilterMasterStateProps> = {};
|
|
138
143
|
|
|
139
|
-
if (tabType === "
|
|
140
|
-
patches.saved_filters = {
|
|
141
|
-
|
|
144
|
+
if (tabType?.label === "Saved Filter") {
|
|
145
|
+
patches.saved_filters = {
|
|
146
|
+
selectedId: "",
|
|
147
|
+
selectedName: "",
|
|
148
|
+
selectedCode: "",
|
|
149
|
+
};
|
|
150
|
+
} else if (tabType?.label === "Attributes") {
|
|
142
151
|
patches.attributes = { radio: [], selected: "" };
|
|
143
152
|
}
|
|
144
153
|
|
|
@@ -154,6 +163,25 @@ export function TableFilter({
|
|
|
154
163
|
onChangeFunction({ filterMaster: newFilterMasterState, filters });
|
|
155
164
|
};
|
|
156
165
|
|
|
166
|
+
const commonProps = {
|
|
167
|
+
columnsData,
|
|
168
|
+
tableStates,
|
|
169
|
+
onChangeFunction,
|
|
170
|
+
dropdownData,
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
const savedFilterProps = {
|
|
174
|
+
editMode,
|
|
175
|
+
setEditMode,
|
|
176
|
+
setDeleteFilterModalOpen,
|
|
177
|
+
tabValue,
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const attributesProps = {
|
|
181
|
+
searchTerm,
|
|
182
|
+
setSearchTerm,
|
|
183
|
+
};
|
|
184
|
+
|
|
157
185
|
return (
|
|
158
186
|
<Box sx={filterStyles.filterContainer}>
|
|
159
187
|
{showMainHeader && (
|
|
@@ -178,37 +206,31 @@ export function TableFilter({
|
|
|
178
206
|
<CustomTabs
|
|
179
207
|
value={tabValue}
|
|
180
208
|
onChange={handleTabChange}
|
|
181
|
-
tabItems={
|
|
209
|
+
tabItems={tabMapping}
|
|
182
210
|
activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}
|
|
183
211
|
handleCrossClick={handleTabCrossClick}
|
|
184
212
|
/>
|
|
185
213
|
)}
|
|
186
214
|
|
|
187
215
|
{!showTabs && (
|
|
188
|
-
<
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
filterComponentOptions={finalComponentOptions}
|
|
196
|
-
/>
|
|
197
|
-
</Box>
|
|
216
|
+
<SingleFilterRendering
|
|
217
|
+
{...commonProps}
|
|
218
|
+
{...savedFilterProps}
|
|
219
|
+
{...attributesProps}
|
|
220
|
+
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
221
|
+
filterComponentOptions={finalComponentOptions}
|
|
222
|
+
/>
|
|
198
223
|
)}
|
|
199
224
|
|
|
200
225
|
{showMainFilter && (
|
|
201
226
|
<CustomTabPanel
|
|
202
227
|
value={tabValue}
|
|
203
|
-
index={tabMapping.
|
|
228
|
+
index={tabMapping.findIndex((tab) => tab.label === "Filter")}
|
|
204
229
|
sx={{ p: "1.5rem 0.75rem" }}
|
|
205
230
|
>
|
|
206
231
|
<MainFilter
|
|
207
|
-
|
|
208
|
-
tableStates={tableStates}
|
|
232
|
+
{...commonProps}
|
|
209
233
|
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
210
|
-
dropdownData={dropdownData}
|
|
211
|
-
onChangeFunction={onChangeFunction}
|
|
212
234
|
filterComponentOptions={finalComponentOptions}
|
|
213
235
|
/>
|
|
214
236
|
</CustomTabPanel>
|
|
@@ -217,19 +239,14 @@ export function TableFilter({
|
|
|
217
239
|
{showSavedFilter && (
|
|
218
240
|
<CustomTabPanel
|
|
219
241
|
value={tabValue}
|
|
220
|
-
index={tabMapping.
|
|
242
|
+
index={tabMapping.findIndex((tab) => tab.label === "Saved Filter")}
|
|
221
243
|
sx={{ p: "1.5rem 0.75rem" }}
|
|
222
244
|
>
|
|
223
245
|
<SavedFilter
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
editMode={editMode}
|
|
227
|
-
setEditMode={setEditMode}
|
|
228
|
-
setDeleteFilterModalOpen={setDeleteFilterModalOpen}
|
|
246
|
+
{...commonProps}
|
|
247
|
+
{...savedFilterProps}
|
|
229
248
|
setSavedFilterModalOpen={setSaveFilterModalOpen}
|
|
230
|
-
|
|
231
|
-
tabValue={tabValue}
|
|
232
|
-
onChangeFunction={onChangeFunction}
|
|
249
|
+
filterComponentOptions={finalComponentOptions}
|
|
233
250
|
/>
|
|
234
251
|
</CustomTabPanel>
|
|
235
252
|
)}
|
|
@@ -237,17 +254,13 @@ export function TableFilter({
|
|
|
237
254
|
{showAttributesFilter && (
|
|
238
255
|
<CustomTabPanel
|
|
239
256
|
value={tabValue}
|
|
240
|
-
index={tabMapping.
|
|
257
|
+
index={tabMapping.findIndex((tab) => tab.label === "Attributes")}
|
|
241
258
|
sx={{ p: "1.5rem 0.75rem" }}
|
|
242
259
|
>
|
|
243
260
|
<AttributesFilter
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
dropdownData={dropdownData}
|
|
247
|
-
searchTerm={searchTerm}
|
|
248
|
-
setSearchTerm={setSearchTerm}
|
|
261
|
+
{...commonProps}
|
|
262
|
+
{...attributesProps}
|
|
249
263
|
tabValue={tabValue}
|
|
250
|
-
onChangeFunction={onChangeFunction}
|
|
251
264
|
/>
|
|
252
265
|
</CustomTabPanel>
|
|
253
266
|
)}
|
|
@@ -282,6 +295,8 @@ export function TableFilter({
|
|
|
282
295
|
const selectedId = filterMaster?.saved_filters?.selectedId;
|
|
283
296
|
const selectedName =
|
|
284
297
|
inputValue || filterMaster?.saved_filters?.selectedName;
|
|
298
|
+
const selectedCode =
|
|
299
|
+
filterMaster?.saved_filters?.selectedCode;
|
|
285
300
|
|
|
286
301
|
const newFilterMasterState = {
|
|
287
302
|
...filterMaster,
|
|
@@ -289,6 +304,7 @@ export function TableFilter({
|
|
|
289
304
|
...filterMaster?.attributes,
|
|
290
305
|
selectedId,
|
|
291
306
|
selectedName,
|
|
307
|
+
selectedCode,
|
|
292
308
|
},
|
|
293
309
|
} as FilterMasterStateProps;
|
|
294
310
|
|
|
@@ -406,6 +422,8 @@ export function TableFilter({
|
|
|
406
422
|
const selectedId = filterMaster?.saved_filters?.selectedId;
|
|
407
423
|
const selectedName =
|
|
408
424
|
inputValue || filterMaster?.saved_filters?.selectedName;
|
|
425
|
+
const selectedCode =
|
|
426
|
+
filterMaster?.saved_filters?.selectedCode;
|
|
409
427
|
|
|
410
428
|
const newFilterMasterState = {
|
|
411
429
|
...filterMaster,
|
|
@@ -413,6 +431,7 @@ export function TableFilter({
|
|
|
413
431
|
...filterMaster?.attributes,
|
|
414
432
|
selectedId,
|
|
415
433
|
selectedName,
|
|
434
|
+
selectedCode,
|
|
416
435
|
},
|
|
417
436
|
} as FilterMasterStateProps;
|
|
418
437
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
opacity: 0;
|
|
26
26
|
margin-right: calc(-1 * var(--filter-width));
|
|
27
27
|
transition: all 0.4s ease-in-out;
|
|
28
|
-
max-height: calc(100vh -
|
|
28
|
+
max-height: calc(100vh - 110px);
|
|
29
29
|
}
|
|
30
30
|
.ts__table__filter.show {
|
|
31
31
|
transition: all 0.4s ease-in-out;
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
max-width: var(--filter-width);
|
|
35
35
|
margin-left: 1.25rem;
|
|
36
36
|
margin-right: 0rem;
|
|
37
|
-
min-height: calc(100vh -
|
|
37
|
+
min-height: calc(100vh - 110px);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
|
|
60
60
|
.ts__table__wrapper {
|
|
61
61
|
overflow-x: auto;
|
|
62
|
-
max-height: calc(100vh -
|
|
62
|
+
max-height: calc(100vh - 160px);
|
|
63
63
|
|
|
64
64
|
&.is-fullscreen {
|
|
65
65
|
max-height: calc(100vh - 56px);
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
fetchDetailsByFilterId,
|
|
5
5
|
} from "../utils/apiColumn";
|
|
6
6
|
|
|
7
|
-
export const useDetailsQueryAPI = (value: string) => {
|
|
7
|
+
export const useDetailsQueryAPI = (value: string | undefined) => {
|
|
8
8
|
const detailsQuery = useQuery({
|
|
9
9
|
queryKey: ["details", value],
|
|
10
10
|
queryFn: () => fetchDetailsByFilterId(value),
|
|
@@ -47,7 +47,7 @@ export const entityTableFilterMaster = async (entity_type: string) => {
|
|
|
47
47
|
}
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
-
export const fetchDetailsByFilterId = async (filterId: string) => {
|
|
50
|
+
export const fetchDetailsByFilterId = async (filterId: string | undefined) => {
|
|
51
51
|
const response = await api.get(`/filter/${filterId}`);
|
|
52
52
|
return response.data;
|
|
53
53
|
};
|
|
@@ -12,6 +12,7 @@ type OperationMapProps = {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
export interface FilterOperationListProps {
|
|
15
|
+
code: string;
|
|
15
16
|
label: string;
|
|
16
17
|
value: string;
|
|
17
18
|
}
|
|
@@ -74,6 +75,11 @@ export interface FilterComponentOptionsMainFilterOptions {
|
|
|
74
75
|
>;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
export interface FilterComponentOptionsSavedFilterOptions {
|
|
79
|
+
showBackButton?: boolean;
|
|
80
|
+
editMode?: boolean;
|
|
81
|
+
}
|
|
82
|
+
|
|
77
83
|
// Button config type
|
|
78
84
|
type ButtonConfig = {
|
|
79
85
|
primary: string;
|
|
@@ -95,9 +101,13 @@ type RecordFilterComponentProps = {
|
|
|
95
101
|
delete: ModalConfig;
|
|
96
102
|
};
|
|
97
103
|
|
|
104
|
+
type TabType = "main" | "saved" | "attributes";
|
|
105
|
+
|
|
98
106
|
interface FilterComponentTabOptions {
|
|
99
107
|
mainFilter?: FilterComponentOptionsMainFilterOptions;
|
|
108
|
+
savedFilter?: FilterComponentOptionsSavedFilterOptions;
|
|
100
109
|
isSingleFilter?: boolean;
|
|
110
|
+
showFilter?: TabType;
|
|
101
111
|
}
|
|
102
112
|
|
|
103
113
|
export type FilterComponentOptions =
|
|
@@ -239,6 +249,7 @@ export interface FilterMasterStateProps {
|
|
|
239
249
|
saved_filters: {
|
|
240
250
|
selectedId: string;
|
|
241
251
|
selectedName: string;
|
|
252
|
+
selectedCode?: string;
|
|
242
253
|
};
|
|
243
254
|
activeFilterTabIndex: number;
|
|
244
255
|
}
|