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:
Rémi Delassus
2025-11-18 11:14:38 +01:00
committed by GitHub
parent e0d1f74648
commit f86c5e78b1
2 changed files with 43 additions and 3 deletions
@@ -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;