Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = exports.NavigationTypes = exports.getDefaultNavLinks = void 0;

var _react = _interopRequireDefault(require("react"));

var _propTypes = _interopRequireDefault(require("prop-types"));

var _commonMessages = require("@doodle/common-messages");

var _Button = require("../../controls/Button");

var _Menu = _interopRequireDefault(require("../../controls/Menu/Menu"));

var _propTypes2 = require("../../propTypes");

var _HeaderWidget = _interopRequireDefault(require("../../user/HeaderWidget"));

var _pickDataAttributes = _interopRequireDefault(require("../../utils/pickDataAttributes"));

var _translate = require("../../utils/translate");

var _user = require("../../utils/user");

var _Icon = _interopRequireDefault(require("../../visuals/Icon"));

var _LogoLink = _interopRequireDefault(require("../../visuals/LogoLink"));

var _Header = _interopRequireDefault(require("../Header"));

var _CreatePollMenu = _interopRequireDefault(require("./CreatePollMenu"));

var _HamburgerMenu = _interopRequireDefault(require("./HamburgerMenu"));

var _constants = require("./constants");

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }

function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }

function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }

function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }

function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }

var ArrowDownIcon = function ArrowDownIcon(props) {
  return /*#__PURE__*/_react["default"].createElement("svg", props, /*#__PURE__*/_react["default"].createElement("path", {
    d: "M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z",
    fill: "currentColor"
  }));
};

ArrowDownIcon.defaultProps = {
  xmlns: "http://www.w3.org/2000/svg",
  viewBox: "0 0 24 24"
};

var getDefaultNavLinks = function getDefaultNavLinks(page, intl) {
  var locale = intl ? intl.locale : 'en';
  var contactLinkByLocale = locale === 'de' ? 'https://go.doodle.com/WF-2021-01-Contact-Sales-DE_LP-02.html' : 'https://landing.doodle.com/contact-sales';
  return [{
    label: _commonMessages.messages.features,
    to: "/".concat(locale, "/features"),
    'data-track': JSON.stringify({
      event: 'Click Product',
      type: 'user Interaction',
      properties: {
        label: page,
        category: 'Global Navigation'
      }
    })
  }, {
    label: _commonMessages.messages.solutions,
    submenu: [{
      label: _commonMessages.messages.solutionsRecruiting,
      to: "/".concat(locale, "/solutions/recruiting")
    }, {
      label: _commonMessages.messages.solutionsBoardMeetings,
      to: "/".concat(locale, "/solutions/board-meetings")
    }, {
      label: _commonMessages.messages.solutionsSales,
      to: "/".concat(locale, "/solutions/sales")
    }, {
      label: _commonMessages.messages.solutionsEducation,
      to: "/".concat(locale, "/solutions/education")
    }, {
      label: _commonMessages.messages.solutionsNonProfit,
      to: "/".concat(locale, "/solutions/non-profit")
    }, {
      label: _commonMessages.messages.solutionsConsultants,
      to: "/".concat(locale, "/solutions/consultants")
    }, {
      label: _commonMessages.messages.solutionsEnterprise,
      to: "/".concat(locale, "/solutions/enterprise")
    }]
  }, {
    label: _commonMessages.messages.pricing,
    to: '/premium',
    'data-track': JSON.stringify({
      event: 'Click Pricing',
      type: 'user Interaction',
      properties: {
        label: page,
        category: 'Global Navigation'
      }
    })
  }, {
    label: _commonMessages.messages.integrations,
    to: "/".concat(locale, "/integrations"),
    'data-track': JSON.stringify({
      event: 'Click Integrations',
      type: 'user Interaction',
      properties: {
        label: page,
        category: 'Global Navigation'
      }
    })
  }, {
    label: _commonMessages.messages.resources,
    submenu: [{
      label: _commonMessages.messages.resourceCenter,
      to: "/".concat(locale, "/resources"),
      'data-track': JSON.stringify({
        event: 'Click Resources',
        type: 'user Interaction',
        properties: {
          label: page,
          category: 'Global Navigation'
        }
      })
    }, {
      label: _commonMessages.messages.blog,
      to: 'https://blog.doodle.com/'
    }]
  }, {
    label: _commonMessages.messages.contact,
    submenu: [{
      label: _commonMessages.messages.sales,
      to: contactLinkByLocale,
      'data-track': JSON.stringify({
        event: 'Click Contact Sales',
        type: 'user Interaction',
        properties: {
          label: page,
          description: "user clicks on the 'Contact Sales' link placed in the header",
          category: 'Global Navigation',
          'Contact Sales': 'Header'
        }
      })
    }, {
      label: _commonMessages.messages.helpAndSupport,
      to: 'https://help.doodle.com'
    }]
  }];
};

