cspace-ui
Version:
CollectionSpace user interface for browsers
232 lines (227 loc) • 8.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _immutable = _interopRequireDefault(require("immutable"));
var _reactIntl = require("react-intl");
var _get = _interopRequireDefault(require("lodash/get"));
var _searchOperators = require("../../constants/searchOperators");
var _VocabularyUsedByPanelContainer = _interopRequireDefault(require("../../containers/admin/VocabularyUsedByPanelContainer"));
var _RecordEditorContainer = _interopRequireDefault(require("../../containers/record/RecordEditorContainer"));
var _SearchPanelContainer = _interopRequireDefault(require("../../containers/search/SearchPanelContainer"));
var _permissionHelpers = require("../../helpers/permissionHelpers");
var _VocabularySearchBar = _interopRequireDefault(require("../admin/VocabularySearchBar"));
var _AdminTab = _interopRequireDefault(require("../../../styles/cspace-ui/AdminTab.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; }
/* global window */
const propTypes = {
data: _propTypes.default.instanceOf(_immutable.default.Map),
history: _propTypes.default.shape({
replace: _propTypes.default.func
}),
match: _propTypes.default.shape({
params: _propTypes.default.object
}),
perms: _propTypes.default.instanceOf(_immutable.default.Map),
filterDelay: _propTypes.default.number,
readVocabularyItemRefs: _propTypes.default.func,
setToolTab: _propTypes.default.func
};
const defaultProps = {
filterDelay: 500
};
const contextTypes = {
config: _propTypes.default.shape({
recordTypes: _propTypes.default.object
}).isRequired
};
const recordType = 'vocabulary';
const getSearchDescriptor = () => _immutable.default.fromJS({
recordType,
searchQuery: {
size: 20,
sort: 'displayName'
}
});
class VocabularyPage extends _react.Component {
constructor() {
super();
this.handleItemClick = this.handleItemClick.bind(this);
this.handleRecordReadComplete = this.handleRecordReadComplete.bind(this);
this.handleRecordSaved = this.handleRecordSaved.bind(this);
this.handleSearchDescriptorChange = this.handleSearchDescriptorChange.bind(this);
this.handleSearchBarChange = this.handleSearchBarChange.bind(this);
this.renderSearchBar = this.renderSearchBar.bind(this);
this.state = {
searchDescriptor: getSearchDescriptor()
};
}
componentDidMount() {
const {
setToolTab
} = this.props;
if (setToolTab) {
setToolTab(recordType);
}
}
handleItemClick(item) {
const {
history,
perms
} = this.props;
if ((0, _permissionHelpers.canRead)(recordType, perms)) {
const csid = item.get('csid');
history.replace(`/tool/${recordType}/${csid}`);
}
// Prevent the default action.
return false;
}
handleRecordReadComplete() {
this.readItemRefs();
}
handleRecordSaved() {
const {
searchDescriptor
} = this.state;
this.setState({
searchDescriptor: searchDescriptor.set('seqId', new Date().toISOString())
});
this.readItemRefs();
}
handleSearchBarChange(value) {
if (this.filterTimer) {
window.clearTimeout(this.filterTimer);
this.filterTimer = null;
}
if (value) {
const {
filterDelay
} = this.props;
this.filterTimer = window.setTimeout(() => {
this.filter(value);
this.filterTimer = null;
}, filterDelay);
} else {
this.filter(value);
}
}
handleSearchDescriptorChange(searchDescriptor) {
this.setState({
searchDescriptor
});
}
filter(value) {
const {
searchDescriptor
} = this.state;
const searchQuery = searchDescriptor.get('searchQuery');
let updatedSearchQuery;
if (value) {
updatedSearchQuery = searchQuery.set('as', _immutable.default.Map({
value,
op: _searchOperators.OP_CONTAIN,
path: 'ns2:vocabularies_common/displayName'
}));
} else {
updatedSearchQuery = searchQuery.delete('as');
}
updatedSearchQuery = updatedSearchQuery.set('p', 0);
this.setState({
filterValue: value,
searchDescriptor: searchDescriptor.set('searchQuery', updatedSearchQuery)
});
}
readItemRefs() {
const {
data,
readVocabularyItemRefs
} = this.props;
if (readVocabularyItemRefs && data) {
const csid = data.getIn(['document', 'ns2:vocabularies_common', 'csid']);
const vocabularyName = data.getIn(['document', 'ns2:vocabularies_common', 'shortIdentifier']);
if (csid && vocabularyName) {
readVocabularyItemRefs(csid, vocabularyName);
}
}
}
renderSearchBar() {
const {
filterValue
} = this.state;
return /*#__PURE__*/_react.default.createElement(_VocabularySearchBar.default, {
value: filterValue,
onChange: this.handleSearchBarChange
});
}
render() {
const {
config
} = this.context;
const {
history,
match,
perms
} = this.props;
const {
filterValue,
searchDescriptor
} = this.state;
const {
csid
} = match.params;
const normalizedCsid = csid === 'new' ? '' : csid;
const recordTypeConfig = (0, _get.default)(config, ['recordTypes', recordType]);
const title = /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, recordTypeConfig.messages.record.collectionName);
let recordEditor;
let usedBy;
if (typeof normalizedCsid !== 'undefined' && normalizedCsid !== null) {
// Don't allow creating or deleting.
let restrictedPerms = perms;
restrictedPerms = (0, _permissionHelpers.disallowCreate)(recordType, restrictedPerms);
restrictedPerms = (0, _permissionHelpers.disallowDelete)(recordType, restrictedPerms);
restrictedPerms = (0, _permissionHelpers.disallowSoftDelete)(recordType, restrictedPerms);
recordEditor = /*#__PURE__*/_react.default.createElement(_RecordEditorContainer.default, {
config: config,
csid: normalizedCsid,
recordType: recordType,
perms: restrictedPerms,
onRecordReadComplete: this.handleRecordReadComplete,
onRecordSaved: this.handleRecordSaved
});
if (normalizedCsid) {
usedBy = /*#__PURE__*/_react.default.createElement(_VocabularyUsedByPanelContainer.default, {
config: config,
csid: normalizedCsid
});
}
}
return /*#__PURE__*/_react.default.createElement("div", {
className: _AdminTab.default.common
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_SearchPanelContainer.default, {
collapsed: false,
collapsible: false,
config: config,
history: history,
isFiltered: !!filterValue,
linkItems: false,
name: "vocabularyPage",
pageSizeOptionListName: "searchResultPagePageSizes",
searchDescriptor: searchDescriptor,
title: title,
recordType: recordType,
showSearchButton: false,
renderTableHeader: this.renderSearchBar,
onItemClick: this.handleItemClick,
onSearchDescriptorChange: this.handleSearchDescriptorChange
})), /*#__PURE__*/_react.default.createElement("div", null, recordEditor, usedBy));
}
}
exports.default = VocabularyPage;
VocabularyPage.propTypes = propTypes;
VocabularyPage.defaultProps = defaultProps;
VocabularyPage.contextTypes = contextTypes;