UNPKG

@teambit/workspace

Version:
99 lines (97 loc) 3.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ThemeFromUrlSync = ThemeFromUrlSync; 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; } function _baseReactThemes() { const data = require("@teambit/base-react.themes.theme-switcher"); _baseReactThemes = function () { return data; }; return data; } const STORAGE_KEY = 'workspace-theme'; const CLEAR_VALUES = new Set(['default', 'none', '']); let lastUrlWrite = null; let lastSeenUrlTheme = undefined; let lastAppliedFromUrl = null; function ThemeFromUrlSync() { const location = (0, _reactRouterDom().useLocation)(); const [, setSearchParams] = (0, _reactRouterDom().useSearchParams)(); const theme = (0, _baseReactThemes().useThemePicker)(); const urlTheme = (0, _react().useMemo)(() => { const params = new URLSearchParams(location.search); return params.get('theme') ?? undefined; }, [location.search]); const currentName = theme?.current?.themeName; (0, _react().useEffect)(() => { if (!theme) return; const params = new URLSearchParams(location.search); const hasThemeParam = params.has('theme'); const storedTheme = sessionStorage.getItem(STORAGE_KEY) || undefined; if (lastUrlWrite && lastUrlWrite === urlTheme) { lastUrlWrite = null; lastSeenUrlTheme = urlTheme; return; } const externalUrlChange = lastSeenUrlTheme !== urlTheme; lastSeenUrlTheme = urlTheme; if (externalUrlChange && hasThemeParam && urlTheme && CLEAR_VALUES.has(urlTheme)) { sessionStorage.removeItem(STORAGE_KEY); params.delete('theme'); lastUrlWrite = null; lastAppliedFromUrl = null; setSearchParams(params, { replace: true }); return; } if (externalUrlChange && urlTheme) { sessionStorage.setItem(STORAGE_KEY, urlTheme); if (currentName !== urlTheme) { const target = theme.options.find(opt => opt.themeName === urlTheme); if (target) { lastAppliedFromUrl = urlTheme; theme.setTheme(target); } } return; } if (externalUrlChange && !hasThemeParam && storedTheme) { params.set('theme', storedTheme); lastUrlWrite = storedTheme; setSearchParams(params, { replace: true }); return; } if (currentName && urlTheme !== currentName) { if (lastAppliedFromUrl === currentName) { lastAppliedFromUrl = null; return; } sessionStorage.setItem(STORAGE_KEY, currentName); params.set('theme', currentName); lastUrlWrite = currentName; setSearchParams(params, { replace: true }); } }, [urlTheme, currentName, location.search, setSearchParams, theme]); return null; } //# sourceMappingURL=theme-from-url.js.map