UNPKG

@stainless-code/layers

Version:

Headless, UI-agnostic layer/stack manager for modal/dialog/drawer/popover/toast UI. Call a layer like an async function and await its response.

37 lines (35 loc) 1.23 kB
import type { Layer } from "./layer"; import { LayerStack } from "./layerStack"; import type { DefaultLayerError, DismissOptions, LayerCallContext, LayerState, } from "./types"; /** * Creates the framework-neutral imperative context passed to a layer component. * Adapters provide rendering; stack and layer instances retain lifecycle control. */ export function createCallContext<P, R, RootProps = unknown>( stack: LayerStack<P, R, DefaultLayerError, unknown>, layer: Layer<P, R, DefaultLayerError, unknown>, state: LayerState<P, R, DefaultLayerError, unknown>, rootProps?: RootProps, ): LayerCallContext<P, R, RootProps> { return { end: (response: R, opts?: DismissOptions) => stack.dismiss(layer, response, opts), dismiss: (response: R, opts?: DismissOptions) => stack.dismiss(layer, response, opts), addBlocker: (fn) => layer.addBlocker(fn), update: (patch: Partial<P>) => stack.update(layer, patch), setRunning: (running: boolean) => stack.setRunning(layer, running), settle: () => stack.settle(layer), ended: state.ended, index: state.index, stackSize: state.stackSize, root: rootProps as RootProps, stackId: stack.id, layerId: layer.id, }; }