UNPKG

@ucam/design-system

Version:
48 lines (42 loc) 7.44 kB
'use strict'; var React = require('react'); var core = require('@material-ui/core'); var useTheme = require('../useTheme/useTheme.js'); var useThemeRegister = require('../useThemeRegister/useThemeRegister.js'); 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 dropdown picker to select a theme. * Must be used inside a `<ThemeProvider />`. */ const ThemeChanger = (props) => { // The user might be deliberately trying to set the initial value to undefined so need to use hasOwnProperty const hasInitialValue = Object.prototype.hasOwnProperty.call(props, 'initialValue'); const [needsInitialValue, setNeedsInitialValue] = React.useState(hasInitialValue); const { requestedThemeName, setTheme } = useTheme.useTheme(); const [themes] = useThemeRegister.useThemeRegister(); const handleChange = (event) => { const selectedTheme = (event.target.value || undefined); setTheme(selectedTheme); }; core.unstable_useEnhancedEffect(() => { // We'll only run this on the first pass if (needsInitialValue) { setNeedsInitialValue(false); setTheme(props.initialValue); } }, [needsInitialValue, props.initialValue]); const themeName = requestedThemeName !== undefined && themes.has(requestedThemeName) ? requestedThemeName : ''; return (React__default['default'].createElement(core.NoSsr, null, React__default['default'].createElement(core.FormControl, null, React__default['default'].createElement(core.Select, { value: { value: themeName }, onChange: handleChange, displayEmpty: true, "aria-label": "Theme", name: "theme", defaultValue: { value: '' } }, React__default['default'].createElement(core.MenuItem, { value: "" }, "Browser Preference"), Array.from(themes.keys()).map((theme) => (React__default['default'].createElement(core.MenuItem, { value: theme, key: theme }, theme))))))); }; ThemeChanger.propTypes = { initialValue: PropTypes__default['default'].string }; module.exports = ThemeChanger; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGhlbWVDaGFuZ2VyLmpzIiwic291cmNlcyI6WyIvQHVjYW0vZGVzaWduLXN5c3RlbS9zcmMvdGhlbWUvVGhlbWVDaGFuZ2VyL1RoZW1lQ2hhbmdlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IEZDLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7XG4gIEZvcm1Db250cm9sLFxuICBNZW51SXRlbSxcbiAgTm9Tc3IsXG4gIFNlbGVjdCxcbiAgdW5zdGFibGVfdXNlRW5oYW5jZWRFZmZlY3QsXG4gIFNlbGVjdENoYW5nZUV2ZW50XG59IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVSZWdpc3RlciBmcm9tICcuLi91c2VUaGVtZVJlZ2lzdGVyJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbmludGVyZmFjZSBUaGVtZUNoYW5nZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBJZiBzZXQsIHRoZW4gdGhlIFRoZW1lQ2hhbmdlciB3aWxsIHNldCBhIHRoZW1lIHRoZSBmaXJzdCB0aW1lIGl0IHJ1bnNcbiAgICovXG4gIGluaXRpYWxWYWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGRyb3Bkb3duIHBpY2tlciB0byBzZWxlY3QgYSB0aGVtZS5cbiAqIE11c3QgYmUgdXNlZCBpbnNpZGUgYSBgPFRoZW1lUHJvdmlkZXIgLz5gLlxuICovXG5jb25zdCBUaGVtZUNoYW5nZXI6IEZDPFRoZW1lQ2hhbmdlclByb3BzPiA9IChwcm9wcykgPT4ge1xuICAvLyBUaGUgdXNlciBtaWdodCBiZSBkZWxpYmVyYXRlbHkgdHJ5aW5nIHRvIHNldCB0aGUgaW5pdGlhbCB2YWx1ZSB0byB1bmRlZmluZWQgc28gbmVlZCB0byB1c2UgaGFzT3duUHJvcGVydHlcbiAgY29uc3QgaGFzSW5pdGlhbFZhbHVlID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3BzLCAnaW5pdGlhbFZhbHVlJyk7XG4gIGNvbnN0IFtuZWVkc0luaXRpYWxWYWx1ZSwgc2V0TmVlZHNJbml0aWFsVmFsdWVdID0gdXNlU3RhdGUoaGFzSW5pdGlhbFZhbHVlKTtcblxuICBjb25zdCB7IHJlcXVlc3RlZFRoZW1lTmFtZSwgc2V0VGhlbWUgfSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IFt0aGVtZXNdID0gdXNlVGhlbWVSZWdpc3RlcigpO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudDogU2VsZWN0Q2hhbmdlRXZlbnQ8eyB2YWx1ZTogdW5rbm93biB9PikgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWUgPSAoZXZlbnQudGFyZ2V0LnZhbHVlIHx8IHVuZGVmaW5lZCkgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHNldFRoZW1lKHNlbGVjdGVkVGhlbWUpO1xuICB9O1xuXG4gIHVuc3RhYmxlX3VzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICAvLyBXZSdsbCBvbmx5IHJ1biB0aGlzIG9uIHRoZSBmaXJzdCBwYXNzXG4gICAgaWYgKG5lZWRzSW5pdGlhbFZhbHVlKSB7XG4gICAgICBzZXROZWVkc0luaXRpYWxWYWx1ZShmYWxzZSk7XG4gICAgICBzZXRUaGVtZShwcm9wcy5pbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgfSwgW25lZWRzSW5pdGlhbFZhbHVlLCBwcm9wcy5pbml0aWFsVmFsdWVdKTtcblxuICBjb25zdCB0aGVtZU5hbWUgPVxuICAgIHJlcXVlc3RlZFRoZW1lTmFtZSAhPT0gdW5kZWZpbmVkICYmIHRoZW1lcy5oYXMocmVxdWVzdGVkVGhlbWVOYW1lKSA/IHJlcXVlc3RlZFRoZW1lTmFtZSA6ICcnO1xuXG4gIHJldHVybiAoXG4gICAgPE5vU3NyPlxuICAgICAgPEZvcm1Db250cm9sPlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgdmFsdWU9e3sgdmFsdWU6IHRoZW1lTmFtZSB9fVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgZGlzcGxheUVtcHR5XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlRoZW1lXCJcbiAgICAgICAgICBuYW1lPVwidGhlbWVcIlxuICAgICAgICAgIGRlZmF1bHRWYWx1ZT17eyB2YWx1ZTogJycgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxNZW51SXRlbSB2YWx1ZT1cIlwiPkJyb3dzZXIgUHJlZmVyZW5jZTwvTWVudUl0ZW0+XG4gICAgICAgICAge0FycmF5LmZyb20odGhlbWVzLmtleXMoKSkubWFwKCh0aGVtZSkgPT4gKFxuICAgICAgICAgICAgPE1lbnVJdGVtIHZhbHVlPXt0aGVtZX0ga2V5PXt0aGVtZX0+XG4gICAgICAgICAgICAgIHt0aGVtZX1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU2VsZWN0PlxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L05vU3NyPlxuICApO1xufTtcblxuVGhlbWVDaGFuZ2VyLnByb3BUeXBlcyA9IHtcbiAgaW5pdGlhbFZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaGVtZUNoYW5nZXI7XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VUaGVtZSIsInVzZVRoZW1lUmVnaXN0ZXIiLCJ1bnN0YWJsZV91c2VFbmhhbmNlZEVmZmVjdCIsIlJlYWN0IiwiTm9Tc3IiLCJGb3JtQ29udHJvbCIsIlNlbGVjdCIsIk1lbnVJdGVtIiwiUHJvcFR5cGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBb0JBOzs7O01BSU0sWUFBWSxHQUEwQixDQUFDLEtBQUs7O0lBRWhELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFDLEdBQUdBLGNBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUU1RSxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLEdBQUdDLGlCQUFRLEVBQUUsQ0FBQztJQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUdDLGlDQUFnQixFQUFFLENBQUM7SUFFcEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUE0QztRQUNoRSxNQUFNLGFBQWEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQXVCLENBQUM7UUFDOUUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ3pCLENBQUM7SUFFRkMsK0JBQTBCLENBQUM7O1FBRXpCLElBQUksaUJBQWlCLEVBQUU7WUFDckIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM5QjtLQUNGLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUU1QyxNQUFNLFNBQVMsR0FDYixrQkFBa0IsS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUUvRixRQUNFQyx3Q0FBQ0MsVUFBSztRQUNKRCx3Q0FBQ0UsZ0JBQVc7WUFDVkYsd0NBQUNHLFdBQU0sSUFDTCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQzNCLFFBQVEsRUFBRSxZQUFZLEVBQ3RCLFlBQVksc0JBQ0QsT0FBTyxFQUNsQixJQUFJLEVBQUMsT0FBTyxFQUNaLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7Z0JBRTNCSCx3Q0FBQ0ksYUFBUSxJQUFDLEtBQUssRUFBQyxFQUFFLHlCQUE4QjtnQkFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQ25DSix3Q0FBQ0ksYUFBUSxJQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFDL0IsS0FBSyxDQUNHLENBQ1osQ0FBQyxDQUNLLENBQ0csQ0FDUixFQUNSO0FBQ0osRUFBRTtBQUVGLFlBQVksQ0FBQyxTQUFTLEdBQUc7SUFDdkIsWUFBWSxFQUFFQyw2QkFBUyxDQUFDLE1BQU07Q0FDL0I7Ozs7In0=