UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

59 lines (58 loc) 1.65 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); function _export(target, all) { for (var name in all) Object.defineProperty(target, name, { enumerable: true, get: all[name], }); } _export(exports, { HydrationProvider: function () { return HydrationProvider; }, useHydration: function () { return useHydration; }, }); const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard'); const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react')); const _index = require('../hooks/index.js'); const HydrationContext = _react.createContext(false); const noopSubscribe = () => () => {}; const isServer = 'undefined' == typeof window; const useHydration = () => { let hydrating = (0, _index.useSyncExternalStore)( noopSubscribe, () => false, () => !isServer, ); let hydrated = _react.useContext(HydrationContext); let hydratedFallback = (0, _index.useIsClient)(); if (hydrated || hydratedFallback) return 'hydrated'; if (hydrating) return 'hydrating'; }; const HydrationProvider = ({ children }) => { let [isHydrated, setIsHydrated] = _react.useState( _react.useContext(HydrationContext), ); let onHydrate = _react.useCallback(() => setIsHydrated(true), []); return _react.createElement( HydrationContext.Provider, { value: isHydrated, }, isHydrated ? null : _react.createElement(HydrationCheck, { onHydrate: onHydrate, }), children, ); }; const HydrationCheck = ({ onHydrate }) => { _react.useEffect(() => void onHydrate(), [onHydrate]); return null; };