@web-atoms/core
Version:
276 lines (275 loc) • 10.4 kB
JavaScript
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