fix: RightDrawer doesn't save context values when clickedOutside (#7729)
## Description - This PR fixes #7728 ## Changes https://github.com/user-attachments/assets/1e66cab3-9009-4c01-9ac6-22651b0ff5e7 --------- Co-authored-by: bosiraphael <raphael.bosi@gmail.com> Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
@ -0,0 +1,34 @@
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { usePersistField } from '@/object-record/record-field/hooks/usePersistField';
|
||||
import { useRecordFieldInput } from '@/object-record/record-field/hooks/useRecordFieldInput';
|
||||
import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell';
|
||||
import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell';
|
||||
import { useListenRightDrawerClose } from '@/ui/layout/right-drawer/hooks/useListenRightDrawerClose';
|
||||
import { useContext } from 'react';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
|
||||
// TODO: this should be better implemented if we refactor field input so that it's easier to implement logic like that
|
||||
// Idea : maybe we could use draftValue instead of the newValue in the events
|
||||
// Idea : we can remove all our listeners in the many input types and replace them with a onClose event that gives the event type
|
||||
// (tab, shift-tab, click-outside, escape, enter) and the newValue, that will reduce the boilerplate
|
||||
// and also the need to have our difficult to understand persist logic
|
||||
// the goal would be that we could easily call usePersistField anywhere under a FieldContext and it would work
|
||||
export const RightDrawerTitleRecordInlineCell = () => {
|
||||
const { closeInlineCell } = useInlineCell();
|
||||
const persistField = usePersistField();
|
||||
|
||||
const { recordId, fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
const { getDraftValueSelector } = useRecordFieldInput<unknown>(
|
||||
`${recordId}-${fieldDefinition.metadata.fieldName}`,
|
||||
);
|
||||
|
||||
const draftValue = useRecoilValue(getDraftValueSelector());
|
||||
|
||||
useListenRightDrawerClose(() => {
|
||||
persistField(draftValue);
|
||||
closeInlineCell();
|
||||
});
|
||||
|
||||
return <RecordInlineCell />;
|
||||
};
|
||||
@ -3,6 +3,7 @@ import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSi
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell';
|
||||
import { InlineCellHotkeyScope } from '@/object-record/record-inline-cell/types/InlineCellHotkeyScope';
|
||||
import { RightDrawerTitleRecordInlineCell } from '@/object-record/record-right-drawer/components/RightDrawerTitleRecordInlineCell';
|
||||
import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions';
|
||||
import { useRecordShowContainerData } from '@/object-record/record-show/hooks/useRecordShowContainerData';
|
||||
import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSummaryCard';
|
||||
@ -18,6 +19,7 @@ type SummaryCardProps = {
|
||||
isInRightDrawer: boolean;
|
||||
};
|
||||
|
||||
// TODO: refactor all this hierarchy of right drawer / show page record to avoid drill down
|
||||
export const SummaryCard = ({
|
||||
objectNameSingular,
|
||||
objectRecordId,
|
||||
@ -86,7 +88,11 @@ export const SummaryCard = ({
|
||||
isCentered: !isMobile,
|
||||
}}
|
||||
>
|
||||
<RecordInlineCell readonly={isReadOnly} />
|
||||
{isInRightDrawer ? (
|
||||
<RightDrawerTitleRecordInlineCell />
|
||||
) : (
|
||||
<RecordInlineCell readonly={isReadOnly} />
|
||||
)}
|
||||
</FieldContext.Provider>
|
||||
}
|
||||
avatarType={recordIdentifier?.avatarType ?? 'rounded'}
|
||||
|
||||
Reference in New Issue
Block a user