import * as React from 'react';
import {
Menu,
MenuItem,
MenuProps,
compose,
Provider,
MenuItemIcon,
MenuItemContent,
MenuItemIndicator,
MenuItemWrapper,
BookmarkIcon,
MenuStylesProps,
MenuItemProps,
MenuItemStylesProps,
} from '@fluentui/react-northstar';
import { FloatProperty } from 'csstype';
const MenuItemWrapperDashed = compose(MenuItemWrapper, {
displayName: 'MenuItemWrapperDashed',
});
const MenuItemIconGreen = compose(MenuItemIcon, {
displayName: 'MenuItemIconGreen',
});
const MenuItemContentPurple = compose(MenuItemContent, {
displayName: 'MenuItemContentPurple',
});
const MenuitemIndicatorSaturated = compose(MenuItemIndicator, {
displayName: 'MenuitemIndicatorSaturated',
});
interface MenuItemBlueOwnProps {
level?: number;
}
interface MenuItemBlueProps extends MenuItemProps, MenuItemBlueOwnProps {}
const MenuItemBlue = compose<'a', MenuItemBlueProps, MenuItemStylesProps, MenuItemProps, MenuItemStylesProps>(
MenuItem,
{
displayName: 'MenuItemBlue',
slots: {
icon: MenuItemIconGreen,
content: MenuItemContentPurple,
indicator: MenuitemIndicatorSaturated,
wrapper: MenuItemWrapperDashed,
},
slotProps: props => ({
menu: {
level: props.level + 1,
},
}),
},
);
interface MenuColorfulOwnProps {
level?: number;
}
interface MenuColorfulProps extends MenuColorfulOwnProps, MenuProps {}
interface MenuColorfulOwnStylesProps {
level?: number;
}
interface MenuColorfulStylesProps extends MenuColorfulOwnStylesProps, MenuStylesProps {}
const MenuColorful = compose<'ul', MenuColorfulProps, MenuColorfulStylesProps, MenuProps, MenuStylesProps>(Menu, {
displayName: 'MenuColorful',
slots: {
item: MenuItemBlue,
},
mapPropsToStylesProps: props => ({
level: props.level,
}),
slotProps: props => ({
item: {
level: props.level || 0,
},
}),
});
const items = [
{
key: 'editorials',
content: 'Editorials',
icon: ,
defaultMenuOpen: true,
menu: [
{
key: 'One',
content: 'One',
menu: ['Four', { content: 'Five' }],
},
'Two',
'Three',
],
},
{ key: 'review', content: 'Reviews' },
{ key: 'events', content: 'Upcoming Events' },
];
const themeOverrides = {
componentStyles: {
MenuItemBlue: {
root: {
backgroundColor: 'lightblue',
overflow: 'visible',
},
},
MenuItemIconGreen: {
root: {
color: 'lightgreen',
},
},
MenuItemContentPurple: {
root: {
color: 'purple',
},
},
MenuitemIndicatorSaturated: {
root: {
filter: 'saturate(8)',
backgroundSize: '20px',
height: '20px',
width: '20px',
float: 'right' as FloatProperty,
},
},
MenuItemWrapperDashed: {
root: {
border: '1px dashed lightgreen',
},
},
MenuColorful: {
root: ({ props }) => ({
backgroundColor: 'coral',
...(props.level === 1 && {
backgroundColor: 'teal',
}),
...(props.level === 2 && {
backgroundColor: 'pink',
}),
}),
},
},
};
const MenuExampleCompose = () => (
);
export default MenuExampleCompose;