Add the ability to duplicate folders (#144)

This commit is contained in:
Gregory Schier
2024-12-19 13:06:08 -08:00
committed by GitHub
parent 833dc7d3f7
commit 42bf016e90
8 changed files with 108 additions and 8 deletions

View File

@@ -64,8 +64,7 @@ export function ExportDataDialog({
<tr>
<th className="w-6 min-w-0 py-2 text-left pl-1">
<Checkbox
checked={allSelected}
indeterminate={!allSelected && !noneSelected}
checked={!allSelected && !noneSelected ? 'indeterminate' : allSelected}
hideLabel
title="All workspaces"
onChange={handleToggleAll}

View File

@@ -138,7 +138,7 @@ export function GrpcConnectionSetupPane({
value: TAB_DESCRIPTION,
label: (
<div className="flex items-center">
Docs
Info
{activeRequest.description && <CountBadge count={true} />}
</div>
),

View File

@@ -129,7 +129,7 @@ export const RequestPane = memo(function RequestPane({
value: TAB_DESCRIPTION,
label: (
<div className="flex items-center">
Docs
Info
{activeRequest.description && <CountBadge count={true} />}
</div>
),

View File

@@ -22,6 +22,7 @@ import { useAppRoutes } from '../hooks/useAppRoutes';
import { useCreateDropdownItems } from '../hooks/useCreateDropdownItems';
import { useDeleteFolder } from '../hooks/useDeleteFolder';
import { useDeleteRequest } from '../hooks/useDeleteRequest';
import { useDuplicateFolder } from '../hooks/useDuplicateFolder';
import { useDuplicateGrpcRequest } from '../hooks/useDuplicateGrpcRequest';
import { useDuplicateHttpRequest } from '../hooks/useDuplicateHttpRequest';
import { useFolders } from '../hooks/useFolders';
@@ -699,6 +700,7 @@ function SidebarItem({
const deleteFolder = useDeleteFolder(itemId);
const deleteRequest = useDeleteRequest(itemId);
const renameRequest = useRenameRequest(itemId);
const duplicateFolder = useDuplicateFolder(itemId);
const duplicateHttpRequest = useDuplicateHttpRequest({ id: itemId, navigateAfter: true });
const duplicateGrpcRequest = useDuplicateGrpcRequest({ id: itemId, navigateAfter: true });
const sendRequest = useSendAnyHttpRequest();
@@ -802,6 +804,12 @@ function SidebarItem({
render: () => <FolderSettingsDialog folderId={itemId} />,
}),
},
{
key: 'duplicateFolder',
label: 'Duplicate',
leftSlot: <Icon icon="copy" />,
onSelect: () => duplicateFolder.mutate(),
},
{
key: 'delete-folder',
label: 'Delete',
@@ -877,7 +885,7 @@ function SidebarItem({
createDropdownItems,
deleteFolder,
deleteRequest,
dialog,
duplicateFolder,
duplicateGrpcRequest,
duplicateHttpRequest,
httpRequestActions,

View File

@@ -0,0 +1,11 @@
import { useMutation } from '@tanstack/react-query';
import { trackEvent } from '../lib/analytics';
import { invokeCmd } from '../lib/tauri';
export function useDuplicateFolder(id: string) {
return useMutation<void, string>({
mutationKey: ['duplicate_folder', id],
mutationFn: () => invokeCmd('cmd_duplicate_folder', { id }),
onSettled: () => trackEvent('folder', 'duplicate'),
});
}

View File

@@ -24,6 +24,7 @@ type TauriCmd =
| 'cmd_delete_http_response'
| 'cmd_delete_workspace'
| 'cmd_dismiss_notification'
| 'cmd_duplicate_folder'
| 'cmd_duplicate_grpc_request'
| 'cmd_duplicate_http_request'
| 'cmd_export_data'