import { useWindows } from "../../hooks/windows/windowsContext"; import { useWindowsManager } from "../../hooks/windows/windowsManagerContext"; import { memo, useEffect, useState } from "react"; import { WindowView } from "./WindowView.jsx"; import { useSettingsManager } from "../../hooks/settings/settingsManagerContext"; import { SettingsManager } from "../../features/settings/settingsManager"; import { NAME, TAG_LINE } from "../../config/branding.config.js"; import { getViewportParams, setViewportIcon, setViewportTitle } from "../../features/_utils/browser.utils.js"; import { removeDuplicatesFromArray } from "../../features/_utils/array.utils.js"; export const WindowsView = memo(() => { const settingsManager = useSettingsManager(); const windows = useWindows(); const windowsManager = useWindowsManager(); const [sortedWindows, setSortedWindows] = useState([]); // Sort windows useEffect(() => { setSortedWindows([...windows].sort((windowA, windowB) => // @ts-ignore windowA.lastInteraction - windowB.lastInteraction )); }, [windows]); useEffect(() => { const resetViewportTitleAndIcon = () => { setViewportTitle(`${NAME} | ${TAG_LINE}`); setViewportIcon(`${process.env.PUBLIC_URL}/favicon.ico`); }; if (sortedWindows.length === 0 || sortedWindows[sortedWindows.length - 1].minimized) resetViewportTitleAndIcon(); window.addEventListener("blur", resetViewportTitleAndIcon); return () => { window.removeEventListener("blur", resetViewportTitleAndIcon); }; }, [sortedWindows]); // Launch startup apps useEffect(() => { if (windowsManager.startupComplete) return; let startupAppNames = []; // Get app name and params from URL query const params = getViewportParams(); const appName = params.app; if (appName) startupAppNames.push(appName); delete params.app; // Get list of app names from settings file const settings = settingsManager.get(SettingsManager.VIRTUAL_PATHS.apps); settings.get("startup", (value) => { if (value !== "") { startupAppNames = value?.split(",").concat(startupAppNames); startupAppNames = removeDuplicatesFromArray(startupAppNames); } windowsManager.startup(startupAppNames, params); }); }, [settingsManager, windowsManager]); return (