From 8931f4681a5893c7d2ccce5850deadaf340ac4a5 Mon Sep 17 00:00:00 2001 From: Mazen-Saeed <88685859+Mazen-Saeed@users.noreply.github.com> Date: Mon, 26 Jan 2026 18:28:53 +0200 Subject: [PATCH] =?UTF-8?q?fix=20isCalendarFieldReadOnly=20function=20to?= =?UTF-8?q?=20check=20if=20calender=20field=20is=20re=E2=80=A6=20(#17319)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR fixes the inconsistency between Calendar and Table views when trying to edit createdAt date field. Previously, calendar cards could be dragged even though the createdAt field are UI read-only, resulting in the confusing and inconsistent behavior compared to the Table view where the field is not editable. The issue was caused by the drag logic checking only user permissions and not the field’s UI read-only metadata. This change updates the calendar drag logic to also check for isUIReadOnly, ensuring that records are not draggable when the selected calendar date field is read-only. --------- Co-authored-by: Lucas Bordeau --- .../RecordCalendarCardDraggableContainer.tsx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardDraggableContainer.tsx b/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardDraggableContainer.tsx index 45deb547f7..1575c4e37a 100644 --- a/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardDraggableContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-calendar/record-calendar-card/components/RecordCalendarCardDraggableContainer.tsx @@ -9,6 +9,7 @@ import { RecordCalendarCard } from '@/object-record/record-calendar/record-calen import { RecordCalendarCardComponentInstanceContext } from '@/object-record/record-calendar/record-calendar-card/states/contexts/RecordCalendarCardComponentInstanceContext'; import { recordIndexCalendarFieldMetadataIdState } from '@/object-record/record-index/states/recordIndexCalendarFieldMetadataIdState'; import { useRecoilValue } from 'recoil'; +import { isDefined } from 'twenty-shared/utils'; const StyledDraggableContainer = styled.div` position: relative; @@ -26,7 +27,7 @@ export const RecordCalendarCardDraggableContainer = ({ }) => { const { objectMetadataItem } = useRecordCalendarContextOrThrow(); - const isRecordReadOnly = useIsRecordReadOnly({ + const recordIsReadOnly = useIsRecordReadOnly({ recordId, objectMetadataId: objectMetadataItem.id, }); @@ -43,14 +44,24 @@ export const RecordCalendarCardDraggableContainer = ({ (field) => field.id === recordIndexCalendarFieldMetadataId, ); - const isCalendarFieldReadOnly = calendarFieldMetadataItem + const calendarFieldMetadataItemIsUIReadOnly = + calendarFieldMetadataItem?.isUIReadOnly === true; + + const calendarFieldMetadataItemIsRestrictedForUpdate = isDefined( + calendarFieldMetadataItem, + ) ? isFieldMetadataReadOnlyByPermissions({ objectPermissions, fieldMetadataId: calendarFieldMetadataItem.id, }) : false; - const isDragDisabled = isRecordReadOnly || isCalendarFieldReadOnly; + const calendarFieldMetadataItemIsReadOnly = + calendarFieldMetadataItemIsUIReadOnly || + calendarFieldMetadataItemIsRestrictedForUpdate; + + const dragIsDisabled = + recordIsReadOnly || calendarFieldMetadataItemIsReadOnly; return ( {(draggableProvided) => (