cspace-ui
Version:
CollectionSpace user interface for browsers
254 lines (250 loc) • 8.66 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 _qs = _interopRequireDefault(require("qs"));
var _RecordEditorContainer = _interopRequireDefault(require("../../containers/record/RecordEditorContainer"));
var _SearchPanelContainer = _interopRequireDefault(require("../../containers/search/SearchPanelContainer"));
var _permissionHelpers = require("../../helpers/permissionHelpers");
var _AdminTabButtonBar = _interopRequireDefault(require("../admin/AdminTabButtonBar"));
var _AuthRoleSearchBar = _interopRequireDefault(require("../admin/AuthRoleSearchBar"));
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 = {
history: _propTypes.default.shape({
replace: _propTypes.default.func
}),
location: _propTypes.default.shape({
search: _propTypes.default.string
}),
match: _propTypes.default.shape({
params: _propTypes.default.object
}),
perms: _propTypes.default.instanceOf(_immutable.default.Map),
filterDelay: _propTypes.default.number,
setAdminTab: _propTypes.default.func
};
const defaultProps = {
filterDelay: 500
};
const contextTypes = {
config: _propTypes.default.shape({
recordTypes: _propTypes.default.object
}).isRequired
};
const recordType = 'authrole';
const getSearchDescriptor = () => _immutable.default.fromJS({
recordType,
searchQuery: {
size: 20
}
});
class AuthRolePage extends _react.Component {
constructor() {
super();
this.cloneRecord = this.cloneRecord.bind(this);
this.handleCreateButtonClick = this.handleCreateButtonClick.bind(this);
this.handleItemClick = this.handleItemClick.bind(this);
this.handleRecordCreated = this.handleRecordCreated.bind(this);
this.handleRecordDeleted = this.handleRecordDeleted.bind(this);
this.handleRecordSaved = this.handleRecordSaved.bind(this);
this.handleSearchBarChange = this.handleSearchBarChange.bind(this);
this.handleSearchDescriptorChange = this.handleSearchDescriptorChange.bind(this);
this.renderSearchBar = this.renderSearchBar.bind(this);
this.state = {
searchDescriptor: getSearchDescriptor()
};
}
componentDidMount() {
const {
setAdminTab
} = this.props;
if (setAdminTab) {
setAdminTab(recordType);
}
}
handleCreateButtonClick() {
const {
history
} = this.props;
history.replace(`/admin/${recordType}/new`);
}
handleItemClick(item) {
const {
history,
perms
} = this.props;
if ((0, _permissionHelpers.canRead)(recordType, perms)) {
const csid = item.get('@csid');
history.replace(`/admin/${recordType}/${csid}`);
}
// Prevent the default action.
return false;
}
handleRecordCreated(newRecordCsid, isNavigating) {
if (!isNavigating) {
const {
history
} = this.props;
history.replace(`/admin/${recordType}/${newRecordCsid}`);
}
}
handleRecordDeleted() {
const {
history
} = this.props;
history.replace(`/admin/${recordType}`);
const {
searchDescriptor
} = this.state;
this.setState({
searchDescriptor: searchDescriptor.set('seqId', new Date().toISOString())
});
}
handleRecordSaved() {
const {
searchDescriptor
} = this.state;
this.setState({
searchDescriptor: searchDescriptor.set('seqId', new Date().toISOString())
});
}
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
});
}
cloneRecord() {
const {
history,
match
} = this.props;
const {
csid
} = match.params;
const query = {
clone: csid
};
const queryString = _qs.default.stringify(query);
history.replace({
pathname: `/admin/${recordType}/new`,
search: `?${queryString}`
});
}
filter(value) {
const {
searchDescriptor
} = this.state;
const searchQuery = searchDescriptor.get('searchQuery');
let updatedSearchQuery;
if (value) {
updatedSearchQuery = searchQuery.set('dn', value);
} else {
updatedSearchQuery = searchQuery.delete('dn');
}
updatedSearchQuery = updatedSearchQuery.set('p', 0);
this.setState({
searchDescriptor: searchDescriptor.set('searchQuery', updatedSearchQuery)
});
}
renderSearchBar() {
const {
searchDescriptor
} = this.state;
const filterValue = searchDescriptor.getIn(['searchQuery', 'dn']);
return /*#__PURE__*/_react.default.createElement(_AuthRoleSearchBar.default, {
value: filterValue,
onChange: this.handleSearchBarChange
});
}
render() {
const {
config
} = this.context;
const {
history,
location,
match,
perms
} = this.props;
const {
searchDescriptor
} = this.state;
const {
csid
} = match.params;
const query = _qs.default.parse(location.search.substring(1));
const normalizedCsid = csid === 'new' ? '' : csid;
const cloneCsid = query.clone;
const recordTypeConfig = (0, _get.default)(config, ['recordTypes', recordType]);
const filterValue = searchDescriptor.getIn(['searchQuery', 'dn']);
const title = /*#__PURE__*/_react.default.createElement(_reactIntl.FormattedMessage, recordTypeConfig.messages.record.collectionName);
let recordEditor;
if (typeof normalizedCsid !== 'undefined' && normalizedCsid !== null) {
recordEditor = /*#__PURE__*/_react.default.createElement(_RecordEditorContainer.default, {
cloneCsid: cloneCsid,
config: config,
csid: normalizedCsid,
recordType: recordType,
isHardDelete: true,
clone: this.cloneRecord,
onRecordCreated: this.handleRecordCreated,
onRecordDeleted: this.handleRecordDeleted,
onRecordSaved: this.handleRecordSaved
});
}
return /*#__PURE__*/_react.default.createElement("div", {
className: _AdminTab.default.common
}, /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_AdminTabButtonBar.default, {
isCreatable: (0, _permissionHelpers.canCreate)(recordType, perms),
onCreateButtonClick: this.handleCreateButtonClick
}), /*#__PURE__*/_react.default.createElement(_SearchPanelContainer.default, {
collapsed: false,
collapsible: false,
config: config,
history: history,
isFiltered: !!filterValue,
linkItems: false,
listType: "role",
name: "authRolePage",
pageSizeOptionListName: "searchResultPagePageSizes",
searchDescriptor: searchDescriptor,
title: title,
recordType: recordType,
renderTableHeader: this.renderSearchBar,
showSearchButton: false,
onItemClick: this.handleItemClick,
onSearchDescriptorChange: this.handleSearchDescriptorChange
})), recordEditor);
}
}
exports.default = AuthRolePage;
AuthRolePage.propTypes = propTypes;
AuthRolePage.defaultProps = defaultProps;
AuthRolePage.contextTypes = contextTypes;