mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-24 01:28:35 +02:00
Fix active workspace deletion
This commit is contained in:
@@ -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} />
|
||||||
|
),
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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' });
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -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 });
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|||||||
Reference in New Issue
Block a user