@ucam/design-system
Version:
University of Cambridge Design System
36 lines (30 loc) • 4.32 kB
JavaScript
;
var React = require('react');
var useHydrated = require('../useHydrated/useHydrated.js');
var core = require('@material-ui/core');
var PropTypes = require('prop-types');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
/**
* A Component that tells children when the react hydration run has finished.
* This is required so that the hydration run matches the SSR.
* Children can retrieve the hydration status using the useHydrated hook.
* It is generally not required to use this component directly as it is included by `<ThemeProvider />`
*/
const HydrationChecker = ({ children }) => {
// undefined if this is the top level
const parentHydrated = useHydrated.useHydrated({ ignoreWarnings: true });
const [isSomewhatHydrated, setIsSomewhatHydrated] = React.useState(false);
core.unstable_useEnhancedEffect(() => {
setIsSomewhatHydrated(true);
}, []);
// hydration has finished when the top level is hydrated
const isHydrated = parentHydrated === undefined ? isSomewhatHydrated : parentHydrated;
return React__default['default'].createElement(useHydrated.HydrationCheckerContext.Provider, { value: isHydrated }, children);
};
HydrationChecker.propTypes = {
children: PropTypes__default['default'].node
};
module.exports = HydrationChecker;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHlkcmF0aW9uQ2hlY2tlci5qcyIsInNvdXJjZXMiOlsiL0B1Y2FtL2Rlc2lnbi1zeXN0ZW0vc3JjL0h5ZHJhdGlvbkNoZWNrZXIvSHlkcmF0aW9uQ2hlY2tlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IEZDLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VIeWRyYXRlZCBmcm9tICcuLi91c2VIeWRyYXRlZCc7XG5pbXBvcnQgeyBIeWRyYXRpb25DaGVja2VyQ29udGV4dCB9IGZyb20gJy4uL3VzZUh5ZHJhdGVkL3VzZUh5ZHJhdGVkJztcbmltcG9ydCB7IHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBBIENvbXBvbmVudCB0aGF0IHRlbGxzIGNoaWxkcmVuIHdoZW4gdGhlIHJlYWN0IGh5ZHJhdGlvbiBydW4gaGFzIGZpbmlzaGVkLlxuICogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBoeWRyYXRpb24gcnVuIG1hdGNoZXMgdGhlIFNTUi5cbiAqIENoaWxkcmVuIGNhbiByZXRyaWV2ZSB0aGUgaHlkcmF0aW9uIHN0YXR1cyB1c2luZyB0aGUgdXNlSHlkcmF0ZWQgaG9vay5cbiAqIEl0IGlzIGdlbmVyYWxseSBub3QgcmVxdWlyZWQgdG8gdXNlIHRoaXMgY29tcG9uZW50IGRpcmVjdGx5IGFzIGl0IGlzIGluY2x1ZGVkIGJ5IGA8VGhlbWVQcm92aWRlciAvPmBcbiAqL1xuY29uc3QgSHlkcmF0aW9uQ2hlY2tlcjogRkMgPSAoeyBjaGlsZHJlbiB9KSA9PiB7XG4gIC8vIHVuZGVmaW5lZCBpZiB0aGlzIGlzIHRoZSB0b3AgbGV2ZWxcbiAgY29uc3QgcGFyZW50SHlkcmF0ZWQgPSB1c2VIeWRyYXRlZCh7IGlnbm9yZVdhcm5pbmdzOiB0cnVlIH0pO1xuXG4gIGNvbnN0IFtpc1NvbWV3aGF0SHlkcmF0ZWQsIHNldElzU29tZXdoYXRIeWRyYXRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc1NvbWV3aGF0SHlkcmF0ZWQodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICAvLyBoeWRyYXRpb24gaGFzIGZpbmlzaGVkIHdoZW4gdGhlIHRvcCBsZXZlbCBpcyBoeWRyYXRlZFxuICBjb25zdCBpc0h5ZHJhdGVkID0gcGFyZW50SHlkcmF0ZWQgPT09IHVuZGVmaW5lZCA/IGlzU29tZXdoYXRIeWRyYXRlZCA6IHBhcmVudEh5ZHJhdGVkO1xuXG4gIHJldHVybiA8SHlkcmF0aW9uQ2hlY2tlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2lzSHlkcmF0ZWR9PntjaGlsZHJlbn08L0h5ZHJhdGlvbkNoZWNrZXJDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbkh5ZHJhdGlvbkNoZWNrZXIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEh5ZHJhdGlvbkNoZWNrZXI7XG4iXSwibmFtZXMiOlsidXNlSHlkcmF0ZWQiLCJ1c2VTdGF0ZSIsInVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0IiwiUmVhY3QiLCJIeWRyYXRpb25DaGVja2VyQ29udGV4dCIsIlByb3BUeXBlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBTUE7Ozs7OztNQU1NLGdCQUFnQixHQUFPLENBQUMsRUFBRSxRQUFRLEVBQUU7O0lBRXhDLE1BQU0sY0FBYyxHQUFHQSx1QkFBVyxDQUFDLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFN0QsTUFBTSxDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLEdBQUdDLGNBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRUMsK0JBQTBCLENBQUM7UUFDekIscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDN0IsRUFBRSxFQUFFLENBQUMsQ0FBQzs7SUFHUCxNQUFNLFVBQVUsR0FBRyxjQUFjLEtBQUssU0FBUyxHQUFHLGtCQUFrQixHQUFHLGNBQWMsQ0FBQztJQUV0RixPQUFPQyx3Q0FBQ0MsbUNBQXVCLENBQUMsUUFBUSxJQUFDLEtBQUssRUFBRSxVQUFVLElBQUcsUUFBUSxDQUFvQyxDQUFDO0FBQzVHLEVBQUU7QUFFRixnQkFBZ0IsQ0FBQyxTQUFTLEdBQUc7SUFDM0IsUUFBUSxFQUFFQyw2QkFBUyxDQUFDLElBQUk7Q0FDekI7Ozs7In0=