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.
Files changed (34) hide show
  1. package/package.json +2 -3
  2. package/src/index.ts +1 -0
  3. package/src/listing/components/common/loader/loader.tsx +1 -0
  4. package/src/listing/components/filter/components/attributes-filter.tsx +3 -91
  5. package/src/listing/components/filter/components/forms/components/Date.tsx +2 -2
  6. package/src/listing/components/filter/components/forms/components/Dropdown.tsx +2 -2
  7. package/src/listing/components/filter/components/forms/components/Filter-criteria.tsx +31 -82
  8. package/src/listing/components/filter/components/forms/components/Multi-Select.tsx +2 -2
  9. package/src/listing/components/filter/components/forms/components/Select.tsx +2 -2
  10. package/src/listing/components/filter/components/forms/components/Textfield.tsx +2 -2
  11. package/src/listing/components/filter/components/forms/components/empty-list.tsx +17 -0
  12. package/src/listing/components/filter/components/forms/components/filter-criteria-entity-list.tsx +92 -0
  13. package/src/listing/components/filter/components/forms/components/filter-criteria-list.tsx +104 -0
  14. package/src/listing/components/filter/components/forms/components/styles.tsx +2 -1
  15. package/src/listing/components/filter/components/forms/index.tsx +238 -174
  16. package/src/listing/components/filter/components/main-filter.tsx +6 -14
  17. package/src/listing/components/filter/components/saved-edit-filter.tsx +0 -31
  18. package/src/listing/components/filter/components/saved-filter.tsx +0 -22
  19. package/src/listing/components/filter/components/search/index.tsx +2 -2
  20. package/src/listing/components/filter/index.tsx +162 -130
  21. package/src/listing/components/filter/style.ts +20 -3
  22. package/src/listing/libs/hooks/useCraftTable.tsx +9 -0
  23. package/src/listing/libs/hooks/useEntityTableAPI.tsx +25 -0
  24. package/src/listing/libs/utils/apiColumn.ts +27 -1
  25. package/src/listing/libs/utils/deep-merge-objects.ts +18 -0
  26. package/src/listing/types/common.ts +0 -2
  27. package/src/listing/types/filter.ts +54 -7
  28. package/src/listing/types/table-options.ts +8 -0
  29. package/src/view/FIlterWrapper.tsx +45 -6
  30. package/dist/index.d.ts +0 -361
  31. package/dist/index.js +0 -2
  32. package/dist/index.js.map +0 -1
  33. package/dist/index.mjs +0 -2
  34. 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, { useEffect, useState } from "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: FILTER_TAB,
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
- useEffect(() => {
82
- if (!columnsData || !columnsData?.column_list) {
83
- setSelectedFilters([]);
84
- return;
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
- if (tabValue === ATTR_TAB && newValue === FILTER_TAB) {
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
- if (newValue === 0) {
117
+
118
+ if (tabType === "main") {
113
119
  setEditMode(false);
114
- setSelectedFilters([]);
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
- // always-clear bits
129
+ const tabType = tabMapping[index];
130
+
127
131
  setFilters([]);
128
- setSelectedFilters([]);
129
132
 
130
- // only tab 1 needs this
131
- if (index === 1) setEditMode(false);
133
+ if (tabType === "saved") setEditMode(false);
132
134
 
133
- const patches: Record<number, Partial<FilterMasterStateProps>> = {
134
- 0: {}, // no extra fields
135
- 1: { saved_filters: { selectedId: "", selectedName: "" } },
136
- 2: { attributes: { radio: [], selected: "" } },
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
- ...(patches[index] ?? {}),
146
+ ...patches,
143
147
  } as FilterMasterStateProps;
144
148
 
145
149
  setFilterMaster(newFilterMasterState);
146
150
 
147
- const newState = {
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
- <Box sx={filterStyles.filterMainHeader}>
158
- <Typography variant="h6" fontWeight="bold" fontSize="18px">
159
- Filter
160
- </Typography>
161
- <IconButton
162
- onClick={(e) => {
163
- e.stopPropagation();
164
- onClose && onClose();
165
- setShowFilterOption(false);
166
- }}
167
- aria-label="close"
168
- >
169
- <CloseIcon fontSize="small" />
170
- </IconButton>
171
- </Box>
172
-
173
- <CustomTabs
174
- value={tabValue}
175
- onChange={handleTabChange}
176
- tabItems={tabItems}
177
- activeFilterIndex={filterMaster?.activeFilterTabIndex ?? 0}
178
- handleCrossClick={handleTabCrossClick}
179
- />
180
-
181
- <CustomTabPanel value={tabValue} index={0} sx={{ p: "1.5rem 0.75rem" }}>
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
- </CustomTabPanel>
192
-
193
- <CustomTabPanel value={tabValue} index={1} sx={{ p: "1.5rem 0.75rem" }}>
194
- <SavedFilter
195
- columnsData={columnsData}
196
- tableStates={tableStates}
197
- selectedFilters={selectedFilters}
198
- setSelectedFilters={setSelectedFilters}
199
- editMode={editMode}
200
- setEditMode={setEditMode}
201
- setDeleteFilterModalOpen={setDeleteFilterModalOpen}
202
- setSavedFilterModalOpen={setSaveFilterModalOpen}
203
- dropdownData={dropdownData}
204
- tabValue={tabValue}
205
- onChangeFunction={onChangeFunction}
206
- />
207
- </CustomTabPanel>
208
-
209
- <CustomTabPanel value={tabValue} index={2} sx={{ p: "1.5rem 0.75rem" }}>
210
- <AttributesFilter
211
- columnsData={columnsData}
212
- tableStates={tableStates}
213
- dropdownData={dropdownData}
214
- searchTerm={searchTerm}
215
- setSearchTerm={setSearchTerm}
216
- tabValue={tabValue}
217
- onChangeFunction={onChangeFunction}
218
- />
219
- </CustomTabPanel>
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
- borderRadius: 2,
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: "13px",
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(`/entity/create?entity_type=${MAPPED_ENTITY_TYPE}`, payload);
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
+ }
@@ -1,5 +1,3 @@
1
- import { FilterMasterStateProps, UpdatedFilterStateProps } from "./filter";
2
-
3
1
  export interface defaultColumnsProps {
4
2
  id: number;
5
3
  name: string;