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 _Menu = _interopRequireDefault(require("../../controls/Menu"));
var _Icon = _interopRequireDefault(require("../../visuals/Icon"));
var _translate = require("../../utils/translate");
var _propTypes2 = require("../../propTypes");
var _pickDataAttributes = _interopRequireDefault(require("../../utils/pickDataAttributes"));
var _user = require("../../utils/user");
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 baseTrackingIntent = {
track: {
type: 'user Interaction',
properties: {
category: 'Global Header'
}
}
};
var CreatePollMenuDropdown = function CreatePollMenuDropdown(_ref) {
var baseUrl = _ref.baseUrl,
user = _ref.user,
intl = _ref.intl,
onClickCreateSurvey = _ref.onClickCreateSurvey,
onClickCreatePoll = _ref.onClickCreatePoll,
onClickCreateOneOnOne = _ref.onClickCreateOneOnOne,
onClickCreateBookableCalendar = _ref.onClickCreateBookableCalendar,
trackingClient = _ref.trackingClient;
function handleClickCreatePoll() {
return _handleClickCreatePoll.apply(this, arguments);
}
function _handleClickCreatePoll() {
_handleClickCreatePoll = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var trackingIntent;
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({}, baseTrackingIntent.track), {}, {
event: 'Click Create Date Poll'
})
};
_context.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
onClickCreatePoll();
case 5:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return _handleClickCreatePoll.apply(this, arguments);
}
function handleClickCreateOneOnOne() {
return _handleClickCreateOneOnOne.apply(this, arguments);
}
function _handleClickCreateOneOnOne() {
_handleClickCreateOneOnOne = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var trackingIntent;
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({}, baseTrackingIntent.track), {}, {
event: 'Click Create D11'
})
};
_context2.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
onClickCreateOneOnOne();
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return _handleClickCreateOneOnOne.apply(this, arguments);
}
function handleClickCreateSurvey() {
return _handleClickCreateSurvey.apply(this, arguments);
}
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({}, baseTrackingIntent.track), {}, {
event: 'Click Create Text Poll'
})
};
_context3.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
onClickCreateSurvey();
case 5:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return _handleClickCreateSurvey.apply(this, arguments);
}
function handleClickCreateBookableCalendar() {
return _handleClickCreateBookableCalendar.apply(this, arguments);
}
function _handleClickCreateBookableCalendar() {
_handleClickCreateBookableCalendar = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4() {
var trackingIntent;
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({}, baseTrackingIntent.track), {}, {
event: 'Click Create Bookable Calendar'
})
};
_context4.next = 4;
return trackingClient.track({
trackingIntent: trackingIntent
});
case 4:
onClickCreateBookableCalendar();
case 5:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return _handleClickCreateBookableCalendar.apply(this, arguments);
}
var showMenu = (0, _user.isLoggedIn)(user) && !user.loading && !user.error; // Only use '_blank' when a baseUrl is an absolute url. This keeps
// the convention on same-tab navigation for relative urls, but forces
// a new tab in environmentw where same-tab navigation is not possible
// (or ideal) like the Outlook Add-in via Outlook Desktop.
var hasAbsoluteBaseRef = (baseUrl === null || baseUrl === void 0 ? void 0 : baseUrl.indexOf('http')) === 0;
var target = hasAbsoluteBaseRef ? '_blank' : null;
var defaultMenuItems = [{
label: _commonMessages.messages.groupMeeting,
description: _commonMessages.messages.groupMeetingDescription,
'data-testid': 'navigation-menu-create-date-poll',
to: "".concat(baseUrl, "/create"),
action: handleClickCreatePoll,
target: target
}, {
label: _commonMessages.messages.bookableCalendar,
description: _commonMessages.messages.bookableCalendarDescription,
'data-testid': 'navigation-menu-create-bookable-calendar',
to: "".concat(baseUrl, "/mm/new"),
action: handleClickCreateBookableCalendar,
target: target
}, {
label: _commonMessages.messages.oneOnOneMeeting,
description: _commonMessages.messages.oneOnOneMeetingDescription,
'data-testid': 'navigation-menu-create-d11',
to: "".concat(baseUrl, "/meetme/qc/new"),
action: handleClickCreateOneOnOne,
target: target
}, {
label: _commonMessages.messages.survey,
description: _commonMessages.messages.surveyDescription,
'data-testid': 'navigation-menu-create-text-poll',
to: "".concat(baseUrl, "/create-choice"),
action: handleClickCreateSurvey,
target: target
}];
var menuItems = (0, _translate.translateMenuItems)(defaultMenuItems, intl); // For logged-in users, make the button a dropdown menu with three options...
if (showMenu) {
return /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
className: "CreatePollMenu",
items: menuItems,
horizontalAlign: "right",
dimension: "compact",
variant: "accent"
}, /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
icon: AddIcon
}), /*#__PURE__*/_react["default"].createElement("span", {
className: "CreatePollMenu-createMenuLabel"
}, (0, _translate.translate)(_commonMessages.messages.create, intl)));
} // ...but for anonymous users, it should immediately create a Doodle
var createDoodleMenuItem = menuItems[0];
return /*#__PURE__*/_react["default"].createElement(_Button["default"], _extends({
className: "CreatePollMenu-createButton",
variant: "accent",
dimension: "compact",
href: createDoodleMenuItem.to,
onClick: createDoodleMenuItem.action
}, (0, _pickDataAttributes["default"])(createDoodleMenuItem)), /*#__PURE__*/_react["default"].createElement(_Icon["default"], {
icon: AddIcon
}), /*#__PURE__*/_react["default"].createElement("span", {
className: "CreatePollMenu-createMenuLabel"
}, (0, _translate.translate)(_commonMessages.messages.createDoodle, intl)));
};
CreatePollMenuDropdown.propTypes = {
/**
* Sets the base url for the target environment (staging, devbox, prod, etc)
* Otherwise the default is an empty string to allow for relative urls
*/
baseUrl: _propTypes["default"].string,
/** 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 custom tracking.
*/
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 custom tracking.
*/
onClickCreateOneOnOne: _propTypes["default"].func,
/**
* Callback executed when the user clicks on the "Survey" button.
* It can be overridden to add custom functionality such as custom tracking.
*/
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 custom tracking.
*/
onClickCreateBookableCalendar: _propTypes["default"].func,
/** An initialized instance of lib-tracking client */
trackingClient: _propTypes2.TrackingClientShape,
/** An object used for internationalization. */
intl: _propTypes["default"].object
};
CreatePollMenuDropdown.defaultProps = {
baseUrl: '',
user: null,
onClickCreatePoll: function onClickCreatePoll() {},
onClickCreateOneOnOne: function onClickCreateOneOnOne() {},
onClickCreateSurvey: function onClickCreateSurvey() {},
onClickCreateBookableCalendar: function onClickCreateBookableCalendar() {},
trackingClient: null,
intl: null
};
CreatePollMenuDropdown.displayName = 'CreatePollMenuDropdown';
var _default = CreatePollMenuDropdown;
exports["default"] = _default;