Skip to content

React API Reference

Complete API reference for @asyncflowstate/react.

useFlow

ts
function useFlow<TInput, TOutput>(
  action: (...args: TInput[]) => Promise<TOutput>,
  options?: ReactFlowOptions<TInput, TOutput>,
): UseFlowResult<TInput, TOutput>;

Parameters

ParameterTypeDescription
action(...args) => Promise<T>The async function to wrap
optionsReactFlowOptionsConfiguration (optional)

Return Value

ts
interface UseFlowResult<TInput, TOutput> {
  // State
  status: "idle" | "loading" | "success" | "error";
  loading: boolean;
  data: TOutput | null;
  error: Error | null;
  idle: boolean;
  success: boolean;
  failed: boolean;

  // Actions
  execute: (...args: TInput[]) => Promise<TOutput>;
  reset: () => void;
  retry: () => Promise<TOutput>;
  setOptions: (opts: Partial<FlowOptions>) => void;

  // Helpers
  button: (overrides?: object) => ButtonProps;
  form: (opts?: FormHelperOptions) => FormProps;

  // Validation
  fieldErrors: Record<string, string>;

  // Accessibility
  errorRef: React.Ref<HTMLElement>;

  // Metadata
  executionCount: number;
  retryCount: number;
  progress: number;
}

button()

Returns accessible props for button elements.

ts
flow.button(overrides?: Partial<ButtonHTMLAttributes>): {
  onClick: () => void;
  disabled: boolean;
  "aria-busy": boolean;
  "aria-disabled": boolean;
  ...overrides;
}

Usage

tsx
// Basic
<button {...flow.button()}>Submit</button>

// With overrides
<button {...flow.button({ className: "primary-btn" })}>Submit</button>

// Custom onClick
<button {...flow.button({ onClick: () => flow.execute(customData) })}>
  Submit
</button>

form()

Returns props for form elements with optional validation.

ts
flow.form(options?: FormHelperOptions): {
  onSubmit: (e: FormEvent) => void;
  "aria-busy": boolean;
}

FormHelperOptions

OptionTypeDescription
schemaZodSchema | ValibotSchemaValidation schema
extractFormDatabooleanAuto-extract FormData entries
resetOnSuccessbooleanReset form after success
focusFirstErrorbooleanFocus first invalid field

FlowProvider

tsx
<FlowProvider config={FlowProviderConfig}>{children}</FlowProvider>

FlowProviderConfig

Extends FlowOptions with:

OptionTypeDefaultDescription
overrideMode"merge" | "replace""merge"How local options interact with global

useFlowContext

Access the current provider config:

ts
import { useFlowContext } from "@asyncflowstate/react";

const config = useFlowContext();

ReactFlowOptions

Extends FlowOptions with React-specific settings:

ts
interface ReactFlowOptions<TInput, TOutput> extends FlowOptions<
  TInput,
  TOutput
> {
  a11y?: {
    announceSuccess?: string | ((data: TOutput) => string);
    announceError?: string | ((error: Error) => string);
    liveRegionRel?: "polite" | "assertive";
  };
}

useFlowSequence

ts
function useFlowSequence(steps: FlowStep[]): {
  execute: (input: any) => Promise<any>;
  loading: boolean;
  currentStep: number;
  error: Error | null;
  data: any;
  reset: () => void;
};

useFlowParallel

ts
function useFlowParallel(flows: UseFlowResult[]): {
  execute: () => Promise<any[]>;
  loading: boolean;
  data: any[];
  error: Error | null;
  progress: number;
};

Built with by AsyncFlowState Contributors
Open Source · MIT License