@teambit/workspace
Version:
102 lines (100 loc) • 3.1 kB
JavaScript
;
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