49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
class UrlParamsBuilder {
|
|
constructor(basePath) {
|
|
this.basePath = basePath;
|
|
this.params = new URLSearchParams();
|
|
this.hasAnyFilter = false;
|
|
}
|
|
|
|
addParam(key, value) {
|
|
if (value !== undefined && value !== null && value !== "" && value !== "0") {
|
|
this.params.set(key, value);
|
|
this.hasAnyFilter = true;
|
|
} else {
|
|
this.params.delete(key);
|
|
}
|
|
return this;
|
|
}
|
|
|
|
// اضافهکردن پارامتر از DOM (با val یا data-value-normal)
|
|
addParamFromDOM(key, selector, { dataAttr = "data-value-normal", fallbackToVal = true } = {}) {
|
|
const $el = $(selector);
|
|
let value = $el.attr(dataAttr);
|
|
if (!value && fallbackToVal) value = $el.val();
|
|
|
|
return this.addParam(key, value);
|
|
}
|
|
|
|
buildUrl() {
|
|
return this.hasAnyFilter
|
|
? `${window.location.origin}${this.basePath}?${this.params.toString()}`
|
|
: `${window.location.origin}${this.basePath}`;
|
|
}
|
|
|
|
pushState() {
|
|
const url = this.buildUrl();
|
|
window.history.pushState({}, '', url);
|
|
return url;
|
|
}
|
|
|
|
static readParams(keys = []) {
|
|
const urlParams = new URLSearchParams(window.location.search);
|
|
const result = {};
|
|
keys.forEach(key => {
|
|
result[key] = urlParams.get(key) || "";
|
|
});
|
|
return result;
|
|
}
|
|
}
|
|
|
|
window.UrlParamsBuilder = UrlParamsBuilder; |