rez-table-listing-mui 1.0.32 → 1.0.34

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 (29) hide show
  1. package/dist/index.d.ts +11 -4
  2. package/dist/index.js +1 -1
  3. package/dist/index.mjs +1 -1
  4. package/package.json +1 -1
  5. package/src/App.tsx +31 -29
  6. package/src/components/filter/components/attributes-filter.tsx +186 -13
  7. package/src/components/filter/components/forms/components/Date.tsx +94 -16
  8. package/src/components/filter/components/forms/components/Dropdown.tsx +12 -7
  9. package/src/components/filter/components/forms/components/Filter-criteria.tsx +47 -40
  10. package/src/components/filter/components/forms/components/Multi-Select.tsx +6 -1
  11. package/src/components/filter/components/forms/components/Select.tsx +9 -0
  12. package/src/components/filter/components/forms/components/Textfield.tsx +6 -0
  13. package/src/components/filter/components/forms/index.tsx +135 -211
  14. package/src/components/filter/components/main-filter.tsx +2 -7
  15. package/src/components/filter/components/saved-edit-filter.tsx +15 -17
  16. package/src/components/filter/components/saved-filter.tsx +2 -1
  17. package/src/components/filter/components/search/index.tsx +0 -1
  18. package/src/components/filter/components/tabs/custom-tab-panel.tsx +7 -3
  19. package/src/components/filter/components/tabs/index.tsx +8 -8
  20. package/src/components/filter/index.tsx +187 -172
  21. package/src/components/filter/style.ts +106 -0
  22. package/src/components/index-table.tsx +87 -63
  23. package/src/components/index.scss +33 -0
  24. package/src/components/topbar/index.tsx +7 -33
  25. package/src/index.ts +2 -0
  26. package/src/libs/utils/common.ts +1 -1
  27. package/src/types/filter.ts +1 -0
  28. package/src/types/table.ts +7 -2
  29. package/src/components/filter/components/forms/components/Attributes-select.tsx +0 -192
@@ -9,6 +9,7 @@ interface FormSelectProps {
9
9
  dropdownData: Record<string, DropdownOption[]>;
10
10
  isLoading?: boolean;
11
11
  sx?: SxProps<Theme>;
12
+ onValueChange?: () => void;
12
13
  }
13
14
 
