80 lines
2.3 KiB
TypeScript
80 lines
2.3 KiB
TypeScript
import { useEffect, useMemo } from "react";
|
|
import {
|
|
useProjectNamesMap,
|
|
useStatusModeWorkspaceEntries,
|
|
} from "@/hooks/use-status-mode-workspaces";
|
|
import { useSidebarWorkspacesList } from "@/hooks/use-sidebar-workspaces-list";
|
|
import { useKeyboardShortcutsStore } from "@/stores/keyboard-shortcuts-store";
|
|
import { useSidebarCollapsedSectionsStore } from "@/stores/sidebar-collapsed-sections-store";
|
|
import { useSidebarViewStore } from "@/stores/sidebar-view-store";
|
|
import {
|
|
buildSidebarShortcutModel,
|
|
buildStatusSidebarShortcutModel,
|
|
} from "@/utils/sidebar-shortcuts";
|
|
|
|
export function WorkspaceShortcutTargetsSubscriber({
|
|
enabled,
|
|
serverId,
|
|
}: {
|
|
enabled: boolean;
|
|
serverId: string | null;
|
|
}) {
|
|
const { projects } = useSidebarWorkspacesList({ serverId, enabled });
|
|
const statusWorkspaces = useStatusModeWorkspaceEntries({
|
|
serverId: enabled ? serverId : null,
|
|
projects,
|
|
});
|
|
const projectNamesByKey = useProjectNamesMap(enabled ? serverId : null);
|
|
const groupMode = useSidebarViewStore((state) =>
|
|
enabled && serverId ? state.getGroupMode(serverId) : "project",
|
|
);
|
|
const collapsedProjectKeys = useSidebarCollapsedSectionsStore(
|
|
(state) => state.collapsedProjectKeys,
|
|
);
|
|
const collapsedStatusGroupKeys = useSidebarCollapsedSectionsStore(
|
|
(state) => state.collapsedStatusGroupKeys,
|
|
);
|
|
const setSidebarShortcutWorkspaceTargets = useKeyboardShortcutsStore(
|
|
(state) => state.setSidebarShortcutWorkspaceTargets,
|
|
);
|
|
|
|
const shortcutModel = useMemo(() => {
|
|
if (groupMode === "status") {
|
|
return buildStatusSidebarShortcutModel({
|
|
workspaces: statusWorkspaces,
|
|
projectNamesByKey,
|
|
collapsedStatusGroupKeys,
|
|
});
|
|
}
|
|
|
|
return buildSidebarShortcutModel({
|
|
projects,
|
|
collapsedProjectKeys,
|
|
});
|
|
}, [
|
|
collapsedProjectKeys,
|
|
collapsedStatusGroupKeys,
|
|
groupMode,
|
|
projectNamesByKey,
|
|
projects,
|
|
statusWorkspaces,
|
|
]);
|
|
|
|
useEffect(() => {
|
|
if (!enabled || !serverId) {
|
|
setSidebarShortcutWorkspaceTargets([]);
|
|
return;
|
|
}
|
|
|
|
setSidebarShortcutWorkspaceTargets(shortcutModel.shortcutTargets);
|
|
}, [enabled, serverId, setSidebarShortcutWorkspaceTargets, shortcutModel.shortcutTargets]);
|
|
|
|
useEffect(() => {
|
|
return () => {
|
|
setSidebarShortcutWorkspaceTargets([]);
|
|
};
|
|
}, [setSidebarShortcutWorkspaceTargets]);
|
|
|
|
return null;
|
|
}
|