Put delete workspace in settings

This commit is contained in:
Gregory Schier
2025-01-02 08:41:44 -08:00
parent 0dd09062e3
commit 6ad27c4458
3 changed files with 20 additions and 22 deletions

View File

@@ -1,5 +1,7 @@
import { useDeleteWorkspace } from '../hooks/useDeleteWorkspace';
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 { PlainInput } from './core/PlainInput'; import { PlainInput } from './core/PlainInput';
import { VStack } from './core/Stacks'; import { VStack } from './core/Stacks';
import { MarkdownEditor } from './MarkdownEditor'; import { MarkdownEditor } from './MarkdownEditor';
@@ -12,12 +14,12 @@ export function WorkspaceSettingsDialog({ workspaceId }: Props) {
const updateWorkspace = useUpdateWorkspace(workspaceId ?? null); const updateWorkspace = useUpdateWorkspace(workspaceId ?? null);
const workspaces = useWorkspaces(); const workspaces = useWorkspaces();
const workspace = workspaces.find((w) => w.id === workspaceId); const workspace = workspaces.find((w) => w.id === workspaceId);
const { mutate: deleteWorkspace } = useDeleteWorkspace();
if (workspace == null) return null; if (workspace == null) return null;
return ( return (
<VStack space={3} className="pb-3 max-h-[50vh]"> <VStack space={3} alignItems="start" className="pb-3 max-h-[50vh]">
{workspace.id}
<PlainInput <PlainInput
label="Workspace Name" label="Workspace Name"
defaultValue={workspace.name} defaultValue={workspace.name}
@@ -31,8 +33,14 @@ export function WorkspaceSettingsDialog({ workspaceId }: Props) {
defaultValue={workspace.description} defaultValue={workspace.description}
stateKey={`description.${workspace.id}`} stateKey={`description.${workspace.id}`}
onChange={(description) => updateWorkspace.mutate({ description })} onChange={(description) => updateWorkspace.mutate({ description })}
heightMode='auto' heightMode="auto"
/> />
<VStack space={3} className="mt-3" alignItems="start">
<Button onClick={() => deleteWorkspace()} color="danger" variant="border">
Delete Workspace
</Button>
</VStack>
</VStack> </VStack>
); );
} }

View File

