UNPKG

@honed/action

Version:

Create server-driven actions for your Inertia.js application.

133 lines (105 loc) 4.02 kB
import { ComputedRef } from 'vue'; import { Method } from '@inertiajs/core'; import { Ref } from 'vue'; import { VisitOptions } from '@inertiajs/core'; export declare interface Batch { id?: string; endpoint?: string; inline: InlineOperation[]; bulk: BulkOperation[]; page: PageOperation[]; } export declare interface Binding { "onUpdate:modelValue": (value: boolean | "indeterminate") => void; modelValue: boolean; } export declare interface Bulk<T = any> { allSelected: ComputedRef<boolean>; selection: Ref<BulkSelection<T>>; hasSelected: ComputedRef<boolean>; selectAll: () => void; deselectAll: () => void; select: (...records: T[]) => void; deselect: (...records: T[]) => void; toggle: (record: T, force?: boolean) => void; selected: (record: T) => boolean; bind: (key: T) => RecordBinding<T>; bindAll: () => Binding; } export declare interface BulkOperation extends Operation { keep: boolean; } export declare interface BulkOperationData extends Record<string, any> { all: boolean; only: Identifier[]; except: Identifier[]; } export declare interface BulkSelection<T = any> { all: boolean; only: Set<T>; except: Set<T>; } export declare interface Confirm { title: string; description: string | null; dismiss: string; submit: string; intent: "constructive" | "destructive" | "informative" | string; } export declare type Executable<T extends Operation> = T & { execute: (data?: OperationData<T>, options?: VisitOptions) => boolean; }; /** * Create operations with execute methods */ export declare function executables<T extends Operations>(operations: T[], defaults?: VisitOptions, payload?: OperationData<T>): (T & { execute: (data?: OperationData<T>, options?: VisitOptions) => boolean; })[]; /** * Execute an operation with full type safety. */ export declare function execute<T extends Operations>(operation: T, data?: OperationData<T>, options?: VisitOptions): boolean; export declare interface HonedBatch { inline: ComputedRef<Executable<InlineOperation>[]>; bulk: ComputedRef<Executable<BulkOperation>[]>; page: ComputedRef<Executable<PageOperation>[]>; executeInline: (operation: InlineOperation, data: InlineOperationData, options?: VisitOptions) => boolean; executeBulk: (operation: BulkOperation, data: BulkOperationData, options?: VisitOptions) => boolean; executePage: (operation: PageOperation, data?: PageOperationData, options?: VisitOptions) => boolean; } export declare type Identifier = string | number; export declare interface InlineOperation extends Operation { default: boolean; } export declare interface InlineOperationData extends Record<string, any> { id: Identifier; } export declare interface Operation { name: string; label: string; icon?: string; confirm?: Confirm; type?: OperationType; href?: string; method?: Method; target?: string; } export declare type OperationData<T extends Operation> = T extends InlineOperation ? InlineOperationData : T extends BulkOperation ? BulkOperationData : PageOperationData; export declare type Operations = InlineOperation | BulkOperation | PageOperation; export declare type OperationType = "inertia" | "anchor"; export declare interface PageOperation extends Operation { } export declare interface PageOperationData extends Record<string, any> { } export declare interface RecordBinding<T = any> extends Binding { value: T; } export declare interface Route { url: string; method: Method; } export declare type UseBatch = typeof useBatch; export declare function useBatch<T extends Record<string, Batch>>(props: T, key: keyof T, defaults?: VisitOptions): HonedBatch; export declare type UseBulk = typeof useBulk; export declare function useBulk<T = any>(): Bulk<T>; export { }