exports.getDefaultNavLinks = getDefaultNavLinks;

var Navigation = function Navigation(_ref) {
  var links = _ref.links,
      user = _ref.user,
      theme = _ref.theme,
      hideCreatePollMenu = _ref.hideCreatePollMenu,
      onClickLogin = _ref.onClickLogin,
      onClickLogout = _ref.onClickLogout,
      onClickSignup = _ref.onClickSignup,
      onClickCreatePoll = _ref.onClickCreatePoll,
      onClickCreateOneOnOne = _ref.onClickCreateOneOnOne,
      onClickCreateBookingPage = _ref.onClickCreateBookingPage,
      onClickCreateSurvey = _ref.onClickCreateSurvey,
      customUrl = _ref.customUrl,
      page = _ref.page,
      currentPageType = _ref.currentPageType,
      customLogo = _ref.customLogo,
      trackingClient = _ref.trackingClient,
      intl = _ref.intl,
      showSignUp = _ref.showSignUp;
  var navLinks = links || getDefaultNavLinks(page, intl);
  navLinks = (0, _translate.translateMenuItems)(navLinks, intl); // Transform menu items to Menu and Link elements

  var navElements = navLinks.map(function (itemOrElement) {
    if ( /*#__PURE__*/_react["default"].isValidElement(itemOrElement)) {
      return itemOrElement;
    }

    if (_constants.submenuKey in itemOrElement) {
      var menuTitle = itemOrElement.label,
          submenu = itemOrElement.submenu; // Only items as props objects supported here, not elements, due to Menu API

      return /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
        items: submenu,
        horizontalAlign: "left",
        dimension: "compact",
        variant: "linkDark",
        className: menuTitle
      }, menuTitle, /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
        icon: ArrowDownIcon
      }));
    }

    var label = itemOrElement.label,
        to = itemOrElement.to,
        rest = _objectWithoutProperties(itemOrElement, ["label", "to"]);

    return /*#__PURE__*/_react["default"].createElement(_Button.Button, _extends({
      href: to,
      variant: "linkDark",
      dimension: "compact"
    }, (0, _pickDataAttributes["default"])(rest)), label);
  });
  var isLoggedIn = (0, _user.isLoggedIn)(user);
  var isOrgAdmin = (0, _user.isOrgAdmin)(user);
  var headerLeft = [/*#__PURE__*/_react["default"].createElement(_LogoLink["default"], {
    user: user,
    currentPageType: currentPageType,
    customUrl: customUrl,
    logoUrl: customLogo
  })].concat(_toConsumableArray(navElements));
  var headerRight = [/*#__PURE__*/_react["default"].createElement(_HeaderWidget["default"], {
    username: null // hide username by design
    ,
    userAvatar: isLoggedIn ? user.data.avatarSmallUrl : null,
    isLoggedIn: isLoggedIn,
    onClickLogin: onClickLogin,
    onClickLogout: onClickLogout,
    onClickSignup: onClickSignup,
    isOrgAdmin: isOrgAdmin,
    intl: intl,
    showSignUp: showSignUp
  }), /*#__PURE__*/_react["default"].createElement(_CreatePollMenu["default"], {
    user: user,
    page: page,
    onClickCreatePoll: onClickCreatePoll,
    onClickCreateOneOnOne: onClickCreateOneOnOne,
    onClickCreateBookingPage: onClickCreateBookingPage,
    onClickCreateSurvey: onClickCreateSurvey,
    trackingClient: trackingClient,
    intl: intl
  }), /*#__PURE__*/_react["default"].createElement(_HamburgerMenu["default"], {
    className: "Navigation-hamburgerMenu",
    items: navLinks,
    user: user,
    onClickLogin: onClickLogin,
    onClickLogout: onClickLogout,
    onClickSignup: onClickSignup,
    isOrgAdmin: isOrgAdmin,
    intl: intl
  })];

  if (hideCreatePollMenu) {
    headerRight.splice(1, 1);
  }

  return /*#__PURE__*/_react["default"].createElement(_Header["default"], {
    theme: theme,
    left: headerLeft,
    right: headerRight
  });
};

