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"] = 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;