Baptiste Devessier
2025-12-30 15:43:58 +01:00
committed by GitHub
parent ab95437065
commit aac70c679f
3 changed files with 29 additions and 26 deletions
@@ -1,15 +1,13 @@
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useRecordFieldsScopeContextOrThrow } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext';
import { FieldInput } from '@/object-record/record-field/ui/components/FieldInput';
import { RecordInlineCellAnchoredPortal } from '@/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal';
import { RecordInlineCellEditMode } from '@/object-record/record-inline-cell/components/RecordInlineCellEditMode';
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
import { FieldWidgetInputContextProvider } from '@/page-layout/widgets/field/components/FieldWidgetInputContextProvider';
import { useIsFieldWidgetEditing } from '@/page-layout/widgets/field/hooks/useIsFieldWidgetEditing';
import { useOpenFieldWidgetFieldInputEditMode } from '@/page-layout/widgets/field/hooks/useOpenFieldWidgetFieldInputEditMode';
import { fieldWidgetHoverComponentState } from '@/page-layout/widgets/field/states/fieldWidgetHoverComponentState';
import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDropdownFocusIdState';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { useRecoilValue } from 'recoil';
type FieldWidgetCellEditModePortalProps = {
objectMetadataItem: ObjectMetadataItem;
@@ -24,22 +22,18 @@ export const FieldWidgetCellEditModePortal = ({
recordId,
instanceId,
}: FieldWidgetCellEditModePortalProps) => {
const { scopeInstanceId } = useRecordFieldsScopeContextOrThrow();
const activeDropdownFocusId = useRecoilValue(activeDropdownFocusIdState);
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldMetadataItem.id,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
const isEditing = activeDropdownFocusId === expectedDropdownFocusId;
const { isEditing } = useIsFieldWidgetEditing();
const setIsHovered = useSetRecoilComponentState(
fieldWidgetHoverComponentState,
);
const { closeFieldInput } = useOpenFieldWidgetFieldInputEditMode();
const handleCloseEditMode = () => {
setIsHovered(false);
closeFieldInput();
};
if (!isEditing) {
@@ -1,11 +1,8 @@
import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { useRecordFieldsScopeContextOrThrow } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext';
import { RecordInlineCellAnchoredPortal } from '@/object-record/record-inline-cell/components/RecordInlineCellAnchoredPortal';
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
import { FieldWidgetCellHoveredContent } from '@/page-layout/widgets/field/components/FieldWidgetCellHoveredContent';
import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDropdownFocusIdState';
import { useRecoilValue } from 'recoil';
import { useIsFieldWidgetEditing } from '@/page-layout/widgets/field/hooks/useIsFieldWidgetEditing';
type FieldWidgetCellHoveredPortalProps = {
objectMetadataItem: ObjectMetadataItem;
@@ -24,15 +21,7 @@ export const FieldWidgetCellHoveredPortal = ({
isHovered,
onMouseLeave,
}: FieldWidgetCellHoveredPortalProps) => {
const { scopeInstanceId } = useRecordFieldsScopeContextOrThrow();
const activeDropdownFocusId = useRecoilValue(activeDropdownFocusIdState);
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldMetadataItem.id,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
const isEditing = activeDropdownFocusId === expectedDropdownFocusId;
const { isEditing } = useIsFieldWidgetEditing();
if (!isHovered || isEditing) {
return null;
@@ -0,0 +1,20 @@
import { useRecoilValue } from 'recoil';
import { RecordFieldComponentInstanceContext } from '@/object-record/record-field/ui/states/contexts/RecordFieldComponentInstanceContext';
import { focusStackState } from '@/ui/utilities/focus/states/focusStackState';
import { useAvailableComponentInstanceIdOrThrow } from '@/ui/utilities/state/component-state/hooks/useAvailableComponentInstanceIdOrThrow';
export const useIsFieldWidgetEditing = () => {
const recordFieldInstanceId = useAvailableComponentInstanceIdOrThrow(
RecordFieldComponentInstanceContext,
);
const focusStack = useRecoilValue(focusStackState);
const isEditing = focusStack.some(
(item) =>
item.componentInstance.componentInstanceId === recordFieldInstanceId,
);
return { isEditing };
};