UNPKG

@intuitionrobotics/permissions

Version:
80 lines 3.3 kB
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