elmer-ui-core
Version:
web app framework
370 lines (369 loc) • 16.3 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RouterService = exports.ROUTER_SKIP_API_ACTION = void 0;
var elmer_common_1 = require("elmer-common");
var RouterServiceConfig_1 = require("../../configuration/RouterServiceConfig");
var ElmerServiceRequest_1 = require("../../core/ElmerServiceRequest");
var globalUtil_1 = require("../../init/globalUtil");
exports.ROUTER_SKIP_API_ACTION = "239b24b2-687a-1405-0c91-6085db4e";
var RouterService = (function (_super) {
__extends(RouterService, _super);
function RouterService() {
var _this_1 = _super.call(this) || this;
_this_1.C404 = "eui-404";
_this_1.hashRouter = true;
_this_1.http = new ElmerServiceRequest_1.ElmerServiceRequest();
if (!globalUtil_1.getGlobalState("euiRouter")) {
globalUtil_1.defineGlobalState("euiRouter", {
hashRouter: false,
title: "euiRouter",
toParams: null,
version: "1.0.0"
}, true);
}
_this_1.toUrl = window.location.href || "";
_this_1.hashChangeID = _this_1.guid();
_this_1.handleOnHashChange();
return _this_1;
}
RouterService.prototype.initConfig = function (routeData, hashRouter) {
this.routers = routeData || [];
this.hashRouter = hashRouter;
};
RouterService.prototype.setBindRouteComponent = function (target) {
this.target = target;
};
RouterService.prototype.setState = function (updateState) {
this.target.setState(updateState, true);
};
RouterService.prototype.refreshUrl = function (updateUrl) {
if (!this.isEmpty(updateUrl)) {
this.toUrl = updateUrl;
}
else {
this.toUrl = window.location.href || "";
}
};
RouterService.prototype.checkRoutersVisible = function (newUrl, oldUrl, param) {
var locationUrl = newUrl || "";
if (this.isArray(this.routers)) {
var routeUrl = this.getRoutePathValue(locationUrl);
var checkRouters = this.routers;
for (var i = 0; i < checkRouters.length; i++) {
var tmpRouter = checkRouters[i];
var tmpProps = tmpRouter.props || {};
tmpProps.if = false;
if (this.isString(tmpRouter.path)) {
var checkPath = tmpRouter.path || "";
var queryIndex = checkPath.indexOf("?");
var newQueryData = this.getQueryDataFromUrl(locationUrl);
checkPath = queryIndex >= 0 ? checkPath.substr(0, queryIndex) : checkPath;
if (routeUrl.substr(0, checkPath.length) === checkPath) {
tmpProps.if = true;
return {
component: tmpRouter.component,
path: tmpRouter.path,
props: __assign(__assign(__assign({}, tmpProps), newQueryData), (param || {}))
};
}
else if ((this.isEmpty(routeUrl) || routeUrl === "/") && tmpRouter.path === "/") {
tmpProps.if = true;
return {
component: tmpRouter.component,
path: tmpRouter.path,
props: __assign(__assign({}, tmpProps), (param || {}))
};
}
}
else if (this.isRegExp(tmpRouter.path)) {
if (tmpRouter.path.test(routeUrl)) {
tmpProps.if = true;
return {
component: tmpRouter.component,
path: tmpRouter.path,
props: __assign(__assign({}, tmpProps), (param || {}))
};
}
}
}
}
return {
component: this.C404,
path: "/404",
props: {
if: true
}
};
};
RouterService.prototype.getPageCode = function (router) {
if (!this.isEmpty(router.component)) {
var tagName = this.humpToStr(router.component);
tagName = !/^(eui\-)/.test(tagName) ? "eui-" + tagName : tagName;
var result_1 = "<" + tagName;
if (router.props) {
Object.keys(router.props).map(function (tmpKey) {
var bindKey = "{{nextPage.props." + tmpKey + "}}";
result_1 += " " + tmpKey + "='" + bindKey + "'";
});
}
result_1 += "></" + tagName + ">";
return result_1;
}
else {
return "";
}
};
RouterService.prototype.onHashChanged = function (res) {
if (this.target && this.isFunction(this.target.onRouterChanged)) {
this.target.onRouterChanged(res.newURL, res.oldURL, res.param);
}
};
RouterService.prototype.getToRouter = function (toUrl) {
if (this.isArray(this.routers)) {
var routeUrl = this.getRoutePathValue(toUrl);
for (var i = 0; i < this.routers.length; i++) {
var tmpRouter = this.routers[i];
if (this.isString(tmpRouter.path)) {
if (tmpRouter.path === routeUrl) {
return tmpRouter;
}
else if ((this.isEmpty(routeUrl) || routeUrl === "/") && tmpRouter.path === "/") {
return tmpRouter;
}
}
else if (this.isRegExp(tmpRouter.path)) {
if ((tmpRouter.path).test(routeUrl)) {
return tmpRouter;
}
}
}
}
};
RouterService.prototype.getRouterRequests = function (router) {
var config = RouterServiceConfig_1.getRouterConfig();
var serviceConfig = config.service;
var resultApi = {};
if (serviceConfig && serviceConfig.config && router) {
for (var key in serviceConfig.config) {
var itemData = serviceConfig.config[key];
if (itemData.endPoints) {
for (var endPointKey in itemData.endPoints) {
var itemEndPoint = itemData.endPoints[endPointKey];
if (itemEndPoint.options.path === router.path || ((router.path === "/" || this.isEmpty(router.path)) && (itemEndPoint.options.path === "/" || this.isEmpty(itemEndPoint.options.path)))) {
if (resultApi[key]) {
resultApi[key].push(endPointKey);
}
else {
resultApi[key] = [endPointKey];
}
}
}
}
}
}
return resultApi;
};
RouterService.prototype.ajaxAll = function (apiData, options) {
var _this_1 = this;
return new Promise(function (resolve, reject) {
var config = RouterServiceConfig_1.getRouterConfig();
var serviceConfig = config.service;
var allParams = [];
var allPercent = 100.0;
var loaded = 0;
for (var namespace in apiData) {
var endPoints = apiData[namespace] || [];
for (var i = 0; i < endPoints.length; i++) {
allParams.push({
id: namespace + "." + endPoints[i],
params: {
endPoint: endPoints[i],
namespace: namespace
}
});
}
}
allPercent = (allParams.length) * 100.0;
_this_1.http.setConfig(serviceConfig);
elmer_common_1.queueCallFunc(allParams, function (option, param) {
return new Promise(function (_resolve, _reject) {
var myLoaded = 0;
var apiConfig = _this_1.http.getEndPoint(param);
_this_1.http.sendRequest({
endPoint: param.endPoint,
namespace: param.namespace,
options: param.options,
downloadProgress: function (event) {
var curLoaded = event.total > 0 ? (event.loaded / event.total) * 100 : 100;
loaded += curLoaded - myLoaded;
myLoaded = curLoaded;
options === null || options === void 0 ? void 0 : options.onDownloadProgress({
loaded: loaded,
total: allPercent
});
},
success: function (resp, respJson) {
var _a, _b, _c, _d;
var endPoint = respJson.endPoint;
if (_this_1.isEmpty(endPoint.options.reduxActionType)) {
console.error("保存请求数据:失败未设置reduxActionType", endPoint);
}
else {
if (typeof ((_b = (_a = _this_1.target) === null || _a === void 0 ? void 0 : _a.props) === null || _b === void 0 ? void 0 : _b.updateApiData) === "function") {
(_d = (_c = _this_1.target) === null || _c === void 0 ? void 0 : _c.props) === null || _d === void 0 ? void 0 : _d.updateApiData(endPoint.options.reduxActionType, resp);
}
else {
console.error("RouterService错误的调用");
}
}
}
}).then(function (resp) {
var _a;
var dispatchAction = _this_1.dispatch;
typeof dispatchAction === "function" && dispatchAction({
type: (_a = apiConfig === null || apiConfig === void 0 ? void 0 : apiConfig.options) === null || _a === void 0 ? void 0 : _a.reduxActionType,
data: resp
});
_resolve(resp);
}).catch(function (error) {
_reject(error);
});
});
}).then(function (result) {
options === null || options === void 0 ? void 0 : options.onDownloadProgress({
loaded: allPercent,
total: allPercent
});
resolve(result);
}).catch(function (error) {
options === null || options === void 0 ? void 0 : options.onDownloadProgress({
loaded: allPercent,
total: allPercent
}, options.option);
reject(error);
});
});
};
RouterService.prototype.dispose = function () {
};
RouterService.prototype.handleOnHashChange = function () {
var _this_1 = this;
var myState = globalUtil_1.getGlobalState("euiRouter");
var pushState = history.pushState;
var onHashChangedHandler = function () {
var euiRouterObj = globalUtil_1.getGlobalState("euiRouter");
var listener = euiRouterObj.routerListener;
if (listener) {
for (var key in listener) {
listener[key] && typeof listener[key].fn === "function" && listener[key].fn.apply(listener[key]._this, arguments);
}
}
};
history.pushState = function (data, title, url) {
_this_1.onHashChanged({
newURL: url,
oldURL: location.href,
param: data
});
return pushState.apply(history, [data, title, url]);
};
if ("onhashchange" in window) {
window.onhashchange = onHashChangedHandler;
}
else {
console.error("Your browser not support onHashChanged");
}
if (!this.isFunction(myState.onLocationChanged)) {
this.defineReadOnlyProperty(myState, "onLocationChanged", onHashChangedHandler);
}
if (!myState.routerListener || !myState.routerListener[this.hashChangeID]) {
if (!myState.routerListener) {
myState.routerListener = {};
}
myState.routerListener[this.hashChangeID] = {
_this: this,
fn: this.onHashChanged.bind(this)
};
}
};
RouterService.prototype.calcAllRequestProgress = function (curLoaded, curTotal, allStatus, id) {
var curPercent = parseFloat((curLoaded / curTotal).toFixed(4));
var progress = 0;
allStatus[id] = parseInt(Math.ceil(curPercent * 100).toFixed(0), 10);
for (var key in allStatus) {
progress += allStatus[key];
}
return progress;
};
RouterService.prototype.getQueryDataFromUrl = function (url) {
var queryIndex = url.indexOf("?");
var result = {};
if (queryIndex >= 0) {
var queryStr = url.substr(queryIndex + 1);
var queryArr = queryStr.split("&");
for (var _i = 0, queryArr_1 = queryArr; _i < queryArr_1.length; _i++) {
var tmpQuery = queryArr_1[_i];
var tmpMatch = tmpQuery.match(/([a-z0-9%\-]*)\=([a-z0-9%\s\-\+_]*)/i);
if (tmpMatch) {
result[tmpMatch[1]] = tmpMatch[2];
}
}
}
return result;
};
RouterService.prototype.getRoutePathValue = function (urlStr) {
if (!this.isEmpty(urlStr)) {
if (this.hashRouter) {
var lIndex = !this.isEmpty(urlStr) ? urlStr.indexOf("#") : -1;
if (lIndex >= 0) {
var result = lIndex >= 0 ? urlStr.substr(lIndex + 1) : urlStr;
var qIndex = result.indexOf("?");
result = qIndex > 0 ? result.substr(0, qIndex) : result;
return result;
}
else {
return "";
}
}
else {
var qIndex = urlStr.indexOf("?");
var url = qIndex >= 0 ? urlStr.substr(0, qIndex) : urlStr;
url = url.replace(/(http|https)\:\/\//i, "");
var imIndex = url.indexOf("/");
return imIndex > 0 ? url.substr(0, imIndex) : url;
}
}
else {
return "";
}
};
RouterService.className = "RouterService";
return RouterService;
}(elmer_common_1.Common));
exports.RouterService = RouterService;