UNPKG

kea-react

Version:

Componentes comunes de react

27 lines (25 loc) 1.27 kB
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; }