@@ -3,7 +3,7 @@ import { memo, useCallback, useMemo } from 'react';
import { useActiveWorkspace } from '../hooks/useActiveWorkspace'; import { useActiveWorkspace } from '../hooks/useActiveWorkspace';
import { useCreateWorkspace } from '../hooks/useCreateWorkspace'; import { useCreateWorkspace } from '../hooks/useCreateWorkspace';
import { useDeleteSendHistory } from '../hooks/useDeleteSendHistory'; import { useDeleteSendHistory } from '../hooks/useDeleteSendHistory';
import { useDeleteWorkspace } from '../hooks/useDeleteWorkspace'; import { useDialog } from '../hooks/useDialog';
import { useOpenWorkspace } from '../hooks/useOpenWorkspace'; import { useOpenWorkspace } from '../hooks/useOpenWorkspace';
import { useSettings } from '../hooks/useSettings'; import { useSettings } from '../hooks/useSettings';
import { useWorkspaces } from '../hooks/useWorkspaces'; import { useWorkspaces } from '../hooks/useWorkspaces';
@@ -14,7 +14,6 @@ import type { DropdownItem } from './core/Dropdown';
import { Icon } from './core/Icon'; import { Icon } from './core/Icon';
import type { RadioDropdownItem } from './core/RadioDropdown'; import type { RadioDropdownItem } from './core/RadioDropdown';
import { RadioDropdown } from './core/RadioDropdown'; import { RadioDropdown } from './core/RadioDropdown';
import { useDialog } from '../hooks/useDialog';
import { OpenWorkspaceDialog } from './OpenWorkspaceDialog'; import { OpenWorkspaceDialog } from './OpenWorkspaceDialog';
import { WorkspaceSettingsDialog } from './WorkpaceSettingsDialog'; import { WorkspaceSettingsDialog } from './WorkpaceSettingsDialog';
@@ -27,13 +26,12 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({
const workspaces = useWorkspaces(); const workspaces = useWorkspaces();
const activeWorkspace = useActiveWorkspace(); const activeWorkspace = useActiveWorkspace();
const activeWorkspaceId = activeWorkspace?.id ?? null; const activeWorkspaceId = activeWorkspace?.id ?? null;
const deleteWorkspace = useDeleteWorkspace(activeWorkspace); const { mutate: createWorkspace } = useCreateWorkspace();
const createWorkspace = useCreateWorkspace(); const { mutate: deleteSendHistory } = useDeleteSendHistory();
const dialog = useDialog(); const dialog = useDialog();
const settings = useSettings(); const settings = useSettings();
const openWorkspace = useOpenWorkspace(); const openWorkspace = useOpenWorkspace();
const openWorkspaceNewWindow = settings?.openWorkspaceNewWindow ?? null; const openWorkspaceNewWindow = settings?.openWorkspaceNewWindow ?? null;
const deleteSendHistory = useDeleteSendHistory();
const orderedWorkspaces = useMemo( const orderedWorkspaces = useMemo(
() => [...workspaces].sort((a, b) => (a.name.localeCompare(b.name) > 0 ? 1 : -1)), () => [...workspaces].sort((a, b) => (a.name.localeCompare(b.name) > 0 ? 1 : -1)),
@@ -69,21 +67,14 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({
key: 'delete-responses', key: 'delete-responses',
label: 'Clear Send History', label: 'Clear Send History',
leftSlot: <Icon icon="history" />, leftSlot: <Icon icon="history" />,
onSelect: deleteSendHistory.mutate, onSelect: deleteSendHistory,
},
{
key: 'delete',
label: 'Delete Workspace',
leftSlot: <Icon icon="trash" />,
onSelect: deleteWorkspace.mutate,
variant: 'danger',
}, },
{ type: 'separator' }, { type: 'separator' },
{ {
key: 'create-workspace', key: 'create-workspace',
label: 'New Workspace', label: 'New Workspace',
leftSlot: <Icon icon="plus" />, leftSlot: <Icon icon="plus" />,
onSelect: createWorkspace.mutate, onSelect: createWorkspace,
}, },
]; ];
@@ -91,9 +82,8 @@ export const WorkspaceActionsDropdown = memo(function WorkspaceActionsDropdown({
}, [ }, [
activeWorkspace?.id, activeWorkspace?.id,
activeWorkspaceId, activeWorkspaceId,
createWorkspace.mutate, createWorkspace,
deleteSendHistory.mutate, deleteSendHistory,
deleteWorkspace.mutate,
dialog, dialog,
orderedWorkspaces, orderedWorkspaces,
]); ]);

View File

@@ -10,13 +10,13 @@ import { useFastMutation } from './useFastMutation';
import { removeModelById } from './useSyncModelStores'; import { removeModelById } from './useSyncModelStores';
import { workspacesAtom } from './useWorkspaces'; import { workspacesAtom } from './useWorkspaces';
export function useDeleteWorkspace(workspace: Workspace | null) { export function useDeleteWorkspace() {
const confirm = useConfirm(); const confirm = useConfirm();
const setWorkspaces = useSetAtom(workspacesAtom); const setWorkspaces = useSetAtom(workspacesAtom);
const navigate = useNavigate(); const navigate = useNavigate();
return useFastMutation<Workspace | null, string>({ return useFastMutation<Workspace | null, string>({
mutationKey: ['delete_workspace', workspace?.id], mutationKey: ['delete_workspace'],
mutationFn: async () => { mutationFn: async () => {
const workspace = getActiveWorkspace(); const workspace = getActiveWorkspace();
const confirmed = await confirm({ const confirmed = await confirm({