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    
@doodle/components / structure / CreatePollMenuDropdown / CreatePollMenuDropdown.js
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 _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;