import type { GrpcRequest, HttpRequest, WebsocketRequest } from '@yaakapp-internal/models'; import React, { useCallback } from 'react'; import { upsertWebsocketRequest } from '../commands/upsertWebsocketRequest'; import { useHttpAuthenticationConfig } from '../hooks/useHttpAuthenticationConfig'; import { useUpdateAnyGrpcRequest } from '../hooks/useUpdateAnyGrpcRequest'; import { useUpdateAnyHttpRequest } from '../hooks/useUpdateAnyHttpRequest'; import { Checkbox } from './core/Checkbox'; import type { DropdownItem } from './core/Dropdown'; import { Dropdown } from './core/Dropdown'; import { Icon } from './core/Icon'; import { IconButton } from './core/IconButton'; import { HStack } from './core/Stacks'; import { DynamicForm } from './DynamicForm'; import { EmptyStateText } from './EmptyStateText'; interface Props { request: HttpRequest | GrpcRequest | WebsocketRequest; } export function HttpAuthenticationEditor({ request }: Props) { const updateHttpRequest = useUpdateAnyHttpRequest(); const updateGrpcRequest = useUpdateAnyGrpcRequest(); const authConfig = useHttpAuthenticationConfig( request.authenticationType, request.authentication, request.id, ); const handleChange = useCallback( (authentication: Record) => { if (request.model === 'http_request') { updateHttpRequest.mutate({ id: request.id, update: (r) => ({ ...r, authentication }), }); } else if (request.model === 'websocket_request') { upsertWebsocketRequest.mutate({ ...request, authentication }); } else { updateGrpcRequest.mutate({ id: request.id, update: (r) => ({ ...r, authentication }), }); } }, [request, updateGrpcRequest, updateHttpRequest], ); if (authConfig.data == null) { return No Authentication {request.authenticationType}; } return (
handleChange({ ...request.authentication, disabled: !disabled })} title="Enabled" /> {authConfig.data.actions && authConfig.data.actions.length > 0 && ( ({ label: a.label, leftSlot: a.icon ? : null, onSelect: () => a.call(request), }), )} > )}
); }