import {MenuBarEntry, MenuBarEntryNormal} from "tc-shared/ui/frames/menu-bar";
import * as React from "react";
import {useEffect, useState} from "react";
import {ClientIconRenderer} from "tc-shared/ui/react-elements/Icons";
import {RemoteIconRenderer} from "tc-shared/ui/react-elements/Icon";
import {getIconManager} from "tc-shared/file/Icons";
const cssStyle = require("./Renderer.scss");
const SubMenuRenderer = (props: { entry: MenuBarEntryNormal }) => {
if(!props.entry.children) { return null; }
return (
{props.entry.children.map(child => {
if(child.type === "separator") {
return
} else {
return ;
}
})}
);
};
const MenuItemRenderer = (props: { entry: MenuBarEntryNormal }) => {
let icon;
if(typeof props.entry.icon === "string") {
icon = ;
} else if(typeof props.entry.icon === "object") {
let remoteIcon = getIconManager().resolveIcon(props.entry.icon.iconId, props.entry.icon.serverUniqueId, props.entry.icon.handlerId);
icon = ;
}
return (
{icon}
{props.entry.label}
);
}
const EntryRenderer = React.memo((props: { entry: MenuBarEntryNormal }) => {
let classList = [cssStyle.containerMenuItem, cssStyle.typeSide];
if(props.entry.children?.length) {
classList.push(cssStyle.subEntries);
}
if(props.entry.disabled) {
classList.push(cssStyle.disabled);
}
if(typeof props.entry.visible === "boolean" && !props.entry.visible) {
return null;
}
return (
);
});
const MainEntryRenderer = React.memo((props: { entry: MenuBarEntry }) => {
const [ active, setActive ] = useState(false);
if(props.entry.type !== "normal") { return null; }
if(typeof props.entry.visible === "boolean" && !props.entry.visible) {
return null;
}
let classList = [cssStyle.containerMenuItem];
if(props.entry.children?.length) {
classList.push(cssStyle.subEntries);
}
if(props.entry.disabled) {
classList.push(cssStyle.disabled);
}
if(active) {
classList.push(cssStyle.active);
}
useEffect(() => {
if(!active) { return; }
const listener = (event: MouseEvent | FocusEvent) => {
event.preventDefault();
setActive(false);
};
document.addEventListener("click", listener);
document.addEventListener("focusout", listener);
return () => {
document.removeEventListener("click", listener);
document.removeEventListener("focusout", listener);
};
}, [ active ])
return (
setActive(true)}
>
);
});
export const MenuBarRenderer = (props: { items: MenuBarEntry[] }) => {
return (
{props.items.map(item => )}
);
}