UNPKG

@shopify/polaris

Version:

Shopify’s product component library

106 lines (100 loc) 3.87 kB
import React$1 from 'react'; import { useTheme } from '../../utilities/theme/hooks.js'; import { useFeatures } from '../../utilities/features/hooks.js'; import { useI18n } from '../../utilities/i18n/hooks.js'; import { classNames } from '../../utilities/css.js'; import { Image as Image$1 } from '../Image/Image.js'; import { MobileHamburgerMajor } from '@shopify/polaris-icons'; import { Icon as Icon$1 } from '../Icon/Icon.js'; import { UnstyledLink as UnstyledLink$1 } from '../UnstyledLink/UnstyledLink.js'; import { useToggle as useToggle$1 } from '../../utilities/use-toggle.js'; import { getWidth as getWidth$1 } from '../../utilities/get-width.js'; import { Search as Search$1 } from './components/Search/Search.js'; import { SearchField as SearchField$1 } from './components/SearchField/SearchField.js'; import { Menu as Menu$1 } from './components/Menu/Menu.js'; import { UserMenu as UserMenu$1 } from './components/UserMenu/UserMenu.js'; import styles from './TopBar.scss.js'; var _ref = /*#__PURE__*/React$1.createElement(Icon$1, { source: MobileHamburgerMajor }); // TypeScript can't generate types that correctly infer the typing of // subcomponents so explicitly state the subcomponents in the type definition. // Letting this be implicit works in this project but fails in projects that use // generated *.d.ts files. var TopBar = function TopBar({ showNavigationToggle, userMenu, searchResults, searchField, secondaryMenu, searchResultsVisible, searchResultsOverlayVisible = false, onNavigationToggle, onSearchResultsDismiss, contextControl }) { var i18n = useI18n(); var { logo } = useTheme(); var { newDesignLanguage } = useFeatures(); var { value: focused, setTrue: forceTrueFocused, setFalse: forceFalseFocused } = useToggle$1(false); var iconClassName = classNames(styles.NavigationIcon, focused && styles.focused); var navigationButtonMarkup = showNavigationToggle ? /*#__PURE__*/React$1.createElement("button", { type: "button", className: iconClassName, onClick: onNavigationToggle, onFocus: forceTrueFocused, onBlur: forceFalseFocused, "aria-label": i18n.translate('Polaris.TopBar.toggleMenuLabel') }, _ref) : null; var width = getWidth$1(logo, 104); var contextMarkup; if (contextControl) { contextMarkup = /*#__PURE__*/React$1.createElement("div", { className: styles.ContextControl }, contextControl); } else if (logo) { contextMarkup = /*#__PURE__*/React$1.createElement("div", { className: styles.LogoContainer }, /*#__PURE__*/React$1.createElement(UnstyledLink$1, { url: logo.url || '', className: styles.LogoLink, style: { width } }, /*#__PURE__*/React$1.createElement(Image$1, { source: logo.topBarSource || '', alt: logo.accessibilityLabel || '', className: styles.Logo, style: { width } }))); } var searchMarkup = searchField ? /*#__PURE__*/React$1.createElement(React$1.Fragment, null, searchField, /*#__PURE__*/React$1.createElement(Search$1, { visible: searchResultsVisible, onDismiss: onSearchResultsDismiss, overlayVisible: searchResultsOverlayVisible }, searchResults)) : null; var className = classNames(styles.TopBar, newDesignLanguage && styles['TopBar-newDesignLanguage']); return /*#__PURE__*/React$1.createElement("div", { className: className }, navigationButtonMarkup, contextMarkup, /*#__PURE__*/React$1.createElement("div", { className: styles.Contents }, /*#__PURE__*/React$1.createElement("div", { className: styles.SearchField }, searchMarkup), /*#__PURE__*/React$1.createElement("div", { className: styles.SecondaryMenu }, secondaryMenu), userMenu)); }; TopBar.Menu = Menu$1; TopBar.SearchField = SearchField$1; TopBar.UserMenu = UserMenu$1; export { TopBar };