import { createDestroyTrayHandler, createEnsureTrayHandler } from './tray-lifecycle'; import { createBuildDestroyTrayMainDepsHandler, createBuildEnsureTrayMainDepsHandler, } from './app-runtime-main-deps'; import { createBuildTrayMenuTemplateHandler, createResolveTrayIconPathHandler, } from './tray-main-actions'; import { createBuildResolveTrayIconPathMainDepsHandler, createBuildTrayMenuTemplateMainDepsHandler, } from './tray-main-deps'; type ResolveTrayIconPathMainDeps = Parameters< typeof createBuildResolveTrayIconPathMainDepsHandler >[0]; type BuildTrayMenuTemplateMainDeps = Parameters< typeof createBuildTrayMenuTemplateMainDepsHandler >[0]; type EnsureTrayMainDeps = Parameters< typeof createBuildEnsureTrayMainDepsHandler >[0]; type TrayLike = NonNullable[0]['getTray']>>; type TrayIconLike = Parameters[0]['createTray']>[0]; type DestroyTrayMainDeps = Parameters>[0]; export function createTrayRuntimeHandlers(deps: { resolveTrayIconPathDeps: ResolveTrayIconPathMainDeps; buildTrayMenuTemplateDeps: BuildTrayMenuTemplateMainDeps; ensureTrayDeps: Omit, 'buildTrayMenu' | 'resolveTrayIconPath'>; destroyTrayDeps: DestroyTrayMainDeps; buildMenuFromTemplate: (template: TMenuItem[]) => TMenu; }) { const resolveTrayIconPath = createResolveTrayIconPathHandler( createBuildResolveTrayIconPathMainDepsHandler(deps.resolveTrayIconPathDeps)(), ); const buildTrayMenuTemplate = createBuildTrayMenuTemplateHandler( createBuildTrayMenuTemplateMainDepsHandler(deps.buildTrayMenuTemplateDeps)(), ); const buildTrayMenu = () => deps.buildMenuFromTemplate(buildTrayMenuTemplate()); const ensureTray = createEnsureTrayHandler( createBuildEnsureTrayMainDepsHandler({ ...deps.ensureTrayDeps, buildTrayMenu: () => buildTrayMenu(), resolveTrayIconPath: () => resolveTrayIconPath(), })(), ); const destroyTray = createDestroyTrayHandler( createBuildDestroyTrayMainDepsHandler(deps.destroyTrayDeps)(), ); return { resolveTrayIconPath, buildTrayMenu, ensureTray, destroyTray, }; }