Navbar customization v2 (#18026)
Adds color support for navigation menu items. --------- Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> Co-authored-by: Devessier <baptiste@devessier.fr> Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
+14
-9
@@ -2,7 +2,8 @@ import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainCo
|
||||
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
|
||||
import { ObjectIconWithViewOverlay } from '@/navigation-menu-item/components/ObjectIconWithViewOverlay';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import { getNavigationMenuItemIconColors } from '@/navigation-menu-item/utils/getNavigationMenuItemIconColors';
|
||||
import { useObjectNavItemColor } from '@/navigation-menu-item/hooks/useObjectNavItemColor';
|
||||
import { getStandardObjectIconColor } from '@/navigation-menu-item/utils/getStandardObjectIconColor';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { lastVisitedViewPerObjectMetadataItemState } from '@/navigation/states/lastVisitedViewPerObjectMetadataItemState';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
@@ -13,11 +14,10 @@ import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/compo
|
||||
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
|
||||
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
||||
import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { coreViewsFromObjectMetadataItemFamilySelector } from '@/views/states/selectors/coreViewsFromObjectMetadataItemFamilySelector';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { AppPath } from 'twenty-shared/types';
|
||||
import { getAppPath, isDefined } from 'twenty-shared/utils';
|
||||
import { Avatar, useIcons } from 'twenty-ui/display';
|
||||
@@ -45,11 +45,9 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
|
||||
onActiveItemClickWhenNotInEditMode,
|
||||
isDragging = false,
|
||||
}: NavigationDrawerItemForObjectMetadataItemProps) => {
|
||||
const theme = useTheme();
|
||||
const isNavigationMenuItemEditingEnabled = useIsFeatureEnabled(
|
||||
FeatureFlagKey.IS_NAVIGATION_MENU_ITEM_EDITING_ENABLED,
|
||||
);
|
||||
const iconColors = getNavigationMenuItemIconColors(theme);
|
||||
const lastVisitedViewPerObjectMetadataItem = useAtomStateValue(
|
||||
lastVisitedViewPerObjectMetadataItemState,
|
||||
);
|
||||
@@ -68,6 +66,9 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
|
||||
lastVisitedViewPerObjectMetadataItem?.[objectMetadataItem.id];
|
||||
|
||||
const { getIcon } = useIcons();
|
||||
const objectNavItemColor = useObjectNavItemColor(
|
||||
objectMetadataItem.nameSingular,
|
||||
);
|
||||
const location = useLocation();
|
||||
const currentPath = location.pathname;
|
||||
const currentPathWithSearch = `${location.pathname}${location.search}`;
|
||||
@@ -141,13 +142,17 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
|
||||
<ObjectIconWithViewOverlay
|
||||
ObjectIcon={getIcon(objectMetadataItem.icon)}
|
||||
ViewIcon={getIcon(navigationMenuItem!.Icon!)}
|
||||
objectColor={objectNavItemColor}
|
||||
/>
|
||||
)
|
||||
: getIcon(objectMetadataItem.icon);
|
||||
|
||||
const iconBackgroundColor =
|
||||
isNavigationMenuItemEditingEnabled && !isRecord && !isViewWithCustomName
|
||||
? iconColors.object
|
||||
const iconThemeColor =
|
||||
isNavigationMenuItemEditingEnabled && !isRecord
|
||||
? isDefined(navigationMenuItem?.color)
|
||||
? navigationMenuItem.color
|
||||
: (getStandardObjectIconColor(objectMetadataItem.nameSingular) ??
|
||||
'gray')
|
||||
: undefined;
|
||||
|
||||
const secondaryLabel =
|
||||
@@ -222,7 +227,7 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
|
||||
}
|
||||
onClick={handleClick}
|
||||
Icon={Icon}
|
||||
iconBackgroundColor={iconBackgroundColor}
|
||||
iconColor={iconThemeColor}
|
||||
active={isActive}
|
||||
isSelectedInEditMode={isSelectedInEditMode}
|
||||
isDragging={isDragging}
|
||||
|
||||
+4
-5
@@ -1,5 +1,4 @@
|
||||
import { NavigationDropTargetContext } from '@/navigation-menu-item/contexts/NavigationDropTargetContext';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import styled from '@emotion/styled';
|
||||
import { Droppable } from '@hello-pangea/dnd';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
@@ -18,7 +17,6 @@ import {
|
||||
type FlatWorkspaceItem,
|
||||
type NavigationMenuItemClickParams,
|
||||
} from '@/navigation-menu-item/hooks/useWorkspaceSectionItems';
|
||||
import { getNavigationMenuItemIconColors } from '@/navigation-menu-item/utils/getNavigationMenuItemIconColors';
|
||||
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { NavigationDrawerItemForObjectMetadataItem } from '@/object-metadata/components/NavigationDrawerItemForObjectMetadataItem';
|
||||
@@ -67,7 +65,6 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
|
||||
onActiveObjectMetadataItemClick,
|
||||
}: NavigationDrawerSectionForWorkspaceItemsProps) => {
|
||||
const { t } = useLingui();
|
||||
const theme = useTheme();
|
||||
const workspaceDropDisabled = useIsDropDisabledForSection(true);
|
||||
const { toggleNavigationSection, isNavigationSectionOpen } =
|
||||
useNavigationSection('Workspace');
|
||||
@@ -206,6 +203,9 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
|
||||
folderId={item.id}
|
||||
folderName={item.name ?? 'Folder'}
|
||||
folderIconKey={item.Icon}
|
||||
folderColor={
|
||||
'color' in item ? item.color : undefined
|
||||
}
|
||||
navigationMenuItems={
|
||||
folderChildrenById.get(item.id) ?? []
|
||||
}
|
||||
@@ -231,7 +231,6 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
|
||||
|
||||
if (type === 'link') {
|
||||
const linkItem = item as ProcessedNavigationMenuItem;
|
||||
const iconColors = getNavigationMenuItemIconColors(theme);
|
||||
return (
|
||||
<NavigationItemDropTarget
|
||||
key={item.id}
|
||||
@@ -259,7 +258,7 @@ export const NavigationDrawerSectionForWorkspaceItems = ({
|
||||
: undefined
|
||||
}
|
||||
Icon={IconLink}
|
||||
iconBackgroundColor={iconColors.link}
|
||||
iconColor={linkItem.color}
|
||||
active={false}
|
||||
isSelectedInEditMode={
|
||||
editModeProps.isSelectedInEditMode
|
||||
|
||||
Reference in New Issue
Block a user