@appbuckets/react-ui-smart-components
Version:
UI Extended Components that work with @appbuckets/react-client and @appbuckets/react-ui
148 lines (147 loc) • 4.16 kB
TypeScript
import * as React from 'react';
import type { AnyObject } from '@appbuckets/react-ui-core';
import type { UseFormReturn } from '@appbuckets/react-ui-forms';
import type { SchemaOf } from 'yup';
import type { NotificationContent } from '../NotificationManager';
import type {
BaseActionCancelHandler,
BaseActionCompletedHandler,
BaseActionHelpers,
BaseActionSubmitErrorHandler,
BaseActionSubmitHandler,
BaseActionBuilderActions,
BaseActionBuilderConfig,
BaseActionBuilderNotifications,
BaseActionBuilderProps,
} from './BaseActionBuilder.types';
declare type PlainOrBuilder<
TOut,
Dto extends AnyObject,
Props extends {},
Result
> = TOut | ((props: ExtendedFormComponentProps<Dto, Props, Result>) => TOut);
export interface FormActionHelpers<Dto extends AnyObject>
extends BaseActionHelpers {
/** Current Form Context */
form: UseFormReturn<Dto>;
}
export declare type FormBuilderSchema<
Dto extends AnyObject,
Props extends {},
Result
> = PlainOrBuilder<SchemaOf<Dto>, Dto, Props, Result>;
export declare type FormActionCancelHandler<
Dto extends AnyObject,
Props extends {}
> = BaseActionCancelHandler<
FormActionHelpers<Dto>,
ExtendedFormComponentProps<Dto, Props, any>
>;
export declare type FormActionCompletedHandler<
Dto extends AnyObject,
Props extends {},
Result
> = BaseActionCompletedHandler<
Result,
Dto,
true,
FormActionHelpers<Dto>,
ExtendedFormComponentProps<Dto, Props, Result>
>;
export declare type FormActionSubmitHandler<
Dto extends AnyObject,
Props extends {},
Result
> = BaseActionSubmitHandler<
Result,
Dto,
true,
FormActionHelpers<Dto>,
ExtendedFormComponentProps<Dto, Props, Result>
>;
export declare type FormActionSubmitErrorHandler<
Dto extends AnyObject,
Props extends {}
> = BaseActionSubmitErrorHandler<
Dto,
true,
FormActionHelpers<Dto>,
ExtendedFormComponentProps<Dto, Props, any>
>;
export declare type FormActions<
Dto extends AnyObject,
Props extends {},
Result
> = BaseActionBuilderActions<
FormActionCancelHandler<Dto, Props>,
FormActionCompletedHandler<Dto, Props, Result>,
FormActionSubmitHandler<Dto, Props, Result>,
FormActionSubmitErrorHandler<Dto, Props>
>;
export interface FormBuilderNotifications
extends Pick<BaseActionBuilderNotifications, 'onCanceled' | 'onError'> {
/** Notification to show on Creating data submit click */
onCreatingSubmit?: NotificationContent;
/** Notification to show on Editing data submit click */
onEditingSubmit?: NotificationContent;
}
interface FormComponentStrictProps {
/** Force default value to be any */
defaultValues?: any;
/** Force form as data editing */
isEditing?: boolean;
}
export declare type FormComponentProps<
Dto extends AnyObject,
Props extends {},
Result
> = FormComponentStrictProps &
BaseActionBuilderProps<Props, FormActions<Dto, Props, Result>>;
export declare type FormComponent<
Dto extends AnyObject,
Props extends {},
Result
> = React.FunctionComponent<FormComponentProps<Dto, Props, Result>>;
declare type ExtendedFormComponentProps<
Dto extends AnyObject,
Props extends {},
Result
> = FormComponentProps<Dto, Props, Result> & {
isEditing: boolean;
};
export interface FormBuilderConfig<
Dto extends AnyObject,
Props extends {},
Result
> extends BaseActionBuilderConfig<
FormComponent<Dto, Props, Result>,
FormActions<Dto, Props, Result>,
FormBuilderNotifications
> {
/** The form default props to use */
defaultProps?: PlainOrBuilder<
Partial<FormComponentProps<Dto, Props, Result>>,
Dto,
Props,
Result
>;
/** Extend form validation on submit */
extendValidation?: boolean;
/** Parse defaultValues before are set */
parseData?: (
data: any,
props: ExtendedFormComponentProps<Dto, Props, Result>
) => Dto;
/** The schema to use to validate data */
schema: FormBuilderSchema<Dto, Props, Result>;
/** Strip unknown data from defaultValues */
stripUnknown?: boolean;
/** The form override props object */
overrideProps?: PlainOrBuilder<
Partial<FormComponentProps<Dto, Props, Result>>,
Dto,
Props,
Result
>;
}
export {};