mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-04-22 16:48:30 +02:00
Better HTTP methods
This commit is contained in:
@@ -19,7 +19,7 @@ interface Props {
|
|||||||
export function HttpAuthenticationEditor({ request }: Props) {
|
export function HttpAuthenticationEditor({ request }: Props) {
|
||||||
const updateHttpRequest = useUpdateAnyHttpRequest();
|
const updateHttpRequest = useUpdateAnyHttpRequest();
|
||||||
const updateGrpcRequest = useUpdateAnyGrpcRequest();
|
const updateGrpcRequest = useUpdateAnyGrpcRequest();
|
||||||
const auth = useHttpAuthenticationConfig(
|
const authConfig = useHttpAuthenticationConfig(
|
||||||
request.authenticationType,
|
request.authenticationType,
|
||||||
request.authentication,
|
request.authentication,
|
||||||
request.id,
|
request.id,
|
||||||
@@ -43,7 +43,7 @@ export function HttpAuthenticationEditor({ request }: Props) {
|
|||||||
[request.id, request.model, updateGrpcRequest, updateHttpRequest],
|
[request.id, request.model, updateGrpcRequest, updateHttpRequest],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (auth.data == null) {
|
if (authConfig.data == null) {
|
||||||
return <EmptyStateText>No Authentication {request.authenticationType}</EmptyStateText>;
|
return <EmptyStateText>No Authentication {request.authenticationType}</EmptyStateText>;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,9 +56,9 @@ export function HttpAuthenticationEditor({ request }: Props) {
|
|||||||
onChange={(disabled) => handleChange({ ...request.authentication, disabled: !disabled })}
|
onChange={(disabled) => handleChange({ ...request.authentication, disabled: !disabled })}
|
||||||
title="Enabled"
|
title="Enabled"
|
||||||
/>
|
/>
|
||||||
{auth.data.actions && (
|
{authConfig.data.actions && (
|
||||||
<Dropdown
|
<Dropdown
|
||||||
items={auth.data.actions.map(
|
items={authConfig.data.actions.map(
|
||||||
(a): DropdownItem => ({
|
(a): DropdownItem => ({
|
||||||
label: a.label,
|
label: a.label,
|
||||||
leftSlot: a.icon ? <Icon icon={a.icon} /> : null,
|
leftSlot: a.icon ? <Icon icon={a.icon} /> : null,
|
||||||
@@ -75,7 +75,7 @@ export function HttpAuthenticationEditor({ request }: Props) {
|
|||||||
autocompleteVariables
|
autocompleteVariables
|
||||||
useTemplating
|
useTemplating
|
||||||
stateKey={`auth.${request.id}.${request.authenticationType}`}
|
stateKey={`auth.${request.id}.${request.authenticationType}`}
|
||||||
inputs={auth.data.args}
|
inputs={authConfig.data.args}
|
||||||
data={request.authentication}
|
data={request.authentication}
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -59,8 +59,7 @@ export function RecentRequestsDropdown({ className }: Props) {
|
|||||||
|
|
||||||
recentRequestItems.push({
|
recentRequestItems.push({
|
||||||
label: fallbackRequestName(request),
|
label: fallbackRequestName(request),
|
||||||
// leftSlot: <CountBadge className="!ml-0 px-0 w-5" count={recentRequestItems.length} />,
|
leftSlot: <HttpMethodTag request={request} />,
|
||||||
leftSlot: <HttpMethodTag className="text-right" shortNames request={request} />,
|
|
||||||
onSelect: async () => {
|
onSelect: async () => {
|
||||||
await router.navigate({
|
await router.navigate({
|
||||||
to: '/workspaces/$workspaceId',
|
to: '/workspaces/$workspaceId',
|
||||||
|
|||||||
@@ -217,7 +217,6 @@ export const SidebarItem = memo(function SidebarItem({
|
|||||||
|
|
||||||
const itemPrefix = (item.model === 'http_request' || item.model === 'grpc_request') && (
|
const itemPrefix = (item.model === 'http_request' || item.model === 'grpc_request') && (
|
||||||
<HttpMethodTag
|
<HttpMethodTag
|
||||||
shortNames
|
|
||||||
request={item}
|
request={item}
|
||||||
className={classNames(!(active || selected) && 'text-text-subtlest')}
|
className={classNames(!(active || selected) && 'text-text-subtlest')}
|
||||||
/>
|
/>
|
||||||
@@ -272,7 +271,7 @@ export const SidebarItem = memo(function SidebarItem({
|
|||||||
onKeyDown={handleInputKeyDown}
|
onKeyDown={handleInputKeyDown}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<span className="truncate w-full">{itemName}</span>
|
<div className="truncate w-full">{itemName}</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{latestGrpcConnection ? (
|
{latestGrpcConnection ? (
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import classNames from 'classnames';
|
|
||||||
import type { GrpcRequest, HttpRequest } from '@yaakapp-internal/models';
|
import type { GrpcRequest, HttpRequest } from '@yaakapp-internal/models';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
request: HttpRequest | GrpcRequest;
|
request: HttpRequest | GrpcRequest;
|
||||||
@@ -7,46 +7,34 @@ interface Props {
|
|||||||
shortNames?: boolean;
|
shortNames?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const longMethodMap = {
|
const methodNames: Record<string, string> = {
|
||||||
get: 'GET',
|
get: ' GET',
|
||||||
put: 'PUT',
|
put: ' PUT',
|
||||||
post: 'POST',
|
post: 'POST',
|
||||||
patch: 'PATCH',
|
patch: 'PTCH',
|
||||||
delete: 'DELETE',
|
delete: 'DELE',
|
||||||
options: 'OPTIONS',
|
options: 'OPTN',
|
||||||
head: 'HEAD',
|
head: 'HEAD',
|
||||||
} as const;
|
query: 'QURY',
|
||||||
|
|
||||||
const shortMethodMap: Record<keyof typeof longMethodMap, string> = {
|
|
||||||
get: 'GET',
|
|
||||||
put: 'PUT',
|
|
||||||
post: 'PST',
|
|
||||||
patch: 'PTC',
|
|
||||||
delete: 'DEL',
|
|
||||||
options: 'OPT',
|
|
||||||
head: 'HED',
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export function HttpMethodTag({ shortNames, request, className }: Props) {
|
export function HttpMethodTag({ request, className }: Props) {
|
||||||
const method =
|
const method =
|
||||||
request.model === 'http_request' && request.bodyType === 'graphql'
|
request.model === 'http_request' && request.bodyType === 'graphql'
|
||||||
? 'GQL'
|
? 'GQL'
|
||||||
: request.model === 'grpc_request'
|
: request.model === 'grpc_request'
|
||||||
? 'GRP'
|
? 'GRPC'
|
||||||
: request.method;
|
: request.method;
|
||||||
|
|
||||||
const m = method.toLowerCase();
|
|
||||||
const methodMap: Record<string, string> = shortNames ? shortMethodMap : longMethodMap;
|
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
className={classNames(
|
className={classNames(
|
||||||
className,
|
className,
|
||||||
'text-xs font-mono text-text-subtle',
|
'text-xs font-mono text-text-subtle flex-shrink-0 whitespace-pre',
|
||||||
'pt-[0.25em]', // Fix for monospace font not vertically centering
|
'pt-[0.25em]', // Fix for monospace font not vertically centering
|
||||||
shortNames && 'w-[2.5em]',
|
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{methodMap[m] ?? m.slice(0, 4).toUpperCase()}
|
{(methodNames[method.toLowerCase()] ?? method.slice(0, 4)).toUpperCase()}
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,17 @@ export function useHttpAuthenticationConfig(
|
|||||||
);
|
);
|
||||||
|
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: ['http_authentication_config', requestId, authName, values, responseKey, forceRefreshCounter],
|
queryKey: [
|
||||||
|
'http_authentication_config',
|
||||||
|
requestId,
|
||||||
|
authName,
|
||||||
|
values,
|
||||||
|
responseKey,
|
||||||
|
forceRefreshCounter,
|
||||||
|
],
|
||||||
placeholderData: (prev) => prev, // Keep previous data on refetch
|
placeholderData: (prev) => prev, // Keep previous data on refetch
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
|
if (authName == null) return null;
|
||||||
const config = await invokeCmd<GetHttpAuthenticationConfigResponse>(
|
const config = await invokeCmd<GetHttpAuthenticationConfigResponse>(
|
||||||
'cmd_get_http_authentication_config',
|
'cmd_get_http_authentication_config',
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user