UNPKG

wix-style-react

Version:
282 lines (228 loc) • 12 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _PageHeader = require('./PageHeader.scss'); var _PageHeader2 = _interopRequireDefault(_PageHeader); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _WixComponent2 = require('../BaseComponents/WixComponent'); var _WixComponent3 = _interopRequireDefault(_WixComponent2); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _ChevronLeft = require('wix-ui-icons-common/ChevronLeft'); var _ChevronLeft2 = _interopRequireDefault(_ChevronLeft); var _Breadcrumbs = require('../Breadcrumbs'); var _Breadcrumbs2 = _interopRequireDefault(_Breadcrumbs); var _Text = require('../Text'); var _Text2 = _interopRequireDefault(_Text); var _Heading = require('../Heading'); var _Heading2 = _interopRequireDefault(_Heading); var _wixAnimations = require('wix-animations'); var _Button = require('../Button'); var _Button2 = _interopRequireDefault(_Button); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var animateComponent = function animateComponent(show, useEnterDelay, content) { return useEnterDelay ? _react2.default.createElement( _wixAnimations.Animator, { show: show, opacity: true, timing: 'medium', delay: { enter: 100 } }, content ) : _react2.default.createElement( _wixAnimations.Animator, { show: show, opacity: true, timing: 'medium' }, content ); }; var isDarkTheme = function isDarkTheme(hasBackgroundImage, minimized) { return !minimized && hasBackgroundImage; }; var getBreadcrumbsTheme = function getBreadcrumbsTheme(hasBackgroundImage, minimized) { return isDarkTheme(hasBackgroundImage, minimized) ? 'onDarkBackground' : 'onGrayBackground'; }; var getTitle = function getTitle(title, minimized) { return typeof title === 'function' ? title(minimized) : title; }; var generateDefaultBreadcrumbs = function generateDefaultBreadcrumbs(title, hasBackgroundImage, minimized) { return _react2.default.createElement(_Breadcrumbs2.default, { items: [{ id: '1', value: getTitle(title, minimized) }], activeId: '1', size: 'medium', theme: getBreadcrumbsTheme(hasBackgroundImage, minimized), onClick: function onClick() {} }); }; var generateThemedBreadcrumbs = function generateThemedBreadcrumbs(breadcrumbs, title, hasBackgroundImage, minimized) { if (breadcrumbs) { return _react2.default.cloneElement(breadcrumbs, { theme: getBreadcrumbsTheme(hasBackgroundImage, minimized) }); } return generateDefaultBreadcrumbs(title, hasBackgroundImage, minimized); }; /** * A header that sticks at the top of the container which minimizes on scroll */ var PageHeader = function (_WixComponent) { _inherits(PageHeader, _WixComponent); function PageHeader(props) { _classCallCheck(this, PageHeader); var _this = _possibleConstructorReturn(this, (PageHeader.__proto__ || Object.getPrototypeOf(PageHeader)).call(this, props)); var breadcrumbs = props.breadcrumbs, title = props.title, hasBackgroundImage = props.hasBackgroundImage, minimized = props.minimized; _this.state = { themedBreadcrumbs: generateThemedBreadcrumbs(breadcrumbs, title, hasBackgroundImage, minimized) }; return _this; } _createClass(PageHeader, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { var _props = this.props, breadcrumbs = _props.breadcrumbs, title = _props.title, hasBackgroundImage = _props.hasBackgroundImage, minimized = _props.minimized; var newBreadcrumbs = nextProps.breadcrumbs; var newTitle = nextProps.title; var newHasBackgroundImage = nextProps.hasBackgroundImage; var newMinimized = nextProps.minimized; if (breadcrumbs !== newBreadcrumbs || title !== newTitle || hasBackgroundImage !== newHasBackgroundImage || minimized !== newMinimized) { var themedBreadcrumbs = generateThemedBreadcrumbs(newBreadcrumbs, newTitle, newHasBackgroundImage, newMinimized); this.setState({ themedBreadcrumbs: themedBreadcrumbs }); } } }, { key: 'render', value: function render() { var _classNames, _classNames3, _classNames6; var _props2 = this.props, breadcrumbs = _props2.breadcrumbs, onBackClicked = _props2.onBackClicked, title = _props2.title, subtitle = _props2.subtitle, minimized = _props2.minimized, actionsBar = _props2.actionsBar, showBackButton = _props2.showBackButton, hasBackgroundImage = _props2.hasBackgroundImage, className = _props2.className; var breadcrumbsExists = !!breadcrumbs; var themedBreadcrumbs = this.state.themedBreadcrumbs; return _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.headerContainer, className) }, _react2.default.createElement( 'div', { className: _PageHeader2.default.header }, _react2.default.createElement( 'div', null, animateComponent(breadcrumbsExists || minimized, !breadcrumbsExists, _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.breadcrumbsContainer, (_classNames = {}, _defineProperty(_classNames, _PageHeader2.default.absolute, !breadcrumbsExists), _defineProperty(_classNames, _PageHeader2.default.minimized, minimized), _classNames)), 'data-hook': 'page-header-breadcrumbs' }, themedBreadcrumbs )) ), _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.titleContainer, _defineProperty({}, _PageHeader2.default.minimized, minimized)) }, showBackButton && onBackClicked && animateComponent(!minimized, !breadcrumbsExists, _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.backButton, (_classNames3 = {}, _defineProperty(_classNames3, _PageHeader2.default.minimized, minimized), _defineProperty(_classNames3, _PageHeader2.default.darkTheme, isDarkTheme(hasBackgroundImage, minimized)), _classNames3)) }, _react2.default.createElement( _Button2.default, { dataHook: 'page-header-backbutton', onClick: onBackClicked, theme: 'icon-white' }, _react2.default.createElement(_ChevronLeft2.default, { className: _PageHeader2.default.backButtonIcon }) ) )), _react2.default.createElement( 'div', { className: _PageHeader2.default.titleColumn }, title && animateComponent(!minimized, !breadcrumbsExists, _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.title, _defineProperty({}, _PageHeader2.default.minimized, minimized)), 'data-hook': 'page-header-title' }, _react2.default.createElement( _Heading2.default, { light: isDarkTheme(hasBackgroundImage, minimized) }, getTitle(title, minimized) ) )), subtitle && animateComponent(!minimized, !breadcrumbsExists, _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_defineProperty({}, _PageHeader2.default.minimized, minimized)), 'data-hook': 'page-header-subtitle' }, _react2.default.createElement( _Text2.default, { light: isDarkTheme(hasBackgroundImage, minimized), secondary: !isDarkTheme(hasBackgroundImage, minimized) }, subtitle ) )) ) ) ), actionsBar && _react2.default.createElement( 'div', { className: (0, _classnames2.default)(_PageHeader2.default.actionsBar, (_classNames6 = {}, _defineProperty(_classNames6, _PageHeader2.default.minimized, minimized), _defineProperty(_classNames6, _PageHeader2.default.withBreadcrumbs, breadcrumbsExists), _classNames6)), 'data-hook': 'page-header-actionbar' }, _react2.default.cloneElement(actionsBar, { minimized: minimized, hasBackgroundImage: hasBackgroundImage }) ) ); } }]); return PageHeader; }(_WixComponent3.default); exports.default = PageHeader; PageHeader.displayName = 'Page.Header'; PageHeader.propTypes = { /** This property is being supplied by the Page component, it's value changes by the state of the scrolled content */ minimized: _propTypes2.default.bool, /** This property is being supplied by the Page component, it's value reflects if the Page has a background image or not */ hasBackgroundImage: _propTypes2.default.bool, /** A css class to be applied to the component's root element */ className: _propTypes2.default.string, /** Wix-Style-React Breadcrumbs component */ breadcrumbs: _propTypes2.default.node, /** The main title text */ title: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), /** The subtitle text */ subtitle: _propTypes2.default.node, /** Should show a back button */ showBackButton: _propTypes2.default.bool, /** The callback when back button is clicked */ onBackClicked: _propTypes2.default.func, /** A placeholder for a component that can contain actions / anything else. It should be a React component that receives `minimized` and `hasBackgroundImage` props. */ actionsBar: _propTypes2.default.node }; PageHeader.defaultProps = { minimized: false };