Fallback to field metadata (#19131)
Rely on the field metadata items to always display all object's fields in the fields widget configuration editor. If fields are missing in the returned view fields, we add the missing fields through object metadata. https://github.com/user-attachments/assets/3c4d45e8-05d0-4943-be4b-bcf1e310155c
This commit is contained in:
committed by
GitHub
parent
5bbfce7789
commit
c11e4ece39
+94
@@ -0,0 +1,94 @@
|
||||
import { FieldMetadataType } from '@/types';
|
||||
import { isFieldMetadataEligibleForFieldsWidget } from '@/utils/fieldMetadata/isFieldMetadataEligibleForFieldsWidget';
|
||||
|
||||
describe('isFieldMetadataEligibleForFieldsWidget', () => {
|
||||
it('should exclude deletedAt field', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'deletedAt',
|
||||
fieldType: FieldMetadataType.DATE_TIME,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should exclude TS_VECTOR fields', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'searchVector',
|
||||
fieldType: FieldMetadataType.TS_VECTOR,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should exclude POSITION fields', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'position',
|
||||
fieldType: FieldMetadataType.POSITION,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should exclude id field when it is not the label identifier', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'id',
|
||||
fieldType: FieldMetadataType.UUID,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should exclude id field even when it is the label identifier', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'id',
|
||||
fieldType: FieldMetadataType.UUID,
|
||||
isLabelIdentifierField: true,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should include a normal field', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'name',
|
||||
fieldType: FieldMetadataType.TEXT,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it('should include createdAt field', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'createdAt',
|
||||
fieldType: FieldMetadataType.DATE_TIME,
|
||||
isLabelIdentifierField: false,
|
||||
}),
|
||||
).toBe(true);
|
||||
});
|
||||
|
||||
it('should exclude a label identifier field', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'name',
|
||||
fieldType: FieldMetadataType.TEXT,
|
||||
isLabelIdentifierField: true,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
|
||||
it('should exclude deletedAt field even when it is the label identifier', () => {
|
||||
expect(
|
||||
isFieldMetadataEligibleForFieldsWidget({
|
||||
fieldName: 'deletedAt',
|
||||
fieldType: FieldMetadataType.DATE_TIME,
|
||||
isLabelIdentifierField: true,
|
||||
}),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -1,5 +1,6 @@
|
||||
export * from './isFieldMetadataArrayKind';
|
||||
export * from './isFieldMetadataDateKind';
|
||||
export * from './isFieldMetadataEligibleForFieldsWidget';
|
||||
export * from './isFieldMetadataNumericKind';
|
||||
export * from './isFieldMetadataSelectKind';
|
||||
export * from './isFieldMetadataTextKind';
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
import { FieldMetadataType } from '@/types';
|
||||
|
||||
export const isFieldMetadataEligibleForFieldsWidget = ({
|
||||
fieldName,
|
||||
fieldType,
|
||||
isLabelIdentifierField,
|
||||
}: {
|
||||
fieldName: string;
|
||||
fieldType: FieldMetadataType;
|
||||
isLabelIdentifierField: boolean;
|
||||
}): boolean => {
|
||||
if (fieldName === 'deletedAt') {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fieldType === FieldMetadataType.TS_VECTOR) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fieldType === FieldMetadataType.POSITION) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fieldName === 'id' && !isLabelIdentifierField) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isLabelIdentifierField) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
@@ -46,6 +46,7 @@ export { extractAndSanitizeObjectStringFields } from './extractAndSanitizeObject
|
||||
export { computeMorphRelationFieldName } from './fieldMetadata/compute-morph-relation-field-name';
|
||||
export { isFieldMetadataArrayKind } from './fieldMetadata/isFieldMetadataArrayKind';
|
||||
export { isFieldMetadataDateKind } from './fieldMetadata/isFieldMetadataDateKind';
|
||||
export { isFieldMetadataEligibleForFieldsWidget } from './fieldMetadata/isFieldMetadataEligibleForFieldsWidget';
|
||||
export { isFieldMetadataNumericKind } from './fieldMetadata/isFieldMetadataNumericKind';
|
||||
export { isFieldMetadataSelectKind } from './fieldMetadata/isFieldMetadataSelectKind';
|
||||
export { isFieldMetadataTextKind } from './fieldMetadata/isFieldMetadataTextKind';
|
||||
|
||||
Reference in New Issue
Block a user