kea-react
Version:
Componentes comunes de react
61 lines (60 loc) • 3.25 kB
TypeScript
/// <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> {
}