@intuitionrobotics/db-api-generator
Version:
164 lines • 5.08 kB
JavaScript
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