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;