Skip to content

Commit 8239cc8

Browse files
authored
fix: Internal classes _User, _Role, _Installation referenced with pointer don't appear in data browser filter dialog (#2599)
1 parent b7565c2 commit 8239cc8

File tree

2 files changed

+34
-20
lines changed

2 files changed

+34
-20
lines changed

src/lib/Filters.js

+21-10
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ export function availableFilters(schema, currentFilters, blacklist) {
233233
return available;
234234
}
235235

236-
export function findRelatedClasses(referClass , allClasses, blacklist, currentFilters) {
236+
export function findRelatedClasses(referClass, allClasses, blacklist, currentFilters) {
237237
const relatedClasses = {};
238238
if (allClasses[referClass]) {
239239
const availableForRefer = availableFilters(allClasses[referClass], currentFilters, blacklist);
@@ -243,31 +243,42 @@ export function findRelatedClasses(referClass , allClasses, blacklist, currentFi
243243
}
244244

245245
for (const className in allClasses) {
246-
if (className === referClass){
246+
if (className === referClass) {
247247
continue;
248248
}
249249

250-
if (!checkRelation(referClass, allClasses[className])) {
250+
if (!checkRelation(referClass, allClasses, className)) {
251251
continue;
252252
}
253+
253254
const schema = allClasses[className];
254255
const available = availableFilters(schema, currentFilters, blacklist);
255256
if (Object.keys(available).length > 0) {
256257
relatedClasses[className] = available;
257258
}
258259
}
259-
260260
return relatedClasses;
261261
}
262262

263-
function checkRelation(classname,schema){
264-
for (const col in schema) {
265-
if (schema[col].type === 'Pointer' && schema[col].targetClass === classname) {
266-
return true;
263+
const checkRelationHelper = (schema, col, className) =>
264+
schema[col].type === 'Pointer' && schema[col].targetClass === className;
265+
266+
function checkRelation(currentClassname, schemas, classToReferName) {
267+
const currentClassSchema = schemas[currentClassname];
268+
const classSchemaBeingCheckedToRefer = schemas[classToReferName];
269+
let flag = false;
270+
271+
for (const col in currentClassSchema) {
272+
if (checkRelationHelper(currentClassSchema, col, classToReferName)) {
273+
flag = true;
267274
}
268275
}
269-
return false;
270-
276+
for (const col in classSchemaBeingCheckedToRefer) {
277+
if (checkRelationHelper(classSchemaBeingCheckedToRefer, col, currentClassname)) {
278+
flag = true;
279+
}
280+
}
281+
return flag;
271282
}
272283

273284
export const BLACKLISTED_FILTERS = ['containsAny', 'doesNotContainAny'];

src/lib/queryFromFilters.js

+13-10
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,20 @@ export default async function queryFromFilters(className, filters) {
4242
}
4343
const reversePointerField = getPointerField(allClassesSchema, filterClassName, className);
4444
const pointerField = getPointerField(allClassesSchema, className, filterClassName);
45-
if (pointerField) {
46-
tempquery.matchesQuery(pointerField, queries[filterClassName]);
47-
} else if (reversePointerField) {
48-
await tempquery.matchesKeyInQuery(
49-
'objectId',
50-
`${reversePointerField}.objectId`,
51-
queries[filterClassName]
52-
)
53-
querieslist.push(tempquery);
54-
} else {
45+
if (!pointerField && !reversePointerField) {
5546
console.warn(`No relationship found between ${className} and ${filterClassName}`);
47+
} else {
48+
if (pointerField) {
49+
tempquery.matchesQuery(pointerField, queries[filterClassName]);
50+
}
51+
if (!pointerField && reversePointerField) {
52+
await tempquery.matchesKeyInQuery(
53+
'objectId',
54+
`${reversePointerField}.objectId`,
55+
queries[filterClassName]
56+
);
57+
}
58+
querieslist.push(tempquery);
5659
}
5760
})
5861
);

0 commit comments

Comments
 (0)