UNPKG

@dr.pogodin/react-helmet

Version:

Thread-safe Helmet for React 19+ and friends

69 lines (68 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Context = void 0; var _react = require("react"); var _server = require("./server"); var _constants = require("./constants"); var _utils = require("./utils"); var _client = require("./client"); var _jsxRuntime = require("react/jsx-runtime"); const Context = exports.Context = /*#__PURE__*/(0, _react.createContext)(undefined); const HelmetProvider = _ref => { let { children, context } = _ref; const { current: heap } = (0, _react.useRef)({ firstRender: true, helmets: [], state: undefined }); const contextValueRef = (0, _react.useRef)(null); contextValueRef.current ??= { clientApply() { if (_constants.IS_DOM_ENVIRONMENT && !heap.state) { heap.state = (0, _utils.calcAggregatedState)(heap.helmets); if (heap.state.defer) { heap.nextAnimFrameId ??= requestAnimationFrame(() => { heap.state ??= (0, _utils.calcAggregatedState)(heap.helmets); (0, _client.commitTagChanges)(heap.state, heap.firstRender); heap.firstRender = false; delete heap.nextAnimFrameId; }); } else { if (heap.nextAnimFrameId !== undefined) { cancelAnimationFrame(heap.nextAnimFrameId); delete heap.nextAnimFrameId; } (0, _client.commitTagChanges)(heap.state, heap.firstRender); heap.firstRender = false; } } }, update(id, props) { const idx = heap.helmets.findIndex(item => item[0] === id); if (idx >= 0) { delete heap.state; if (props) heap.helmets[idx][1] = props;else heap.helmets.splice(idx, 1); } else if (props) { delete heap.state; heap.helmets.push([id, props]); } } }; if (context && (!context.helmet || context.helmet !== heap.serverState)) { heap.serverState ??= (0, _server.newServerState)(heap); context.helmet = heap.serverState; } return /*#__PURE__*/(0, _jsxRuntime.jsx)(Context, { value: contextValueRef.current, children: children }); }; var _default = exports.default = HelmetProvider; //# sourceMappingURL=Provider.js.map