import { Menu, Portal } from '@mantine/core';
import React, { useState } from 'react';
import { type MantineBetterMenuInstanceItem, useMantineBetterMenus } from './Store';
export function MenuRenderer() {
const { menus, providerID, setInstanceState, width } = useMantineBetterMenus((s) => ({
menus: s.menus,
providerID: s.providerID,
setInstanceState: s.setInstanceState,
setState: s.setState,
width: s.width,
}));
return (
{React.Children.toArray(
menus?.map((m, menuIndex) => {
return (
);
})
)}
);
}
const MenuItemRenderer = ({ children, label, ...props }: MantineBetterMenuInstanceItem) => {
const [loading, setLoading] = useState(false);
if (typeof props.renderer === 'function') {
return props.renderer({ ...props, loading, renderer: undefined, setLoading });
}
if (typeof props.renderer === 'object') {
return props.renderer;
}
if (props.isDivider) {
return ;
}
if (props.items && props.items.length > 0) {
return (
{
props.onClick?.(e);
if (props.onClickAsync) {
setLoading(true);
props.onClickAsync().finally(() => setLoading(false));
}
}}
styles={{
itemLabel: {
overflow: 'auto',
wordWrap: 'break-word',
},
...props.styles,
}}
>
{children ?? label}
{React.Children.toArray(
props.items.map((subitem, subitemIndex) => (
))
)}
);
}
if (!props.onClick && !props.onClickAsync) {
return )}> {children ?? label};
}
return (
{
props.onClick?.(e);
if (props.onClickAsync) {
setLoading(true);
props.onClickAsync(e).finally(() => setLoading(false));
}
}}
styles={{
itemLabel: {
overflow: 'auto',
wordWrap: 'break-word',
},
...props.styles,
}}
>
{children ?? label}
);
};