@shopify/polaris
Version:
Shopify’s admin product component library
94 lines (83 loc) • 3.29 kB
JavaScript
import React, { Component } from 'react';
import 'focus-visible/dist/focus-visible';
import './AppProvider.scss.js';
import { StickyManager } from '../../utilities/sticky-manager/sticky-manager.js';
import { ScrollLockManager } from '../../utilities/scroll-lock-manager/scroll-lock-manager.js';
import { UniqueIdFactory, globalIdGeneratorFactory } from '../../utilities/unique-id/unique-id-factory.js';
import { I18n } from '../../utilities/i18n/I18n.js';
import { FeaturesContext } from '../../utilities/features/context.js';
import { I18nContext } from '../../utilities/i18n/context.js';
import { ScrollLockManagerContext } from '../../utilities/scroll-lock-manager/context.js';
import { StickyManagerContext } from '../../utilities/sticky-manager/context.js';
import { UniqueIdFactoryContext } from '../../utilities/unique-id/context.js';
import { LinkContext } from '../../utilities/link/context.js';
import { ThemeProvider } from '../ThemeProvider/ThemeProvider.js';
import { MediaQueryProvider } from '../MediaQueryProvider/MediaQueryProvider.js';
import { PortalsManager } from '../PortalsManager/PortalsManager.js';
import { FocusManager } from '../FocusManager/FocusManager.js';
class AppProvider extends Component {
constructor(props) {
super(props);
this.stickyManager = void 0;
this.scrollLockManager = void 0;
this.uniqueIdFactory = void 0;
this.stickyManager = new StickyManager();
this.scrollLockManager = new ScrollLockManager();
this.uniqueIdFactory = new UniqueIdFactory(globalIdGeneratorFactory);
const {
i18n,
linkComponent
} = this.props; // eslint-disable-next-line react/state-in-constructor
this.state = {
link: linkComponent,
intl: new I18n(i18n)
};
}
componentDidMount() {
if (document != null) {
this.stickyManager.setContainer(document);
}
}
componentDidUpdate({
i18n: prevI18n,
linkComponent: prevLinkComponent
}) {
const {
i18n,
linkComponent
} = this.props;
if (i18n === prevI18n && linkComponent === prevLinkComponent) {
return;
} // eslint-disable-next-line react/no-did-update-set-state
this.setState({
link: linkComponent,
intl: new I18n(i18n)
});
}
render() {
const {
theme = {},
children
} = this.props;
const {
intl,
link
} = this.state;
return /*#__PURE__*/React.createElement(FeaturesContext.Provider, {
value: this.props.features || {}
}, /*#__PURE__*/React.createElement(I18nContext.Provider, {
value: intl
}, /*#__PURE__*/React.createElement(ScrollLockManagerContext.Provider, {
value: this.scrollLockManager
}, /*#__PURE__*/React.createElement(StickyManagerContext.Provider, {
value: this.stickyManager
}, /*#__PURE__*/React.createElement(UniqueIdFactoryContext.Provider, {
value: this.uniqueIdFactory
}, /*#__PURE__*/React.createElement(LinkContext.Provider, {
value: link
}, /*#__PURE__*/React.createElement(ThemeProvider, {
theme: theme
}, /*#__PURE__*/React.createElement(MediaQueryProvider, null, /*#__PURE__*/React.createElement(PortalsManager, null, /*#__PURE__*/React.createElement(FocusManager, null, children))))))))));
}
}
export { AppProvider };