@krmao/react-basic
Version:
### features
107 lines (106 loc) • 5.04 kB
JavaScript
// 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;
;