tanstack-table-search-params
Version:
React Hook for syncing TanStack Table state with URL search params
206 lines (197 loc) • 7.22 kB
JavaScript
// src/encoder-decoder/noneStringForCustomDefaultValue.ts
var noneStringForCustomDefaultValue = "none";
// src/encoder-decoder/columnFilters.ts
var defaultDefaultColumnFilters = [];
var encodeColumnFilters = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnFilters;
if (JSON.stringify(value) === JSON.stringify(defaultValue)) {
return void 0;
}
if (value.length === 0) {
return noneStringForCustomDefaultValue;
}
return value.map(
({ id, value: value2 }) => `${id}.${encodeURIComponent(JSON.stringify(value2)).replaceAll(".", "%2E")}`
).join(",");
};
var decodeColumnFilters = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnFilters;
if (typeof value !== "string") return defaultValue;
if (value === "") return defaultValue;
if (value === noneStringForCustomDefaultValue) {
return [];
}
try {
return value.split(",").map((item) => {
const [id, stringValue] = item.split(".");
if (!id) throw new Error("Invalid columnFilters");
if (stringValue === void 0) throw new Error("Invalid columnFilters");
return {
id,
value: stringValue === "undefined" ? void 0 : JSON.parse(decodeURIComponent(stringValue))
};
}).filter((x) => x !== null);
} catch {
return defaultValue;
}
};
// src/encoder-decoder/columnOrder.ts
var defaultDefaultColumnOrder = [];
var encodeColumnOrder = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnOrder;
if (JSON.stringify(value) === JSON.stringify(defaultValue)) {
return void 0;
}
if (value.length === 0) {
return noneStringForCustomDefaultValue;
}
return value.map((v) => v.replaceAll(",", encodeURIComponent(","))).join(",");
};
var decodeColumnOrder = (queryValue, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnOrder;
if (typeof queryValue !== "string") return defaultValue;
if (queryValue === "") return defaultValue;
if (queryValue === noneStringForCustomDefaultValue) {
return [];
}
return queryValue.split(",").map((v) => v.replaceAll(encodeURIComponent(","), ","));
};
// src/encoder-decoder/columnVisibility.ts
var defaultDefaultColumnVisibility = {};
var extractFalseProperties = (value) => Object.fromEntries(Object.entries(value).filter(([, v]) => !v));
var encodeColumnVisibility = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnVisibility;
const extractedValue = extractFalseProperties(value);
if (JSON.stringify(extractedValue) === JSON.stringify(extractFalseProperties(defaultValue))) {
return void 0;
}
if (Object.keys(extractedValue).length === 0) {
return noneStringForCustomDefaultValue;
}
return Object.entries(extractedValue).map(([id]) => id).join(",");
};
var decodeColumnVisibility = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultColumnVisibility;
if (typeof value !== "string") return defaultValue;
if (value === "") return defaultValue;
if (value === noneStringForCustomDefaultValue) {
return {};
}
return Object.fromEntries(value.split(",").map((id) => [id, false]));
};
// src/encoder-decoder/globalFilter.ts
var encodedEmptyStringForGlobalFilterCustomDefaultValue = encodeURIComponent(JSON.stringify(""));
var defaultDefaultGlobalFilter = "";
var encodeGlobalFilter = (value = "", options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultGlobalFilter;
if (value === defaultValue) {
return void 0;
}
if (typeof value !== "string") {
return defaultValue;
}
if (value === "") {
return encodedEmptyStringForGlobalFilterCustomDefaultValue;
}
return value;
};
var decodeGlobalFilter = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultGlobalFilter;
if (typeof value !== "string") {
return defaultValue;
}
if (value === encodedEmptyStringForGlobalFilterCustomDefaultValue) {
return defaultValue === "" ? encodedEmptyStringForGlobalFilterCustomDefaultValue : "";
}
return value;
};
// src/encoder-decoder/pagination.ts
var defaultDefaultPagination = {
pageIndex: 0,
pageSize: 10
};
var encodePagination = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultPagination;
return {
pageIndex: value.pageIndex === defaultValue?.pageIndex ? void 0 : (value.pageIndex + 1).toString(),
pageSize: value.pageSize === defaultValue?.pageSize ? void 0 : value.pageSize.toString()
};
};
var decodePagination = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultPagination;
const pageIndex = Number(value.pageIndex);
const pageSize = Number(value.pageSize);
return {
pageIndex: value.pageIndex === "" || Number.isNaN(pageIndex) || pageIndex < 1 ? defaultValue?.pageIndex : pageIndex - 1,
pageSize: value.pageSize === "" || Number.isNaN(pageSize) ? defaultValue?.pageSize : pageSize
};
};
// src/encoder-decoder/rowSelection.ts
var defaultDefaultRowSelection = {};
var encodeRowSelection = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultRowSelection;
if (JSON.stringify(value) === JSON.stringify(defaultValue)) {
return void 0;
}
if (Object.values(value).every((v) => v === false)) {
return noneStringForCustomDefaultValue;
}
return Object.entries(value).filter(([, v]) => v).map(([id]) => id).join(",");
};
var decodeRowSelection = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultRowSelection;
if (typeof value !== "string") return defaultValue;
if (value === "") return defaultValue;
if (value === noneStringForCustomDefaultValue) {
return {};
}
return Object.fromEntries(value.split(",").map((id) => [id, true]));
};
// src/encoder-decoder/sorting.ts
var defaultDefaultSorting = [];
var encodeSorting = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultSorting;
if (JSON.stringify(value) === JSON.stringify(defaultValue)) {
return void 0;
}
if (value.length === 0) {
return noneStringForCustomDefaultValue;
}
return value.map(({ id, desc }) => `${id}.${desc ? "desc" : "asc"}`).join(",");
};
var decodeSorting = (value, options) => {
const defaultValue = options?.defaultValue ?? defaultDefaultSorting;
if (typeof value !== "string") return defaultValue;
if (value === "") return defaultValue;
if (value === noneStringForCustomDefaultValue) {
return [];
}
try {
return value.split(",").map((sort) => {
const [id, order] = sort.split(".");
if (!id) throw new Error("Invalid sorting");
if (order !== "asc" && order !== "desc") {
throw new Error("Invalid sorting");
}
return { id, desc: order === "desc" };
});
} catch {
return defaultValue;
}
};
export {
encodeColumnFilters,
decodeColumnFilters,
encodeColumnOrder,
decodeColumnOrder,
encodeColumnVisibility,
decodeColumnVisibility,
encodeGlobalFilter,
decodeGlobalFilter,
encodePagination,
decodePagination,
encodeRowSelection,
decodeRowSelection,
encodeSorting,
decodeSorting
};