37 lines
1.0 KiB
TypeScript
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;
|