Repository URL to install this package:
|
Version:
7.13.0-rc.3 ▾
|
"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;