UNPKG

cspace-ui

Version:
191 lines (151 loc) 7.17 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 _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 _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } } 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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } 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}" } }); const renderRelatingMessage = () => _react.default.createElement("p", null, _react.default.createElement(_reactIntl.FormattedMessage, messages.relating)); const propTypes = { config: _propTypes.default.object, 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, 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); } 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); } handleAccept(selectedItems, searchDescriptor) { return this.relate(selectedItems, searchDescriptor); } render() { const _this$props = this.props, { /* eslint-disable no-unused-vars */ subjects, createRelations, showRelationNotification, onRelationsCreated } = _this$props, remainingProps = _objectWithoutProperties(_this$props, ["subjects", "createRelations", "showRelationNotification", "onRelationsCreated"]); return _react.default.createElement(_SearchToSelectModalContainer.default, _extends({ acceptButtonClassName: _RelateButton.default.common, acceptButtonLabel: _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;