@oslokommune/punkt-react
Version:
React komponentbibliotek til Punkt, et designsystem laget av Oslo Origo
89 lines (88 loc) • 3.63 kB
TypeScript
import { ReactElement, ReactNode } from 'react';
import { IFileItem, IFileTransfer, IFileValidateDetail, TFileUploadStrategy, TTransferProgress } from '../../shared-types';
/** Unique identifier assigned to each selected file. */
export type TFileId = string;
/**
* A selected file plus metadata used by the FileUpload UI.
*
* Notes:
* - A `fileId` is generated automatically if omitted.
* - `attributes.targetFilename` is the filename shown in the queue and may be updated by extensions (e.g. rename).
*
* Implements the shared `IFileItem` type from `shared-types`.
*/
export declare class FileItem implements IFileItem {
fileId: TFileId;
file: File;
attributes: {
targetFilename: string;
} & Record<string, unknown>;
constructor(file: File, fileId?: TFileId);
}
/** Internal context used by queue item operations and hidden inputs. */
export type TPktFileUploadContext = {
name?: string;
multiple: boolean;
id?: string;
};
export declare const PktFileUploadContext: import('react').Context<TPktFileUploadContext>;
/** The value type for `PktFileUpload` (`value` / `defaultValue`). */
export type TFileItemList = Array<FileItem>;
/** Transfer status for a file when using `uploadStrategy="custom"` — aliased from `shared-types`. */
export type TFileTransfer = IFileTransfer;
/** Upload mode: `form` posts the files on submit, `custom` posts file IDs and uploads separately. */
export type TUploadStrategy = TFileUploadStrategy;
/** Detail payload passed to the React `onFileValidate` escape hatch. */
export type TFileValidateDetail = IFileValidateDetail;
/** Re-export for parity with Lit types. */
export type { TTransferProgress };
export type TFileAttribute<T> = {
get: (fileId: TFileId) => T | undefined;
set: (fileId: TFileId, attributeValue: T | undefined) => void;
};
export type TFileAttributes = <T>(attributeName: string) => TFileAttribute<T>;
/**
* Context passed to queue-item operations. Mirrors the Lit
* `TQueueOperationContext` so operations authored for one runtime are
* trivial to port to the other.
*/
export type TQueueOperationContext = {
file: FileItem;
inputName: string;
disabled: boolean;
isActive: boolean;
activate: () => void;
close: () => void;
getAttribute: <T>(name: string) => T | undefined;
setAttribute: (name: string, value: unknown) => void;
};
export type TQueueOperationLabel = string | ((fileItem: FileItem) => string);
/**
* An operation that can be attached to a queue item (rename, comment, remove, etc).
*
* Must carry a stable `id: string` — symbols are no longer supported.
*/
export type TQueueItemOperation = {
id: string;
title: TQueueOperationLabel;
ariaLabel?: TQueueOperationLabel;
onClick?: (context: TQueueOperationContext) => void;
renderInlineUI?: (context: TQueueOperationContext) => ReactNode;
renderExtendedUI?: (context: TQueueOperationContext) => ReactNode;
renderContent?: (context: TQueueOperationContext) => ReactNode;
renderHidden?: (context: TQueueOperationContext) => ReactNode;
};
export type TFileAndTransfer = FileItem & Pick<TFileTransfer, 'progress' | 'errorMessage' | 'showProgress' | 'lastProgress'>;
export type TTransferItemInProgress = TFileAndTransfer & {
progress: number;
};
/**
* Custom renderer for how a queue item is displayed (e.g. filename vs thumbnail grid).
*
* Must return a renderable React element (or `null`).
*/
export type TItemRenderer = (props: {
transferItem: TFileAndTransfer;
queueItemOperations: Array<TQueueItemOperation>;
onPreviewClick?: () => void;
}) => ReactElement | null;