UNPKG

@coko/client

Version:

Client side common code for coko apps

171 lines (169 loc) 12.5 kB
"use strict"; function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _toolkit = require("../../toolkit"); var _SearchBox = _interopRequireDefault(require("./SearchBox")); var _SuggestedReviewer = _interopRequireDefault(require("./SuggestedReviewer")); var _common = require("../common"); var _ReviewerTable = _interopRequireDefault(require("./ReviewerTable")); var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure 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 _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 _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); } var Wrapper = _styledComponents["default"].div(_templateObject || (_templateObject = _taggedTemplateLiteral([""]))); var Top = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: space-between;\n margin-bottom: ", ";\n\n label:last-of-type {\n margin-top: 0;\n }\n"])), (0, _toolkit.grid)(3)); var ItemWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral([""]))); var Head = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: ", ";\n"])), (0, _toolkit.grid)(1)); var HeadSecondRow = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n align-items: center;\n display: flex;\n justify-content: space-between;\n margin: ", " ", ";\n\n > div > button:not(:last-child) {\n margin-right: ", ";\n }\n"])), (0, _toolkit.grid)(2), (0, _toolkit.grid)(4), (0, _toolkit.grid)(1)); var Search = (0, _styledComponents["default"])(_SearchBox["default"])(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n margin-bottom: ", ";\n"])), (0, _toolkit.grid)(1)); var StyledRibbon = (0, _styledComponents["default"])(_common.Ribbon)(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n margin-bottom: ", ";\n"])), (0, _toolkit.grid)(1)); var AssignReviewers = function AssignReviewers(props) { var additionalReviewerColumns = props.additionalReviewerColumns, additionalSearchFields = props.additionalSearchFields, amountOfReviewers = props.amountOfReviewers, automate = props.automate, canInviteMore = props.canInviteMore, className = props.className, onAddReviewers = props.onAddReviewers, onAmountOfReviewersChange = props.onAmountOfReviewersChange, onAutomationChange = props.onAutomationChange, onClickInvite = props.onClickInvite, onClickRemoveRow = props.onClickRemoveRow, onClickRevokeInvitation = props.onClickRevokeInvitation, onSearch = props.onSearch, onTableChange = props.onTableChange, reviewerPool = props.reviewerPool, searchPlaceholder = props.searchPlaceholder, suggestedReviewerName = props.suggestedReviewerName, useShowEmail = props.useShowEmail; var _useState = (0, _react.useState)(false), _useState2 = _slicedToArray(_useState, 2), showEmails = _useState2[0], setShowEmails = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = _slicedToArray(_useState3, 2), manualSorting = _useState4[0], setManualSorting = _useState4[1]; // Explainer text: Adding reviewers to the list won't send them an invite yet return /*#__PURE__*/_react["default"].createElement(Wrapper, { className: className }, suggestedReviewerName && /*#__PURE__*/_react["default"].createElement(Top, null, /*#__PURE__*/_react["default"].createElement(ItemWrapper, null, suggestedReviewerName && /*#__PURE__*/_react["default"].createElement(_SuggestedReviewer["default"], { name: suggestedReviewerName }))), /*#__PURE__*/_react["default"].createElement(Search, { additionalSearchFields: additionalSearchFields, onAdd: onAddReviewers, onSearch: onSearch, searchPlaceholder: searchPlaceholder }), /*#__PURE__*/_react["default"].createElement(Head, null, /*#__PURE__*/_react["default"].createElement(StyledRibbon, { status: automate ? 'success' : null }, "Automation is ", automate ? 'on' : 'off'), /*#__PURE__*/_react["default"].createElement(HeadSecondRow, null, /*#__PURE__*/_react["default"].createElement(ItemWrapper, null, /*#__PURE__*/_react["default"].createElement(_common.Switch, { checked: automate, disabled: !manualSorting, label: "Automate invites", labelPosition: "left", onChange: onAutomationChange })), /*#__PURE__*/_react["default"].createElement(ItemWrapper, null, /*#__PURE__*/_react["default"].createElement(_common.Switch, { checked: manualSorting, label: "Sort reviewers manually", labelPosition: "left", onChange: setManualSorting })), useShowEmail && /*#__PURE__*/_react["default"].createElement(ItemWrapper, null, /*#__PURE__*/_react["default"].createElement(_common.Switch, { checked: showEmails, label: "Show reviewer emails", labelPosition: "left", onChange: function onChange() { return setShowEmails(!showEmails); } })), /*#__PURE__*/_react["default"].createElement(_common.InputNumber, { disabled: automate, label: "Maximum reviewers from pool", min: 1, onChange: onAmountOfReviewersChange, value: amountOfReviewers }))), /*#__PURE__*/_react["default"].createElement(_ReviewerTable["default"], { additionalColumns: additionalReviewerColumns, canInviteMore: canInviteMore, manualSorting: manualSorting, onChange: onTableChange, onInvite: onClickInvite, onRemoveRow: onClickRemoveRow, onRevokeInvitation: onClickRevokeInvitation, reviewers: reviewerPool, showEmails: showEmails })); }; AssignReviewers.propTypes = { /** Additional column definitions of type `ColumnsType` from `antd/es/table` */ additionalReviewerColumns: _propTypes["default"].arrayOf(_propTypes["default"].shape({ title: _propTypes["default"].string.isRequired, dataIndex: _propTypes["default"].string.isRequired })), /** Additional search fields definitions to display on search */ additionalSearchFields: _propTypes["default"].arrayOf(_propTypes["default"].shape({ label: _propTypes["default"].string.isRequired, value: _propTypes["default"].string.isRequired, items: _propTypes["default"].arrayOf(_propTypes["default"].string) })), /** Maximum amount of reviewers that can be invited at the same time */ amountOfReviewers: _propTypes["default"].number.isRequired, /** Whether reviewer invitation automation is on for this manuscript version */ automate: _propTypes["default"].bool.isRequired, /** Whether more reviewers can be invited */ canInviteMore: _propTypes["default"].bool.isRequired, /** Function to run on selecting a reviewer in the search box */ onAddReviewers: _propTypes["default"].func.isRequired, /** Handle change in amount of reviewers input */ onAmountOfReviewersChange: _propTypes["default"].func.isRequired, /** Function to run when "Automate invites" is toggled */ onAutomationChange: _propTypes["default"].func.isRequired, /** Function to run when "invite" is clicked on a row from the pool */ onClickInvite: _propTypes["default"].func.isRequired, /** Function to run when the "X" button is clicked on a row from the pool */ onClickRemoveRow: _propTypes["default"].func.isRequired, /** Function to run when "revoke invitation" is clicked on a row from the pool */ onClickRevokeInvitation: _propTypes["default"].func.isRequired, /** Function that returns a promise. Must resolve to an array objects, each with shape `{ value: <String>, label: <String>, isDisabled: <Boolean>, status: <String>}` */ onSearch: _propTypes["default"].func.isRequired, /** Function to run when data is filtered/sorted */ onTableChange: _propTypes["default"].func.isRequired, /** Reviewers added to the pool list. Shape defined in ReviewerRow */ reviewerPool: _propTypes["default"].arrayOf(_propTypes["default"].shape({ id: _propTypes["default"].string.isRequired, displayName: _propTypes["default"].string.isRequired, invited: _propTypes["default"].bool, acceptedInvitation: _propTypes["default"].bool, rejectedInvitation: _propTypes["default"].bool, invitationRevoked: _propTypes["default"].bool, reviewSubmitted: _propTypes["default"].bool })), /** Placeholder for the search bar */ searchPlaceholder: _propTypes["default"].string, /** Display name of suggested reviewer */ suggestedReviewerName: _propTypes["default"].string, /** Whether to display the option to show `Show reviewer emails` checkbox. * Alternatively, the email renders can be customised using `additionalReviewerColumns` */ useShowEmail: _propTypes["default"].bool }; AssignReviewers.defaultProps = { additionalReviewerColumns: [], additionalSearchFields: [], reviewerPool: [], searchPlaceholder: undefined, suggestedReviewerName: null, useShowEmail: false }; var _default = AssignReviewers; exports["default"] = _default;