UNPKG

@kform/react

Version:

React integration for KForm.

60 lines (59 loc) 2.43 kB
import { Path } from "@kform/core"; import * as React from "react"; import { FormatterControllerState, FormatterOptions } from "../hooks/useFormatter"; import { DistributedOmit } from "../utils/typeUtils"; /** Properties of the {@link FormattedValue} component. */ export type FormattedValueProps<T = unknown, TFormatted = T | undefined> = DistributedOmit<FormatterOptions<T, TFormatted>, "setFormattedValue"> & FormattedValueOwnProps<T, TFormatted>; /** Own properties of the {@link FormattedValue} component. */ export interface FormattedValueOwnProps<T = unknown, TFormatted = T | undefined> { path?: Path | string; children?: (state: FormatterControllerState<T, TFormatted>) => React.ReactNode; } /** * Component used to display information about a form value. It can be used to * either simply display the form value (formatted as appropriate) or display * the value's state (such as dirty/touched status, issues, etc.). * * If intending to simply display the current value of a form value, use the * {@link format} property to configure how the value should be formatted. If no * {@link children} are provided, then the formatted value is rendered as-is when * it is a React element or converted to a string via * `formattedValue?.toString()` otherwise. * * This component is a wrapper around the {@link useFormattedValue} hook. * * Example displaying the value formatted as JSON: * * ```tsx * <FormattedValue * path="/path/to/value" * format={(value) => JSON.stringify(value)} * />; * ``` * * Example displaying the value as a string, plus some of the value's state: * * ```tsx * <FormattedValue path="/path/to/value" format={(value) => String(value)}> * {({ initialized, exists, formattedValue, dirty, touched }) => ( * <> * {!initialized && "Loading..."} * {initialized && !exists && "Value does not exist"} * {initialized && exists && ( * <dl> * <dt>Formatted value:</dt> * <dd>{formattedValue}</dd> * * <dt>Dirty:</dt> * <dd>{dirty ? "Yes" : "No"}</dd> * * <dt>Touched:</dt> * <dd>{touched ? "Yes" : "No"}</dd> * </dl> * )} * </> * )} * </FormattedValue>; * ``` */ export declare function FormattedValue<T = unknown, TFormatted = T | undefined>({ path, children, ...props }: FormattedValueProps<T, TFormatted>): import("react/jsx-runtime").JSX.Element;