kea-react
Version:
Componentes comunes de react
27 lines (25 loc) • 1.27 kB
text/typescript
import { Http } from "./http";
export interface CrudResource<T> {
query: () => PromiseLike<T[]>,
get: (id: number) => PromiseLike<T>,
delete: (id: number) => PromiseLike<void>,
post: (x: T) => PromiseLike<number>,
put: (x: T) => PromiseLike<void>
}
/**Devuelve un objeto con las funciones para realizar operaciones crud sencilas sobre un recurso REST
* @param url La url sin la última diagonal
* @param key Nombre de la propiedad de la llave primaria que se usara en el put/update
*/
export function crud<TEntity extends { IdRegistro?: number | string | null }>(url: string): CrudResource<TEntity>
export function crud<TEntity>(url: string, key: keyof TEntity): CrudResource<TEntity>
export function crud<TEntity>(url: string, key: string = "IdRegistro"): CrudResource<TEntity> {
const urlId = id => url + "/" + id;
const ret: CrudResource<TEntity> = {
query: () => Http.Get(url).then<TEntity[]>(x => x),
get: (id: number | string) => Http.Get(urlId(id)).then<TEntity>(x => x),
delete: (id: number | string) => Http.Delete(urlId(id)),
post: (x: TEntity) => Http.Post(url, x).then<number>(x => x),
put: (x: TEntity) => Http.Put(urlId(x[key]), x)
}
return ret;
}