UNPKG

elmer-ui-core

Version:

web app framework

370 lines (369 loc) 16.3 kB
"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;