refactor: improve item type handling and component logic in CommandMenu
Refactored the CommandMenuNavigationMenuItemEditPage and related hooks to enhance item type checks and streamline component logic. Updated imports for better organization and clarity, ensuring consistent handling of navigation menu item types. This change simplifies the logic for rendering components based on selected item types, improving overall code readability and maintainability.
This commit is contained in:
+15
-12
@@ -1,20 +1,20 @@
|
||||
import styled from '@emotion/styled';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { CommandMenuList } from '@/command-menu/components/CommandMenuList';
|
||||
import { CommandMenuEditFolderPickerSubView } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditFolderPickerSubView';
|
||||
import { CommandMenuEditOrganizeActions } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditOrganizeActions';
|
||||
import { getOrganizeActionsSelectableItemIds } from '@/command-menu/pages/navigation-menu-item/utils/getOrganizeActionsSelectableItemIds';
|
||||
import { CommandMenuEditLinkItemView } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditLinkItemView';
|
||||
import { CommandMenuEditObjectViewBase } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditObjectViewBase';
|
||||
import { CommandMenuEditOrganizeActions } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditOrganizeActions';
|
||||
import { CommandMenuEditOwnerSection } from '@/command-menu/pages/navigation-menu-item/components/CommandMenuEditOwnerSection';
|
||||
import { useNavigationMenuItemEditOrganizeActions } from '@/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditOrganizeActions';
|
||||
import { useNavigationMenuItemEditSubView } from '@/command-menu/pages/navigation-menu-item/hooks/useNavigationMenuItemEditSubView';
|
||||
import { useSelectedNavigationMenuItemEditData } from '@/command-menu/pages/navigation-menu-item/hooks/useSelectedNavigationMenuItemEditData';
|
||||
import { getOrganizeActionsSelectableItemIds } from '@/command-menu/pages/navigation-menu-item/utils/getOrganizeActionsSelectableItemIds';
|
||||
import { useUpdateLinkInDraft } from '@/navigation-menu-item/hooks/useUpdateLinkInDraft';
|
||||
import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState';
|
||||
import { NAVIGATION_MENU_ITEM_TYPE } from '@/navigation-menu-item/types/navigation-menu-item-type';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/types/processed-navigation-menu-item';
|
||||
import styled from '@emotion/styled';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useRecoilValue } from 'recoil';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
const StyledCommandMenuPlaceholder = styled.p`
|
||||
color: ${({ theme }) => theme.font.color.tertiary};
|
||||
@@ -89,14 +89,13 @@ export const CommandMenuNavigationMenuItemEditPage = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedItemType === NAVIGATION_MENU_ITEM_TYPE.LINK && !selectedItem) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (selectedItemType === NAVIGATION_MENU_ITEM_TYPE.LINK) {
|
||||
if (
|
||||
isDefined(selectedItem) &&
|
||||
selectedItem.itemType === NAVIGATION_MENU_ITEM_TYPE.LINK
|
||||
) {
|
||||
return (
|
||||
<CommandMenuEditLinkItemView
|
||||
selectedItem={selectedItem as ProcessedNavigationMenuItem}
|
||||
selectedItem={selectedItem}
|
||||
onUpdateLink={(linkId, link) => updateLinkInDraft(linkId, { link })}
|
||||
onOpenFolderPicker={setFolderPicker}
|
||||
canMoveUp={canMoveUp}
|
||||
@@ -110,6 +109,10 @@ export const CommandMenuNavigationMenuItemEditPage = () => {
|
||||
);
|
||||
}
|
||||
|
||||
if (selectedItemType === NAVIGATION_MENU_ITEM_TYPE.LINK) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (selectedItemType === NAVIGATION_MENU_ITEM_TYPE.FOLDER) {
|
||||
return (
|
||||
<CommandMenuList
|
||||
|
||||
+6
-4
@@ -2,9 +2,8 @@ import { useRecoilValue } from 'recoil';
|
||||
|
||||
import { useWorkspaceSectionItems } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems';
|
||||
import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState';
|
||||
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem';
|
||||
import { NAVIGATION_MENU_ITEM_TYPE } from '@/navigation-menu-item/types/navigation-menu-item-type';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/types/processed-navigation-menu-item';
|
||||
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem';
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { coreViewsState } from '@/views/states/coreViewState';
|
||||
import { convertCoreViewToView } from '@/views/utils/convertCoreViewToView';
|
||||
@@ -25,7 +24,7 @@ export const useSelectedNavigationMenuItemEditData = () => {
|
||||
const selectedItemType = selectedItem?.itemType ?? null;
|
||||
const selectedItemObjectMetadata = selectedItem
|
||||
? getObjectMetadataForNavigationMenuItem(
|
||||
selectedItem as ProcessedNavigationMenuItem,
|
||||
selectedItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
)
|
||||
@@ -38,7 +37,10 @@ export const useSelectedNavigationMenuItemEditData = () => {
|
||||
: (selectedItemObjectMetadata?.labelPlural ?? '')
|
||||
: null;
|
||||
|
||||
const processedItem = selectedItem as ProcessedNavigationMenuItem | undefined;
|
||||
const processedItem =
|
||||
selectedItem && selectedItem.itemType !== NAVIGATION_MENU_ITEM_TYPE.FOLDER
|
||||
? selectedItem
|
||||
: undefined;
|
||||
|
||||
return {
|
||||
selectedItem,
|
||||
|
||||
+7
-2
@@ -1,11 +1,16 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/types/processed-navigation-menu-item';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { type View } from '@/views/types/View';
|
||||
|
||||
type NavigationMenuItemWithItemType = Pick<
|
||||
ProcessedNavigationMenuItem,
|
||||
'itemType' | 'viewId' | 'targetObjectMetadataId'
|
||||
>;
|
||||
|
||||
export const getObjectMetadataForNavigationMenuItem = (
|
||||
navigationMenuItem: ProcessedNavigationMenuItem,
|
||||
navigationMenuItem: NavigationMenuItemWithItemType,
|
||||
objectMetadataItems: ObjectMetadataItem[],
|
||||
views: View[],
|
||||
): ObjectMetadataItem | null => {
|
||||
|
||||
Reference in New Issue
Block a user