UNPKG

@intuitionrobotics/db-api-generator

Version:
164 lines 5.08 kB
import { BaseHttpRequest } from "@intuitionrobotics/thunderstorm"; import { DefaultApiDefs } from "../index.js"; import {} from "@intuitionrobotics/firebase"; import { ThunderDispatcher, XhrHttpModule } from "@intuitionrobotics/thunderstorm/frontend"; import { addItemToArray, Module, removeItemFromArray } from "@intuitionrobotics/ts-common"; export class BaseDB_ApiGeneratorCaller extends Module { errorHandler = (request, resError) => { if (this.onError(request, resError)) return; return XhrHttpModule.handleRequestFailure(request, resError); }; defaultDispatcher; // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected constructor(config, moduleName) { super(moduleName); this.setDefaultConfig(config); } setDefaultDispatcher(defaultDispatcher) { this.defaultDispatcher = defaultDispatcher; } createRequest(apiDef) { const request = XhrHttpModule .createRequest(apiDef.method, this.getRequestKey(apiDef)) .setRelativeUrl(`${this.config.relativeUrl}${apiDef.suffix ? "/" + apiDef.suffix : ""}`) .setOnError(this.errorHandler); const timeout = this.timeoutHandler(apiDef); if (timeout) request.setTimeout(timeout); return request; } getRequestKey(apiDef) { return `request-api--${this.config.key}-${apiDef.key}`; } timeoutHandler(_apiDef) { } onError(_request, _resError) { return false; } getCreateRequest(toCreate) { return this .createRequest(DefaultApiDefs.Create) .setJsonBody(toCreate); } create(toCreate) { return this.getCreateRequest(toCreate) .execute(async (response) => { return this.onEntryCreated(response); }); } async createSync(toCreate) { return this.getCreateRequest(toCreate) .executeSync(); } getUpdateRequest(toUpdate) { return this .createRequest(DefaultApiDefs.Update) .setJsonBody(toUpdate); } update = (toUpdate) => { return this.getUpdateRequest(toUpdate) .execute(async (response) => { return this.onEntryUpdated(response); }); }; updateSync = (toUpdate) => { return this.getUpdateRequest(toUpdate) .executeSync(); }; getQueryBody(query) { let _query = query; if (!_query) _query = {}; return this .createRequest(DefaultApiDefs.Query) .setJsonBody(_query); } query = (query) => { let _query = query; if (!_query) _query = {}; return this.getQueryBody(_query) .execute(async (response) => { return this.onQueryReturned(response); }); }; querySync = (query) => { return this.getQueryBody(query) .executeSync(); }; getUniqueRequest(_id) { return this .createRequest(DefaultApiDefs.Unique) .setUrlParams({ _id }); } unique = (_id) => { return this.getUniqueRequest(_id) .execute(async (response) => { return this.onGotUnique(response); }); }; uniqueSync = (_id) => { return this.getUniqueRequest(_id).executeSync(); }; getDeleteRequest(_id) { return this .createRequest(DefaultApiDefs.Delete) .setUrlParams({ _id }); } delete = (_id) => { return this.getDeleteRequest(_id) .execute(async (response) => { return this.onEntryDeleted(response); }); }; deleteSync = (_id) => { return this.getDeleteRequest(_id) .executeSync(); }; ids = []; items = {}; getItems() { return this.ids.map(id => this.items[id]); } get(id) { return this.items[id]; } async onEntryCreated(item) { this.upsertId(item._id); this.items[item._id] = item; this.dispatch(); } dispatch = () => { this.defaultDispatcher?.dispatchUI(); this.defaultDispatcher?.dispatchModule(); }; async onEntryDeleted(item) { removeItemFromArray(this.ids, item._id); delete this.items[item._id]; this.dispatch(); } async onEntryUpdated(item) { this.items[item._id] = item; this.dispatch(); } async onGotUnique(item) { if (!this.ids.includes(item._id)) addItemToArray(this.ids, item._id); this.items[item._id] = item; this.dispatch(); } async onQueryReturned(items) { items.forEach(item => this.upsertId(item._id)); this.items = items.reduce((toRet, item) => { toRet[item._id] = item; return toRet; }, this.items); this.dispatch(); } upsertId = (id) => { if (!this.ids.includes(id)) addItemToArray(this.ids, id); }; } //# sourceMappingURL=BaseDB_ApiGeneratorCaller.js.map