UNPKG

@krmao/react-basic

Version:
107 lines (106 loc) 5.04 kB
"use strict"; // noinspection JSUnusedGlobalSymbols Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); /** * 所有页面 URL 统一放在这里定义 */ var basic_value_util_1 = (0, tslib_1.__importDefault)(require("./basic-value-util")); var BasicPageUrlUtil = /** @class */ (function () { function BasicPageUrlUtil() { } /** * 查询 url 参数 * * @param queryName 待查的 url 参数名称 * @param url pageUrl or null * @return string or null * * @example PageUrl.getQueryString("searchType", props.asPath) */ BasicPageUrlUtil.getQueryString = function (queryName, url) { var matcher = new RegExp("(^|&)" + queryName + "=([^&]*)(&|$)"); var href = url || window.location.href; var array = href.substr(href.indexOf("?") + 1).match(matcher); if (array != null) { return decodeURIComponent(array[2]).split("#")[0]; } return null; }; /** * 修改当前页面 url 的参数, 如果目标 value 无效则不再添加到 url 中 * 不会刷新当前页面, 仅仅是改变 url * * @param paramKey 必须要有效非空 * @param paramValue 为空或者无效或者空字符串会被删除, 有效非空值会替换/追加 */ BasicPageUrlUtil.changeHrefParams = function (paramKey, paramValue) { console.log("changeHrefParams start", window.location.href); if (basic_value_util_1.default.isStringBlank(paramKey)) return; var changedUrlObject = BasicPageUrlUtil.getCurrentParamChangedUrlObject(paramKey, paramValue); if (!changedUrlObject) return; var paramsString = changedUrlObject.paramsString; // 使用 history 不能使用 this.goto 方法, 只能使用 window.location.href, 这样返回时 100%刷新 // https://stackoverflow.com/a/46806608/4348530 window.history.replaceState(null, null, basic_value_util_1.default.isStringBlank(paramsString) ? window.location.pathname : "?".concat(paramsString)); // 使用 router.replace, 可以使用 this.goto 方法, 返回时概率刷新, 线上环境不生效, 会多一个历史记录且刷新 /*let relativePathWithVd = Constants.CONFIG_VD + hrefArray[0].split(Constants.CONFIG_VD)[1]; router.replace(relativePathWithVd, `${relativePathWithVd}?${paramsString}`, { shallow: true, scroll: false });*/ console.log("changeHrefParams end", window.location.href); }; /** * remove key and value if value is null or blank * @param paramKey * @param paramValue * @return {undefined|{pathNameWithParamsString: (string|string), paramsString: string}} */ BasicPageUrlUtil.getCurrentParamChangedUrlObject = function (paramKey, paramValue) { console.log("getCurrentParamChangedUrl start", window.location.href); if (basic_value_util_1.default.isStringBlank(paramKey)) return undefined; var encodedParamValue = basic_value_util_1.default.isStringNotBlank(paramValue) ? encodeURIComponent(paramValue) : null; try { var hrefArray = window.location.href.split("?"); var paramsString = void 0; if (hrefArray.length === 1 || !hrefArray[1]) { if (!basic_value_util_1.default.isStringBlank(encodedParamValue)) paramsString = paramKey + "=" + encodedParamValue; } else { var oldParamsArray = hrefArray[1].split("&"); var newParamsArray_1 = []; oldParamsArray.forEach(function (param) { var itemParamArray = basic_value_util_1.default.isStringNotBlank(param) ? param.split("=") : []; if (itemParamArray.length >= 2 && basic_value_util_1.default.isStringNotBlank(itemParamArray[0]) && itemParamArray[0] !== paramKey && basic_value_util_1.default.isStringNotBlank(itemParamArray[1])) { newParamsArray_1.push(param); } }); if (!basic_value_util_1.default.isStringBlank(encodedParamValue)) newParamsArray_1.push(paramKey + "=" + encodedParamValue); paramsString = newParamsArray_1.join("&"); } var finalUrl = basic_value_util_1.default.isStringNotBlank(paramsString) ? window.location.pathname + "?".concat(paramsString) : window.location.pathname; console.log("getCurrentParamChangedUrl end", finalUrl); return { pathNameWithParamsString: finalUrl, paramsString: paramsString }; } catch (e) { console.log("getCurrentParamChangedUrl error", e); return undefined; } }; return BasicPageUrlUtil; }()); exports.default = BasicPageUrlUtil;