Added RecordValue use-context-selector to settings field's logic (#5851)
In the settings part of the app, where display fields are used as in table cell and board cards, we didn't have the new context selector logic implemented, due to the recent performance optimization.
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { useSetRecoilState } from 'recoil';
|
import { useSetRecoilState } from 'recoil';
|
||||||
|
|
||||||
|
import { useSetRecordFieldValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
||||||
import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector';
|
import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector';
|
||||||
|
|
||||||
type SettingsDataModelSetFieldValueEffectProps = {
|
type SettingsDataModelSetFieldValueEffectProps = {
|
||||||
@ -21,9 +22,12 @@ export const SettingsDataModelSetFieldValueEffect = ({
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const setRecordFieldValue = useSetRecordFieldValue();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setFieldValue(value);
|
setFieldValue(value);
|
||||||
}, [value, setFieldValue]);
|
setRecordFieldValue(entityId, fieldName, value);
|
||||||
|
}, [value, setFieldValue, setRecordFieldValue, entityId, fieldName]);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -18,6 +18,7 @@ import { formatFieldMetadataItemInput } from '@/object-metadata/utils/formatFiel
|
|||||||
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';
|
||||||
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
|
import { useFindManyRecordsQuery } from '@/object-record/hooks/useFindManyRecordsQuery';
|
||||||
|
import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
||||||
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
||||||
import { SettingsHeaderContainer } from '@/settings/components/SettingsHeaderContainer';
|
import { SettingsHeaderContainer } from '@/settings/components/SettingsHeaderContainer';
|
||||||
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
||||||
@ -169,70 +170,72 @@ export const SettingsObjectFieldEdit = () => {
|
|||||||
canPersistFieldMetadataItemUpdate(activeMetadataField);
|
canPersistFieldMetadataItemUpdate(activeMetadataField);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
<RecordFieldValueSelectorContextProvider>
|
||||||
<FormProvider {...formConfig}>
|
{/* eslint-disable-next-line react/jsx-props-no-spreading */}
|
||||||
<SubMenuTopBarContainer Icon={IconSettings} title="Settings">
|
<FormProvider {...formConfig}>
|
||||||
<SettingsPageContainer>
|
<SubMenuTopBarContainer Icon={IconSettings} title="Settings">
|
||||||
<SettingsHeaderContainer>
|
<SettingsPageContainer>
|
||||||
<Breadcrumb
|
<SettingsHeaderContainer>
|
||||||
links={[
|
<Breadcrumb
|
||||||
{ children: 'Objects', href: '/settings/objects' },
|
links={[
|
||||||
{
|
{ children: 'Objects', href: '/settings/objects' },
|
||||||
children: activeObjectMetadataItem.labelPlural,
|
{
|
||||||
href: `/settings/objects/${objectSlug}`,
|
children: activeObjectMetadataItem.labelPlural,
|
||||||
},
|
href: `/settings/objects/${objectSlug}`,
|
||||||
{ children: activeMetadataField.label },
|
},
|
||||||
]}
|
{ children: activeMetadataField.label },
|
||||||
/>
|
]}
|
||||||
{shouldDisplaySaveAndCancel && (
|
|
||||||
<SaveAndCancelButtons
|
|
||||||
isSaveDisabled={!canSave}
|
|
||||||
onCancel={() => navigate(`/settings/objects/${objectSlug}`)}
|
|
||||||
onSave={formConfig.handleSubmit(handleSave)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
{shouldDisplaySaveAndCancel && (
|
||||||
</SettingsHeaderContainer>
|
<SaveAndCancelButtons
|
||||||
<Section>
|
isSaveDisabled={!canSave}
|
||||||
<H2Title
|
onCancel={() => navigate(`/settings/objects/${objectSlug}`)}
|
||||||
title="Name and description"
|
onSave={formConfig.handleSubmit(handleSave)}
|
||||||
description="The name and description of this field"
|
/>
|
||||||
/>
|
)}
|
||||||
<SettingsDataModelFieldAboutForm
|
</SettingsHeaderContainer>
|
||||||
disabled={!activeMetadataField.isCustom}
|
|
||||||
fieldMetadataItem={activeMetadataField}
|
|
||||||
/>
|
|
||||||
</Section>
|
|
||||||
<Section>
|
|
||||||
<H2Title
|
|
||||||
title="Type and values"
|
|
||||||
description="The field's type and values."
|
|
||||||
/>
|
|
||||||
<StyledSettingsObjectFieldTypeSelect
|
|
||||||
disabled
|
|
||||||
fieldMetadataItem={activeMetadataField}
|
|
||||||
/>
|
|
||||||
<SettingsDataModelFieldSettingsFormCard
|
|
||||||
disableCurrencyForm
|
|
||||||
fieldMetadataItem={activeMetadataField}
|
|
||||||
objectMetadataItem={activeObjectMetadataItem}
|
|
||||||
/>
|
|
||||||
</Section>
|
|
||||||
{!isLabelIdentifier && (
|
|
||||||
<Section>
|
<Section>
|
||||||
<H2Title
|
<H2Title
|
||||||
title="Danger zone"
|
title="Name and description"
|
||||||
description="Deactivate this field"
|
description="The name and description of this field"
|
||||||
/>
|
/>
|
||||||
<Button
|
<SettingsDataModelFieldAboutForm
|
||||||
Icon={IconArchive}
|
disabled={!activeMetadataField.isCustom}
|
||||||
title="Deactivate"
|
fieldMetadataItem={activeMetadataField}
|
||||||
size="small"
|
|
||||||
onClick={handleDeactivate}
|
|
||||||
/>
|
/>
|
||||||
</Section>
|
</Section>
|
||||||
)}
|
<Section>
|
||||||
</SettingsPageContainer>
|
<H2Title
|
||||||
</SubMenuTopBarContainer>
|
title="Type and values"
|
||||||
</FormProvider>
|
description="The field's type and values."
|
||||||
|
/>
|
||||||
|
<StyledSettingsObjectFieldTypeSelect
|
||||||
|
disabled
|
||||||
|
fieldMetadataItem={activeMetadataField}
|
||||||
|
/>
|
||||||
|
<SettingsDataModelFieldSettingsFormCard
|
||||||
|
disableCurrencyForm
|
||||||
|
fieldMetadataItem={activeMetadataField}
|
||||||
|
objectMetadataItem={activeObjectMetadataItem}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
{!isLabelIdentifier && (
|
||||||
|
<Section>
|
||||||
|
<H2Title
|
||||||
|
title="Danger zone"
|
||||||
|
description="Deactivate this field"
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
Icon={IconArchive}
|
||||||
|
title="Deactivate"
|
||||||
|
size="small"
|
||||||
|
onClick={handleDeactivate}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
)}
|
||||||
|
</SettingsPageContainer>
|
||||||
|
</SubMenuTopBarContainer>
|
||||||
|
</FormProvider>
|
||||||
|
</RecordFieldValueSelectorContextProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataIt
|
|||||||
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
|
||||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||||
|
import { RecordFieldValueSelectorContextProvider } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
||||||
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
import { SaveAndCancelButtons } from '@/settings/components/SaveAndCancelButtons/SaveAndCancelButtons';
|
||||||
import { SettingsHeaderContainer } from '@/settings/components/SettingsHeaderContainer';
|
import { SettingsHeaderContainer } from '@/settings/components/SettingsHeaderContainer';
|
||||||
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
import { SettingsPageContainer } from '@/settings/components/SettingsPageContainer';
|
||||||
@ -172,55 +173,57 @@ export const SettingsObjectNewFieldStep2 = () => {
|
|||||||
).filter(isDefined);
|
).filter(isDefined);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
<RecordFieldValueSelectorContextProvider>
|
||||||
<FormProvider {...formConfig}>
|
{/* eslint-disable-next-line react/jsx-props-no-spreading */}
|
||||||
<SubMenuTopBarContainer Icon={IconSettings} title="Settings">
|
<FormProvider {...formConfig}>
|
||||||
<SettingsPageContainer>
|
<SubMenuTopBarContainer Icon={IconSettings} title="Settings">
|
||||||
<SettingsHeaderContainer>
|
<SettingsPageContainer>
|
||||||
<Breadcrumb
|
<SettingsHeaderContainer>
|
||||||
links={[
|
<Breadcrumb
|
||||||
{ children: 'Objects', href: '/settings/objects' },
|
links={[
|
||||||
{
|
{ children: 'Objects', href: '/settings/objects' },
|
||||||
children: activeObjectMetadataItem.labelPlural,
|
{
|
||||||
href: `/settings/objects/${objectSlug}`,
|
children: activeObjectMetadataItem.labelPlural,
|
||||||
},
|
href: `/settings/objects/${objectSlug}`,
|
||||||
{ children: 'New Field' },
|
},
|
||||||
]}
|
{ children: 'New Field' },
|
||||||
/>
|
]}
|
||||||
{!activeObjectMetadataItem.isRemote && (
|
|
||||||
<SaveAndCancelButtons
|
|
||||||
isSaveDisabled={!canSave}
|
|
||||||
onCancel={() => navigate(`/settings/objects/${objectSlug}`)}
|
|
||||||
onSave={formConfig.handleSubmit(handleSave)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
{!activeObjectMetadataItem.isRemote && (
|
||||||
</SettingsHeaderContainer>
|
<SaveAndCancelButtons
|
||||||
<Section>
|
isSaveDisabled={!canSave}
|
||||||
<H2Title
|
onCancel={() => navigate(`/settings/objects/${objectSlug}`)}
|
||||||
title="Name and description"
|
onSave={formConfig.handleSubmit(handleSave)}
|
||||||
description="The name and description of this field"
|
/>
|
||||||
/>
|
)}
|
||||||
<SettingsDataModelFieldAboutForm />
|
</SettingsHeaderContainer>
|
||||||
</Section>
|
<Section>
|
||||||
<Section>
|
<H2Title
|
||||||
<H2Title
|
title="Name and description"
|
||||||
title="Type and values"
|
description="The name and description of this field"
|
||||||
description="The field's type and values."
|
/>
|
||||||
/>
|
<SettingsDataModelFieldAboutForm />
|
||||||
<StyledSettingsObjectFieldTypeSelect
|
</Section>
|
||||||
excludedFieldTypes={excludedFieldTypes}
|
<Section>
|
||||||
/>
|
<H2Title
|
||||||
<SettingsDataModelFieldSettingsFormCard
|
title="Type and values"
|
||||||
fieldMetadataItem={{
|
description="The field's type and values."
|
||||||
icon: formConfig.watch('icon'),
|
/>
|
||||||
label: formConfig.watch('label') || 'Employees',
|
<StyledSettingsObjectFieldTypeSelect
|
||||||
type: formConfig.watch('type'),
|
excludedFieldTypes={excludedFieldTypes}
|
||||||
}}
|
/>
|
||||||
objectMetadataItem={activeObjectMetadataItem}
|
<SettingsDataModelFieldSettingsFormCard
|
||||||
/>
|
fieldMetadataItem={{
|
||||||
</Section>
|
icon: formConfig.watch('icon'),
|
||||||
</SettingsPageContainer>
|
label: formConfig.watch('label') || 'Employees',
|
||||||
</SubMenuTopBarContainer>
|
type: formConfig.watch('type'),
|
||||||
</FormProvider>
|
}}
|
||||||
|
objectMetadataItem={activeObjectMetadataItem}
|
||||||
|
/>
|
||||||
|
</Section>
|
||||||
|
</SettingsPageContainer>
|
||||||
|
</SubMenuTopBarContainer>
|
||||||
|
</FormProvider>
|
||||||
|
</RecordFieldValueSelectorContextProvider>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user