import type { MenuProps } from 'antd';
import { useTabController } from './tabHooks';
interface ContextMenuProps {
active: boolean;
children: React.ReactNode;
darkMode: boolean;
disabledKeys?: App.Global.DropdownKey[];
excludeKeys?: App.Global.DropdownKey[];
mode: UnionKey.ThemeTabMode;
tabId: string;
}
interface DropdownOption {
disabled?: boolean;
icon: string;
key: App.Global.DropdownKey;
label: string;
}
function getMenu(options: DropdownOption[]) {
const items: MenuProps['items'] = options.map(opt => ({
disabled: opt.disabled,
icon: (
),
key: opt.key,
label: opt.label
}));
return items;
}
const ContextMenu = ({ children, disabledKeys = [], excludeKeys = [], tabId }: ContextMenuProps) => {
const { t } = useTranslation();
const { clearLeftTabs, clearRightTabs, closeAllTabs, closeCurrentTab, closeOtherTabs } = useTabController();
const options = () => {
const opts: DropdownOption[] = [
{
icon: 'ant-design:close-outlined',
key: 'closeCurrent',
label: t('dropdown.closeCurrent')
},
{
icon: 'ant-design:column-width-outlined',
key: 'closeOther',
label: t('dropdown.closeOther')
},
{
icon: 'mdi:format-horizontal-align-left',
key: 'closeLeft',
label: t('dropdown.closeLeft')
},
{
icon: 'mdi:format-horizontal-align-right',
key: 'closeRight',
label: t('dropdown.closeRight')
},
{
icon: 'ant-design:line-outlined',
key: 'closeAll',
label: t('dropdown.closeAll')
}
];
return opts
.filter(opt => !excludeKeys.includes(opt.key))
.map(opt => {
if (disabledKeys.includes(opt.key)) {
opt.disabled = true;
}
return opt;
});
};
const menu = getMenu(options());
const dropdownAction: Record void> = {
closeAll() {
closeAllTabs();
},
closeCurrent() {
closeCurrentTab(tabId);
},
closeLeft() {
clearLeftTabs(tabId);
},
closeOther() {
closeOtherTabs(tabId);
},
closeRight() {
clearRightTabs(tabId);
}
};
const handleClick: MenuProps['onClick'] = e => {
dropdownAction[e.key as App.Global.DropdownKey]();
};
return (
{children}
);
};
export default ContextMenu;