Allow standard field default value and settings editing (#7104) (#8559)

Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
This commit is contained in:
ad-elias
2024-11-26 10:03:48 +01:00
committed by GitHub
parent 7bde2006c5
commit 2e75fae3ad
6 changed files with 19 additions and 62 deletions

View File

@ -5,7 +5,6 @@ import { z } from 'zod';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect'; import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect';
import { useBooleanSettingsFormInitialValues } from '@/settings/data-model/fields/forms/boolean/hooks/useBooleanSettingsFormInitialValues'; import { useBooleanSettingsFormInitialValues } from '@/settings/data-model/fields/forms/boolean/hooks/useBooleanSettingsFormInitialValues';
import { isDefined } from '~/utils/isDefined';
export const settingsDataModelFieldBooleanFormSchema = z.object({ export const settingsDataModelFieldBooleanFormSchema = z.object({
defaultValue: z.boolean(), defaultValue: z.boolean(),
@ -26,7 +25,6 @@ export const SettingsDataModelFieldBooleanForm = ({
}: SettingsDataModelFieldBooleanFormProps) => { }: SettingsDataModelFieldBooleanFormProps) => {
const { control } = useFormContext<SettingsDataModelFieldBooleanFormValues>(); const { control } = useFormContext<SettingsDataModelFieldBooleanFormValues>();
const isEditMode = isDefined(fieldMetadataItem?.defaultValue);
const { initialDefaultValue } = useBooleanSettingsFormInitialValues({ const { initialDefaultValue } = useBooleanSettingsFormInitialValues({
fieldMetadataItem, fieldMetadataItem,
}); });
@ -44,9 +42,6 @@ export const SettingsDataModelFieldBooleanForm = ({
value={value} value={value}
onChange={onChange} onChange={onChange}
selectClassName={className} selectClassName={className}
// TODO: temporary fix - disabling edition because after editing the defaultValue,
// newly created records are not taking into account the updated defaultValue properly.
disabled={isEditMode}
dropdownId="object-field-default-value-select-boolean" dropdownId="object-field-default-value-select-boolean"
options={[ options={[
{ {

View File

@ -99,7 +99,6 @@ export const settingsDataModelFieldSettingsFormSchema = z.discriminatedUnion(
); );
type SettingsDataModelFieldSettingsFormCardProps = { type SettingsDataModelFieldSettingsFormCardProps = {
isCreatingField?: boolean;
fieldMetadataItem: Pick< fieldMetadataItem: Pick<
FieldMetadataItem, FieldMetadataItem,
'icon' | 'label' | 'type' | 'isCustom' 'icon' | 'label' | 'type' | 'isCustom'
@ -132,7 +131,6 @@ const previewableTypes = [
]; ];
export const SettingsDataModelFieldSettingsFormCard = ({ export const SettingsDataModelFieldSettingsFormCard = ({
isCreatingField,
fieldMetadataItem, fieldMetadataItem,
objectMetadataItem, objectMetadataItem,
}: SettingsDataModelFieldSettingsFormCardProps) => { }: SettingsDataModelFieldSettingsFormCardProps) => {
@ -152,7 +150,6 @@ export const SettingsDataModelFieldSettingsFormCard = ({
if (fieldMetadataItem.type === FieldMetadataType.Currency) { if (fieldMetadataItem.type === FieldMetadataType.Currency) {
return ( return (
<SettingsDataModelFieldCurrencySettingsFormCard <SettingsDataModelFieldCurrencySettingsFormCard
disabled={!isCreatingField}
fieldMetadataItem={fieldMetadataItem} fieldMetadataItem={fieldMetadataItem}
objectMetadataItem={objectMetadataItem} objectMetadataItem={objectMetadataItem}
/> />
@ -165,7 +162,6 @@ export const SettingsDataModelFieldSettingsFormCard = ({
) { ) {
return ( return (
<SettingsDataModelFieldDateSettingsFormCard <SettingsDataModelFieldDateSettingsFormCard
disabled={!isCreatingField}
fieldMetadataItem={fieldMetadataItem} fieldMetadataItem={fieldMetadataItem}
objectMetadataItem={objectMetadataItem} objectMetadataItem={objectMetadataItem}
/> />
@ -184,7 +180,6 @@ export const SettingsDataModelFieldSettingsFormCard = ({
if (fieldMetadataItem.type === FieldMetadataType.Number) { if (fieldMetadataItem.type === FieldMetadataType.Number) {
return ( return (
<SettingsDataModelFieldNumberSettingsFormCard <SettingsDataModelFieldNumberSettingsFormCard
disabled={fieldMetadataItem.isCustom === false}
fieldMetadataItem={fieldMetadataItem} fieldMetadataItem={fieldMetadataItem}
objectMetadataItem={objectMetadataItem} objectMetadataItem={objectMetadataItem}
/> />

View File

@ -18,7 +18,6 @@ import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataIt
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems'; import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata'; import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata';
import { useUpdateOneFieldMetadataItem } from '@/object-metadata/hooks/useUpdateOneFieldMetadataItem'; import { useUpdateOneFieldMetadataItem } from '@/object-metadata/hooks/useUpdateOneFieldMetadataItem';
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { formatFieldMetadataItemInput } from '@/object-metadata/utils/formatFieldMetadataItemInput'; import { formatFieldMetadataItemInput } from '@/object-metadata/utils/formatFieldMetadataItemInput';
import { getFieldSlug } from '@/object-metadata/utils/getFieldSlug'; import { getFieldSlug } from '@/object-metadata/utils/getFieldSlug';
import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField'; import { isLabelIdentifierField } from '@/object-metadata/utils/isLabelIdentifierField';
@ -47,16 +46,6 @@ type SettingsDataModelFieldEditFormValues = z.infer<
> & > &
any; any;
const canPersistFieldMetadataItemUpdate = (
fieldMetadataItem: FieldMetadataItem,
) => {
return (
fieldMetadataItem.isCustom ||
fieldMetadataItem.type === FieldMetadataType.Select ||
fieldMetadataItem.type === FieldMetadataType.MultiSelect
);
};
export const SettingsObjectFieldEdit = () => { export const SettingsObjectFieldEdit = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const { enqueueSnackBar } = useSnackBar(); const { enqueueSnackBar } = useSnackBar();
@ -179,9 +168,6 @@ export const SettingsObjectFieldEdit = () => {
navigate(`/settings/objects/${objectSlug}`); navigate(`/settings/objects/${objectSlug}`);
}; };
const shouldDisplaySaveAndCancel =
canPersistFieldMetadataItemUpdate(fieldMetadataItem);
return ( return (
<RecordFieldValueSelectorContextProvider> <RecordFieldValueSelectorContextProvider>
{/* eslint-disable-next-line react/jsx-props-no-spreading */} {/* eslint-disable-next-line react/jsx-props-no-spreading */}
@ -206,14 +192,12 @@ export const SettingsObjectFieldEdit = () => {
}, },
]} ]}
actionButton={ actionButton={
shouldDisplaySaveAndCancel && ( <SaveAndCancelButtons
<SaveAndCancelButtons isSaveDisabled={!canSave}
isSaveDisabled={!canSave} isCancelDisabled={isSubmitting}
isCancelDisabled={isSubmitting} onCancel={() => navigate(`/settings/objects/${objectSlug}`)}
onCancel={() => navigate(`/settings/objects/${objectSlug}`)} onSave={formConfig.handleSubmit(handleSave)}
onSave={formConfig.handleSubmit(handleSave)} />
/>
)
} }
> >
<SettingsPageContainer> <SettingsPageContainer>

View File

@ -209,7 +209,6 @@ export const SettingsObjectNewFieldConfigure = () => {
<Section> <Section>
<H2Title title="Values" description="The values of this field" /> <H2Title title="Values" description="The values of this field" />
<SettingsDataModelFieldSettingsFormCard <SettingsDataModelFieldSettingsFormCard
isCreatingField
fieldMetadataItem={{ fieldMetadataItem={{
icon: formConfig.watch('icon'), icon: formConfig.watch('icon'),
label: formConfig.watch('label') || 'New Field', label: formConfig.watch('label') || 'New Field',

View File

@ -632,23 +632,25 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
fieldMetadataInput: UpdateFieldInput, fieldMetadataInput: UpdateFieldInput,
existingFieldMetadata: FieldMetadataEntity, existingFieldMetadata: FieldMetadataEntity,
) { ) {
let fieldMetadataInputOverrided = {}; const updatableStandardFieldInput: UpdateFieldInput = {
fieldMetadataInputOverrided = {
id: fieldMetadataInput.id, id: fieldMetadataInput.id,
isActive: fieldMetadataInput.isActive, isActive: fieldMetadataInput.isActive,
workspaceId: fieldMetadataInput.workspaceId, workspaceId: fieldMetadataInput.workspaceId,
defaultValue: fieldMetadataInput.defaultValue, defaultValue: fieldMetadataInput.defaultValue,
settings: fieldMetadataInput.settings,
}; };
if (existingFieldMetadata.type === FieldMetadataType.SELECT) { if (
fieldMetadataInputOverrided = { existingFieldMetadata.type === FieldMetadataType.SELECT ||
...fieldMetadataInputOverrided, existingFieldMetadata.type === FieldMetadataType.MULTI_SELECT
) {
return {
...updatableStandardFieldInput,
options: fieldMetadataInput.options, options: fieldMetadataInput.options,
}; };
} }
return fieldMetadataInputOverrided as UpdateFieldInput; return updatableStandardFieldInput;
} }
public async getRelationDefinitionFromRelationMetadata( public async getRelationDefinitionFromRelationMetadata(

View File

@ -8,10 +8,7 @@ import {
} from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/comparator.interface'; } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/comparator.interface';
import { ComputedPartialFieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface'; import { ComputedPartialFieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface';
import { import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
FieldMetadataEntity,
FieldMetadataType,
} from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util';
const commonFieldPropertiesToIgnore = [ const commonFieldPropertiesToIgnore = [
@ -26,6 +23,7 @@ const commonFieldPropertiesToIgnore = [
'gate', 'gate',
'asExpression', 'asExpression',
'generatedType', 'generatedType',
'defaultValue',
]; ];
const fieldPropertiesToStringify = ['defaultValue'] as const; const fieldPropertiesToStringify = ['defaultValue'] as const;
@ -57,19 +55,11 @@ export class WorkspaceFieldComparator {
const originalFieldMetadataMap = transformMetadataForComparison( const originalFieldMetadataMap = transformMetadataForComparison(
filteredOriginalFieldCollection, filteredOriginalFieldCollection,
{ {
shouldIgnoreProperty: (property, originalMetadata) => { shouldIgnoreProperty: (property) => {
if (commonFieldPropertiesToIgnore.includes(property)) { if (commonFieldPropertiesToIgnore.includes(property)) {
return true; return true;
} }
if (
originalMetadata &&
property === 'defaultValue' &&
originalMetadata.type === FieldMetadataType.SELECT
) {
return true;
}
return false; return false;
}, },
propertiesToStringify: fieldPropertiesToStringify, propertiesToStringify: fieldPropertiesToStringify,
@ -82,19 +72,11 @@ export class WorkspaceFieldComparator {
const standardFieldMetadataMap = transformMetadataForComparison( const standardFieldMetadataMap = transformMetadataForComparison(
standardFieldMetadataCollection, standardFieldMetadataCollection,
{ {
shouldIgnoreProperty: (property, originalMetadata) => { shouldIgnoreProperty: (property) => {
if (commonFieldPropertiesToIgnore.includes(property)) { if (commonFieldPropertiesToIgnore.includes(property)) {
return true; return true;
} }
if (
originalMetadata &&
property === 'defaultValue' &&
originalMetadata.type === FieldMetadataType.SELECT
) {
return true;
}
return false; return false;
}, },
propertiesToStringify: fieldPropertiesToStringify, propertiesToStringify: fieldPropertiesToStringify,