diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem.tsx
index e012218d2f2..c8dd916b832 100644
--- a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem.tsx
+++ b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem.tsx
@@ -6,7 +6,9 @@ import { type NavigationMenuItemClickParams } from '@/navigation-menu-item/hooks
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem';
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
+import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
+import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem';
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
import { type View } from '@/views/types/View';
@@ -19,7 +21,6 @@ type WorkspaceNavigationMenuItemFolderSubItemProps = {
selectedNavigationMenuItemIndex: number;
objectMetadataItems: ObjectMetadataItem[];
views: View[];
- isEditMode: boolean;
onNavigationMenuItemClick?: (params: NavigationMenuItemClickParams) => void;
selectedNavigationMenuItemId: string | null;
isContextDragging: boolean;
@@ -32,11 +33,13 @@ export const WorkspaceNavigationMenuItemFolderSubItem = ({
selectedNavigationMenuItemIndex,
objectMetadataItems,
views,
- isEditMode,
onNavigationMenuItemClick,
selectedNavigationMenuItemId,
isContextDragging,
}: WorkspaceNavigationMenuItemFolderSubItemProps) => {
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
const objectMetadataItem =
navigationMenuItem.itemType === NavigationMenuItemType.VIEW ||
navigationMenuItem.itemType === NavigationMenuItemType.RECORD
@@ -47,7 +50,7 @@ export const WorkspaceNavigationMenuItemFolderSubItem = ({
)
: null;
const handleEditModeClick =
- isEditMode &&
+ isNavigationMenuInEditMode &&
isDefined(onNavigationMenuItemClick) &&
(navigationMenuItem.itemType === NavigationMenuItemType.LINK ||
isDefined(objectMetadataItem))
diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx
index c9d07a64aec..e23aa5b1ad0 100644
--- a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx
+++ b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItems.tsx
@@ -136,9 +136,6 @@ export const WorkspaceNavigationMenuItems = () => {
});
};
- const isEditMode =
- isNavigationMenuItemEditingEnabled && isNavigationMenuInEditMode;
-
if (loading) {
return ;
}
@@ -150,7 +147,7 @@ export const WorkspaceNavigationMenuItems = () => {
rightIcon={
isNavigationMenuItemEditingEnabled ? (
- {isEditMode ? (
+ {isNavigationMenuInEditMode ? (
{
) : undefined
}
onAddMenuItem={
- isNavigationMenuItemEditingEnabled && isEditMode
+ isNavigationMenuItemEditingEnabled && isNavigationMenuInEditMode
? handleAddMenuItem
: undefined
}
- isEditMode={isEditMode}
selectedNavigationMenuItemId={selectedNavigationMenuItemInEditMode}
onNavigationMenuItemClick={
- isEditMode ? handleNavigationMenuItemClick : undefined
+ isNavigationMenuInEditMode ? handleNavigationMenuItemClick : undefined
}
onActiveObjectMetadataItemClick={
isNavigationMenuItemEditingEnabled
diff --git a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx
index e25de0f6f16..f94f772be14 100644
--- a/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx
+++ b/packages/twenty-front/src/modules/navigation-menu-item/components/WorkspaceNavigationMenuItemsFolder.tsx
@@ -22,18 +22,19 @@ import { NavigationMenuItemDroppable } from '@/navigation-menu-item/components/N
import { WorkspaceDndKitDroppableSlot } from '@/navigation-menu-item/components/WorkspaceDndKitDroppableSlot';
import { WorkspaceDndKitSortableItem } from '@/navigation-menu-item/components/WorkspaceDndKitSortableItem';
import { WorkspaceNavigationMenuItemFolderDragClone } from '@/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderDragClone';
+import { WorkspaceNavigationMenuItemFolderSubItem } from '@/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem';
import { FOLDER_ICON_DEFAULT } from '@/navigation-menu-item/constants/FolderIconDefault';
import { DEFAULT_NAVIGATION_MENU_ITEM_COLOR_FOLDER } from '@/navigation-menu-item/constants/NavigationMenuItemDefaultColorFolder';
import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants/NavigationMenuItemDroppableIds';
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
-import { WorkspaceDndKitContext } from '@/navigation/contexts/WorkspaceDndKitContext';
import { NavigationMenuItemDragContext } from '@/navigation-menu-item/contexts/NavigationMenuItemDragContext';
import { SortableDropTargetRefContext } from '@/navigation-menu-item/contexts/SortableDropTargetRefContext';
import { type NavigationMenuItemClickParams } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems';
+import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState';
-import { WorkspaceNavigationMenuItemFolderSubItem } from '@/navigation-menu-item/components/WorkspaceNavigationMenuItemFolderSubItem';
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/utils/isLocationMatchingNavigationMenuItem';
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
+import { WorkspaceDndKitContext } from '@/navigation/contexts/WorkspaceDndKitContext';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableItem';
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
@@ -76,7 +77,6 @@ type WorkspaceNavigationMenuItemsFolderProps = {
folderColor?: string | null;
navigationMenuItems: ProcessedNavigationMenuItem[];
isGroup: boolean;
- isEditMode?: boolean;
isSelectedInEditMode?: boolean;
onEditModeClick?: () => void;
onNavigationMenuItemClick?: (params: NavigationMenuItemClickParams) => void;
@@ -91,7 +91,6 @@ export const WorkspaceNavigationMenuItemsFolder = ({
folderColor,
navigationMenuItems,
isGroup,
- isEditMode = false,
isSelectedInEditMode = false,
onEditModeClick,
onNavigationMenuItemClick,
@@ -99,6 +98,9 @@ export const WorkspaceNavigationMenuItemsFolder = ({
isDragging = false,
}: WorkspaceNavigationMenuItemsFolderProps) => {
const useDndKit = useContext(WorkspaceDndKitContext);
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
const theme = useTheme();
const { getIcon } = useIcons();
const FolderIcon = getIcon(folderIconKey ?? FOLDER_ICON_DEFAULT);
@@ -123,7 +125,7 @@ export const WorkspaceNavigationMenuItemsFolder = ({
const isOpen = openNavigationMenuItemFolderIds.includes(folderId);
const folderContentLengthForTree =
- isEditMode && isSelectedInEditMode
+ isNavigationMenuInEditMode && isSelectedInEditMode
? navigationMenuItems.length + 1
: navigationMenuItems.length;
@@ -160,7 +162,8 @@ export const WorkspaceNavigationMenuItemsFolder = ({
}
};
- const shouldUseEditModeClick = isEditMode && isDefined(onEditModeClick);
+ const shouldUseEditModeClick =
+ isNavigationMenuInEditMode && isDefined(onEditModeClick);
const handleClick = shouldUseEditModeClick
? (e?: React.MouseEvent) => {
e?.stopPropagation();
@@ -236,7 +239,9 @@ export const WorkspaceNavigationMenuItemsFolder = ({
containAnimation
>
{navigationMenuItems.map((navigationMenuItem, index) => (
@@ -245,7 +250,9 @@ export const WorkspaceNavigationMenuItemsFolder = ({
id={navigationMenuItem.id}
index={index}
group={folderContentDroppableId}
- disabled={!isEditMode || folderContentDropDisabled}
+ disabled={
+ !isNavigationMenuInEditMode || folderContentDropDisabled
+ }
>
(
@@ -328,8 +337,10 @@ export const WorkspaceNavigationMenuItemsFolder = ({
draggableId={navigationMenuItem.id}
index={index}
isInsideScrollableContainer
- isDragDisabled={!isEditMode}
- disableInteractiveElementBlocking={isEditMode}
+ isDragDisabled={!isNavigationMenuInEditMode}
+ disableInteractiveElementBlocking={
+ isNavigationMenuInEditMode
+ }
itemComponent={
)}
- {isEditMode && isSelectedInEditMode && (
+ {isNavigationMenuInEditMode && isSelectedInEditMode && (
void;
onActiveItemClickWhenNotInEditMode?: () => void;
@@ -39,12 +39,14 @@ export type NavigationDrawerItemForObjectMetadataItemProps = {
export const NavigationDrawerItemForObjectMetadataItem = ({
objectMetadataItem,
navigationMenuItem,
- isEditMode = false,
isSelectedInEditMode = false,
onEditModeClick,
onActiveItemClickWhenNotInEditMode,
isDragging = false,
}: NavigationDrawerItemForObjectMetadataItemProps) => {
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
const isNavigationMenuItemEditingEnabled = useIsFeatureEnabled(
FeatureFlagKey.IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED,
);
@@ -100,18 +102,19 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
}) + '/',
);
- const shouldUseClickHandler = isEditMode
+ const shouldUseClickHandler = isNavigationMenuInEditMode
? Boolean(onEditModeClick)
: isActive && Boolean(onActiveItemClickWhenNotInEditMode);
const handleClick = shouldUseClickHandler
- ? isEditMode
+ ? isNavigationMenuInEditMode
? onEditModeClick
: onActiveItemClickWhenNotInEditMode
: undefined;
const shouldNavigate =
- !isEditMode && !(isActive && onActiveItemClickWhenNotInEditMode);
+ !isNavigationMenuInEditMode &&
+ !(isActive && onActiveItemClickWhenNotInEditMode);
const isViewWithCustomName =
isView &&
@@ -219,7 +222,7 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
label={label}
secondaryLabel={secondaryLabel}
to={
- isEditMode || isDragging
+ isNavigationMenuInEditMode || isDragging
? undefined
: shouldNavigate
? navigationPath
@@ -231,7 +234,7 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
active={isActive}
isSelectedInEditMode={isSelectedInEditMode}
isDragging={isDragging}
- triggerEvent={isEditMode ? 'CLICK' : undefined}
+ triggerEvent={isNavigationMenuInEditMode ? 'CLICK' : undefined}
/>
);
};
diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx
index aa308265f3f..06d4c792ab1 100644
--- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems.tsx
@@ -28,7 +28,6 @@ type NavigationDrawerSectionForObjectMetadataItemsProps = {
isRemote: boolean;
objectMetadataItems: ObjectMetadataItem[];
rightIcon?: React.ReactNode;
- isEditMode?: boolean;
selectedObjectMetadataItemId?: string | null;
onObjectMetadataItemClick?: (objectMetadataItem: ObjectMetadataItem) => void;
onActiveObjectMetadataItemClick?: (
@@ -41,7 +40,6 @@ export const NavigationDrawerSectionForObjectMetadataItems = ({
isRemote,
objectMetadataItems,
rightIcon,
- isEditMode = false,
selectedObjectMetadataItemId = null,
onObjectMetadataItemClick,
onActiveObjectMetadataItemClick,
@@ -127,7 +125,6 @@ export const NavigationDrawerSectionForObjectMetadataItems = ({
{
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
const type = item.itemType;
if (type === 'folder') {
@@ -33,7 +37,6 @@ export const WorkspaceSectionItemContent = ({
folderColor={'color' in item ? (item.color ?? undefined) : undefined}
navigationMenuItems={folderChildrenById.get(item.id) ?? []}
isGroup={folderCount > 1}
- isEditMode={isEditMode}
isSelectedInEditMode={editModeProps.isSelectedInEditMode}
onEditModeClick={editModeProps.onEditModeClick}
onNavigationMenuItemClick={onNavigationMenuItemClick}
@@ -48,8 +51,12 @@ export const WorkspaceSectionItemContent = ({
return (
void;
- isEditMode?: boolean;
selectedNavigationMenuItemId?: string | null;
onNavigationMenuItemClick?: (params: NavigationMenuItemClickParams) => void;
onActiveObjectMetadataItemClick?: (
@@ -48,12 +48,14 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
items,
rightIcon,
onAddMenuItem,
- isEditMode = false,
selectedNavigationMenuItemId = null,
onNavigationMenuItemClick,
onActiveObjectMetadataItemClick,
}: NavigationDrawerSectionForWorkspaceItemsProps) => {
const { t } = useLingui();
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
const workspaceDropDisabled = useIsDropDisabledForSection(true);
const { toggleNavigationSection, isNavigationSectionOpen } =
useNavigationSection('Workspace');
@@ -141,7 +143,7 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
};
const isAddMenuItemButtonVisible =
- isEditMode && isDefined(onAddMenuItem) && !isDragging;
+ isNavigationMenuInEditMode && isDefined(onAddMenuItem) && !isDragging;
if (flatItems.length === 0 && !isAddToNavigationDropTargetVisible) {
return null;
@@ -156,7 +158,7 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
label={sectionTitle}
onClick={() => toggleNavigationSection()}
rightIcon={rightIcon}
- alwaysShowRightIcon={isEditMode}
+ alwaysShowRightIcon={isNavigationMenuInEditMode}
/>
{(isNavigationSectionOpen || isAddToNavigationDropTargetVisible) &&
@@ -167,7 +169,6 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
folderChildrenById={folderChildrenById}
folderCount={folderCount}
workspaceDropDisabled={workspaceDropDisabled}
- isEditMode={isEditMode}
isDragging={isDragging}
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
onNavigationMenuItemClick={onNavigationMenuItemClick}
@@ -188,7 +189,6 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
folderChildrenById={folderChildrenById}
folderCount={folderCount}
workspaceDropDisabled={workspaceDropDisabled}
- isEditMode={isEditMode}
isDragging={isDragging}
selectedNavigationMenuItemId={selectedNavigationMenuItemId}
onNavigationMenuItemClick={onNavigationMenuItemClick}
diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForWorkspaceItemsListDndKit.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForWorkspaceItemsListDndKit.tsx
index 56a0f2122cb..27ae9cb5225 100644
--- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForWorkspaceItemsListDndKit.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForWorkspaceItemsListDndKit.tsx
@@ -2,10 +2,12 @@ import styled from '@emotion/styled';
import React from 'react';
import { IconPlus } from 'twenty-ui/display';
-import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants/NavigationMenuItemDroppableIds';
import { WorkspaceDndKitDroppableSlot } from '@/navigation-menu-item/components/WorkspaceDndKitDroppableSlot';
import { WorkspaceDndKitSortableItem } from '@/navigation-menu-item/components/WorkspaceDndKitSortableItem';
+import { NavigationMenuItemDroppableIds } from '@/navigation-menu-item/constants/NavigationMenuItemDroppableIds';
+import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
+import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { WorkspaceSectionItemContent } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItemContent';
import type { WorkspaceSectionListDndKitProps } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItemsTypes';
@@ -23,7 +25,6 @@ export const WorkspaceSectionListDndKit = ({
folderChildrenById,
folderCount,
workspaceDropDisabled,
- isEditMode,
isDragging,
selectedNavigationMenuItemId,
onNavigationMenuItemClick,
@@ -35,6 +36,9 @@ export const WorkspaceSectionListDndKit = ({
onAddMenuItem,
addMenuItemLabel,
}: WorkspaceSectionListDndKitProps) => {
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
return (
{
+ const isNavigationMenuInEditMode = useAtomStateValue(
+ isNavigationMenuInEditModeState,
+ );
return (
;
folderCount: number;
@@ -34,7 +33,6 @@ export type WorkspaceSectionListCommonProps = {
folderChildrenById: Map;
folderCount: number;
workspaceDropDisabled: boolean;
- isEditMode: boolean;
isDragging: boolean;
selectedNavigationMenuItemId: string | null;
onNavigationMenuItemClick?: (params: NavigationMenuItemClickParams) => void;