cspace-ui
Version:
CollectionSpace user interface for browsers
256 lines (252 loc) • 8.95 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 _InvocableSearchBar = _interopRequireDefault(require("../invocable/InvocableSearchBar"));
var _modalNames = require("../../constants/modalNames");
var _searchOperators = require("../../constants/searchOperators");
var _InvocationModalContainer = _interopRequireDefault(require("../../containers/invocable/InvocationModalContainer"));
var _RecordEditorContainer = _interopRequireDefault(require("../../containers/record/RecordEditorContainer"));
var _SearchPanelContainer = _interopRequireDefault(require("../../containers/search/SearchPanelContainer"));
var _AdminTab = _interopRequireDefault(require("../../../styles/cspace-ui/AdminTab.css"));
var _permissionHelpers = require("../../helpers/permissionHelpers");
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 = {
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,
openModalName: _propTypes.default.string,
closeModal: _propTypes.default.func,
openModal: _propTypes.default.func,
openReport: _propTypes.default.func,
setToolTab: _propTypes.default.func
};
const defaultProps = {
filterDelay: 500
};
const contextTypes = {
config: _propTypes.default.shape({
recordTypes: _propTypes.default.object
}).isRequired
};
const recordType = 'report';
const invocationType = 'reportinvocation';
const getSearchDescriptor = () => _immutable.default.fromJS({
recordType,
searchQuery: {
size: 20,
sort: 'name'
}
});
class ReportPage extends _react.Component {
constructor() {
super();
this.handleSearchDescriptorChange = this.handleSearchDescriptorChange.bind(this);
this.renderSearchBar = this.renderSearchBar.bind(this);
this.handleSearchBarChange = this.handleSearchBarChange.bind(this);
this.handleItemClick = this.handleItemClick.bind(this);
this.handleModalCancelButtonClick = this.handleModalCancelButtonClick.bind(this);
this.handleModalInvokeButtonClick = this.handleModalInvokeButtonClick.bind(this);
this.handleRunButtonClick = this.handleRunButtonClick.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}`);
}
return false;
}
handleModalCancelButtonClick(event) {
const {
closeModal
} = this.props;
if (closeModal) {
event.stopPropagation();
closeModal();
}
}
handleModalInvokeButtonClick(reportMetadata, invocationDescriptor) {
const {
openReport,
closeModal
} = this.props;
const {
config
} = this.context;
if (openReport) {
openReport(config, reportMetadata, invocationDescriptor).then(() => {
if (closeModal) {
closeModal(_modalNames.MODAL_INVOCATION);
}
}).catch(() => {});
}
}
handleRunButtonClick() {
const {
openModal
} = this.props;
if (openModal) {
openModal(_modalNames.MODAL_INVOCATION);
}
}
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.fromJS({
value,
op: _searchOperators.OP_CONTAIN,
path: 'ns2:reports_common/name'
}));
} else {
updatedSearchQuery = searchQuery.delete('as');
}
updatedSearchQuery = updatedSearchQuery.set('p', 0);
this.setState({
filterValue: value,
searchDescriptor: searchDescriptor.set('searchQuery', updatedSearchQuery)
});
}
renderSearchBar() {
const {
filterValue
} = this.state;
return /*#__PURE__*/_react.default.createElement(_InvocableSearchBar.default, {
value: filterValue,
onChange: this.handleSearchBarChange
});
}
renderInvocationModal() {
const {
match,
openModalName
} = this.props;
const {
config
} = this.context;
return /*#__PURE__*/_react.default.createElement(_InvocationModalContainer.default, {
config: config,
csid: match.params.csid,
initialInvocationDescriptor: _immutable.default.Map({
mode: 'nocontext'
}),
isOpen: openModalName === _modalNames.MODAL_INVOCATION,
recordType: "report",
onCancelButtonClick: this.handleModalCancelButtonClick,
onCloseButtonClick: this.handleModalCancelButtonClick,
onInvokeButtonClick: this.handleModalInvokeButtonClick
});
}
render() {
const {
config
} = this.context;
const {
filterValue,
searchDescriptor
} = this.state;
const {
history,
match,
perms
} = this.props;
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;
if (typeof normalizedCsid !== 'undefined' && normalizedCsid !== null) {
const isRunnable = (0, _permissionHelpers.canCreate)(invocationType, perms);
// Temporarily disallow deleting or creating records.
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,
onRunButtonClick: isRunnable ? this.handleRunButtonClick : undefined
});
}
return /*#__PURE__*/_react.default.createElement("div", {
className: _AdminTab.default.common
}, /*#__PURE__*/_react.default.createElement(_SearchPanelContainer.default, {
collapsed: false,
collapsible: false,
config: config,
history: history,
isFiltered: !!filterValue,
linkItems: false,
name: "reportPage",
searchDescriptor: searchDescriptor,
title: title,
recordType: recordType,
showSearchButton: false,
renderTableHeader: this.renderSearchBar,
onItemClick: this.handleItemClick,
onSearchDescriptorChange: this.handleSearchDescriptorChange
}), recordEditor, this.renderInvocationModal());
}
}
exports.default = ReportPage;
ReportPage.propTypes = propTypes;
ReportPage.defaultProps = defaultProps;
ReportPage.contextTypes = contextTypes;