* feat: add Object Edit Settings section with Object preview Closes #3834 * fix: fix preview card stories * test: improve getFieldDefaultPreviewValue tests * test: add getFieldPreviewValueFromRecord tests * test: add useFieldPreview tests * refactor: rename and move components * fix: restore RecordStoreDecorator
69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
|
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
|
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
|
import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField';
|
|
import { SettingsObjectFieldSelectFormValues } from '@/settings/data-model/components/SettingsObjectFieldSelectForm';
|
|
import { SETTINGS_FIELD_METADATA_TYPES } from '@/settings/data-model/constants/SettingsFieldMetadataTypes';
|
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
|
|
export const getFieldDefaultPreviewValue = ({
|
|
fieldMetadataItem,
|
|
objectMetadataItem,
|
|
relationObjectMetadataItem,
|
|
selectOptions,
|
|
}: {
|
|
fieldMetadataItem: Pick<FieldMetadataItem, 'type'> & {
|
|
id?: string;
|
|
name?: string;
|
|
};
|
|
objectMetadataItem: ObjectMetadataItem;
|
|
relationObjectMetadataItem?: ObjectMetadataItem;
|
|
selectOptions?: SettingsObjectFieldSelectFormValues;
|
|
}) => {
|
|
// Select field
|
|
if (fieldMetadataItem.type === FieldMetadataType.Select && selectOptions) {
|
|
return selectOptions.find(({ isDefault }) => isDefault) || selectOptions[0];
|
|
}
|
|
|
|
// Relation field
|
|
if (
|
|
fieldMetadataItem.type === FieldMetadataType.Relation &&
|
|
relationObjectMetadataItem
|
|
) {
|
|
const relationLabelIdentifierFieldMetadataItem =
|
|
getLabelIdentifierFieldMetadataItem(relationObjectMetadataItem);
|
|
|
|
if (!relationLabelIdentifierFieldMetadataItem) return null;
|
|
|
|
const defaultRelationLabelIdentifierFieldValue =
|
|
relationLabelIdentifierFieldMetadataItem.type === FieldMetadataType.Text
|
|
? relationObjectMetadataItem.labelSingular
|
|
: SETTINGS_FIELD_METADATA_TYPES[
|
|
relationLabelIdentifierFieldMetadataItem.type
|
|
]?.defaultValue;
|
|
|
|
const defaultRelationRecord = {
|
|
[relationLabelIdentifierFieldMetadataItem.name]:
|
|
defaultRelationLabelIdentifierFieldValue,
|
|
};
|
|
|
|
return defaultRelationRecord;
|
|
}
|
|
|
|
const isLabelIdentifier =
|
|
!!fieldMetadataItem.id &&
|
|
!!fieldMetadataItem.name &&
|
|
isLabelIdentifierField({
|
|
fieldMetadataItem: {
|
|
id: fieldMetadataItem.id,
|
|
name: fieldMetadataItem.name,
|
|
},
|
|
objectMetadataItem,
|
|
});
|
|
|
|
// Other fields
|
|
return isLabelIdentifier && fieldMetadataItem.type === FieldMetadataType.Text
|
|
? objectMetadataItem.labelSingular
|
|
: SETTINGS_FIELD_METADATA_TYPES[fieldMetadataItem.type]?.defaultValue;
|
|
};
|