diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarDateFieldsContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarDateFieldsContent.tsx index c7cc594566..d92683672b 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarDateFieldsContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarDateFieldsContent.tsx @@ -1,5 +1,7 @@ import { OBJECT_OPTIONS_DROPDOWN_ID } from '@/object-record/object-options-dropdown/constants/ObjectOptionsDropdownId'; import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsDropdown'; +import { recordIndexCalendarEndFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarEndFieldMetadataIdComponentState'; +import { recordIndexCalendarFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarFieldMetadataIdComponentState'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent'; @@ -22,6 +24,12 @@ export const ObjectOptionsDropdownCalendarDateFieldsContent = () => { useObjectOptionsDropdown(); const { currentView } = useGetCurrentViewOnly(); + const recordIndexCalendarFieldMetadataId = useAtomComponentStateValue( + recordIndexCalendarFieldMetadataIdComponentState, + ); + const recordIndexCalendarEndFieldMetadataId = useAtomComponentStateValue( + recordIndexCalendarEndFieldMetadataIdComponentState, + ); const selectedItemId = useAtomComponentStateValue( selectedItemIdComponentState, @@ -33,11 +41,11 @@ export const ObjectOptionsDropdownCalendarDateFieldsContent = () => { } const calendarFieldMetadata = objectMetadataItem.fields.find( - (field) => field.id === currentView.calendarFieldMetadataId, + (field) => field.id === recordIndexCalendarFieldMetadataId, ); const calendarEndFieldMetadata = objectMetadataItem.fields.find( - (field) => field.id === currentView.calendarEndFieldMetadataId, + (field) => field.id === recordIndexCalendarEndFieldMetadataId, ); const selectableItemIdArray = ['CalendarDateField', 'CalendarEndDateField']; diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarEndFieldsContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarEndFieldsContent.tsx index cf6f1a055d..07750a9a19 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarEndFieldsContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarEndFieldsContent.tsx @@ -1,7 +1,7 @@ -import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsDropdown'; import { recordIndexCalendarEndFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarEndFieldMetadataIdComponentState'; +import { recordIndexCalendarFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarFieldMetadataIdComponentState'; import { groupCalendarFieldMetadataItemsByType } from '@/object-record/record-calendar/utils/groupCalendarFieldMetadataItemsByType'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader'; @@ -10,7 +10,8 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput'; import { DropdownMenuSectionLabel } from '@/ui/layout/dropdown/components/DropdownMenuSectionLabel'; import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; -import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; +import { useAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentState'; +import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; import { useUpdateCurrentView } from '@/views/hooks/useUpdateCurrentView'; import { useGetAvailableFieldsForCalendar } from '@/views/view-picker/hooks/useGetAvailableFieldsForCalendar'; import { getAvailableCalendarEndFieldMetadataItems } from '@/views/view-picker/utils/getAvailableCalendarEndFieldMetadataItems'; @@ -32,18 +33,23 @@ export const ObjectOptionsDropdownCalendarEndFieldsContent = () => { const { onContentChange, closeDropdown } = useObjectOptionsDropdown(); - const { currentView } = useGetCurrentViewOnly(); const { updateCurrentView } = useUpdateCurrentView(); const { availableFieldsForCalendar } = useGetAvailableFieldsForCalendar(); - const setRecordIndexCalendarEndFieldMetadataId = useSetAtomComponentState( + const recordIndexCalendarFieldMetadataId = useAtomComponentStateValue( + recordIndexCalendarFieldMetadataIdComponentState, + ); + const [ + recordIndexCalendarEndFieldMetadataId, + setRecordIndexCalendarEndFieldMetadataId, + ] = useAtomComponentState( recordIndexCalendarEndFieldMetadataIdComponentState, ); const availableCalendarEndFieldMetadataItems = getAvailableCalendarEndFieldMetadataItems({ availableFieldsForCalendar, - calendarFieldMetadataId: currentView?.calendarFieldMetadataId, + calendarFieldMetadataId: recordIndexCalendarFieldMetadataId, }); const filteredCalendarEndFields = @@ -65,7 +71,14 @@ export const ObjectOptionsDropdownCalendarEndFieldsContent = () => { const calendarEndFieldMetadataId = fieldMetadataItem?.id ?? null; setRecordIndexCalendarEndFieldMetadataId(calendarEndFieldMetadataId); - await updateCurrentView({ calendarEndFieldMetadataId }); + try { + await updateCurrentView({ calendarEndFieldMetadataId }); + } catch (error) { + setRecordIndexCalendarEndFieldMetadataId( + recordIndexCalendarEndFieldMetadataId, + ); + throw error; + } closeDropdown(); }; @@ -94,7 +107,7 @@ export const ObjectOptionsDropdownCalendarEndFieldsContent = () => { handleCalendarEndFieldChange(null)} text={t`None`} /> @@ -105,8 +118,7 @@ export const ObjectOptionsDropdownCalendarEndFieldsContent = () => { handleCalendarEndFieldChange(fieldMetadataItem)} LeftIcon={getIcon(fieldMetadataItem.icon)} diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarFieldsContent.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarFieldsContent.tsx index 448d998439..e2946ff9bc 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarFieldsContent.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCalendarFieldsContent.tsx @@ -1,4 +1,3 @@ -import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState'; import { type FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem'; import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsDropdown'; import { recordIndexCalendarEndFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarEndFieldMetadataIdComponentState'; @@ -11,7 +10,7 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop import { DropdownMenuSearchInput } from '@/ui/layout/dropdown/components/DropdownMenuSearchInput'; import { DropdownMenuSectionLabel } from '@/ui/layout/dropdown/components/DropdownMenuSectionLabel'; import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator'; -import { useGetCurrentViewOnly } from '@/views/hooks/useGetCurrentViewOnly'; +import { useAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentState'; import { useUpdateCurrentView } from '@/views/hooks/useUpdateCurrentView'; import { useGetAvailableFieldsForCalendar } from '@/views/view-picker/hooks/useGetAvailableFieldsForCalendar'; import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled'; @@ -33,27 +32,30 @@ export const ObjectOptionsDropdownCalendarFieldsContent = () => { const { objectMetadataItem, resetContent, onContentChange, closeDropdown } = useObjectOptionsDropdown(); - const { currentView } = useGetCurrentViewOnly(); const { updateCurrentView } = useUpdateCurrentView(); const { availableFieldsForCalendar, navigateToDateFieldSettings } = useGetAvailableFieldsForCalendar(); - const setRecordIndexCalendarFieldMetadataId = useSetAtomComponentState( - recordIndexCalendarFieldMetadataIdComponentState, - ); - const setRecordIndexCalendarEndFieldMetadataId = useSetAtomComponentState( + const [ + recordIndexCalendarFieldMetadataId, + setRecordIndexCalendarFieldMetadataId, + ] = useAtomComponentState(recordIndexCalendarFieldMetadataIdComponentState); + const [ + recordIndexCalendarEndFieldMetadataId, + setRecordIndexCalendarEndFieldMetadataId, + ] = useAtomComponentState( recordIndexCalendarEndFieldMetadataIdComponentState, ); - const calendarFieldMetadata = currentView?.calendarFieldMetadataId + const calendarFieldMetadata = recordIndexCalendarFieldMetadataId ? objectMetadataItem.fields.find( - (field) => field.id === currentView.calendarFieldMetadataId, + (field) => field.id === recordIndexCalendarFieldMetadataId, ) : undefined; - const calendarEndFieldMetadata = currentView?.calendarEndFieldMetadataId + const calendarEndFieldMetadata = recordIndexCalendarEndFieldMetadataId ? objectMetadataItem.fields.find( - (field) => field.id === currentView.calendarEndFieldMetadataId, + (field) => field.id === recordIndexCalendarEndFieldMetadataId, ) : undefined; @@ -83,7 +85,7 @@ export const ObjectOptionsDropdownCalendarFieldsContent = () => { fieldMetadataItem: FieldMetadataItem, ) => { const shouldClearCalendarEndField = - isDefined(currentView?.calendarEndFieldMetadataId) && + isDefined(recordIndexCalendarEndFieldMetadataId) && (!isDefined(calendarEndFieldMetadata) || calendarEndFieldMetadata.id === fieldMetadataItem.id || calendarEndFieldMetadata.type !== fieldMetadataItem.type); @@ -93,12 +95,22 @@ export const ObjectOptionsDropdownCalendarFieldsContent = () => { setRecordIndexCalendarEndFieldMetadataId(null); } - await updateCurrentView({ - calendarFieldMetadataId: fieldMetadataItem.id, - ...(shouldClearCalendarEndField - ? { calendarEndFieldMetadataId: null } - : {}), - }); + try { + await updateCurrentView({ + calendarFieldMetadataId: fieldMetadataItem.id, + ...(shouldClearCalendarEndField + ? { calendarEndFieldMetadataId: null } + : {}), + }); + } catch (error) { + setRecordIndexCalendarFieldMetadataId(recordIndexCalendarFieldMetadataId); + if (shouldClearCalendarEndField) { + setRecordIndexCalendarEndFieldMetadataId( + recordIndexCalendarEndFieldMetadataId, + ); + } + throw error; + } closeDropdown(); }; diff --git a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx index 3c7ef91b6d..ac0b741a26 100644 --- a/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx +++ b/packages/twenty-front/src/modules/object-record/object-options-dropdown/components/ObjectOptionsDropdownCustomView.tsx @@ -4,6 +4,7 @@ import { useObjectOptionsDropdown } from '@/object-record/object-options-dropdow import { useObjectOptionsForBoard } from '@/object-record/object-options-dropdown/hooks/useObjectOptionsForBoard'; import { getSupportedRecordCalendarLayout } from '@/object-record/record-calendar/utils/getSupportedRecordCalendarLayout'; import { recordIndexCalendarLayoutComponentState } from '@/object-record/record-index/states/recordIndexCalendarLayoutComponentState'; +import { recordIndexCalendarFieldMetadataIdComponentState } from '@/object-record/record-index/states/recordIndexCalendarFieldMetadataIdComponentState'; import { recordIndexGroupFieldMetadataItemComponentState } from '@/object-record/record-index/states/recordIndexGroupFieldMetadataComponentState'; import { DropdownContent } from '@/ui/layout/dropdown/components/DropdownContent'; import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer'; @@ -67,10 +68,13 @@ export const ObjectOptionsDropdownCustomView = ({ const recordIndexGroupFieldMetadataItem = useAtomComponentStateValue( recordIndexGroupFieldMetadataItemComponentState, ); + const recordIndexCalendarFieldMetadataId = useAtomComponentStateValue( + recordIndexCalendarFieldMetadataIdComponentState, + ); - const calendarFieldMetadata = currentView?.calendarFieldMetadataId + const calendarFieldMetadata = recordIndexCalendarFieldMetadataId ? objectMetadataItem.fields.find( - (field) => field.id === currentView.calendarFieldMetadataId, + (field) => field.id === recordIndexCalendarFieldMetadataId, ) : undefined;