mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-24 01:28:35 +02:00
Consolidate any* hooks
This commit is contained in:
2
package-lock.json
generated
2
package-lock.json
generated
@@ -19,7 +19,7 @@
|
|||||||
"@lezer/lr": "^1.3.3",
|
"@lezer/lr": "^1.3.3",
|
||||||
"@react-hook/resize-observer": "^1.2.6",
|
"@react-hook/resize-observer": "^1.2.6",
|
||||||
"@tailwindcss/container-queries": "^0.1.0",
|
"@tailwindcss/container-queries": "^0.1.0",
|
||||||
"@tanstack/react-query": "^5.35.5",
|
"@tanstack/react-query": "^5.45.1",
|
||||||
"@tauri-apps/api": ">=2.0.0-beta.0",
|
"@tauri-apps/api": ">=2.0.0-beta.0",
|
||||||
"@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.1",
|
"@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.1",
|
||||||
"@tauri-apps/plugin-dialog": ">=2.0.0-beta.0",
|
"@tauri-apps/plugin-dialog": ">=2.0.0-beta.0",
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
"@lezer/lr": "^1.3.3",
|
"@lezer/lr": "^1.3.3",
|
||||||
"@react-hook/resize-observer": "^1.2.6",
|
"@react-hook/resize-observer": "^1.2.6",
|
||||||
"@tailwindcss/container-queries": "^0.1.0",
|
"@tailwindcss/container-queries": "^0.1.0",
|
||||||
"@tanstack/react-query": "^5.35.5",
|
"@tanstack/react-query": "^5.45.1",
|
||||||
"@tauri-apps/api": ">=2.0.0-beta.0",
|
"@tauri-apps/api": ">=2.0.0-beta.0",
|
||||||
"@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.1",
|
"@tauri-apps/plugin-clipboard-manager": "^2.1.0-beta.1",
|
||||||
"@tauri-apps/plugin-dialog": ">=2.0.0-beta.0",
|
"@tauri-apps/plugin-dialog": ">=2.0.0-beta.0",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useUpdateGrpcRequest } from '../hooks/useUpdateGrpcRequest';
|
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
||||||
import { useUpdateHttpRequest } from '../hooks/useUpdateHttpRequest';
|
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
|
||||||
import type { GrpcRequest, HttpRequest } from '../lib/models';
|
import type { GrpcRequest, HttpRequest } from '../lib/models';
|
||||||
import { Input } from './core/Input';
|
import { Input } from './core/Input';
|
||||||
import { VStack } from './core/Stacks';
|
import { VStack } from './core/Stacks';
|
||||||
@@ -9,8 +9,8 @@ interface Props<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Props<T>) {
|
export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Props<T>) {
|
||||||
const updateHttpRequest = useUpdateHttpRequest(request.id);
|
const updateHttpRequest = useUpdateAnyHttpRequest();
|
||||||
const updateGrpcRequest = useUpdateGrpcRequest(request.id);
|
const updateGrpcRequest = useUpdateAnyGrpcRequest();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VStack className="py-2 overflow-y-auto h-full" space={2}>
|
<VStack className="py-2 overflow-y-auto h-full" space={2}>
|
||||||
@@ -25,15 +25,21 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
|
|||||||
defaultValue={`${request.authentication.username}`}
|
defaultValue={`${request.authentication.username}`}
|
||||||
onChange={(username: string) => {
|
onChange={(username: string) => {
|
||||||
if (request.model === 'http_request') {
|
if (request.model === 'http_request') {
|
||||||
updateHttpRequest.mutate((r) => ({
|
updateHttpRequest.mutate({
|
||||||
...r,
|
id: request.id,
|
||||||
authentication: { password: r.authentication.password, username },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { password: r.authentication.password, username },
|
||||||
|
}),
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
updateGrpcRequest.mutate((r) => ({
|
updateGrpcRequest.mutate({
|
||||||
...r,
|
id: request.id,
|
||||||
authentication: { password: r.authentication.password, username },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { password: r.authentication.password, username },
|
||||||
|
}),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@@ -49,15 +55,21 @@ export function BasicAuth<T extends HttpRequest | GrpcRequest>({ request }: Prop
|
|||||||
defaultValue={`${request.authentication.password}`}
|
defaultValue={`${request.authentication.password}`}
|
||||||
onChange={(password: string) => {
|
onChange={(password: string) => {
|
||||||
if (request.model === 'http_request') {
|
if (request.model === 'http_request') {
|
||||||
updateHttpRequest.mutate((r) => ({
|
updateHttpRequest.mutate({
|
||||||
...r,
|
id: request.id,
|
||||||
authentication: { username: r.authentication.username, password },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { username: r.authentication.username, password },
|
||||||
|
}),
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
updateGrpcRequest.mutate((r) => ({
|
updateGrpcRequest.mutate({
|
||||||
...r,
|
id: request.id,
|
||||||
authentication: { username: r.authentication.username, password },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { username: r.authentication.username, password },
|
||||||
|
}),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useUpdateGrpcRequest } from '../hooks/useUpdateGrpcRequest';
|
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
||||||
import { useUpdateHttpRequest } from '../hooks/useUpdateHttpRequest';
|
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
|
||||||
import type { GrpcRequest, HttpRequest } from '../lib/models';
|
import type { GrpcRequest, HttpRequest } from '../lib/models';
|
||||||
import { Input } from './core/Input';
|
import { Input } from './core/Input';
|
||||||
import { VStack } from './core/Stacks';
|
import { VStack } from './core/Stacks';
|
||||||
@@ -9,8 +9,8 @@ interface Props<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function BearerAuth<T extends HttpRequest | GrpcRequest>({ request }: Props<T>) {
|
export function BearerAuth<T extends HttpRequest | GrpcRequest>({ request }: Props<T>) {
|
||||||
const updateHttpRequest = useUpdateHttpRequest(request?.id ?? null);
|
const updateHttpRequest = useUpdateAnyHttpRequest();
|
||||||
const updateGrpcRequest = useUpdateGrpcRequest(request?.id ?? null);
|
const updateGrpcRequest = useUpdateAnyGrpcRequest();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<VStack className="my-2" space={2}>
|
<VStack className="my-2" space={2}>
|
||||||
@@ -25,15 +25,21 @@ export function BearerAuth<T extends HttpRequest | GrpcRequest>({ request }: Pro
|
|||||||
defaultValue={`${request.authentication.token}`}
|
defaultValue={`${request.authentication.token}`}
|
||||||
onChange={(token: string) => {
|
onChange={(token: string) => {
|
||||||
if (request.model === 'http_request') {
|
if (request.model === 'http_request') {
|
||||||
updateHttpRequest.mutate((r) => ({
|
updateHttpRequest.mutate({
|
||||||
...r,
|
id: request.id ?? null,
|
||||||
authentication: { token },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { token },
|
||||||
|
}),
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
updateGrpcRequest.mutate((r) => ({
|
updateGrpcRequest.mutate({
|
||||||
...r,
|
id: request.id ?? null,
|
||||||
authentication: { token },
|
update: (r) => ({
|
||||||
}));
|
...r,
|
||||||
|
authentication: { token },
|
||||||
|
}),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { useGrpc } from '../hooks/useGrpc';
|
|||||||
import { useGrpcConnections } from '../hooks/useGrpcConnections';
|
import { useGrpcConnections } from '../hooks/useGrpcConnections';
|
||||||
import { useGrpcEvents } from '../hooks/useGrpcEvents';
|
import { useGrpcEvents } from '../hooks/useGrpcEvents';
|
||||||
import { useGrpcProtoFiles } from '../hooks/useGrpcProtoFiles';
|
import { useGrpcProtoFiles } from '../hooks/useGrpcProtoFiles';
|
||||||
import { useUpdateGrpcRequest } from '../hooks/useUpdateGrpcRequest';
|
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
||||||
import { Banner } from './core/Banner';
|
import { Banner } from './core/Banner';
|
||||||
import { HotKeyList } from './core/HotKeyList';
|
import { HotKeyList } from './core/HotKeyList';
|
||||||
import { SplitLayout } from './core/SplitLayout';
|
import { SplitLayout } from './core/SplitLayout';
|
||||||
@@ -21,7 +21,7 @@ const emptyArray: string[] = [];
|
|||||||
|
|
||||||
export function GrpcConnectionLayout({ style }: Props) {
|
export function GrpcConnectionLayout({ style }: Props) {
|
||||||
const activeRequest = useActiveRequest('grpc_request');
|
const activeRequest = useActiveRequest('grpc_request');
|
||||||
const { mutateAsync: updateRequest } = useUpdateGrpcRequest(activeRequest?.id ?? null);
|
const updateRequest = useUpdateAnyGrpcRequest();
|
||||||
const connections = useGrpcConnections(activeRequest?.id ?? null);
|
const connections = useGrpcConnections(activeRequest?.id ?? null);
|
||||||
const activeConnection = connections[0] ?? null;
|
const activeConnection = connections[0] ?? null;
|
||||||
const messages = useGrpcEvents(activeConnection?.id ?? null);
|
const messages = useGrpcEvents(activeConnection?.id ?? null);
|
||||||
@@ -34,16 +34,22 @@ export function GrpcConnectionLayout({ style }: Props) {
|
|||||||
if (services == null || activeRequest == null) return;
|
if (services == null || activeRequest == null) return;
|
||||||
const s = services.find((s) => s.name === activeRequest.service);
|
const s = services.find((s) => s.name === activeRequest.service);
|
||||||
if (s == null) {
|
if (s == null) {
|
||||||
updateRequest({
|
updateRequest.mutate({
|
||||||
service: services[0]?.name ?? null,
|
id: activeRequest.id,
|
||||||
method: services[0]?.methods[0]?.name ?? null,
|
update: {
|
||||||
|
service: services[0]?.name ?? null,
|
||||||
|
method: services[0]?.methods[0]?.name ?? null,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const m = s.methods.find((m) => m.name === activeRequest.method);
|
const m = s.methods.find((m) => m.name === activeRequest.method);
|
||||||
if (m == null) {
|
if (m == null) {
|
||||||
updateRequest({ method: s.methods[0]?.name ?? null });
|
updateRequest.mutate({
|
||||||
|
id: activeRequest.id,
|
||||||
|
update: { method: s.methods[0]?.name ?? null },
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}, [activeRequest, services, updateRequest]);
|
}, [activeRequest, services, updateRequest]);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import React, { useCallback, useMemo, useRef, useState } from 'react';
|
|||||||
import { createGlobalState } from 'react-use';
|
import { createGlobalState } from 'react-use';
|
||||||
import type { ReflectResponseService } from '../hooks/useGrpc';
|
import type { ReflectResponseService } from '../hooks/useGrpc';
|
||||||
import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
|
import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
|
||||||
import { useUpdateGrpcRequest } from '../hooks/useUpdateGrpcRequest';
|
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
||||||
import type { GrpcMetadataEntry, GrpcRequest } from '../lib/models';
|
import type { GrpcMetadataEntry, GrpcRequest } from '../lib/models';
|
||||||
import { AUTH_TYPE_BASIC, AUTH_TYPE_BEARER, AUTH_TYPE_NONE } from '../lib/models';
|
import { AUTH_TYPE_BASIC, AUTH_TYPE_BEARER, AUTH_TYPE_NONE } from '../lib/models';
|
||||||
import { BasicAuth } from './BasicAuth';
|
import { BasicAuth } from './BasicAuth';
|
||||||
@@ -60,7 +60,7 @@ export function GrpcConnectionSetupPane({
|
|||||||
onCancel,
|
onCancel,
|
||||||
onSend,
|
onSend,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
const updateRequest = useUpdateGrpcRequest(activeRequest?.id ?? null);
|
const updateRequest = useUpdateAnyGrpcRequest();
|
||||||
const [activeTab, setActiveTab] = useActiveTab();
|
const [activeTab, setActiveTab] = useActiveTab();
|
||||||
const { updateKey: forceUpdateKey } = useRequestUpdateKey(activeRequest.id ?? null);
|
const { updateKey: forceUpdateKey } = useRequestUpdateKey(activeRequest.id ?? null);
|
||||||
|
|
||||||
@@ -71,15 +71,15 @@ export function GrpcConnectionSetupPane({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const handleChangeUrl = useCallback(
|
const handleChangeUrl = useCallback(
|
||||||
(url: string) => updateRequest.mutateAsync({ url }),
|
(url: string) => updateRequest.mutateAsync({ id: activeRequest.id, update: { url } }),
|
||||||
[updateRequest],
|
[activeRequest.id, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleChangeMessage = useCallback(
|
const handleChangeMessage = useCallback(
|
||||||
(message: string) => {
|
(message: string) => {
|
||||||
return updateRequest.mutateAsync({ message });
|
return updateRequest.mutateAsync({ id: activeRequest.id, update: { message } });
|
||||||
},
|
},
|
||||||
[updateRequest],
|
[activeRequest.id, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const select = useMemo(() => {
|
const select = useMemo(() => {
|
||||||
@@ -99,11 +99,14 @@ export function GrpcConnectionSetupPane({
|
|||||||
const [serviceName, methodName] = v.split('/', 2);
|
const [serviceName, methodName] = v.split('/', 2);
|
||||||
if (serviceName == null || methodName == null) throw new Error('Should never happen');
|
if (serviceName == null || methodName == null) throw new Error('Should never happen');
|
||||||
await updateRequest.mutateAsync({
|
await updateRequest.mutateAsync({
|
||||||
service: serviceName,
|
id: activeRequest.id,
|
||||||
method: methodName,
|
update: {
|
||||||
|
service: serviceName,
|
||||||
|
method: methodName,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[updateRequest],
|
[activeRequest.id, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleConnect = useCallback(async () => {
|
const handleConnect = useCallback(async () => {
|
||||||
@@ -150,18 +153,27 @@ export function GrpcConnectionSetupPane({
|
|||||||
token: authentication.token ?? '',
|
token: authentication.token ?? '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
await updateRequest.mutateAsync({ authenticationType, authentication });
|
await updateRequest.mutateAsync({
|
||||||
|
id: activeRequest.id,
|
||||||
|
update: { authenticationType, authentication },
|
||||||
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ value: 'metadata', label: 'Metadata' },
|
{ value: 'metadata', label: 'Metadata' },
|
||||||
],
|
],
|
||||||
[activeRequest.authentication, activeRequest.authenticationType, updateRequest],
|
[
|
||||||
|
activeRequest.authentication,
|
||||||
|
activeRequest.authenticationType,
|
||||||
|
activeRequest.id,
|
||||||
|
updateRequest,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleMetadataChange = useCallback(
|
const handleMetadataChange = useCallback(
|
||||||
(metadata: GrpcMetadataEntry[]) => updateRequest.mutate({ metadata }),
|
(metadata: GrpcMetadataEntry[]) =>
|
||||||
[updateRequest],
|
updateRequest.mutate({ id: activeRequest.id, update: { metadata } }),
|
||||||
|
[activeRequest.id, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import { useIsResponseLoading } from '../hooks/useIsResponseLoading';
|
|||||||
import { usePinnedHttpResponse } from '../hooks/usePinnedHttpResponse';
|
import { usePinnedHttpResponse } from '../hooks/usePinnedHttpResponse';
|
||||||
import { useRequests } from '../hooks/useRequests';
|
import { useRequests } from '../hooks/useRequests';
|
||||||
import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
|
import { useRequestUpdateKey } from '../hooks/useRequestUpdateKey';
|
||||||
import { useSendRequest } from '../hooks/useSendRequest';
|
import { useSendAnyHttpRequest } from '../hooks/useSendAnyHttpRequest';
|
||||||
import { useUpdateHttpRequest } from '../hooks/useUpdateHttpRequest';
|
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
|
||||||
import { tryFormatJson } from '../lib/formatters';
|
import { tryFormatJson } from '../lib/formatters';
|
||||||
import type { HttpHeader, HttpRequest, HttpUrlParameter } from '../lib/models';
|
import type { HttpHeader, HttpRequest, HttpUrlParameter } from '../lib/models';
|
||||||
import {
|
import {
|
||||||
@@ -59,7 +59,7 @@ export const RequestPane = memo(function RequestPane({
|
|||||||
}: Props) {
|
}: Props) {
|
||||||
const requests = useRequests();
|
const requests = useRequests();
|
||||||
const activeRequestId = activeRequest.id;
|
const activeRequestId = activeRequest.id;
|
||||||
const updateRequest = useUpdateHttpRequest(activeRequestId);
|
const updateRequest = useUpdateAnyHttpRequest();
|
||||||
const [activeTab, setActiveTab] = useActiveTab();
|
const [activeTab, setActiveTab] = useActiveTab();
|
||||||
const [forceUpdateHeaderEditorKey, setForceUpdateHeaderEditorKey] = useState<number>(0);
|
const [forceUpdateHeaderEditorKey, setForceUpdateHeaderEditorKey] = useState<number>(0);
|
||||||
const { updateKey: forceUpdateKey } = useRequestUpdateKey(activeRequest.id ?? null);
|
const { updateKey: forceUpdateKey } = useRequestUpdateKey(activeRequest.id ?? null);
|
||||||
@@ -76,12 +76,12 @@ export const RequestPane = memo(function RequestPane({
|
|||||||
enabled: true,
|
enabled: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
await updateRequest.mutateAsync({ headers });
|
await updateRequest.mutateAsync({ id: activeRequestId, update: { headers } });
|
||||||
|
|
||||||
// Force update header editor so any changed headers are reflected
|
// Force update header editor so any changed headers are reflected
|
||||||
setTimeout(() => setForceUpdateHeaderEditorKey((u) => u + 1), 100);
|
setTimeout(() => setForceUpdateHeaderEditorKey((u) => u + 1), 100);
|
||||||
},
|
},
|
||||||
[activeRequest.headers, updateRequest],
|
[activeRequest.headers, activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const tabs: TabItem[] = useMemo(
|
const tabs: TabItem[] = useMemo(
|
||||||
@@ -125,7 +125,7 @@ export const RequestPane = memo(function RequestPane({
|
|||||||
newContentType = 'application/json';
|
newContentType = 'application/json';
|
||||||
}
|
}
|
||||||
|
|
||||||
await updateRequest.mutateAsync(patch);
|
await updateRequest.mutateAsync({ id: activeRequestId, update: patch });
|
||||||
|
|
||||||
if (newContentType !== undefined) {
|
if (newContentType !== undefined) {
|
||||||
await handleContentTypeChange(newContentType);
|
await handleContentTypeChange(newContentType);
|
||||||
@@ -174,7 +174,10 @@ export const RequestPane = memo(function RequestPane({
|
|||||||
token: authentication.token ?? '',
|
token: authentication.token ?? '',
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
await updateRequest.mutateAsync({ authenticationType, authentication });
|
await updateRequest.mutateAsync({
|
||||||
|
id: activeRequestId,
|
||||||
|
update: { authenticationType, authentication },
|
||||||
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -186,53 +189,55 @@ export const RequestPane = memo(function RequestPane({
|
|||||||
activeRequest.headers,
|
activeRequest.headers,
|
||||||
activeRequest.method,
|
activeRequest.method,
|
||||||
activeRequest.urlParameters,
|
activeRequest.urlParameters,
|
||||||
|
activeRequestId,
|
||||||
handleContentTypeChange,
|
handleContentTypeChange,
|
||||||
updateRequest,
|
updateRequest,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleBodyChange = useCallback(
|
const handleBodyChange = useCallback(
|
||||||
(body: HttpRequest['body']) => updateRequest.mutate({ body }),
|
(body: HttpRequest['body']) => updateRequest.mutate({ id: activeRequestId, update: { body } }),
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleBinaryFileChange = useCallback(
|
const handleBinaryFileChange = useCallback(
|
||||||
(body: HttpRequest['body']) => {
|
(body: HttpRequest['body']) => {
|
||||||
updateRequest.mutate({ body });
|
updateRequest.mutate({ id: activeRequestId, update: { body } });
|
||||||
},
|
},
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
const handleBodyTextChange = useCallback(
|
const handleBodyTextChange = useCallback(
|
||||||
(text: string) => updateRequest.mutate({ body: { text } }),
|
(text: string) => updateRequest.mutate({ id: activeRequestId, update: { body: { text } } }),
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
const handleHeadersChange = useCallback(
|
const handleHeadersChange = useCallback(
|
||||||
(headers: HttpHeader[]) => updateRequest.mutate({ headers }),
|
(headers: HttpHeader[]) => updateRequest.mutate({ id: activeRequestId, update: { headers } }),
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
const handleUrlParametersChange = useCallback(
|
const handleUrlParametersChange = useCallback(
|
||||||
(urlParameters: HttpUrlParameter[]) => updateRequest.mutate({ urlParameters }),
|
(urlParameters: HttpUrlParameter[]) =>
|
||||||
[updateRequest],
|
updateRequest.mutate({ id: activeRequestId, update: { urlParameters } }),
|
||||||
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const sendRequest = useSendRequest(activeRequest.id ?? null);
|
const sendRequest = useSendAnyHttpRequest();
|
||||||
const { activeResponse } = usePinnedHttpResponse(activeRequest);
|
const { activeResponse } = usePinnedHttpResponse(activeRequest);
|
||||||
const cancelResponse = useCancelHttpResponse(activeResponse?.id ?? null);
|
const cancelResponse = useCancelHttpResponse(activeResponse?.id ?? null);
|
||||||
const handleSend = useCallback(async () => {
|
const handleSend = useCallback(async () => {
|
||||||
await sendRequest.mutateAsync();
|
await sendRequest.mutateAsync(activeRequest.id ?? null);
|
||||||
}, [sendRequest]);
|
}, [activeRequest.id, sendRequest]);
|
||||||
|
|
||||||
const handleCancel = useCallback(async () => {
|
const handleCancel = useCallback(async () => {
|
||||||
await cancelResponse.mutateAsync();
|
await cancelResponse.mutateAsync();
|
||||||
}, [cancelResponse]);
|
}, [cancelResponse]);
|
||||||
|
|
||||||
const handleMethodChange = useCallback(
|
const handleMethodChange = useCallback(
|
||||||
(method: string) => updateRequest.mutate({ method }),
|
(method: string) => updateRequest.mutate({ id: activeRequestId, update: { method } }),
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
const handleUrlChange = useCallback(
|
const handleUrlChange = useCallback(
|
||||||
(url: string) => updateRequest.mutate({ url }),
|
(url: string) => updateRequest.mutate({ id: activeRequestId, update: { url } }),
|
||||||
[updateRequest],
|
[activeRequestId, updateRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const isLoading = useIsResponseLoading(activeRequestId ?? null);
|
const isLoading = useIsResponseLoading(activeRequestId ?? null);
|
||||||
|
|||||||
@@ -23,14 +23,12 @@ import { useLatestHttpResponse } from '../hooks/useLatestHttpResponse';
|
|||||||
import { useMoveToWorkspace } from '../hooks/useMoveToWorkspace';
|
import { useMoveToWorkspace } from '../hooks/useMoveToWorkspace';
|
||||||
import { usePrompt } from '../hooks/usePrompt';
|
import { usePrompt } from '../hooks/usePrompt';
|
||||||
import { useRequests } from '../hooks/useRequests';
|
import { useRequests } from '../hooks/useRequests';
|
||||||
|
import { useSendAnyHttpRequest } from '../hooks/useSendAnyHttpRequest';
|
||||||
import { useSendManyRequests } from '../hooks/useSendFolder';
|
import { useSendManyRequests } from '../hooks/useSendFolder';
|
||||||
import { useSendRequest } from '../hooks/useSendRequest';
|
|
||||||
import { useSidebarHidden } from '../hooks/useSidebarHidden';
|
import { useSidebarHidden } from '../hooks/useSidebarHidden';
|
||||||
import { useUpdateAnyFolder } from '../hooks/useUpdateAnyFolder';
|
import { useUpdateAnyFolder } from '../hooks/useUpdateAnyFolder';
|
||||||
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest';
|
||||||
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
|
import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest';
|
||||||
import { useUpdateGrpcRequest } from '../hooks/useUpdateGrpcRequest';
|
|
||||||
import { useUpdateHttpRequest } from '../hooks/useUpdateHttpRequest';
|
|
||||||
import { useWorkspaces } from '../hooks/useWorkspaces';
|
import { useWorkspaces } from '../hooks/useWorkspaces';
|
||||||
import { fallbackRequestName } from '../lib/fallbackRequestName';
|
import { fallbackRequestName } from '../lib/fallbackRequestName';
|
||||||
import type { Folder, GrpcRequest, HttpRequest, Workspace } from '../lib/models';
|
import type { Folder, GrpcRequest, HttpRequest, Workspace } from '../lib/models';
|
||||||
@@ -609,14 +607,14 @@ const SidebarItem = forwardRef(function SidebarItem(
|
|||||||
const duplicateHttpRequest = useDuplicateHttpRequest({ id: itemId, navigateAfter: true });
|
const duplicateHttpRequest = useDuplicateHttpRequest({ id: itemId, navigateAfter: true });
|
||||||
const duplicateGrpcRequest = useDuplicateGrpcRequest({ id: itemId, navigateAfter: true });
|
const duplicateGrpcRequest = useDuplicateGrpcRequest({ id: itemId, navigateAfter: true });
|
||||||
const copyAsCurl = useCopyAsCurl(itemId);
|
const copyAsCurl = useCopyAsCurl(itemId);
|
||||||
const sendRequest = useSendRequest(itemId);
|
const sendRequest = useSendAnyHttpRequest();
|
||||||
const moveToWorkspace = useMoveToWorkspace(itemId);
|
const moveToWorkspace = useMoveToWorkspace(itemId);
|
||||||
const sendManyRequests = useSendManyRequests();
|
const sendManyRequests = useSendManyRequests();
|
||||||
const latestHttpResponse = useLatestHttpResponse(itemId);
|
const latestHttpResponse = useLatestHttpResponse(itemId);
|
||||||
const latestGrpcConnection = useLatestGrpcConnection(itemId);
|
const latestGrpcConnection = useLatestGrpcConnection(itemId);
|
||||||
const updateHttpRequest = useUpdateHttpRequest(itemId);
|
const updateHttpRequest = useUpdateAnyHttpRequest();
|
||||||
const workspaces = useWorkspaces();
|
const workspaces = useWorkspaces();
|
||||||
const updateGrpcRequest = useUpdateGrpcRequest(itemId);
|
const updateGrpcRequest = useUpdateAnyGrpcRequest();
|
||||||
const updateAnyFolder = useUpdateAnyFolder();
|
const updateAnyFolder = useUpdateAnyFolder();
|
||||||
const prompt = usePrompt();
|
const prompt = usePrompt();
|
||||||
const [editing, setEditing] = useState<boolean>(false);
|
const [editing, setEditing] = useState<boolean>(false);
|
||||||
@@ -625,15 +623,14 @@ const SidebarItem = forwardRef(function SidebarItem(
|
|||||||
|
|
||||||
const handleSubmitNameEdit = useCallback(
|
const handleSubmitNameEdit = useCallback(
|
||||||
(el: HTMLInputElement) => {
|
(el: HTMLInputElement) => {
|
||||||
if (activeRequest == null) return;
|
if (itemModel === 'http_request') {
|
||||||
if (activeRequest.model === 'http_request') {
|
updateHttpRequest.mutate({ id: itemId, update: (r) => ({ ...r, name: el.value }) });
|
||||||
updateHttpRequest.mutate((r) => ({ ...r, name: el.value }));
|
} else if (itemModel === 'grpc_request') {
|
||||||
} else if (activeRequest.model === 'grpc_request') {
|
updateGrpcRequest.mutate({ id: itemId, update: (r) => ({ ...r, name: el.value }) });
|
||||||
updateGrpcRequest.mutate((r) => ({ ...r, name: el.value }));
|
|
||||||
}
|
}
|
||||||
setEditing(false);
|
setEditing(false);
|
||||||
},
|
},
|
||||||
[activeRequest, updateGrpcRequest, updateHttpRequest],
|
[itemId, itemModel, updateGrpcRequest, updateHttpRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleFocus = useCallback((el: HTMLInputElement | null) => {
|
const handleFocus = useCallback((el: HTMLInputElement | null) => {
|
||||||
@@ -736,7 +733,7 @@ const SidebarItem = forwardRef(function SidebarItem(
|
|||||||
hotKeyAction: 'http_request.send',
|
hotKeyAction: 'http_request.send',
|
||||||
hotKeyLabelOnly: true, // Already bound in URL bar
|
hotKeyLabelOnly: true, // Already bound in URL bar
|
||||||
leftSlot: <Icon icon="sendHorizontal" />,
|
leftSlot: <Icon icon="sendHorizontal" />,
|
||||||
onSelect: sendRequest.mutate,
|
onSelect: () => sendRequest.mutate(itemId),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'copyCurl',
|
key: 'copyCurl',
|
||||||
@@ -769,9 +766,9 @@ const SidebarItem = forwardRef(function SidebarItem(
|
|||||||
defaultValue: itemName,
|
defaultValue: itemName,
|
||||||
});
|
});
|
||||||
if (itemModel === 'http_request') {
|
if (itemModel === 'http_request') {
|
||||||
updateHttpRequest.mutate((r) => ({ ...r, name }));
|
updateHttpRequest.mutate({ id: itemId, update: (r) => ({ ...r, name }) });
|
||||||
} else {
|
} else {
|
||||||
updateGrpcRequest.mutate((r) => ({ ...r, name }));
|
updateGrpcRequest.mutate({ id: itemId, update: (r) => ({ ...r, name }) });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { useActiveCookieJar } from './useActiveCookieJar';
|
|||||||
import { useActiveEnvironment } from './useActiveEnvironment';
|
import { useActiveEnvironment } from './useActiveEnvironment';
|
||||||
import { useAlert } from './useAlert';
|
import { useAlert } from './useAlert';
|
||||||
|
|
||||||
export function useSendAnyRequest(options: { download?: boolean } = {}) {
|
export function useSendAnyHttpRequest(options: { download?: boolean } = {}) {
|
||||||
const environment = useActiveEnvironment();
|
const environment = useActiveEnvironment();
|
||||||
const alert = useAlert();
|
const alert = useAlert();
|
||||||
const { activeCookieJar } = useActiveCookieJar();
|
const { activeCookieJar } = useActiveCookieJar();
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
import { useMutation } from '@tanstack/react-query';
|
||||||
import { useSendAnyRequest } from './useSendAnyRequest';
|
import { useSendAnyHttpRequest } from './useSendAnyHttpRequest';
|
||||||
|
|
||||||
export function useSendManyRequests() {
|
export function useSendManyRequests() {
|
||||||
const sendAnyRequest = useSendAnyRequest();
|
const sendAnyRequest = useSendAnyHttpRequest();
|
||||||
return useMutation<void, string, string[]>({
|
return useMutation<void, string, string[]>({
|
||||||
mutationKey: ['send_many_requests'],
|
mutationKey: ['send_many_requests'],
|
||||||
mutationFn: async (requestIds: string[]) => {
|
mutationFn: async (requestIds: string[]) => {
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
|
||||||
import type { HttpResponse } from '../lib/models';
|
|
||||||
import { useSendAnyRequest } from './useSendAnyRequest';
|
|
||||||
|
|
||||||
export function useSendRequest(id: string | null, options: { download?: boolean } = {}) {
|
|
||||||
const sendAnyRequest = useSendAnyRequest(options);
|
|
||||||
return useMutation<HttpResponse | null, string>({
|
|
||||||
mutationKey: ['send_http_request', id],
|
|
||||||
mutationFn: () => sendAnyRequest.mutateAsync(id),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
|
||||||
import type { GrpcRequest } from '../lib/models';
|
|
||||||
import { useUpdateAnyGrpcRequest } from './useUpdateAnyGrpcRequest';
|
|
||||||
|
|
||||||
export function useUpdateGrpcRequest(id: string | null) {
|
|
||||||
const updateAnyGrpcRequest = useUpdateAnyGrpcRequest();
|
|
||||||
return useMutation<void, unknown, Partial<GrpcRequest> | ((r: GrpcRequest) => GrpcRequest)>({
|
|
||||||
mutationKey: ['update_grpc_request', id],
|
|
||||||
mutationFn: async (update) => {
|
|
||||||
return updateAnyGrpcRequest.mutateAsync({ id: id ?? 'n/a', update });
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
import { useMutation } from '@tanstack/react-query';
|
|
||||||
import type { HttpRequest } from '../lib/models';
|
|
||||||
import { useUpdateAnyHttpRequest } from './useUpdateAnyHttpRequest';
|
|
||||||
|
|
||||||
export function useUpdateHttpRequest(id: string | null) {
|
|
||||||
const updateAnyRequest = useUpdateAnyHttpRequest();
|
|
||||||
return useMutation<void, unknown, Partial<HttpRequest> | ((r: HttpRequest) => HttpRequest)>({
|
|
||||||
mutationKey: ['update_http_request', id],
|
|
||||||
mutationFn: async (update) => updateAnyRequest.mutateAsync({ id: id ?? 'n/a', update }),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user