48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { useEffect, useMemo } from "react";
|
|
import { useSidebarWorkspacesList } from "@/hooks/use-sidebar-workspaces-list";
|
|
import { useKeyboardShortcutsStore } from "@/stores/keyboard-shortcuts-store";
|
|
import { useSidebarCollapsedSectionsStore } from "@/stores/sidebar-collapsed-sections-store";
|
|
import { buildSidebarShortcutModel } from "@/utils/sidebar-shortcuts";
|
|
|
|
export function WorkspaceShortcutTargetsSubscriber({
|
|
enabled,
|
|
serverId,
|
|
}: {
|
|
enabled: boolean;
|
|
serverId: string | null;
|
|
}) {
|
|
const { projects } = useSidebarWorkspacesList({ serverId, enabled });
|
|
const collapsedProjectKeys = useSidebarCollapsedSectionsStore(
|
|
(state) => state.collapsedProjectKeys,
|
|
);
|
|
const setSidebarShortcutWorkspaceTargets = useKeyboardShortcutsStore(
|
|
(state) => state.setSidebarShortcutWorkspaceTargets,
|
|
);
|
|
|
|
const shortcutModel = useMemo(
|
|
() =>
|
|
buildSidebarShortcutModel({
|
|
projects,
|
|
collapsedProjectKeys,
|
|
}),
|
|
[collapsedProjectKeys, projects],
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (!enabled || !serverId) {
|
|
setSidebarShortcutWorkspaceTargets([]);
|
|
return;
|
|
}
|
|
|
|
setSidebarShortcutWorkspaceTargets(shortcutModel.shortcutTargets);
|
|
}, [enabled, serverId, setSidebarShortcutWorkspaceTargets, shortcutModel.shortcutTargets]);
|
|
|
|
useEffect(() => {
|
|
return () => {
|
|
setSidebarShortcutWorkspaceTargets([]);
|
|
};
|
|
}, [setSidebarShortcutWorkspaceTargets]);
|
|
|
|
return null;
|
|
}
|