Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collapsed menu hover effect #1240

Merged
merged 75 commits into from
Apr 22, 2024
Merged
Show file tree
Hide file tree
Changes from 55 commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
0c7b336
feat(Menu): add MenuGroupSection component
jomunker Aug 18, 2023
ab4ed1c
fix(Menu): CometAdminMenu spelled wrong
jomunker Aug 18, 2023
d233db4
feat(demo): use MenuGroupSection component in MasterMenu
jomunker Aug 18, 2023
48d43b7
feat(stories): use MenuGroupSection component in Menu story
jomunker Aug 18, 2023
8b1d9cd
feat(GroupSection): Make defaultProps overwritable
jomunker Sep 25, 2023
44fc74d
feat(GroupSection): use class instead of padding props
jomunker Sep 25, 2023
a1cd1b0
refactor(GroupSection): rename group section and all types to item group
jomunker Sep 25, 2023
7d90f45
Merge branch 'next' into add-groups-to-menu
jomunker Sep 25, 2023
57ba18a
feat(GroupSection): show initials of group title if drawer closed
jomunker Aug 21, 2023
8458858
feat(MenuItem): only show text if drawer open
jomunker Aug 21, 2023
8af75c2
feat(Menu): keep icons in collapsed permanent menu variant
jomunker Aug 21, 2023
a3cf811
feat(changeset): add changeset for collapsed menu
jomunker Aug 22, 2023
e9815fb
feat(MenuItem): add support for third level menu items
jomunker Aug 21, 2023
985aebc
docs(changeset): add changeset for third level items
jomunker Aug 21, 2023
645406d
feat(Menu): add hover effect for collapsed menu icons
jomunker Aug 29, 2023
10af706
feat(Menu): make transition effect of collapsed menu customizable
jomunker Aug 30, 2023
50a0794
feat(MasterMenu): use full scope language
jomunker Aug 30, 2023
6ad0b31
feat(Menu): implement design changes
jomunker Aug 30, 2023
ff369b2
refactor(CollapsibleItem): extract styles into separate file
jomunker Aug 30, 2023
03b3d26
feat(CollapsibleItem): update styling
jomunker Aug 29, 2023
2e879fe
feat(MenuItem): update styling
jomunker Oct 5, 2023
a8fddc2
feat(ItemGroup): update group initials padding
jomunker Oct 5, 2023
70d976f
feat(ItemGroup): add example subsubitem
jomunker Oct 5, 2023
771a146
feat(YoutubeVideoBlock): add ReactNode type to title in MenuItemGroup…
jomunker Oct 5, 2023
ae7c94d
refactor(ItemGroup): remove unnecessary string type from MenuItemGrou…
jomunker Oct 13, 2023
e661b51
Merge branch 'next' into add-groups-to-menu
jomunker Oct 13, 2023
bcd87c3
Merge branch 'add-groups-to-menu' into collapsed-menu
jomunker Oct 13, 2023
5f40a11
Merge branch 'collapsed-menu' into menu-subsubitems
jomunker Oct 13, 2023
7155a2f
Merge branch 'menu-subsubitems' into collapsed-menu-hover-effect
jomunker Oct 13, 2023
60f0ede
feat(MenuItem): remove drawerOpen and showText prop
jomunker Dec 11, 2023
096ef8a
refactor(Menu): prefix constants with DEFAULT_
jomunker Dec 11, 2023
db11d9e
refactor(ItemGroup): introduce shortTitle prop
jomunker Dec 11, 2023
d6dae21
remove: .DS_Store files
jomunker Dec 11, 2023
b95c91b
feat(Item): use colors from theme
jomunker Dec 22, 2023
2dba7f1
feat(Item): rename hasChildElements prop to hasSubitems
jomunker Dec 22, 2023
476be66
Merge branch 'collapsed-menu' into menu-subsubitems
jomunker Dec 22, 2023
693f1ed
refactor(CollapsibleItem): camelCase props OpenedIcon and ClosedIcon
jomunker Dec 22, 2023
fb0a686
remove(CollapsibleItem): prop collapsedMenuTransitionComponent since …
jomunker Dec 22, 2023
c8b84bc
refactor(CollapsibleItem): rename state isCollapsibleOpen to isSubmen…
jomunker Dec 22, 2023
c2d0b64
Merge branch 'menu-subsubitems' into collapsed-menu-hover-effect
jomunker Jan 3, 2024
acfef88
remove(MasterMenu): useless route from demo MasterMenu
jomunker Jan 3, 2024
3ec41a7
feat(Menu): hide scrollbar
jomunker Jan 3, 2024
60dcdb3
feat(Item): reduce width of icons in collapsed view to not cut of sec…
jomunker Jan 3, 2024
69667d5
docs(Menu): add subsubitem to admin menu demo
jomunker Jan 3, 2024
87634cc
feat(MenuContext): add current drawer variant and set function to con…
jomunker Feb 7, 2024
51e0999
feat(MenuItem): remove context usage to avoid unnecessary function ca…
jomunker Feb 7, 2024
6588af2
feat(ItemGroup): wrap childElements in useMemo
jomunker Feb 7, 2024
65cb263
feat(CollapsibleItem): optimize render condition by using drawer vari…
jomunker Feb 7, 2024
9213d5c
refactor(Menu): move overflowX out of mixins
jomunker Feb 13, 2024
4dc2573
feat(ItemGroup): adjust styling to match design
jomunker Feb 13, 2024
2f6cfb2
feat(Item): adjust styling to match design
jomunker Feb 13, 2024
7787451
feat(CollapsibleItem): change arrow color to match design
jomunker Feb 13, 2024
7a95bdc
refactor(Menu): use mui component class variables instead of strings
jomunker Feb 22, 2024
e892f44
COM-346: Add selected color to secondary text (#1669)
jomunker Feb 29, 2024
eadc1b4
Merge branch 'feature/menu-rework' into collapsed-menu-hover-effect
jomunker Mar 6, 2024
653bf5f
refactor(MasterMenu): section scope title to improve readability
jomunker Apr 11, 2024
07ba11d
docs: add changeset to cover breaking prop type changes in Collapsibl…
jomunker Apr 11, 2024
29d2ea2
feat(MenuItem): add fixed width to level 2 and 3, add text truncation
jomunker Apr 17, 2024
7506288
refactor(CollapsibleItem): change class names colorGrey and colorWhit…
jomunker Apr 17, 2024
5019625
feat(CollapsibleItem): use unique ids per item and hover menu
jomunker Apr 17, 2024
b8af7fa
refactor(MenuItem): rename level3Enumeration class to level3MenuOpen
jomunker Apr 17, 2024
ba35677
refactor(CollapsibleItem): move level one title out of list component
jomunker Apr 17, 2024
cfa5ccb
remove(CollapsibleItem): redundant class collapsibleOpen
jomunker Apr 17, 2024
0b56818
feat(CollapsibleItem): adjust item title to match design, remove redu…
jomunker Apr 17, 2024
8df5e59
feat(CollapsibleItem): adjust list spacing
jomunker Apr 17, 2024
36ccf11
feat(MenuItem): adjust spacing, colors and font weight to match design
jomunker Apr 17, 2024
e518507
refactor(MasterMenu): extract update of drawer variant of context int…
jomunker Apr 18, 2024
e67f8fd
remove(Menu): styles to hide scrollbar
jomunker Apr 18, 2024
b35de33
feat(typographyOptions): add font weights + subtitle2 and overline ty…
jomunker Apr 18, 2024
397cf55
feat(Item): adjust styling to match design
jomunker Apr 18, 2024
26fd106
docs: update changeset
jomunker Apr 18, 2024
6770a10
feat(CollapsibleItem): move className prop with listClasses to toplev…
jomunker Apr 18, 2024
a4bf7b7
remove(CollapsibleItem): unused class collapsedMenuParentTitle
jomunker Apr 18, 2024
dbe1910
Merge remote-tracking branch 'origin/collapsed-menu-hover-effect' int…
jomunker Apr 18, 2024
c2ee930
refactor(CollapsibleItem): change target to currentTarget in handlePo…
jomunker Apr 19, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/chatty-walls-study.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@comet/admin": minor
---

Add hover effect for collapsed menu icons. This ensures that navigation is also possible in collapsed state.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@ lang/
.pnp.*
junit.xml
.env.local
/.idea/**
19 changes: 15 additions & 4 deletions demo/admin/src/common/MasterMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,28 @@ import { Menu, MenuCollapsibleItem, MenuContext, MenuItemGroup, MenuItemRouterLi
import { Assets, Dashboard, Data, PageTree, Snips, Wrench } from "@comet/admin-icons";
import { useContentScope } from "@comet/cms-admin";
import * as React from "react";
import { useEffect } from "react";
import { useIntl } from "react-intl";
import { useRouteMatch } from "react-router";

const permanentMenuMinWidth = 1024;

const MasterMenu: React.FC = () => {
const { open, toggleOpen } = React.useContext(MenuContext);
const { open, toggleOpen, setDrawerVariant, drawerVariant } = React.useContext(MenuContext);
const windowSize = useWindowSize();
const intl = useIntl();
const match = useRouteMatch();
const { scope } = useContentScope();
const { scope, values } = useContentScope();
const useTemporaryMenu: boolean = windowSize.width < permanentMenuMinWidth;

useEffect(() => {
if (useTemporaryMenu) {
setDrawerVariant("temporary");
} else {
setDrawerVariant("permanent");
}
}, [setDrawerVariant, useTemporaryMenu]);

// Open menu when changing to permanent variant and close when changing to temporary variant.
React.useEffect(() => {
if ((useTemporaryMenu && open) || (!useTemporaryMenu && !open)) {
Expand All @@ -24,10 +33,12 @@ const MasterMenu: React.FC = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [location]);

const sectionScopeTitle = `${scope?.domain.charAt(0).toUpperCase() + scope?.domain.slice(1)} - ${scope?.language?.toUpperCase()}`;
const sectionScopeTitle = `${scope?.domain.charAt(0).toUpperCase() + scope?.domain.slice(1)} - ${
values.language[0].label ?? scope?.language?.toUpperCase()
}`;

return (
<Menu variant={useTemporaryMenu ? "temporary" : "permanent"}>
<Menu variant={drawerVariant}>
<MenuItemGroup title={sectionScopeTitle}>
<MenuItemRouterLink
primary={intl.formatMessage({ id: "menu.dashboard", defaultMessage: "Dashboard" })}
Expand Down
6 changes: 6 additions & 0 deletions packages/admin/admin-stories/src/admin/mui/Menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ const AppMenu: React.FC = () => {
<MenuCollapsibleItem primary="Even More Items" icon={<Sort />}>
<MenuItemRouterLink primary="Foo3" to="/foo3" />
<MenuItemRouterLink primary="Foo4" to="/foo4" />
<MenuCollapsibleItem primary="Wow there can be even more">
<MenuItemRouterLink primary="Foo5" to="/foo5" />
<MenuItemRouterLink primary="Foo6" to="/foo6" />
</MenuCollapsibleItem>
</MenuCollapsibleItem>
</MenuItemGroup>
<MenuItemGroup title="Further Layers">
Expand Down Expand Up @@ -84,6 +88,8 @@ export const Story: React.FC = () => (
<Route path="/foo2" render={() => <Content>Foo 2</Content>} />
<Route path="/foo3" render={() => <Content>Foo 3</Content>} />
<Route path="/foo4" render={() => <Content>Foo 4</Content>} />
<Route path="/foo5" render={() => <Content>Foo 5</Content>} />
<Route path="/foo6" render={() => <Content>Foo 6</Content>} />
</Switch>
</MasterLayout>
);
Expand Down
3 changes: 2 additions & 1 deletion packages/admin/admin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ export { MainContent, MainContentClassKey, MainContentProps } from "./mui/MainCo
export { MasterLayout, MasterLayoutProps } from "./mui/MasterLayout";
export { MasterLayoutClassKey } from "./mui/MasterLayout.styles";
export { MasterLayoutContext } from "./mui/MasterLayoutContext";
export { MenuCollapsibleItem, MenuCollapsibleItemClassKey, MenuCollapsibleItemProps, MenuLevel } from "./mui/menu/CollapsibleItem";
export { MenuCollapsibleItem, MenuCollapsibleItemProps, MenuLevel } from "./mui/menu/CollapsibleItem";
export { MenuCollapsibleItemClassKey } from "./mui/menu/CollapsibleItem.styles";
export { IMenuContext, IWithMenu, MenuContext, withMenu } from "./mui/menu/Context";
export { MenuItem, MenuItemProps } from "./mui/menu/Item";
export { MenuItemClassKey } from "./mui/menu/Item.styles";
Expand Down
3 changes: 2 additions & 1 deletion packages/admin/admin/src/mui/MasterLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,14 @@ function MasterLayoutComponent({
headerHeight = 60,
}: MasterLayoutProps & WithStyles<typeof styles>) {
const [open, setOpen] = React.useState(openMenuByDefault);
const [drawerVariant, setDrawerVariant] = React.useState<"permanent" | "temporary">("permanent");

const toggleOpen = () => {
setOpen(!open);
};

return (
<MenuContext.Provider value={{ open, toggleOpen }}>
<MenuContext.Provider value={{ open, toggleOpen, drawerVariant, setDrawerVariant }}>
<MasterLayoutContext.Provider value={{ headerHeight }}>
<CssBaseline />
<div className={classes.root}>
Expand Down
68 changes: 68 additions & 0 deletions packages/admin/admin/src/mui/menu/CollapsibleItem.styles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { Theme } from "@mui/material";
import { createStyles } from "@mui/styles";

import { MenuCollapsibleItemProps } from "./CollapsibleItem";

export type MenuCollapsibleItemClassKey =
| "root"
| "childSelected"
| "listItem"
| "open"
| "collapsedMenuParentTitle"
| "itemTitle"
| "collapsibleIcon"
| "colorGrey"
| "colorWhite"
| "collapsibleOpen";

export const styles = (theme: Theme) =>
createStyles<MenuCollapsibleItemClassKey, MenuCollapsibleItemProps>({
root: {},
childSelected: {
color: theme.palette.primary.main,
"& $listItem": {
"& [class*='MuiListItemText-root']": {
color: theme.palette.primary.main,
"& [class*='MuiListItemText-primary']": {
fontWeight: ({ level }) => level === 2 || (level === 3 && theme.typography.fontWeightBold),
},
},
"& [class*='MuiListItemIcon-root']": {
color: theme.palette.primary.main,
},
},
"& [class*='MuiListItemIcon-root']": {
color: theme.palette.primary.main,
},
},
collapsedMenuParentTitle: {
backgroundColor: ({ level, isMenuOpen, isCollapsibleOpen }) =>
level === 1 && !isMenuOpen && isCollapsibleOpen ? theme.palette.primary.main : theme.palette.grey[50],
},
itemTitle: {
fontWeight: theme.typography.fontWeightBold,
fontSize: 12,
padding: "15px 15px 20px 15px",
lineHeight: "16px",
color: theme.palette.grey[500],
},
collapsibleOpen: {
backgroundColor: ({ isMenuOpen }) => (!isMenuOpen ? theme.palette.primary.main : undefined),
color: ({ isMenuOpen }) => (!isMenuOpen ? `${theme.palette.common.white} !important` : undefined),
"& [class*='MuiListItemIcon-root']": {
color: ({ isMenuOpen }) => (!isMenuOpen ? `${theme.palette.common.white} !important` : undefined),
},
},
collapsibleIcon: {
fontSize: 12,
color: theme.palette.grey[200],
},
colorGrey: {
color: theme.palette.grey[200],
},
colorWhite: {
color: theme.palette.common.white,
},
listItem: {},
open: {},
});
Loading
Loading