var NavigationTypes = {
  /** Custom array to override the default links of the header. If no links are needed, an empty array should be passed to this prop. */
  links: _propTypes["default"].array,

  /** Defines the user and the shape of the data. */
  user: _user.userPropType,

  /** The background colour for the header - defaults to transparent. */
  theme: _propTypes["default"].oneOf(['white', 'transparent']),

  /** Hide or show the create poll menu (Create/Create a doodle). */
  hideCreatePollMenu: _propTypes["default"].bool,

  /**
   * Callback executed when the user clicks on the "Login" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickLogin by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickLogin: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "Logout" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickLogout by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickLogout: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "Signup" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickSignup by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickSignup: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "Group Meeting" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickCreatePoll by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickCreatePoll: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "1:1 Meeting" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickCreateOneOnOne by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickCreateOneOnOne: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "Bookable Calendar" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickCreateBookingPage by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickCreateBookingPage: _propTypes["default"].func,

  /**
   * Callback executed when the user clicks on the "Survey" button.
   * It can be overridden to add custom functionality such as tracking.
   * You can execute the default button behaviour within onClickCreateSurvey by running
   * the function provided as first parameter. If your custom code is asynchronous,
   * run the default behaviour as callback of your asynchronous action. This guarantees
   * that your custom action completes before navigating to another page.
   * @param {Function} defaultBehaviour - Function to execute the default click behaviour
   */
  onClickCreateSurvey: _propTypes["default"].func,

  /** Page that the header will be added in - this prop is used for tracking purposes. */
  page: _propTypes["default"].string.isRequired,

  /** CustomUrl prop that is passed into the LogoLink to redirect the user to a custom link */
  customUrl: _propTypes["default"].string,

  /** Props to pass through to the LogoLink which will determine where to redirect the user */
  currentPageType: _propTypes["default"].string,

  /** A prop for passing in a custom logo into LogoLink.
   * If this prop is not used, Doodle's logo will be displayed */
  customLogo: _propTypes["default"].string,

  /** An initialized instance of lib-tracking client */
  trackingClient: _propTypes2.TrackingClientShape,

  /** An object used for internationalization. */
  intl: _propTypes["default"].object,

  /** Show Sign Up Button - defaults to true */
  showSignUp: _propTypes["default"].bool
};
exports.NavigationTypes = NavigationTypes;
Navigation.propTypes = NavigationTypes;
Navigation.defaultProps = {
  links: null,
  user: null,
  theme: 'transparent',
  hideCreatePollMenu: false,
  onClickLogin: function onClickLogin(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickLogout: function onClickLogout(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickSignup: function onClickSignup(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickCreatePoll: function onClickCreatePoll(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickCreateOneOnOne: function onClickCreateOneOnOne(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickCreateBookingPage: function onClickCreateBookingPage(defaultBehaviour) {
    return defaultBehaviour();
  },
  onClickCreateSurvey: function onClickCreateSurvey(defaultBehaviour) {
    return defaultBehaviour();
  },
  customUrl: '',
  currentPageType: '',
  customLogo: '',
  trackingClient: null,
  intl: null,
  showSignUp: true
};
Navigation.displayName = 'Navigation';
var _default = Navigation;
exports["default"] = _default;