Files
daedalOS/components/system/Taskbar/useTaskbarContextMenu.ts
2023-08-07 15:24:23 -07:00

81 lines
2.2 KiB
TypeScript

import { useMemo } from "react";
import { useMenu } from "contexts/menu";
import type {
ContextMenuCapture,
MenuItem,
} from "contexts/menu/useMenuContextState";
import { useProcesses } from "contexts/process";
import { useProcessesRef } from "hooks/useProcessesRef";
import { MENU_SEPERATOR } from "utils/constants";
import { toggleShowDesktop } from "utils/functions";
import { useViewport } from "contexts/viewport";
const useTaskbarContextMenu = (onStartButton = false): ContextMenuCapture => {
const { contextMenu } = useMenu();
const { minimize, open } = useProcesses();
const processesRef = useProcessesRef();
const { fullscreenElement, toggleFullscreen } = useViewport();
return useMemo(
() =>
contextMenu?.(() => {
const processArray = Object.entries(processesRef.current);
const allWindowsMinimized =
processArray.length > 0 &&
!processArray.some(([, { minimized }]) => !minimized);
const toggleLabel = allWindowsMinimized
? "Show open windows"
: "Show the desktop";
const menuItems: MenuItem[] = [
{
action: () => toggleShowDesktop(processesRef.current, minimize),
label: onStartButton ? "Desktop" : toggleLabel,
},
];
if (onStartButton) {
menuItems.unshift(
{
action: () => open("Terminal"),
label: "Terminal",
},
MENU_SEPERATOR,
{
action: () => open("FileExplorer"),
label: "File Explorer",
},
{
action: () => open("Run"),
label: "Run",
},
MENU_SEPERATOR
);
} else {
menuItems.unshift(
{
action: () => toggleFullscreen(),
label:
fullscreenElement === document.documentElement
? "Exit full screen"
: "Enter full screen",
},
MENU_SEPERATOR
);
}
return menuItems;
}),
[
contextMenu,
fullscreenElement,
minimize,
onStartButton,
open,
processesRef,
toggleFullscreen,
]
);
};
export default useTaskbarContextMenu;