Co-authored-by: Marie Stoppa <marie.stoppa@essec.edu>
This commit is contained in:
@ -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={[
|
||||||
{
|
{
|
||||||
|
|||||||
@ -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}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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>
|
||||||
|
|||||||
@ -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',
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user