UNPKG

cspace-ui

Version:
187 lines (186 loc) 7.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactIntl = require("react-intl"); var _immutable = _interopRequireDefault(require("immutable")); var _cspaceLayout = require("cspace-layout"); var _configHelpers = require("../../helpers/configHelpers"); var _permissionHelpers = require("../../helpers/permissionHelpers"); var _SearchToSelectModalContainer = _interopRequireDefault(require("../../containers/search/SearchToSelectModalContainer")); var _RelateButton = _interopRequireDefault(require("../../../styles/cspace-ui/RelateButton.css")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); } const isSingleSubject = subjects => Array.isArray(subjects) && subjects.length === 1; const messages = (0, _reactIntl.defineMessages)({ label: { "id": "searchToRelateModal.label", "defaultMessage": "Relate records" }, accept: { "id": "searchToRelateModal.accept", "defaultMessage": "Relate selected" }, relating: { "id": "searchToRelateModal.relating", "defaultMessage": "Relating\u2026" }, multipleSubjectsRelated: { "id": "searchToRelateModal.multipleSubjectsRelated", "defaultMessage": "{objectCount, plural, =0 {No records} one {# record} other {# records}} related to each of {subjectCount, number} search results." }, title: { "id": "searchToRelateModal.title", "defaultMessage": "Relate {typeName} {query}" }, errorTitle: { "id": "searchToRelateModal.errorTitle", "defaultMessage": "Can't Relate" } }); const errorMessages = (0, _reactIntl.defineMessages)({ locked: { "id": "searchToRelateModal.error.locked", "defaultMessage": "Locked records are selected. Relations cannot be made to locked records." }, notPermitted: { "id": "searchToRelateModal.error.notPermitted", "defaultMessage": "{name} records are selected. You are not permitted to create relations to {collectionName}." } }); const renderRelatingMessage = () => /*#__PURE__*/_react.default.createElement("p", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.relating)); const propTypes = { config: _propTypes.default.shape({ recordTypes: _propTypes.default.object }), error: _propTypes.default.shape({ code: _propTypes.default.string }), isOpen: _propTypes.default.bool, perms: _propTypes.default.instanceOf(_immutable.default.Map), subjects: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.shape({ /* eslint-disable react/no-unused-prop-types */ csid: _propTypes.default.string, recordType: _propTypes.default.string /* eslint-enable react/no-unused-prop-types */ })), _propTypes.default.func]), createRelations: _propTypes.default.func, showRelationNotification: _propTypes.default.func, onCancelButtonClick: _propTypes.default.func, onCloseButtonClick: _propTypes.default.func, onRelationsCreated: _propTypes.default.func }; class SearchToRelateModal extends _react.Component { constructor(props) { super(props); this.customizeSearchDescriptor = this.customizeSearchDescriptor.bind(this); this.handleAccept = this.handleAccept.bind(this); this.shouldShowCheckbox = this.shouldShowCheckbox.bind(this); } handleAccept(selectedItems, searchDescriptor) { return this.relate(selectedItems, searchDescriptor); } customizeSearchDescriptor(searchDescriptor) { const { subjects } = this.props; if (isSingleSubject(subjects)) { return searchDescriptor.setIn(['searchQuery', 'mkRtSbj'], subjects[0].csid); } return searchDescriptor; } relate(selectedItems, searchDescriptor) { const { createRelations, onRelationsCreated } = this.props; if (createRelations) { let { subjects } = this.props; if (typeof subjects === 'function') { subjects = subjects(); } if (subjects && subjects.length > 0) { const objects = selectedItems.valueSeq().map(item => ({ csid: item.get('csid'), recordType: searchDescriptor.get('recordType') })).toJS(); return Promise.all(subjects.map(subject => createRelations(subject, objects, 'affects'))).then(() => { if (subjects.length > 1) { const { showRelationNotification } = this.props; if (showRelationNotification) { showRelationNotification(messages.multipleSubjectsRelated, { objectCount: objects.length, subjectCount: subjects.length }); } } if (onRelationsCreated) { onRelationsCreated(); } }); } } return undefined; } shouldShowCheckbox(item) { if (item.get('workflowState') === 'locked') { return false; } if (item.get('related') === 'true') { return false; } const { config, perms, subjects } = this.props; if (isSingleSubject(subjects) && item.get('csid') === subjects[0].csid) { return false; } return (0, _permissionHelpers.canRelate)((0, _configHelpers.getRecordTypeNameByUri)(config, item.get('uri')), perms, config); } render() { const { error, subjects, createRelations, showRelationNotification, onRelationsCreated, ...remainingProps } = this.props; const { isOpen, onCancelButtonClick, onCloseButtonClick } = remainingProps; if (isOpen && error) { return /*#__PURE__*/_react.default.createElement(_cspaceLayout.Modal, { isOpen: true, showCancelButton: false, title: /*#__PURE__*/_react.default.createElement("h1", null, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.errorTitle)), onAcceptButtonClick: onCancelButtonClick, onCloseButtonClick: onCloseButtonClick }, /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, errorMessages[error.code])); } return /*#__PURE__*/_react.default.createElement(_SearchToSelectModalContainer.default, _extends({ acceptButtonClassName: _RelateButton.default.common, acceptButtonLabel: /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, messages.accept), customizeSearchDescriptor: this.customizeSearchDescriptor, titleMessage: messages.title, renderAcceptPending: renderRelatingMessage, shouldShowCheckbox: this.shouldShowCheckbox, onAccept: this.handleAccept }, remainingProps)); } } exports.default = SearchToRelateModal; SearchToRelateModal.propTypes = propTypes;