From b7c68e082ebff7ab63514ee6311161a824460617 Mon Sep 17 00:00:00 2001 From: nitin <142569587+ehconitin@users.noreply.github.com> Date: Tue, 16 Jun 2026 16:22:54 +0530 Subject: [PATCH] Enable inline field editing in calendar event details (#21666) before - https://github.com/user-attachments/assets/b6645bb5-0ffc-4281-b054-2035c865ba77 after - https://github.com/user-attachments/assets/a62a1134-c959-4281-aefe-b04e310b4926 Review in cubic --- .../components/CalendarEventDetails.tsx | 114 +++++++++++++----- 1 file changed, 81 insertions(+), 33 deletions(-) diff --git a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx index f678ab7583..8d5baa9ed3 100644 --- a/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx +++ b/packages/twenty-front/src/modules/activities/calendar/components/CalendarEventDetails.tsx @@ -12,8 +12,12 @@ import { useObjectPermissionsForObject } from '@/object-record/hooks/useObjectPe import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord'; import { useIsRecordReadOnly } from '@/object-record/read-only/hooks/useIsRecordReadOnly'; import { isRecordFieldReadOnly } from '@/object-record/read-only/utils/isRecordFieldReadOnly'; +import { RecordFieldListCellEditModePortal } from '@/object-record/record-field-list/anchored-portal/components/RecordFieldListCellEditModePortal'; +import { RecordFieldListCellHoveredPortal } from '@/object-record/record-field-list/anchored-portal/components/RecordFieldListCellHoveredPortal'; import { RecordFieldsScopeContextProvider } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext'; import { useFieldListFieldMetadataItems } from '@/object-record/record-field-list/hooks/useFieldListFieldMetadataItems'; +import { RecordFieldListComponentInstanceContext } from '@/object-record/record-field-list/states/contexts/RecordFieldListComponentInstanceContext'; +import { recordFieldListHoverPositionComponentState } from '@/object-record/record-field-list/states/recordFieldListHoverPositionComponentState'; import { FieldContext, type RecordUpdateHook, @@ -23,6 +27,7 @@ import { RecordFieldComponentInstanceContext } from '@/object-record/record-fiel import { RecordInlineCell } from '@/object-record/record-inline-cell/components/RecordInlineCell'; import { PropertyBox } from '@/object-record/record-inline-cell/property-box/components/PropertyBox'; import { getRecordFieldInputInstanceId } from '@/object-record/utils/getRecordFieldInputId'; +import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { CoreObjectNameSingular } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { @@ -104,6 +109,23 @@ export const CalendarEventDetails = ({ excludeCreatedAtAndUpdatedAt: true, }); + const { + inlineFieldMetadataItems: portalPositionInlineFieldMetadataItems, + legacyActivityTargetFieldMetadataItems, + } = useFieldListFieldMetadataItems({ + objectNameSingular: CoreObjectNameSingular.CalendarEvent, + }); + + const portalPositionFieldMetadataItems = [ + ...legacyActivityTargetFieldMetadataItems, + ...portalPositionInlineFieldMetadataItems, + ]; + + const setRecordFieldListHoverPosition = useSetAtomComponentState( + recordFieldListHoverPositionComponentState, + INPUT_ID_PREFIX, + ); + const standardFieldOrder = [ 'startsAt', 'endsAt', @@ -177,6 +199,11 @@ export const CalendarEventDetails = ({ objectPermissionsByObjectMetadataId, }); + const portalPosition = portalPositionFieldMetadataItems.findIndex( + (portalPositionFieldMetadataItem) => + portalPositionFieldMetadataItem.id === fieldMetadataItem.id, + ); + return ( @@ -188,6 +215,15 @@ export const CalendarEventDetails = ({ useUpdateRecord: useUpdateOneCalendarEventRecordMutation, maxWidth: 300, isRecordFieldReadOnly: isReadOnly, + anchorId: getRecordFieldInputInstanceId({ + recordId: calendarEvent.id, + fieldName: fieldMetadataItem.name, + prefix: INPUT_ID_PREFIX, + }), + onMouseEnter: () => + setRecordFieldListHoverPosition( + portalPosition === -1 ? null : portalPosition, + ), }} > - + @@ -211,39 +247,51 @@ export const CalendarEventDetails = ({ - - - } - label={t`Event`} - /> - - - - {calendarEvent.title} - - - {t`Created`}{' '} - {beautifyPastDateRelativeToNow( - new Date(calendarEvent.externalCreatedAt), - )} - - - - {standardFields.slice(0, 2).map(renderField)} - {calendarEventParticipants && ( - + + + } + label={t`Event`} /> - )} - {standardFields.slice(2).map(renderField)} - {customFields.map(renderField)} - - + + + + {calendarEvent.title} + + + {t`Created`}{' '} + {beautifyPastDateRelativeToNow( + new Date(calendarEvent.externalCreatedAt), + )} + + + + {standardFields.slice(0, 2).map(renderField)} + {calendarEventParticipants && ( + + )} + {standardFields.slice(2).map(renderField)} + {customFields.map(renderField)} + + + + + ); };