Usage

Choose a file and send it

This type is used by fileSystem.upload

tsx
import { Button, Text, VStack, fileSystem, mediaPicker, signal, task } from 'kuito';

export default function PhotoUpload() {
  const progress = signal(0);
  const selected = signal<string | null>(null);
  const upload = task(
    async () => {
      if (!selected.value) {
        const result = await mediaPicker.pick({
          mediaTypes: ['images'],
          maxWidth: 2048,
          quality: 0.8,
        });
        if (result.canceled || !result.assets[0]) return;
        selected.value = result.assets[0].uri;
      }
      progress.value = 0;
      const result = await fileSystem.upload('https://example.com/photos', selected.value, {
        onProgress: ({ bytes, total }) => {
          progress.value = total ? bytes / total : 0;
        },
      });
      if (result.status < 200 || result.status >= 300)
        throw new Error(`Upload failed: ${result.status}`);
      selected.value = null;
    },
    { policy: 'drop' },
  );

  return (
    <VStack padding={24} gap={12}>
      <Button disabled={upload.running.value} onPress={() => void upload.run().catch(() => {})}>
        {selected.value ? 'Retry upload' : 'Choose photo'}
      </Button>
      <Text>
        {upload.running.value
          ? `${Math.round(progress.value * 100)}%`
          : upload.error.value
            ? String(upload.error.value)
            : ''}
      </Text>
    </VStack>
  );
}

Type declaration

ts
export type UploadOptions = {
  /** Defaults to `'POST'`. */
  method?: 'POST' | 'PUT' | 'PATCH';
  headers?: Record<string, string>;
  /** The file as the whole body, or as one field of a multipart form. Defaults to `'binary'`. */
  uploadType?: 'binary' | 'multipart';
  /** The form field holding the file. Defaults to `'file'`. */
  fieldName?: string;
  mimeType?: string;
  /** More form fields, sent before the file. */
  parameters?: Record<string, string>;
  onProgress?: (progress: TransferProgress) => void;
};

Members 7

NameTypeRequiredDescription
method"POST" | "PUT" | "PATCH"NoDefaults to 'POST'.
headersRecord<string, string>No—
uploadType"binary" | "multipart"NoThe file as the whole body, or as one field of a multipart form. Defaults to 'binary'.
fieldNamestringNoThe form field holding the file. Defaults to 'file'.
mimeTypestringNo—
parametersRecord<string, string>NoMore form fields, sent before the file.
onProgress(progress: TransferProgress) => voidNo—
onProgress — method signatures

Signatures

ts
(progress: TransferProgress): void

Parameters

NameTypeRequiredDescription
progressTransferProgressYes—

Returns

void

Generated from the public TypeScript declarations: signatures, props and defaults come from the checked source, descriptions from its JSDoc. No defaults are invented.