securityos/components/system/Window/Titlebar/useWindowActions.ts

37 lines
1.0 KiB
TypeScript

import useNextFocusable from "components/system/Window/useNextFocusable";
import { useProcesses } from "contexts/process";
import { useSession } from "contexts/session";
import { useCallback } from "react";
type WindowActions = {
onClose: () => void;
onMaximize: () => void;
onMinimize: () => void;
};
const useWindowActions = (id: string): WindowActions => {
const nextFocusableId = useNextFocusable(id);
const { setForegroundId, removeFromStack } = useSession();
const { closeWithTransition, maximize, minimize } = useProcesses();
const onMinimize = (): void => {
minimize(id);
setForegroundId(nextFocusableId);
};
const onMaximize = (): void => maximize(id);
const onClose = useCallback((): void => {
removeFromStack(id);
closeWithTransition(id);
setForegroundId(nextFocusableId);
}, [
closeWithTransition,
id,
nextFocusableId,
removeFromStack,
setForegroundId,
]);
return { onClose, onMaximize, onMinimize };
};
export default useWindowActions;