UNPKG

tanstack-table-search-params

Version:

React Hook for syncing TanStack Table state with URL search params

206 lines (197 loc) 7.22 kB
// 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 };