UNPKG

kea-react

Version:

Componentes comunes de react

61 lines (60 loc) 3.25 kB
/// <reference types="react" /> import React = require('react'); /**Interfaz base para los estados de un catalogo */ export interface QueryState<T> { /**Resultado del query*/ Model?: T | null; /**True si se estan cargando los elementos */ Cargando?: boolean; /**Si hubo un error al cargar se mostrará aqui */ Error?: string | number | null; } export interface ModelMapFunction<T> { (model: T, onModelChanged: (newValue: T) => void, requestQuery: () => void): JSX.Element | null; } export interface CargandoMapFunction<T> { (cargando: boolean, error: string | number | null | undefined, model: T | null | undefined, onModelChanged: (newValue: T) => void, requestQuery: () => void): JSX.Element | null; } /**Convierte una función que mapea un modelo a un componente de react a otra que mapea el modelo a un componente * de cargando que muestra el error y el spinner de cargando. La función que devuelve es compatibla con la función que espera * el componente Query */ export declare function CargandoModelMap<T>(map: ModelMapFunction<T>): CargandoMapFunction<T>; /**Convierte una función que mapea un modelo a un componente de react a otra que mapea el modelo a un * componente de cargando con su respectivos elementos constantes de cargando y una función para crear el componente de error */ export declare function ConstantModelMap<T>(map: ModelMapFunction<T>, cargandoComponent: JSX.Element | null, errorFunc: (error: string | number) => JSX.Element | null): (_cargando: boolean, error: string | number | null, model: T | null, onModelChanged: any, requestQuery: any) => JSX.Element | null; /**Propiedades de un elemento que realiza un query */ export interface QueryProps<T, TQueryParams> { /**Función que realiza el query */ query: (params: TQueryParams) => PromiseLike<T> | T; /**Función que convierte el resultado del query en un elemento de react. * * @param model Resultado del query. * @param onModelChanged Delegado que debe de ser llamado cuando se quiera informar que el modelo ha cambiado * @param requestQuery Delegado que debe de ser llamado si se debe de llamar de nuevo al query */ map: CargandoMapFunction<T>; /**Parámetros del query */ queryParams: TQueryParams; /**True para indicar que no se debe de llamar al refrescado al iniciar */ preventInitialRequest?: boolean; } /**Componente que muestra un componente en función al resultado de un query asíncrono que esta * en función de ciertos parametros * debera de heredar del componente para establecer los tipos genericos. * * Cuando cambien los parametros del query automaticamente vuelve a llamar al query */ export declare class Query<T, TQueryParams> extends React.Component<QueryProps<T, TQueryParams>, QueryState<T>> { constructor(props: QueryProps<T, TQueryParams>); componentDidMount(): void; componentWillReceiveProps(nextProps: QueryProps<T, TQueryParams>): void; /**Refresca el query */ refreshFull: () => Promise<void>; private handleOnModelChanged; render(): JSX.Element | null; } /**Query tipado con any */ export declare class ConcreteQuery extends Query<any, any> { }