@dossierhq/design
Version:
The design system for Dossier.
46 lines (45 loc) • 2.57 kB
TypeScript
import type { Reducer } from 'react';
export interface MultipleSelectorItem<TId extends string = string> {
id: TId;
removable?: boolean;
}
export type MultipleSelectorReducer<TItem extends MultipleSelectorItem> = Reducer<MultipleSelectorState<TItem>, MultipleSelectorStateAction<TItem>>;
export interface MultipleSelectorStateInitializerArgs<TItem extends MultipleSelectorItem> {
items: TItem[];
selectedIds?: Array<TItem['id']>;
}
export interface MultipleSelectorState<TItem extends MultipleSelectorItem> {
items: TItem[];
selectedIds: Array<TItem['id']>;
containsRemovableSelection: boolean;
}
export interface MultipleSelectorStateAction<TItem extends MultipleSelectorItem> {
reduce(state: Readonly<MultipleSelectorState<TItem>>): Readonly<MultipleSelectorState<TItem>>;
}
export declare function initializeMultipleSelectorState<TItem extends MultipleSelectorItem>({ items, selectedIds, }: MultipleSelectorStateInitializerArgs<TItem>): MultipleSelectorState<TItem>;
export declare function reduceMultipleSelectorState<TItem extends MultipleSelectorItem>(state: Readonly<MultipleSelectorState<TItem>>, action: MultipleSelectorStateAction<TItem>): Readonly<MultipleSelectorState<TItem>>;
declare class ClearSelectionAction<TItem extends MultipleSelectorItem> implements MultipleSelectorStateAction<TItem> {
reduce(state: Readonly<MultipleSelectorState<TItem>>): Readonly<MultipleSelectorState<TItem>>;
}
declare class SetSelectionAction<TItem extends MultipleSelectorItem> implements MultipleSelectorStateAction<TItem> {
private readonly selectedIds;
constructor(selectedIds: string[]);
reduce(state: Readonly<MultipleSelectorState<TItem>>): Readonly<MultipleSelectorState<TItem>>;
}
declare class ToggleItemAction<TItem extends MultipleSelectorItem> implements MultipleSelectorStateAction<TItem> {
private readonly id;
constructor(id: TItem['id']);
reduce(state: Readonly<MultipleSelectorState<TItem>>): Readonly<MultipleSelectorState<TItem>>;
}
declare class UpdateItemsAction<TItem extends MultipleSelectorItem<TId>, TId extends string = string> implements MultipleSelectorStateAction<TItem> {
private readonly items;
constructor(items: TItem[]);
reduce(state: Readonly<MultipleSelectorState<TItem>>): Readonly<MultipleSelectorState<TItem>>;
}
export declare const MultipleSelectorStateActions: {
ClearSelection: typeof ClearSelectionAction;
SetSelection: typeof SetSelectionAction;
ToggleItem: typeof ToggleItemAction;
UpdateItems: typeof UpdateItemsAction;
};
export {};