/// import * as React from "react"; import { PanelButtonsProps } from "focus-components/panel"; import { Field } from "./field"; import { StoreNode } from "./store"; import { EntityField } from "./types"; import { ViewModel } from "./view-model"; import { AutocompleteSelectOptions, AutocompleteTextOptions, BaseOptions, FieldOptions, SelectOptions, TextOptions } from "./field-helpers"; /** Options additionnelles de l'AutoForm. */ export interface AutoFormOptions { /** Pour ajouter une classe particulière sur le formulaire. */ className?: string; /** ViewModel externe de `storeData`, s'il y a besoin d'externaliser le state interne du formulaire. */ entity?: E & ViewModel; /** Par défaut: true */ hasForm?: boolean; /** Défaut: false */ initiallyEditing?: boolean; } /** Config de services à fournir à AutoForm. */ export interface ServiceConfig { delete?: (entity: {}) => Promise; getLoadParams?: () => any[]; load?: (...args: any[]) => Promise<{}>; save: (entity: {}) => Promise<{}>; } /** Classe de base pour un composant Focus avec un formulaire. */ export declare abstract class AutoForm> extends React.Component { static contextTypes: { classNames: React.Requireable; }; context: { classNames: { [key: string]: { [key: string]: any; }; }; }; readonly entity: E & ViewModel; readonly services: ServiceConfig; readonly storeData: E; errors: Record; fields: Record; isEdit: boolean; isLoading: boolean; private className; private hasForm; private isCustomEntity; private loadDisposer?; /** * Initialise le formulaire. * @param props Les props du composant. * @param storeData L'EntityStoreData de base du formulaire. * @param services La config de services pour le formulaire ({delete?, getLoadParams, load, save}). * @param options Options additionnelles. */ constructor(props: P, storeData: E, services: ServiceConfig, {entity, className, hasForm, initiallyEditing}?: AutoFormOptions); componentWillMount(): void; componentWillUnmount(): void; /** Change le mode du formulaire. */ toggleEdit(isEdit: boolean): void; /** Appelle le service de suppression. */ delete(): Promise; /** Appele le service de chargement */ load(): Promise; /** Appelle le service de sauvegarde. */ save(): Promise; onFormDeleted(): void; onFormLoaded(): void; onFormSaved(): void; /** Valide les différents champs du formulaire. */ validate(): boolean; /** Récupère les props à fournir à un Panel pour relier ses boutons au formulaire. */ getPanelButtonProps(): PanelButtonsProps; abstract renderContent(): React.ReactElement | null; render(): JSX.Element | null; /** * Crée un champ de type AutocompleteSelect. * @param field La définition de champ. * @param options Les options du champ. */ autocompleteSelectFor(field: EntityField, options: AutocompleteSelectOptions): JSX.Element; /** * Crée un champ de type AutocompleteText. * @param field La définition de champ. * @param options Les options du champ. */ autocompleteTextFor(field: EntityField, options: AutocompleteTextOptions): JSX.Element; /** * Crée un champ standard en lecture seule. * @param field La définition de champ. * @param options Les options du champ. */ displayFor(field: EntityField, options?: BaseOptions & { [key: string]: any; }): JSX.Element; /** * Crée un champ standard. * @param field La définition de champ. * @param options Les options du champ. */ fieldFor(field: EntityField, options?: BaseOptions & { [key: string]: any; }): JSX.Element; /** * Crée un champ avec des composants personnalisés. * @param field La définition de champ. * @param options Les options du champ. */ fieldForWith(field: EntityField, options: FieldOptions & DisplayProps & FieldProps & InputProps): JSX.Element; /** * Crée un champ avec résolution de référence. * @param field La définition de champ. * @param listName Le nom de la liste de référence. * @param options Les options du champ. */ selectFor(field: EntityField, values: { code?: T; id?: T; }[], options?: SelectOptions): JSX.Element; /** * Récupère le texte correspondant à un champ. * @param field La définition de champ. * @param options Les options du champ. */ stringFor(field: EntityField, options?: TextOptions): string; /** * Affiche un champ sous format texte. * @param field La définition de champ. * @param options Les options du champ. */ textFor(field: EntityField, options?: TextOptions): JSX.Element; private setFieldOptions(field, options); }