UNPKG

@web-atoms/core

Version:
276 lines (275 loc) • 10.4 kB
System.register(["tslib", "../services/JsonService", "../services/ReferenceService", "./AtomUri", "./Command", "./InheritedProperty", "./types"], function (_export, _context) { "use strict"; var __awaiter, __rest, JsonService, ReferenceService, AtomUri, displayRouteSymbol, getOwnInheritedProperty, CancelToken, DI, AtomLoader; _export("AtomLoader", void 0); return { setters: [function (_tslib) { __awaiter = _tslib.__awaiter; __rest = _tslib.__rest; }, function (_servicesJsonService) { JsonService = _servicesJsonService.JsonService; }, function (_servicesReferenceService) { ReferenceService = _servicesReferenceService.default; }, function (_AtomUri) { AtomUri = _AtomUri.AtomUri; }, function (_Command) { displayRouteSymbol = _Command.displayRouteSymbol; }, function (_InheritedProperty) { getOwnInheritedProperty = _InheritedProperty.getOwnInheritedProperty; }, function (_types) { CancelToken = _types.CancelToken; DI = _types.DI; }], execute: function () { _export("AtomLoader", AtomLoader = class AtomLoader { static load(url, app) { return __awaiter(this, void 0, void 0, function* () { if (typeof url === "string") { const type = yield DI.resolveViewClassAsync(url); if (!type) { throw new Error(`Type not found for ${url}`); } url = type; } if (url instanceof AtomUri) { if (url.host === "reference") { const r = app.get(ReferenceService).get(url.path); if (!r) { throw new Error("reference not found"); } return r.consume(); } if (url.host === "class") { const r = app.get(ReferenceService).get(url.path); if (!r) { throw new Error("reference not found"); } return app.resolve(r.consume(), true); } url = url.path; const type = yield DI.resolveViewClassAsync(url); if (!type) { throw new Error(`Type not found for ${url}`); } url = type; } const obj = app.resolve(url, true); return obj; }); } static loadView(url, app, hookCloseEvents, vmFactory) { return __awaiter(this, void 0, void 0, function* () { const busyIndicator = app.createBusyIndicator({ title: url.toString(), description: `Loading View ${url}` }); try { const view = yield AtomLoader.load(url, app); let vm = view.viewModel; if (!vm) { if (!vmFactory) { return { view }; } vm = vmFactory(); view.viewModel = vm; } if ("parameters" in view) { vm = view.parameters; } if (vm) { const jsonService = app.get(JsonService); for (const key in url.query) { if (url.query.hasOwnProperty(key)) { const element = url.query[key]; if (typeof element === "object") { vm[key] = jsonService.parse(jsonService.stringify(element)); continue; } if (/^json\:/.test(key)) { const k = key.split(":")[1]; vm[k] = jsonService.parse(element.toString()); continue; } if (/^ref\:/.test(key)) { const rs = app.get(ReferenceService); const v = rs.get(element); vm[key.split(":", 2)[1]] = v.consume(); continue; } try { vm[key] = element; } catch (e) { console.error(e); } } } } if (hookCloseEvents && vm) { const disposables = view.disposables; const id = (AtomLoader.id++).toString(); view.id = id; const returnPromise = new Promise((resolve, reject) => { disposables.add(app.subscribe(`atom-window-close:${id}`, (m, r) => { resolve(r); view.dispose(); })); disposables.add(app.subscribe(`atom-window-cancel:${id}`, () => { reject("cancelled"); view.dispose(); })); }); vm.windowName = id; view.returnPromise = returnPromise; return { view, disposables, returnPromise, id }; } return { view }; } finally { busyIndicator.dispose(); } }); } static loadClass(url_1) { return __awaiter(this, arguments, void 0, function* (url, _a = {}, app) { var _b, _c, _d, _e; var _f; var { title } = _a, _g = displayRouteSymbol, route = _a[_g], parameters = __rest(_a, ["title", typeof _g === "symbol" ? _g : _g + ""]); const busyIndicator = app.createBusyIndicator({ title: url === null || url === void 0 ? void 0 : url.toString(), description: `Loading View ${url}` }); try { const view = yield AtomLoader.load(url, app); const vm = getOwnInheritedProperty(view, "viewModel"); let params; if ("parameters" in view) { params = view.parameters; } if (!vm) { params = (_b = (_f = view).parameters) !== null && _b !== void 0 ? _b : _f.parameters = {}; } else { console.warn("ViewModel is deprecated"); } if (title) { view.title = title; } if (params) { params[displayRouteSymbol] = route; } if ((vm || params) && parameters) { for (const key in parameters) { if (parameters.hasOwnProperty(key)) { const element = parameters[key]; try { if (vm) { vm[key] = element; } if (params) { params[key] = element; } } catch (e) { console.error(e); } } } } (_e = (_d = (_c = view).init) === null || _d === void 0 ? void 0 : _d.call(_c)) === null || _e === void 0 ? void 0 : _e.catch(error => { if (!CancelToken.isCancelled(error)) { console.error(error); } }); return view; } finally { busyIndicator.dispose(); } }); } static loadControl(url, app) { return __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d; var _e; const busyIndicator = app.createBusyIndicator({ title: url === null || url === void 0 ? void 0 : url.toString(), description: `Loading View ${url}` }); try { const view = yield AtomLoader.load(url, app); const vm = getOwnInheritedProperty(view, "viewModel"); let params; if ("parameters" in view) { params = view.parameters; } if (!vm) { params = (_a = (_e = view).parameters) !== null && _a !== void 0 ? _a : _e.parameters = {}; } if (vm || params) { const jsonService = app.get(JsonService); for (const key in url.query) { if (url.query.hasOwnProperty(key)) { const element = url.query[key]; if (/^json\:/.test(key)) { const k = key.split(":")[1]; const v = jsonService.parse(element.toString()); if (vm) { vm[k] = v; } if (params) { params[k] = v; } continue; } if (/^ref\:/.test(key)) { const rs = app.get(ReferenceService); const v = rs.get(element).consume(); const keyName = key.split(":", 2)[1]; if (vm) { vm[keyName] = v; } if (params) { params[keyName] = v; } continue; } try { if (vm) { vm[key] = element; } if (params) { params[key] = element; } } catch (e) { console.error(e); } } } } (_d = (_c = (_b = view).init) === null || _c === void 0 ? void 0 : _c.call(_b)) === null || _d === void 0 ? void 0 : _d.catch(error => { if (!CancelToken.isCancelled(error)) { console.error(error); } }); return view; } finally { busyIndicator.dispose(); } }); } }); AtomLoader.id = 1; } }; }); //# sourceMappingURL=AtomLoader.js.map