UNPKG

@teambit/workspace

Version:
102 lines (100 loc) 3.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useListParamWithDefault = useListParamWithDefault; exports.useQueryParamWithDefault = useQueryParamWithDefault; function _react() { const data = require("react"); _react = function () { return data; }; return data; } function _reactRouterDom() { const data = require("react-router-dom"); _reactRouterDom = function () { return data; }; return data; } const STORAGE_KEY_PREFIX = 'workspace-overview:'; function useQueryParamWithDefault(paramName, fallback, options = {}) { const { persist = true } = options; const [searchParams, setSearchParams] = (0, _reactRouterDom().useSearchParams)(); const storageKey = STORAGE_KEY_PREFIX + paramName; const value = (0, _react().useMemo)(() => { const urlValue = searchParams.get(paramName); if (urlValue) return urlValue; if (persist) { const stored = safeGetItem(storageKey); if (stored) return stored; } return fallback; }, [searchParams, paramName, storageKey, fallback, persist]); const setValue = (0, _react().useCallback)(newValue => { const newParams = new URLSearchParams(searchParams); if (newValue === null) { newParams.delete(paramName); if (persist) safeRemoveItem(storageKey); } else { newParams.set(paramName, newValue); if (persist) safeSetItem(storageKey, newValue); } setSearchParams(newParams); }, [searchParams, setSearchParams, paramName, storageKey, persist]); return [value, setValue]; } function useListParamWithDefault(paramName, options = {}) { const { persist = false } = options; const [searchParams, setSearchParams] = (0, _reactRouterDom().useSearchParams)(); const storageKey = STORAGE_KEY_PREFIX + paramName; const values = (0, _react().useMemo)(() => { const urlValue = searchParams.get(paramName); if (urlValue) return urlValue.split(',').filter(Boolean); if (persist) { const stored = safeGetItem(storageKey); if (stored) return stored.split(',').filter(Boolean); } return []; }, [searchParams, paramName, storageKey, persist]); const setValues = (0, _react().useCallback)(newValues => { const newParams = new URLSearchParams(searchParams); const joined = newValues.filter(Boolean).join(','); if (joined) { newParams.set(paramName, joined); if (persist) safeSetItem(storageKey, joined); } else { newParams.delete(paramName); if (persist) safeRemoveItem(storageKey); } setSearchParams(newParams); }, [searchParams, setSearchParams, paramName, storageKey, persist]); return [values, setValues]; } function safeGetItem(key) { try { return localStorage.getItem(key); } catch { return null; } } function safeSetItem(key, value) { try { localStorage.setItem(key, value); } catch { // ignore storage errors } } function safeRemoveItem(key) { try { localStorage.removeItem(key); } catch { // ignore storage errors } } //# sourceMappingURL=use-query-param-with-default.js.map