Repository URL to install this package:
|
Version:
8.0.0 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _commonMessages = require("@doodle/common-messages");
var _Button = _interopRequireDefault(require("../../../controls/Button/Button"));
var _propTypes2 = require("../../../propTypes");
var _helper = _interopRequireDefault(require("../../../utils/helper"));
var _pickDataAttributes = _interopRequireDefault(require("../../../utils/pickDataAttributes"));
var _translate = require("../../../utils/translate");
var _user = require("../../../utils/user");
var _Icon = _interopRequireDefault(require("../../../visuals/Icon"));
var _MeetingTypeSelector = _interopRequireDefault(require("../MeetingTypeSelector"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
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 _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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
var AddIcon = function AddIcon(props) {
return /*#__PURE__*/_react["default"].createElement("svg", props, /*#__PURE__*/_react["default"].createElement("path", {
d: "M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z",
fill: "currentColor"
}));
};
AddIcon.defaultProps = {
xmlns: "http://www.w3.org/2000/svg",
viewBox: "0 0 24 24"
};
var defaultMenuItems = [{
label: _commonMessages.messages.groupMeeting,
description: _commonMessages.messages.groupMeetingDescription,
'data-testid': 'navigation-menu-create-date-poll'
}, {
label: _commonMessages.messages.bookingPage,
description: _commonMessages.messages.bookingPageDescription,
'data-testid': 'navigation-menu-create-bookable-calendar'
}, {
label: _commonMessages.messages.oneOnOneMeeting,
description: _commonMessages.messages.oneOnOneMeetingDescription,
'data-testid': 'navigation-menu-create-d11'
}, {
label: _commonMessages.messages.survey,
description: _commonMessages.messages.surveyDescription,
'data-testid': 'navigation-menu-create-text-poll'
}];
var baseTrackingIntent = function baseTrackingIntent(page) {
return {
track: {
type: 'user Interaction',
properties: {
category: 'Global Header',
label: page,
page: page
}
}
};
};
var isSchedExEnabled = function isSchedExEnabled(user) {
return user && user.data && user.data.schedExWhitelisted;
};
var CreatePollMenu = function CreatePollMenu(_ref) {
var user = _ref.user,
page = _ref.page,
intl = _ref.intl,
onClickCreateSurvey = _ref.onClickCreateSurvey,
onClickCreatePoll = _ref.onClickCreatePoll,
onClickCreateOneOnOne = _ref.onClickCreateOneOnOne,
onClickCreateBookingPage = _ref.onClickCreateBookingPage,
trackingClient = _ref.trackingClient;
var menuItems = (0, _translate.translateMenuItems)(defaultMenuItems, intl);
var showMenu = (0, _user.isLoggedIn)(user) && !user.loading && !user.error;
var baseTrack = baseTrackingIntent(page).track;
/**
* Handles calling the onClickCreatePoll and passes the default behaviour
* into the onClickCreatePoll callback as an argument.
* To override or add behaviour, see onClickCreatePoll prop.
*/
function handleClickCreatePoll() {
return _handleClickCreatePoll.apply(this, arguments);
}
/**
* Handles calling the onClickCreateOneOnOne and passes the default behaviour
* into the onClickCreateOneOnOne callback as an argument.
* To override or add behaviour, see onClickCreateOneOnOne prop.
*/
function _handleClickCreatePoll() {
_handleClickCreatePoll = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var trackingIntent, urlToNavigate;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!trackingClient) {
_context.next = 4;
break;
}
trackingIntent = {
track: _objectSpread(_objectSpread({}, baseTrack), {}, {
event: 'Click Create Date Poll'
})
};
_context.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
urlToNavigate = isSchedExEnabled(user) ? '/meeting/organize/groups' : '/create';
onClickCreatePoll(function () {
return (0, _helper["default"])(urlToNavigate);
});
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _handleClickCreatePoll.apply(this, arguments);
}
function handleClickCreateOneOnOne() {
return _handleClickCreateOneOnOne.apply(this, arguments);
}
/**
* Handles calling the onClickCreateSurvey and passes the default behaviour
* into the onClickCreateSurvey callback as an argument.
* To override or add behaviour, see onClickCreateSurvey prop.
*/
function _handleClickCreateOneOnOne() {
_handleClickCreateOneOnOne = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var trackingIntent, urlToNavigate;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!trackingClient) {
_context2.next = 4;
break;
}
trackingIntent = {
track: _objectSpread(_objectSpread({}, baseTrack), {}, {
event: 'Click Create D11'
})
};
_context2.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
urlToNavigate = isSchedExEnabled(user) ? '/meeting/organize/1-1' : '/meetme/qc/new';
onClickCreateOneOnOne(function () {
return (0, _helper["default"])(urlToNavigate);
});
case 6:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return _handleClickCreateOneOnOne.apply(this, arguments);
}
function handleClickCreateSurvey() {
return _handleClickCreateSurvey.apply(this, arguments);
}
/**
* Handles calling the onClickCreateBookingPage and passes the default behaviour
* into the onClickCreateBookingPage callback as an argument.
* To override or add behaviour, see onClickCreateBookingPage prop.
*/
function _handleClickCreateSurvey() {
_handleClickCreateSurvey = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var trackingIntent;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
if (!trackingClient) {
_context3.next = 4;
break;
}
trackingIntent = {
track: _objectSpread(_objectSpread({}, baseTrack), {}, {
event: 'Click Create Text Poll'
})
};
_context3.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
onClickCreateSurvey(function () {
return (0, _helper["default"])('/create-choice');
});
case 5:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return _handleClickCreateSurvey.apply(this, arguments);
}
function handleClickCreateBookingPage() {
return _handleClickCreateBookingPage.apply(this, arguments);
}
function _handleClickCreateBookingPage() {
_handleClickCreateBookingPage = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
var trackingIntent, urlToNavigate;
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
if (!trackingClient) {
_context4.next = 4;
break;
}
trackingIntent = {
track: _objectSpread(_objectSpread({}, baseTrack), {}, {
event: 'Click Create Booking Page'
})
};
_context4.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
urlToNavigate = isSchedExEnabled(user) ? '/meeting/organize/booking-page' : '/mm/new';
onClickCreateBookingPage(function () {
return (0, _helper["default"])(urlToNavigate);
});
case 6:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return _handleClickCreateBookingPage.apply(this, arguments);
}
menuItems[0].action = handleClickCreatePoll;
menuItems[1].action = handleClickCreateBookingPage;
menuItems[2].action = handleClickCreateOneOnOne;
menuItems[3].action = handleClickCreateSurvey;
function TriggerButton(_ref2) {
var onClick = _ref2.onClick;
return /*#__PURE__*/_react["default"].createElement(_Button["default"], {
className: "CreatePollMenu-createButton",
variant: "accent",
dimension: "compact",
onClick: onClick,
"data-testid": "navigation-create-button"
}, /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
icon: AddIcon
}), /*#__PURE__*/_react["default"].createElement("span", {
className: "CreatePollMenu-createMenuLabel"
}, (0, _translate.translate)(_commonMessages.messages.create, intl)));
}
TriggerButton.propTypes = {
onClick: _propTypes["default"].func.isRequired
}; // For logged-in users, show the MeetingTypeSelector...
if (showMenu) {
return /*#__PURE__*/_react["default"].createElement(_MeetingTypeSelector["default"], {
onCreatePoll: handleClickCreatePoll,
onCreateOneOnOne: handleClickCreateOneOnOne,
onCreateBookingPage: handleClickCreateBookingPage,
onCreateSurvey: handleClickCreateSurvey,
TriggerButton: TriggerButton,
intl: intl
});
} // ...but for anonymous users, it should immediately create a Doodle
var item = menuItems[0];
return /*#__PURE__*/_react["default"].createElement(_Button["default"], _extends({
className: "CreatePollMenu-createButton",
variant: "accent",
dimension: "compact",
href: item.to,
onClick: item.action
}, (0, _pickDataAttributes["default"])(item)), /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
icon: AddIcon
}), /*#__PURE__*/_react["default"].createElement("span", {
className: "CreatePollMenu-createMenuLabel"
}, (0, _translate.translate)(_commonMessages.messages.createDoodle, intl)));
};
CreatePollMenu.propTypes = {
/** Defines the user and the shape of the data. */
user: _user.userPropType,
/**
* 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 "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,
/**
* 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,
/** An initialized instance of lib-tracking client */
trackingClient: _propTypes2.TrackingClientShape,
/** An object used for internationalization. */
intl: _propTypes["default"].object,
/** Page that the button will be added in - this prop is used for tracking purposes. */
page: _propTypes["default"].string.isRequired
};
CreatePollMenu.defaultProps = {
user: null,
onClickCreatePoll: function onClickCreatePoll(defaultBehaviour) {
return defaultBehaviour();
},
onClickCreateOneOnOne: function onClickCreateOneOnOne(defaultBehaviour) {
return defaultBehaviour();
},
onClickCreateSurvey: function onClickCreateSurvey(defaultBehaviour) {
return defaultBehaviour();
},
onClickCreateBookingPage: function onClickCreateBookingPage(defaultBehaviour) {
return defaultBehaviour();
},
trackingClient: null,
intl: null
};
CreatePollMenu.displayName = 'CreatePollMenu';
var _default = CreatePollMenu;
exports["default"] = _default;