import { open } from '@tauri-apps/plugin-dialog'; import mime from 'mime'; import { useKeyValue } from '../hooks/useKeyValue'; import type { HttpRequest } from '../lib/models'; import { Banner } from './core/Banner'; import { Button } from './core/Button'; import { InlineCode } from './core/InlineCode'; import { HStack, VStack } from './core/Stacks'; type Props = { requestId: string; contentType: string | null; body: HttpRequest['body']; onChange: (body: HttpRequest['body']) => void; onChangeContentType: (contentType: string | null) => void; }; export function BinaryFileEditor({ contentType, body, onChange, onChangeContentType, requestId, }: Props) { const ignoreContentType = useKeyValue({ namespace: 'global', key: ['ignore_content_type', requestId], fallback: false, }); const handleClick = async () => { await ignoreContentType.set(false); const selected = await open({ title: 'Select File', multiple: false, }); if (selected == null) { return; } onChange({ filePath: selected.path }); }; const filePath = typeof body.filePath === 'string' ? body.filePath : undefined; const mimeType = mime.getType(filePath ?? '') ?? 'application/octet-stream'; return (
{/* Special character to insert ltr text in rtl element without making things wonky */} ‎ {filePath ?? 'Select File'}
{filePath != null && mimeType !== contentType && !ignoreContentType.value && (
Set Content-Type header
{mimeType} for current request?
)}
); }