gatsby-plugin-theme-switcher
Version:
React theme switcher with hooks and preventing the initial flash
39 lines (30 loc) • 1.02 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = exports.ThemeProvider = void 0;
var _react = _interopRequireDefault(require("react"));
var _useLocalStorage = _interopRequireDefault(require("./use-local-storage"));
/* eslint-disable react/prop-types */
const ThemeContext = /*#__PURE__*/_react.default.createContext();
const ThemeProvider = ({
themeStorageKey = "theme",
children
}) => {
const [theme, setTheme] = (0, _useLocalStorage.default)(themeStorageKey, null);
const switchTheme = newTheme => {
// eslint-disable-next-line no-undef
const root = document.body;
root.classList.remove(theme);
root.classList.add(newTheme);
setTheme(newTheme);
};
return /*#__PURE__*/_react.default.createElement(ThemeContext.Provider, {
value: {
theme,
switchTheme
}
}, children);
};
exports.ThemeProvider = ThemeProvider;
var _default = ThemeContext;
exports.default = _default;