vlens
Version:
Data Centric Routing & Rendering Mini-Framework
29 lines (24 loc) • 719 B
text/typescript
import * as rpc from "./rpc"
import * as core from "./core"
export interface Data<T> {
data: T | null;
error: string;
loading: boolean;
}
export function makeData<T>(): Data<T> {
return {
data: null, error: "", loading: false
}
}
export type RemoteProc<In, Out> = (data: In) => Promise<rpc.Response<Out>>
// Fetch the data and refresh the UI during and after load
export async function fetch<In, Out>(data: Data<Out>, proc: RemoteProc<In, Out>, params: In): Promise<any> {
data.loading = true;
core.scheduleRedraw()
return proc(params).then(([resp, error]) => {
data.loading = false;
data.data = resp
data.error = error
core.scheduleRedraw();
})
}