Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 0 additions & 1 deletion shesha-reactjs/src/components/menu/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ export const LayoutMenu: FC<IProps> = ({
menuId,
colors,
fontStyles,
style,
styleOnHover,
styleOnSelected,
styleOnSubMenu,
Expand Down
87 changes: 55 additions & 32 deletions shesha-reactjs/src/components/menu/styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ export const useStyles = createStyles(
align-items: center;
height: 100%;
width: ${width};
overflow: hidden;
`;

const menuWrapper = css`
Expand All @@ -65,11 +64,17 @@ export const useStyles = createStyles(
`;

const menuWrapperScroll = isScrolling
? {
display: "flex",
width: `calc(${width} + 80px)`,
overflow: "scroll",
}
? css`
display: flex;
width: ${width};
overflow-x: scroll;
overflow-y: hidden;
scrollbar-width: none;

::-webkit-scrollbar {
display: none;
}
`
: undefined;

const shaMenu = cx(
Expand All @@ -91,7 +96,8 @@ export const useStyles = createStyles(
border: none !important;
}

.${prefixCls}-menu-submenu, .${prefixCls}-menu-item {
/* Only style direct children of the main menu, not dropdown items */
> .${prefixCls}-menu-submenu, > .${prefixCls}-menu-item {
padding: ${padding?.y}px ${padding?.x}px;
color: ${colors?.itemColor ?? BLACK_CLR};
${colors?.itemBackground ? `background: ${colors.itemBackground};` : ''}
Expand Down Expand Up @@ -131,7 +137,8 @@ export const useStyles = createStyles(
}
}

.${prefixCls}-menu-submenu-active {
/* Only style direct children active states */
> .${prefixCls}-menu-submenu-active {
${styleOnHover ? styleOnHover : `
background: ${colors?.hoverItemBackground
? `${colors.hoverItemBackground} !important`
Expand All @@ -146,7 +153,7 @@ export const useStyles = createStyles(
`}
}

.${prefixCls}-menu-item-selected {
> .${prefixCls}-menu-item-selected {
${styleOnSelected ? styleOnSelected : `
background: ${colors?.selectedItemBackground
? `${colors.selectedItemBackground} !important`
Expand Down Expand Up @@ -204,6 +211,12 @@ export const useStyles = createStyles(
}
`;

const editMode = css`
.edit-mode {
pointer-events: none;
}
`;

return {
menuContainer,
menuWrapper,
Expand All @@ -212,37 +225,45 @@ export const useStyles = createStyles(
shaHamburgerItem,
scrollButtons,
scrollButton,
editMode,
};
},
);

export const GlobalMenuStyles: NamedExoticComponent<IGlobalMenuProps> = createGlobalStyle`
.${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-sub,
.${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-inline,
.${(p: GlobalMenuType) => p?.theme.prefixCls}-menu {

${(p: GlobalMenuType) => p?.styleOnSubMenu};
.edit-mode {
pointer-events: none;
}
.edit-mode .sha-configurable-sidemenu-button-wrapper {
pointer-events: auto;
}

${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
/* Styles for dropdown/submenu popups ONLY */
.${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-sub {
border: none !important;
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05) !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu to the container */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

.${(p) => p?.theme.prefixCls}-menu-submenu-arrow {
display: none !important;
}

/* All items inside dropdown panels get styleOnSubMenu */
.${(p) => p?.theme.prefixCls}-menu-item {
color: ${(p: GlobalMenuType) => p?.colors?.itemColor || BLACK_CLR} !important;
${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
border: none !important;
margin: 0 !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu LAST to override colors */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

&:hover {
${(p: GlobalMenuType) => p?.styleOnHover || `
color: ${p?.colors?.hoverItemColor || BLACK_CLR} !important;
Expand All @@ -258,17 +279,18 @@ export const GlobalMenuStyles: NamedExoticComponent<IGlobalMenuProps> = createGl
}
}

/* Parent submenu items (items that have children) */
/* Submenu titles inside dropdown panels */
.${(p) => p?.theme.prefixCls}-menu-submenu {
.${(p) => p?.theme.prefixCls}-menu-submenu-title {
color: ${(p: GlobalMenuType) => p?.colors?.itemColor || BLACK_CLR} !important;
${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
border: none !important;
margin: 0 !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu LAST to override colors */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

&:hover {
${(p: GlobalMenuType) => p?.styleOnHover || `
color: ${p?.colors?.hoverItemColor || BLACK_CLR} !important;
Expand Down Expand Up @@ -341,35 +363,34 @@ export const ScopedMenuStyles: NamedExoticComponent<IGlobalMenuProps> = createGl
}
}

/* Styles for dropdown/submenu popups in scoped menus ONLY */
.horizontal-menu-drawer-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-sub,
.horizontal-menu-drawer-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-inline,
.horizontal-menu-drawer-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu,
.horizontal-menu-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-sub,
.horizontal-menu-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-inline,
.horizontal-menu-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu {

${(p: GlobalMenuType) => p?.styleOnSubMenu};
.horizontal-menu-${(p: GlobalMenuType) => p?.menuId} .${(p: GlobalMenuType) => p?.theme.prefixCls}-menu-sub {

${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
border: none !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu to the container */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

/* Hide submenu arrows */
.${(p) => p?.theme.prefixCls}-menu-submenu-arrow {
display: none !important;
}

/* All items inside dropdown panels get styleOnSubMenu */
.${(p) => p?.theme.prefixCls}-menu-item {
color: ${(p: GlobalMenuType) => p?.colors?.itemColor || BLACK_CLR} !important;
${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
border: none !important;
margin: 0 !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu LAST to override colors */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

&:hover {
${(p: GlobalMenuType) => p?.styleOnHover || `
color: ${p?.colors?.hoverItemColor || BLACK_CLR} !important;
Expand All @@ -385,16 +406,18 @@ export const ScopedMenuStyles: NamedExoticComponent<IGlobalMenuProps> = createGl
}
}

/* Submenu titles inside dropdown panels */
.${(p) => p?.theme.prefixCls}-menu-submenu {
.${(p) => p?.theme.prefixCls}-menu-submenu-title {
color: ${(p: GlobalMenuType) => p?.colors?.itemColor || BLACK_CLR} !important;
${(p: GlobalMenuType) => p?.colors?.itemBackground ? `background: ${p.colors.itemBackground} !important;` : ''}
border: none !important;
margin: 0 !important;
font-family: ${(p: GlobalMenuType) => p?.fontStyles?.fontFamily} !important;
font-weight: ${(p: GlobalMenuType) => p?.fontStyles?.fontWeight} !important;
text-align: ${(p: GlobalMenuType) => p?.fontStyles?.textAlign} !important;

/* Apply styleOnSubMenu LAST to override colors */
${(p: GlobalMenuType) => p?.styleOnSubMenu};

&:hover {
${(p: GlobalMenuType) => p?.styleOnHover || `
color: ${p?.colors?.hoverItemColor || BLACK_CLR} !important;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,17 @@
menuId?: string;
colors?: ILayoutColor;
fontStyles?: React.CSSProperties;
style?: React.CSSProperties;
styleOnHover?: React.CSSProperties;
styleOnSelected?: React.CSSProperties;
styleOnSubMenu?: React.CSSProperties;
}

const BLACK_CLR = "#000000e0";

Check failure on line 14 in shesha-reactjs/src/components/menu/useHorizontalMenuDropdownStyles.ts

View workflow job for this annotation

GitHub Actions / build-attempt

'BLACK_CLR' is assigned a value but never used. Allowed unused vars must match /^_/u

export const useHorizontalMenuDropdownStyles = ({
menuId,
colors,
fontStyles,
style,
styleOnHover,
styleOnSelected,
styleOnSubMenu,
Expand All @@ -33,7 +31,6 @@
existingStyle.remove();
}

const customStyle = convertJsonToCss(style);
const customStyleOnHover = convertJsonToCss(styleOnHover);
const customStyleOnSelected = convertJsonToCss(styleOnSelected);
const customStyleOnSubMenu = convertJsonToCss(styleOnSubMenu);
Expand All @@ -43,80 +40,64 @@
styleElement.textContent = `
/* Dropdown styles for horizontalMenu-${menuId} */
.horizontal-menu-${menuId}-dropdown .ant-menu {
${customStyleOnSubMenu || customStyle || `
background: ${colors?.itemBackground || 'transparent'} !important;
`}
border: none !important;
font-family: ${fontStyles?.fontFamily} !important;
font-weight: ${fontStyles?.fontWeight} !important;
text-align: ${fontStyles?.textAlign} !important;
${customStyleOnSubMenu || ''}
}

/* All menu items in dropdown get styleOnSubMenu */
.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item {
${customStyle || `
color: ${colors?.itemColor || BLACK_CLR} !important;
background: ${colors?.itemBackground || 'transparent'} !important;
`}
border: none !important;
margin: 0 !important;
font-family: ${fontStyles?.fontFamily} !important;
font-weight: ${fontStyles?.fontWeight} !important;
text-align: ${fontStyles?.textAlign} !important;
${customStyleOnSubMenu || ''}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item:hover {
${customStyleOnHover || `
color: ${colors?.hoverItemColor || BLACK_CLR} !important;
background: ${colors?.hoverItemBackground || 'transparent'} !important;
`}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item.ant-menu-item-selected {
${customStyleOnSelected || `
color: ${colors?.selectedItemColor || BLACK_CLR} !important;
background: ${colors?.selectedItemBackground || 'transparent'} !important;
`}
}

/* Submenu titles in dropdown get styleOnSubMenu */
.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu .ant-menu-submenu-title {
${customStyleOnSubMenu || customStyle || `
color: ${colors?.itemColor || BLACK_CLR} !important;
background: ${colors?.itemBackground || 'transparent'} !important;
`}
border: none !important;
margin: 0 !important;
font-family: ${fontStyles?.fontFamily} !important;
font-weight: ${fontStyles?.fontWeight} !important;
text-align: ${fontStyles?.textAlign} !important;
${customStyleOnSubMenu || ''}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover {
${customStyleOnHover || `
color: ${colors?.hoverItemColor || BLACK_CLR} !important;
background: ${colors?.hoverItemBackground || 'transparent'} !important;
`}
.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu:hover{
${customStyleOnHover}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu.ant-menu-submenu-selected .ant-menu-submenu-title {
${customStyleOnSelected || `
color: ${colors?.selectedItemColor || BLACK_CLR} !important;
background: ${colors?.selectedItemBackground || 'transparent'} !important;
`}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item-active {
${customStyleOnHover || `
color: ${colors?.hoverItemColor || BLACK_CLR} !important;
background: ${colors?.hoverItemBackground || 'transparent'} !important;
`}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu-active .ant-menu-submenu-title {
${customStyleOnHover || `
color: ${colors?.hoverItemColor || BLACK_CLR} !important;
background: ${colors?.hoverItemBackground || 'transparent'} !important;
`}
}
${customStyleOnHover ? `
.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item:hover {
${customStyleOnHover}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu .ant-menu-submenu-title:hover {
${customStyleOnHover}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item-active {
${customStyleOnHover}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu-active .ant-menu-submenu-title {
${customStyleOnHover}
}
` : ''}

${customStyleOnSelected ? `
.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-item.ant-menu-item-selected {
${customStyleOnSelected}
}

.horizontal-menu-${menuId}-dropdown .ant-menu .ant-menu-submenu.ant-menu-submenu-selected .ant-menu-submenu-title {
${customStyleOnSelected}
}
` : ''}
`;

document.head.appendChild(styleElement);
Expand All @@ -127,5 +108,5 @@
styleElement.remove();
}
};
}, [menuId, colors, fontStyles, style, styleOnHover, styleOnSelected, styleOnSubMenu]);
}, [menuId, colors, fontStyles, styleOnHover, styleOnSelected, styleOnSubMenu]);
};
Loading
Loading