14
15
  const FormSelect = ({
@@ -17,6 +18,7 @@ const FormSelect = ({
17
18
  dropdownData,
18
19
  isLoading = false,
19
20
  sx,
21
+ onValueChange,
20
22
  }: FormSelectProps) => {
21
23
  // Use dropdownData if available, otherwise fallback to filter's dropdown_list
22
24
  const dropdownOptions =
@@ -33,10 +35,17 @@ const FormSelect = ({
33
35
  {...field}
34
36
  disabled={isLoading}
35
37
  sx={{
38
+ "&.Mui-focused fieldset": {
39
+ borderColor: "#7A5AF8 !important",
40
+ },
36
41
  "& .MuiOutlinedInput-input": {
37
42
  padding: "12px 20px",
38
43
  },
39
44
  }}
45
+ onChange={(e) => {
46
+ field.onChange(e);
47
+ onValueChange?.();
48
+ }}
40
49
  >
41
50
  {dropdownOptions.map((item, idx) => (
42
51
  <MenuItem key={idx} value={item.value}>
@@ -7,12 +7,14 @@ interface FormTextfieldProps {
7
7
  filter: UpdatedFilterStateProps;
8
8
  control: any;
9
9
  isLoading?: boolean;
10
+ onValueChange?: () => void;
10
11
  }
11
12
 
12
13
  const FormTextfield = ({
13
14
  filter,
14
15
  control,
15
16
  isLoading = false,
17
+ onValueChange,
16
18
  }: FormTextfieldProps) => {
17
19
  return (
18
20
  <Controller
@@ -34,6 +36,10 @@ const FormTextfield = ({
34
36
  type={filter.data_type || "text"}
35
37
  placeholder={"Enter value"}
36
38
  disabled={isLoading}
39
+ onChange={(e) => {
40
+ field.onChange(e);
41
+ onValueChange?.();
42
+ }}
37
43
  />
38
44
  )}
39
45
  />
@@ -24,6 +24,7 @@ import { CraftTableOptionsProps } from "../../../../types/table-options";
24
24
  import FilterCriteria from "./components/Filter-criteria";
25
25
  import CustomSearch from "../search";
26
26
  import { customDebounce } from "../../../../libs/utils/debounce";
27
+ import { filterFormStyles } from "../../style";
27
28
 
28
29
  interface FormValues {
29
30
  filterName: string;
@@ -43,7 +44,6 @@ const FilterForm = ({
43
44
  selectedFilters,
44
45
  setSelectedFilters,
45
46
  handleRemoveFilter,
46
- handleClearAllFilters,
47
47
  editMode = false,
48
48
  tableStates,
49
49
  setSavedFilterModalOpen,
@@ -58,13 +58,13 @@ const FilterForm = ({
58
58
  React.SetStateAction<UpdatedFilterStateProps[]>
59
59
  >;
60
60
  handleRemoveFilter: (filter_attribute: string) => void;
61
- handleClearAllFilters: () => void;
62
61
  editMode?: boolean;
63
62
  tableStates: CraftTableOptionsProps;
64
63
  setSavedFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
65
64
  setDeleteFilterModalOpen?: React.Dispatch<React.SetStateAction<boolean>>;
66
65
  }) => {
67
- const { filterMaster, setFilters, setFilterMaster } = tableStates;
66
+ const { filterMaster, setFilters, setFilterMaster, setPagination } =
67
+ tableStates;
68
68
 
69
69
  const filterName = filterMaster?.saved_filters?.selectedName || "";
70
70
 
@@ -82,6 +82,7 @@ const FilterForm = ({
82
82
 
83
83
  return {
84
84
  filterName: filterName ?? "",
85
+ dummyChange: "",
85
86
  ...filterValues,
86
87
  };
87
88
  }, [selectedFilters, filterName]);
@@ -91,63 +92,55 @@ const FilterForm = ({
91
92
  watch,
92
93
  reset,
93
94
  formState: { isDirty },
94
- unregister,
95
95
  setValue,
96
- } = useForm<FormValues>({
96
+ unregister,
97
+ } = useForm<FormValues & { dummyChange: string }>({
97
98
  mode: "onChange",
98
99
  defaultValues,
99
100
  resetOptions: {
100
- keepDirtyValues: false, // Keep modified values when resetting
101
- keepErrors: false, // Keep form errors when resetting
101
+ keepDirtyValues: false,
102
+ keepErrors: false,
102
103
  },
103
104
  });
104
105
 
105
- // Watch for form changes
106
106
  const formValues = watch();
107
107
 
108
- // Reset form when filters change
109
108
  useEffect(() => {
110
109
  if (!isDirty) reset(defaultValues);
111
110
  }, [selectedFilters, filterName]);
112
111
 
113
- // Create a debounced version of the filter update function
114
112
  const debouncedUpdateFilters = useCallback(
115
113
  customDebounce((updatedFilters: UpdatedFilterStateProps[]) => {
116
114
  setSelectedFilters(updatedFilters);
117
115
  setFilters(updatedFilters);
118
- }, 1000), // 1000ms delay
116
+ }, 1000),
119
117
  [setSelectedFilters, setFilters]
120
118
  );
121
119
 
122
- // Effect to update filters when form values change
123
- useEffect(() => {
124
- if (isDirty) {
125
- const updatedFilters = selectedFilters.map((filter) => {
126
- if (filter.name && typeof formValues[filter.name] === "object") {
127
- const filterValue = formValues[filter.name] as {
128
- value: string | string[];
129
- operator: string;
130
- };
120
+ const updateFiltersFromForm = useCallback(() => {
121
+ const updatedFilters = selectedFilters.map((filter) => {
122
+ if (filter.name && typeof formValues[filter.name] === "object") {
123
+ const filterValue = formValues[filter.name] as {
124
+ value: string | string[];
125
+ operator: string;
126
+ };
131
127
 
132
- return {
133
- ...filter,
134
- filter_value: filterValue.value,
135
- filter_operator: filterValue.operator,
136
- };
137
- }
138
- return filter;
139
- });
128
+ return {
129
+ ...filter,
130
+ filter_value: filterValue.value,
131
+ filter_operator: filterValue.operator,
132
+ };
133
+ }
134
+ return filter;
135
+ });
140
136
 
141
- // Use the debounced update function instead of direct updates
142
- debouncedUpdateFilters(updatedFilters);
143
- }
144
- }, [formValues, isDirty, selectedFilters, debouncedUpdateFilters]);
137
+ setPagination((prev) => ({ ...prev, pageIndex: 0 }));
138
+ debouncedUpdateFilters(updatedFilters);
139
+ }, [formValues, selectedFilters, debouncedUpdateFilters]);
145
140
 
146
- // Cleanup effect
147
141
  useEffect(() => {
148
142
  return () => {
149
- // Reset form and clear any lingering state
150
- reset(defaultValues);
143
+ reset();
151
144
  selectedFilters.forEach((filter) => {
152
145
  if (filter.name) {
153
146
  unregister(filter.name);
@@ -156,15 +149,9 @@ const FilterForm = ({
156
149
  };
157
150
  }, []);
158
151
 
159
- const editModeStylingBorder = {
160
- border: "1px solid #c5c5c5",
161
- borderRadius: "6px",
162
- padding: "5px 10px 10px 10px",
163
- };
164
-
165
152
  return (
166
153
  <form>
167
- <Box sx={editMode ? editModeStylingBorder : {}}>
154
+ <Box sx={editMode ? filterFormStyles.formEditModeStyle : {}}>
168
155
  {editMode && (
169
156
  <Box
170
157
  sx={{
@@ -190,10 +177,9 @@ const FilterForm = ({
190
177
  fullWidth
191
178
  size="small"
192
179
  placeholder="Filter Name"
193
- value={field.value}
180
+ value={filterName || field.value}
194
181
  onChange={(e) => {
195
182
  field.onChange(e);
196
-
197
183
  if (editMode) {
198
184
  setFilterMaster(
199
185
  (prev) =>
@@ -227,9 +213,9 @@ const FilterForm = ({
227
213
  <Box onClick={(e) => e.stopPropagation()}>
228
214
  <IconButton
229
215
  size="small"
230
- onClick={() => {
231
- setDeleteFilterModalOpen && setDeleteFilterModalOpen(true);
232
- }}
216
+ onClick={() =>
217
+ setDeleteFilterModalOpen && setDeleteFilterModalOpen(true)
218
+ }
233
219
  >
234
220
  <DeleteIcon />
235
221
  </IconButton>
@@ -237,178 +223,117 @@ const FilterForm = ({
237
223
  </Box>
238
224
  )}
239
225
 
240
- <FilterCriteria
241
- columnsData={columnsData}
242
- tableStates={tableStates}
243
- setSelectedFilters={setSelectedFilters}
244
- // searchTerm={searchTerm}
245
- // setSearchTerm={setSearchTerm}
246
- />
247
-
248
- {/* Render search input */}
249
- {!editMode && (
250
- <CustomSearch value={searchTerm} onChange={setSearchTerm} />
251
- )}
226
+ <Box sx={filterFormStyles.formFlexContainer}>
227
+ <FilterCriteria
228
+ columnsData={columnsData}
229
+ tableStates={tableStates}
230
+ setSelectedFilters={setSelectedFilters}
231
+ searchTerm={searchTerm}
232
+ setSearchTerm={setSearchTerm}
233
+ />
252
234
 
253
- {selectedFilters
254
- ?.filter(
255
- (filter) =>
256
- filter.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
257
- filter.filter_value
258
- ?.toString()
259
- .toLowerCase()
260
- .includes(searchTerm.toLowerCase())
261
- )
262
- .map((filter) => {
263
- const { dropdown_list = [] } = filter;
235
+ {!editMode && (
236
+ <CustomSearch value={searchTerm} onChange={setSearchTerm} />
237
+ )}
264
238
 
265
- return (
266
- <Box
267
- key={filter.filter_attribute}
268
- sx={{
269
- mt: 2,
270
- p: 1,
271
- borderRadius: 2,
272
- backgroundColor: "#FAFAFA",
273
- display: "flex",
274
- flexDirection: "column",
275
- gap: 0.5,
276
- // border: "1px solid #E0E0E0",
277
- }}
278
- >
239
+ {selectedFilters
240
+ .filter(
241
+ (filter) =>
242
+ filter.name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
243
+ filter.filter_value
244
+ ?.toString()
245
+ .toLowerCase()
246
+ .includes(searchTerm.toLowerCase())
247
+ )
248
+ .map((filter) => {
249
+ const { dropdown_list = [] } = filter;
250
+ return (
279
251
  <Box
280
- sx={{
281
- display: "flex",
282
- justifyContent: "flex-start",
283
- alignItems: "center",
284
- gap: 2,
285
- }}
252
+ key={filter.filter_attribute}
253
+ sx={filterFormStyles.formListItem}
286
254
  >
287
- <Typography
288
- sx={{
289
- fontWeight: 500,
290
- fontSize: "13px",
291
- color: "#797877",
292
- }}
293
- >
294
- {filter.name}
295
- </Typography>
296
- <FormDropdown
297
- filter={filter}
298
- control={control}
299
- dropdownList={dropdown_list}
300
- sx={{
301
- fontSize: "13px",
302
- minWidth: 50,
303
- border: "none",
304
- boxShadow: "none",
305
- }}
306
- />
307
- <IconButton
308
- sx={{ marginLeft: "auto" }}
309
- onClick={() => {
310
- const fieldName = `${filter.name}.value`;
311
- unregister(fieldName);
312
-
313
- setValue("filterName", formValues.filterName, {
314
- shouldDirty: true,
315
- });
316
-
317
- handleRemoveFilter(filter.filter_attribute);
318
- }}
319
- size="small"
320
- >
321
- <CloseIcon />
322
- </IconButton>
323
- </Box>
324
-
325
- <Box>
326
- {filter.data_type === "text" ? (
327
- <FormTextfield filter={filter} control={control} />
328
- ) : filter.data_type === "number" ? (
329
- <FormTextfield filter={filter} control={control} />
330
- ) : filter.data_type === "date" ? (
331
- <FormDatePicker
332
- filter={filter}
333
- control={control}
334
- sx={{
335
- "& .MuiOutlinedInput-root": {
336
- borderRadius: "6px",
337
- fontSize: "14px",
338
- bgcolor: "#ffffff",
339
- "& fieldset": { borderColor: "#c1c1c1" },
340
- "&.Mui-focused fieldset": {
341
- borderColor: "#7A5AF8",
342
- },
343
- },
344
- }}
345
- />
346
- ) : filter.data_type === "select" ? (
347
- <FormSelect
255
+ <Box sx={filterFormStyles.formListItemHeader}>
256
+ <Typography sx={filterFormStyles.formListItemHeaderName}>
257
+ {filter.name}
258
+ </Typography>
259
+ <FormDropdown
348
260
  filter={filter}
349
261
  control={control}
350
- dropdownData={dropdownData}
351
- sx={{
352
- "& .MuiOutlinedInput-root": {
353
- borderRadius: "6px",
354
- fontSize: "14px",
355
- bgcolor: "#ffffff",
356
- "& fieldset": { borderColor: "#c1c1c1" },
357
- "&.Mui-focused fieldset": {
358
- borderColor: "#7A5AF8",
359
- },
360
- },
361
- }}
262
+ dropdownList={dropdown_list}
263
+ sx={filterFormStyles.formListItemHeaderDropdown}
264
+ onValueChange={updateFiltersFromForm}
362
265
  />
363
- ) : filter.data_type === "multiselect" ? (
364
- <FormMultiSelect
365
- filter={filter}
366
- control={control}
367
- dropdownData={dropdownData}
368
- sx={{
369
- "& .MuiOutlinedInput-root": {
370
- borderRadius: "6px",
371
- fontSize: "14px",
372
- bgcolor: "#ffffff",
373
- "& fieldset": { borderColor: "#c1c1c1" },
374
- "&.Mui-focused fieldset": {
375
- borderColor: "#7A5AF8",
376
- },
377
- },
266
+ <IconButton
267
+ sx={{ marginLeft: "auto" }}
268
+ onClick={() => {
269
+ unregister(`${filter.name}.value`);
270
+ unregister(`${filter.name}.operator`);
271
+
272
+ // Toggle dummy field to force form dirty
273
+ const dummy = watch("dummyChange");
274
+ setValue(
275
+ "dummyChange",
276
+ dummy === "changed" ? "reset" : "changed",
277
+ {
278
+ shouldDirty: true,
279
+ }
280
+ );
281
+
282
+ handleRemoveFilter(filter.filter_attribute);
378
283
  }}
379
- />
380
- ) : (
381
- <FormControl
382
- fullWidth
383
284
  size="small"
384
- sx={{
385
- "& .MuiOutlinedInput-root": {
386
- borderRadius: "6px",
387
- fontSize: "14px",
388
- bgcolor: "#ffffff",
389
- "& fieldset": { borderColor: "#c1c1c1" },
390
- "&.Mui-focused fieldset": {
391
- borderColor: "#7A5AF8",
392
- },
393
- },
394
- }}
395
- ></FormControl>
396
- )}
285
+ >
286
+ <CloseIcon />
287
+ </IconButton>
288
+ </Box>
289
+
290
+ <Box>
291
+ {filter.data_type === "text" ||
292
+ filter.data_type === "number" ? (
293
+ <FormTextfield
294
+ filter={filter}
295
+ control={control}
296
+ onValueChange={updateFiltersFromForm}
297
+ />
298
+ ) : filter.data_type === "year" ? (
299
+ <FormDatePicker
300
+ filter={filter}
301
+ control={control}
302
+ views={["year"]}
303
+ onValueChange={updateFiltersFromForm}
304
+ />
305
+ ) : filter.data_type === "date" ? (
306
+ <FormDatePicker
307
+ filter={filter}
308
+ control={control}
309
+ onValueChange={updateFiltersFromForm}
310
+ />
311
+ ) : filter.data_type === "select" ? (
312
+ <FormSelect
313
+ filter={filter}
314
+ control={control}
315
+ dropdownData={dropdownData}
316
+ onValueChange={updateFiltersFromForm}
317
+ />
318
+ ) : filter.data_type === "multiselect" ? (
319
+ <FormMultiSelect
320
+ filter={filter}
321
+ control={control}
322
+ dropdownData={dropdownData}
323
+ onValueChange={updateFiltersFromForm}
324
+ />
325
+ ) : (
326
+ <FormControl fullWidth size="small" />
327
+ )}
328
+ </Box>
397
329
  </Box>
398
- </Box>
399
- );
400
- })}
330
+ );
331
+ })}
332
+ </Box>
401
333
  </Box>
402
334
 
403
335
  {selectedFilters.length > 0 && (
404
- <Box
405
- sx={{
406
- display: "flex",
407
- justifyContent: "center",
408
- gap: 1,
409
- mt: 3,
410
- }}
411
- >
336
+ <Box sx={{ display: "flex", justifyContent: "center", gap: 1, mt: 3 }}>
412
337
  <Button
413
338
  variant="outlined"
414
339
  sx={{
@@ -420,8 +345,8 @@ const FilterForm = ({
420
345
  }}
421
346
  fullWidth
422
347
  onClick={() => {
423
- reset();
424
- handleClearAllFilters();
348
+ setFilters([]);
349
+ setSelectedFilters([]);
425
350
  }}
426
351
  >
427
352
  Clear All
@@ -430,16 +355,15 @@ const FilterForm = ({
430
355
  <Button
431
356
  variant="contained"
432
357
  fullWidth
358
+ disabled={!isDirty && editMode}
433
359
  sx={{
434
360
  color: "white",
435
361
  backgroundColor: "#7A5AF8",
436
362
  "&.Mui-disabled": {
437
- backgroundColor: "#d7cefd", // Change background color when disabled
363
+ backgroundColor: "#d7cefd",
438
364
  color: "rgba(255, 255, 255, 0.7)",
439
365
  },
440
366
  }}
441
- // onClick={() => setSaveFilterModalOpen(true)}
442
- // disabled={editMode && !isDirty}
443
367
  onClick={() => {
444
368
  setSavedFilterModalOpen && setSavedFilterModalOpen(true);
445
369
  }}
@@ -5,6 +5,7 @@ import {
5
5
  FilterFormComponentProps,
6
6
  FilterMasterStateProps,
7
7
  } from "../../../types/filter";
8
+ import { filterStyles } from "../style";
8
9
 
9
10
  const MainFilter = ({
10
11
  columnsData,
@@ -37,13 +38,8 @@ const MainFilter = ({
37
38
  );
38
39
  };
39
40
 
40
- const handleClearAllFilters = () => {
41
- setFilters([]);
42
- setSelectedFilters([]);
43
- };
44
-
45
41
  return (
46
- <Box>
42
+ <Box sx={filterStyles.filterMainComponentWrapper}>
47
43
  {/* Set selectedFilters state */}
48
44
 
49
45
  {/* Render selectedFilters state */}
@@ -54,7 +50,6 @@ const MainFilter = ({
54
50
  selectedFilters={selectedFilters}
55
51
  setSelectedFilters={setSelectedFilters}
56
52
  handleRemoveFilter={handleRemoveFilter}
57
- handleClearAllFilters={handleClearAllFilters}
58
53
  tableStates={tableStates}
59
54
  setSavedFilterModalOpen={setSavedFilterModalOpen}
60
55
  dropdownData={dropdownData}
@@ -47,9 +47,21 @@ const SavedFilterEditComponent = ({
47
47
  );
48
48
  };
49
49
 
50
- const handleClearAllFilters = () => {
50
+ const handleBackButtonClick = () => {
51
+ setEditMode && setEditMode(false);
51
52
  setFilters([]);
52
- setSelectedFilters([]);
53
+ setFilterMaster(
54
+ (prev) =>
55
+ ({
56
+ ...prev,
57
+ saved_filters: {
58
+ ...prev?.saved_filters,
59
+ selectedId: "",
60
+ selectedName: "",
61
+ },
62
+ activeFilterTabIndex: -1,
63
+ } as FilterMasterStateProps)
64
+ );
53
65
  };
54
66
 
55
67
  return (
@@ -63,20 +75,7 @@ const SavedFilterEditComponent = ({
63
75
  cursor: "pointer",
64
76
  mb: 2,
65
77
  }}
66
- onClick={() => {
67
- setEditMode && setEditMode(false);
68
- setFilters([]);
69
- setFilterMaster(
70
- (prev) =>
71
- ({
72
- ...prev,
73
- saved_filters: {
74
- ...prev?.saved_filters,
75
- selectedId: "",
76
- },
77
- } as FilterMasterStateProps)
78
- );
79
- }}
78
+ onClick={handleBackButtonClick}
80
79
  >
81
80
  <BackArrow sx={{ width: "13px", height: "13px" }} />
82
81
  <Typography variant="body2" sx={{ color: "#8592A3" }}>
@@ -90,7 +89,6 @@ const SavedFilterEditComponent = ({
90
89
  selectedFilters={selectedFilters}
91
90
  setSelectedFilters={setSelectedFilters}
92
91
  handleRemoveFilter={handleRemoveFilter}
93
- handleClearAllFilters={handleClearAllFilters}
94
92
  editMode={editMode}
95
93
  tableStates={tableStates}
96
94
  columnsData={columnsData}
@@ -15,6 +15,7 @@ import {
15
15
  import CustomSearch from "./search";
16
16
  import { DeleteIcon } from "../../../assets/svg";
17
17
  import SavedFilterEditComponent from "./saved-edit-filter";
18
+ import { filterStyles } from "../style";
18
19
 
19
20
  const SavedFilter = ({
20
21
  columnsData,
@@ -124,7 +125,7 @@ const SavedFilter = ({
124
125
  );
125
126
 
126
127
  return (
127
- <Box>
128
+ <Box sx={filterStyles.filterMainComponentWrapper}>
128
129
  {/* Render search input and list */}
129
130
  {!editMode && renderList()}
130
131
 
@@ -41,7 +41,6 @@ const CustomSearch = ({
41
41
  ),
42
42
  }}
43
43
  sx={{
44
- mt: 2,
45
44
  "& .MuiOutlinedInput-root": {
46
45
  borderRadius: "6px",
47
46
  fontSize: "14px",
@@ -1,17 +1,20 @@
1
1
  import * as React from "react";
2
2
  import Box from "@mui/material/Box";
3
+ import { SxProps, Theme } from "@mui/material";
3
4
 
4
5
  interface TabPanelProps {
5
6
  children?: React.ReactNode;
6
7
  index: number;
7
8
  value: number;
9
+ sx?: SxProps<Theme>;
8
10
  }
9
11
 
10
12
  const CustomTabPanel = ({
11
13
  children,
12
14
  value,
13
15
  index,
14
- ...other
16
+ sx,
17
+ ...props
15
18
  }: TabPanelProps) => {
16
19
  return (
17
20
  <div
@@ -19,9 +22,10 @@ const CustomTabPanel = ({
19
22
  hidden={value !== index}
20
23
  id={`simple-tabpanel-${index}`}
21
24
  aria-labelledby={`simple-tab-${index}`}
22
- {...other}
25
+ style={{ height: "100%" }}
26
+ {...props}
23
27
  >
24
- {value === index && <Box sx={{ p: 3 }}>{children}</Box>}
28
+ {value === index && <Box sx={{ height: "100%", ...sx }}>{children}</Box>}
25
29
  </div>
26
30
  );
27
31
  };