@intuitionrobotics/permissions
Version:
80 lines • 3.3 kB
JavaScript
import { _setTimeout, ImplementationMissingException, Module, Second } from "@intuitionrobotics/ts-common";
import { ThunderDispatcher } from "@intuitionrobotics/thunderstorm/app-frontend/core/thunder-dispatcher";
import { XhrHttpModule } from "@intuitionrobotics/thunderstorm/frontend";
import { HttpMethod } from "@intuitionrobotics/thunderstorm";
import {} from "../../index.js";
const dispatch_onPermissionsChanged = new ThunderDispatcher("__onPermissionsChanged");
const dispatch_onPermissionsFailed = new ThunderDispatcher("__onPermissionsFailed");
export class PermissionsModuleFE_Class extends Module {
loadingUrls = new Set();
userUrlsPermissions = {};
requestCustomField = {};
debounceTime = 100;
retryCounter = 0;
constructor() {
super("PermissionsModuleFE");
}
setDebounceTime(time) {
this.debounceTime = time;
}
setCustomField(key, value) {
this.requestCustomField[key] = value;
this.setPermissions();
}
loadUrls(urls) {
urls.forEach(url => {
if (this.loadingUrls.has(url) || this.userUrlsPermissions[url] !== undefined)
return;
this.loadingUrls.add(url);
});
this.setPermissions();
}
doesUserHavePermissions(url) {
if (this.loadingUrls.has(url))
return undefined;
const permitted = this.userUrlsPermissions[url];
if (permitted !== undefined)
return permitted;
this.loadingUrls.add(url);
this.setPermissions();
return undefined;
}
setPermissions = () => {
if (!this.config || !this.config.projectId)
throw new ImplementationMissingException("need to set up a project id config");
this.debounce(() => {
const urls = {};
this.loadingUrls.forEach(url => {
urls[url] = false;
});
XhrHttpModule
.createRequest(HttpMethod.POST, "user-urls-permissions")
.setRelativeUrl(`/v1/permissions/user-urls-permissions`)
// .setOnError(`Failed to get user urls permissions`)
.setLabel(`Getting user urls permissions`)
.setJsonBody({
projectId: this.config.projectId,
urls: urls,
requestCustomField: this.requestCustomField
})
.setOnError(() => {
this.logWarning(`Failed to get user urls permissions`);
if (this.retryCounter < 5) {
this.retryCounter++;
return _setTimeout(this.setPermissions, 5 * Second);
}
dispatch_onPermissionsFailed.dispatchModule();
})
.execute(async (userUrlsPermissions) => {
this.retryCounter = 0;
Object.keys(userUrlsPermissions).forEach(url => {
this.loadingUrls.delete(url);
this.userUrlsPermissions[url] = userUrlsPermissions[url];
});
dispatch_onPermissionsChanged.dispatchUI();
});
}, "get-permissions", this.debounceTime);
};
}
export const PermissionsFE = new PermissionsModuleFE_Class();
//# sourceMappingURL=PermissionsModuleFE.js.map