fix(workflow): UUID filter in "Search Records" action (#15817)
## Summary - add a regression test that reproduces the workflow "Search Records → ID is <UUID>" failure (issue #15067 / #15746) - adjust `turnRecordFilterIntoRecordGqlOperationFilter` so UUID filters fall back to the literal value when no `recordIdsForUuid` context is provided, always emitting an `in` clause ## Testing - npx nx test twenty-shared -- --testPathPattern=computeRecordGqlOperationFilter.test.ts --coverage=false - Manual: workflow "Search Records" with filter "ID is <UUID>" now returns the correct record Fixes #15067 Fixes #15746 --------- Co-authored-by: remi <remi@labox-apps.com> Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
+42
@@ -0,0 +1,42 @@
|
||||
import { computeRecordGqlOperationFilter } from '../computeRecordGqlOperationFilter';
|
||||
import type { RecordFilter } from '../turnRecordFilterGroupIntoGqlOperationFilter';
|
||||
|
||||
import { FieldMetadataType } from '@/types/FieldMetadataType';
|
||||
import type { PartialFieldMetadataItem } from '@/types/PartialFieldMetadataItem';
|
||||
import { ViewFilterOperand } from '@/types/ViewFilterOperand';
|
||||
|
||||
describe('computeRecordGqlOperationFilter', () => {
|
||||
it('should match Is UUID', () => {
|
||||
const companyIdField: PartialFieldMetadataItem = {
|
||||
id: 'company-id-field',
|
||||
name: 'id',
|
||||
label: 'ID',
|
||||
type: FieldMetadataType.UUID,
|
||||
};
|
||||
|
||||
const uuidValue = '4f83d5c0-7c7a-4f67-9f29-0a6aad1f4eb1';
|
||||
|
||||
const recordFilters: RecordFilter[] = [
|
||||
{
|
||||
id: 'uuid-filter',
|
||||
fieldMetadataId: companyIdField.id,
|
||||
value: uuidValue,
|
||||
type: 'UUID',
|
||||
operand: ViewFilterOperand.IS,
|
||||
},
|
||||
];
|
||||
|
||||
const filter = computeRecordGqlOperationFilter({
|
||||
fields: [companyIdField],
|
||||
recordFilters,
|
||||
recordFilterGroups: [],
|
||||
filterValueDependencies: {},
|
||||
});
|
||||
|
||||
expect(filter).toEqual({
|
||||
id: {
|
||||
in: [uuidValue],
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -70,13 +70,11 @@ type TurnRecordFilterIntoRecordGqlOperationFilterParams = {
|
||||
filterValueDependencies?: RecordFilterValueDependencies;
|
||||
recordFilter: RecordFilter;
|
||||
fieldMetadataItems: FieldShared[];
|
||||
recordIdsForUuid?: string[];
|
||||
};
|
||||
|
||||
export const turnRecordFilterIntoRecordGqlOperationFilter = ({
|
||||
recordFilter,
|
||||
fieldMetadataItems,
|
||||
recordIdsForUuid,
|
||||
filterValueDependencies,
|
||||
}: TurnRecordFilterIntoRecordGqlOperationFilterParams):
|
||||
| RecordGqlOperationFilter
|
||||
@@ -1303,7 +1301,7 @@ export const turnRecordFilterIntoRecordGqlOperationFilter = ({
|
||||
};
|
||||
}
|
||||
case 'UUID': {
|
||||
const recordIds = recordIdsForUuid;
|
||||
const recordIds = arrayOfUuidOrVariableSchema.parse(recordFilter.value);
|
||||
|
||||
if (!isDefined(recordIds) || recordIds.length === 0) return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user