Fix active workspace deletion

This commit is contained in:
Gregory Schier
2025-01-03 20:50:18 -08:00
parent 31440eea76
commit 36cecb2d29
4 changed files with 18 additions and 16 deletions

View File

@@ -68,7 +68,9 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({
id: 'workspace-settings', id: 'workspace-settings',
title: 'Workspace Settings', title: 'Workspace Settings',
size: 'md', size: 'md',
render: () => <WorkspaceSettingsDialog workspaceId={activeWorkspace?.id ?? null} />, render: ({ hide }) => (
<WorkspaceSettingsDialog workspaceId={activeWorkspace?.id ?? null} hide={hide} />
),
}); });
}, },
}, },

View File

@@ -1,4 +1,4 @@
import { useDeleteWorkspace } from '../hooks/useDeleteWorkspace'; import { useDeleteActiveWorkspace } from '../hooks/useDeleteActiveWorkspace';
import { useUpdateWorkspace } from '../hooks/useUpdateWorkspace'; import { useUpdateWorkspace } from '../hooks/useUpdateWorkspace';
import { useWorkspaces } from '../hooks/useWorkspaces'; import { useWorkspaces } from '../hooks/useWorkspaces';
import { Button } from './core/Button'; import { Button } from './core/Button';
@@ -9,13 +9,14 @@ import { SelectFile } from './SelectFile';
interface Props { interface Props {
workspaceId: string | null; workspaceId: string | null;
hide: () => void;
} }
export function WorkspaceSettingsDialog({ workspaceId }: Props) { export function WorkspaceSettingsDialog({ workspaceId, hide }: Props) {
const workspaces = useWorkspaces(); const workspaces = useWorkspaces();
const workspace = workspaces.find((w) => w.id === workspaceId); const workspace = workspaces.find((w) => w.id === workspaceId);
const { mutate: updateWorkspace } = useUpdateWorkspace(workspaceId ?? null); const { mutate: updateWorkspace } = useUpdateWorkspace(workspaceId ?? null);
const { mutate: deleteWorkspace } = useDeleteWorkspace(); const { mutateAsync: deleteActiveWorkspace } = useDeleteActiveWorkspace();
if (workspace == null) return null; if (workspace == null) return null;
@@ -44,7 +45,15 @@ export function WorkspaceSettingsDialog({ workspaceId }: Props) {
filePath={workspace.settingSyncDir} filePath={workspace.settingSyncDir}
onChange={({ filePath: settingSyncDir }) => updateWorkspace({ settingSyncDir })} onChange={({ filePath: settingSyncDir }) => updateWorkspace({ settingSyncDir })}
/> />
<Button onClick={() => deleteWorkspace()} color="danger" variant="border" size="sm"> <Button
onClick={async () => {
await deleteActiveWorkspace();
hide();
}}
color="danger"
variant="border"
size="sm"
>
Delete Workspace Delete Workspace
</Button> </Button>
</VStack> </VStack>

View File

@@ -10,7 +10,7 @@ import { useFastMutation } from './useFastMutation';
import { removeModelById } from './useSyncModelStores'; import { removeModelById } from './useSyncModelStores';
import { workspacesAtom } from './useWorkspaces'; import { workspacesAtom } from './useWorkspaces';
export function useDeleteWorkspace() { export function useDeleteActiveWorkspace() {
const confirm = useConfirm(); const confirm = useConfirm();
const setWorkspaces = useSetAtom(workspacesAtom); const setWorkspaces = useSetAtom(workspacesAtom);
const navigate = useNavigate(); const navigate = useNavigate();
@@ -39,11 +39,7 @@ export function useDeleteWorkspace() {
// Optimistic update // Optimistic update
setWorkspaces(removeModelById(workspace)); setWorkspaces(removeModelById(workspace));
const { id: workspaceId } = workspace; await navigate({ to: '/workspaces' });
const activeWorkspace = getActiveWorkspace();
if (workspaceId === activeWorkspace?.id) {
await navigate({ to: '/workspaces' });
}
}, },
}); });
} }

View File

@@ -18,8 +18,6 @@ export function useRecentWorkspaces() {
[value, workspaces], [value, workspaces],
); );
console.log("HELLO", {isLoading, value})
if (isLoading) return null; if (isLoading) return null;
return onlyValidIds; return onlyValidIds;
@@ -29,18 +27,15 @@ export function useSubscribeRecentWorkspaces() {
useEffect(() => { useEffect(() => {
return jotaiStore.sub(activeWorkspaceIdAtom, async () => { return jotaiStore.sub(activeWorkspaceIdAtom, async () => {
const activeWorkspaceId = jotaiStore.get(activeWorkspaceIdAtom); const activeWorkspaceId = jotaiStore.get(activeWorkspaceIdAtom);
console.log("AAA");
if (activeWorkspaceId == null) return; if (activeWorkspaceId == null) return;
const key = kvKey(); const key = kvKey();
const recentIds = await getKeyValue<string[]>({ namespace, key, fallback }); const recentIds = await getKeyValue<string[]>({ namespace, key, fallback });
console.log("BBB", recentIds, activeWorkspaceId);
if (recentIds[0] === activeWorkspaceId) return; // Short-circuit if (recentIds[0] === activeWorkspaceId) return; // Short-circuit
const withoutActiveId = recentIds.filter((id) => id !== activeWorkspaceId); const withoutActiveId = recentIds.filter((id) => id !== activeWorkspaceId);
const value = [activeWorkspaceId, ...withoutActiveId]; const value = [activeWorkspaceId, ...withoutActiveId];
console.log("SET ACTIVE WORCENT", value);
await setKeyValue({ namespace, key, value }); await setKeyValue({ namespace, key, value });
}); });
}, []); }, []);