@shopify/react-html
Version:
A component to render your React app with no static HTML
76 lines (71 loc) • 2.54 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var React = require('react');
var reactEffect = require('@shopify/react-effect');
var context = require('./context.js');
function useDomEffect(perform, inputs = []) {
const manager = React.useContext(context.HtmlContext);
const effect = () => perform(manager);
reactEffect.useServerEffect(effect, manager.effect);
// eslint-disable-next-line react-hooks/exhaustive-deps
React.useEffect(effect, [manager, ...inputs]);
}
function useTitle(title) {
useDomEffect(manager => manager.addTitle(title), [title]);
}
function useLink(link) {
useDomEffect(manager => manager.addLink(link), [JSON.stringify(link)]);
}
function useInlineStyle(inlineStyle) {
useDomEffect(manager => manager.addInlineStyle(inlineStyle), [JSON.stringify(inlineStyle)]);
}
function useMeta(meta) {
useDomEffect(manager => manager.addMeta(meta), [JSON.stringify(meta)]);
}
function usePreconnect(source) {
useDomEffect(manager => manager.addLink({
rel: 'preconnect',
href: source
}), [source]);
}
function useFavicon(source) {
useDomEffect(manager => manager.addLink({
rel: 'shortcut icon',
type: 'image/x-icon',
href: source
}), [source]);
}
function useLocale(locale) {
useDomEffect(manager => manager.addHtmlAttributes({
lang: locale
}), [locale]);
}
function useHtmlAttributes(htmlAttributes) {
useDomEffect(manager => manager.addHtmlAttributes(htmlAttributes), [JSON.stringify(htmlAttributes)]);
}
function useBodyAttributes(bodyAttributes) {
useDomEffect(manager => manager.addBodyAttributes(bodyAttributes), [JSON.stringify(bodyAttributes)]);
}
function useClientDomEffect(perform, inputs = []) {
const manager = React.useContext(context.HtmlContext);
React.useEffect(() => {
perform(manager);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [manager, perform, ...inputs]);
}
function useServerDomEffect(perform) {
const manager = React.useContext(context.HtmlContext);
reactEffect.useServerEffect(() => perform(manager), manager.effect);
}
exports.useBodyAttributes = useBodyAttributes;
exports.useClientDomEffect = useClientDomEffect;
exports.useDomEffect = useDomEffect;
exports.useFavicon = useFavicon;
exports.useHtmlAttributes = useHtmlAttributes;
exports.useInlineStyle = useInlineStyle;
exports.useLink = useLink;
exports.useLocale = useLocale;
exports.useMeta = useMeta;
exports.usePreconnect = usePreconnect;
exports.useServerDomEffect = useServerDomEffect;
exports.useTitle = useTitle;