Skip to content

Commit 3b8dc10

Browse files
authored
Merge pull request #269 from chrishiguto/feature/add-search-depends-on
feat: add searchDependsOn to validate when the customSearch can be di…
2 parents 30bdfc7 + 6c3580a commit 3b8dc10

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

packages/react-material-ui/src/components/submodules/Filter/index.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ type Props = {
4949
orderableListCacheKey?: string;
5050
cacheApiPath?: string;
5151
complementaryActions?: ReactNode;
52+
searchDependsOn?: string[];
5253
};
5354

5455
const FilterSubmodule = (props: Props) => {
@@ -64,9 +65,16 @@ const FilterSubmodule = (props: Props) => {
6465
customSearch,
6566
} = useCrudRoot();
6667

68+
const canMakeRequest =
69+
!props.searchDependsOn?.length ||
70+
props.searchDependsOn?.every(
71+
(dependency) =>
72+
!filters?.find((filter) => filter.id === dependency)?.isLoading,
73+
);
74+
6775
const customSearchData = useMemo(
6876
() => customSearch?.(filterValues),
69-
[filterValues],
77+
[filterValues, canMakeRequest],
7078
);
7179

7280
const externalSearch = useMemo(
@@ -105,7 +113,7 @@ const FilterSubmodule = (props: Props) => {
105113
}, {});
106114

107115
useEffect(() => {
108-
if (!hasExternalSearch) {
116+
if (!hasExternalSearch && canMakeRequest) {
109117
updateSearch(null);
110118
const filterObj = {
111119
...reduceFilters(filterValues, 'simpleFilter'),
@@ -115,7 +123,7 @@ const FilterSubmodule = (props: Props) => {
115123
updateSimpleFilter(filterObj, true);
116124
}
117125

118-
if (hasExternalSearch) {
126+
if (hasExternalSearch && canMakeRequest) {
119127
const filterObj = {
120128
...reduceFilters(filterValues, 'search'),
121129
...customFilter?.(filterValues),

packages/react-material-ui/src/components/submodules/Table/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export interface TableSubmoduleProps {
117117
addButtonContent?: ReactNode;
118118
additionalFilterRowContent?: ReactNode;
119119
additionalTableContent?: ReactNode;
120+
searchDependsOn?: string[];
120121
}
121122

122123
const TableSubmodule = (props: TableSubmoduleProps) => {
@@ -279,6 +280,7 @@ const TableSubmodule = (props: TableSubmoduleProps) => {
279280
<FilterSubmodule
280281
orderableListCacheKey={props.filterCacheKey}
281282
cacheApiPath={props.cacheApiPath}
283+
searchDependsOn={props.searchDependsOn}
282284
complementaryActions={
283285
<Box sx={{ display: 'flex' }}>
284286
{props.reordable !== false && (

packages/react-material-ui/src/modules/crud/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export interface ModuleProps {
107107
addButtonEndIcon?: ReactNode;
108108
addButtonContent?: ReactNode;
109109
additionalFilterRowContent?: ReactNode;
110+
searchDependsOn?: string[];
110111
}
111112

112113
const CrudModule = (props: ModuleProps) => {
@@ -320,6 +321,7 @@ const CrudModule = (props: ModuleProps) => {
320321
addButtonEndIcon={props.addButtonEndIcon}
321322
addButtonContent={props.addButtonContent}
322323
additionalFilterRowContent={props.additionalFilterRowContent}
324+
searchDependsOn={props.searchDependsOn}
323325
{...useTableReturn}
324326
{...tableSubmoduleProps}
325327
/>

0 commit comments

Comments
 (0)