Skip to content

Commit 5141f7a

Browse files
authored
Merge pull request #183 from devforth/fix-enum-array-filter
fix: fix filtering for array of enums/foreign resources
2 parents a46e053 + 4cb8ee2 commit 5141f7a

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

adminforth/dataConnectors/baseConnector.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,28 @@ export default class AdminForthBaseConnector implements IAdminForthDataSourceCon
6868
// go through all filters in array and call validation+normalization for each
6969
// as soon as error is encountered, there is no point in calling validation for other filters
7070
// if error is not encountered all filters will be validated and normalized
71-
return filters.reduce((result, f) => {
71+
return filters.reduce((result, f, fIndex) => {
7272
if (!result.ok) {
7373
return result;
7474
}
7575

76-
return this.validateAndNormalizeFilters(f, resource);
76+
const filterValidation = this.validateAndNormalizeFilters(f, resource);
77+
78+
// in case column isArray and enumerator/foreign resource - IN filter must be transformed into OR filter
79+
if (filterValidation.ok && f.operator == AdminForthFilterOperators.IN) {
80+
const column = resource.dataSourceColumns.find((col) => col.name == (f as IAdminForthSingleFilter).field);
81+
// console.log(`\n~~~ column: ${JSON.stringify(column, null, 2)}\n~~~ resource.columns: ${JSON.stringify(resource.dataSourceColumns, null, 2)}\n~~~ filter: ${JSON.stringify(f, null, 2)}\n`);
82+
if (column.isArray?.enabled && (column.enum || column.foreignResource)) {
83+
filters[fIndex] = {
84+
operator: AdminForthFilterOperators.OR,
85+
subFilters: f.value.map((v: any) => {
86+
return { field: column.name, operator: AdminForthFilterOperators.LIKE, value: v };
87+
}),
88+
};
89+
}
90+
}
91+
92+
return filterValidation;
7793
}, { ok: true, error: '' });
7894
}
7995

0 commit comments

Comments
 (0)