cspace-ui
Version:
CollectionSpace user interface for browsers
201 lines (199 loc) • 7.18 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = RecordSidebar;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _get = _interopRequireDefault(require("lodash/get"));
var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
var _MediaSnapshotPanelContainer = _interopRequireDefault(require("../../containers/record/MediaSnapshotPanelContainer"));
var _RelatedRecordPanelContainer = _interopRequireDefault(require("../../containers/record/RelatedRecordPanelContainer"));
var _RecordBatchPanelContainer = _interopRequireDefault(require("../../containers/record/RecordBatchPanelContainer"));
var _RecordReportPanelContainer = _interopRequireDefault(require("../../containers/record/RecordReportPanelContainer"));
var _RecordSidebarToggleButtonContainer = _interopRequireDefault(require("../../containers/record/RecordSidebarToggleButtonContainer"));
var _TermsUsedPanelContainer = _interopRequireDefault(require("../../containers/record/TermsUsedPanelContainer"));
var _UsedByPanelContainer = _interopRequireDefault(require("../../containers/record/UsedByPanelContainer"));
var _RecordSidebar = _interopRequireDefault(require("../../../styles/cspace-ui/RecordSidebar.css"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const propTypes = {
config: _propTypes.default.shape({
altMediaSnapshot: _propTypes.default.shape({
mediaRecordType: _propTypes.default.string.isRequired,
mediaRecordBlobCsidField: _propTypes.default.string.isRequired,
name: _propTypes.default.string.isRequired,
sort: _propTypes.default.string.isRequired,
titleMessage: _propTypes.default.shape({
id: _propTypes.default.string.isRequired,
defaultMessage: _propTypes.default.string.isRequired
}).isRequired
}),
mediaSnapshotSort: _propTypes.default.string,
recordTypes: _propTypes.default.object
}),
csid: _propTypes.default.string,
recordType: _propTypes.default.string,
vocabulary: _propTypes.default.string,
history: _propTypes.default.shape({
push: _propTypes.default.func
}),
isOpen: _propTypes.default.bool,
isRelatable: _propTypes.default.bool
};
const defaultProps = {
isOpen: true
};
function RecordSidebar(props) {
const {
config,
csid,
recordType,
vocabulary,
history,
isOpen,
isRelatable
} = props;
// TODO: Make sidebar components configurable based on service type/record type.
const recordTypeConfig = config.recordTypes[recordType];
if (!recordTypeConfig) {
return null;
}
const {
serviceType
} = recordTypeConfig.serviceConfig;
const isAudit = serviceType === 'audit';
const isAuthority = serviceType === 'authority';
const isUtility = serviceType === 'utility';
const panelColor = isAuthority ? 'purple' : 'blue';
if (!isOpen) {
return /*#__PURE__*/_react.default.createElement("div", {
className: _RecordSidebar.default.closed
}, /*#__PURE__*/_react.default.createElement(_RecordSidebarToggleButtonContainer.default, {
recordType: recordType,
config: config
}));
}
const relatedRecordDescriptors = (0, _get.default)(recordTypeConfig, ['sidebar', 'relatedRecords']) || [{
recordType: 'collectionobject'
}, {
recordType: 'procedure'
}];
let mediaSnapshot = null;
let altMediaSnapshot = null;
let relatedRecords = null;
let audit = null;
let usedBy = null;
let reports = null;
let batchJobs = null;
if (!isAuthority && !isUtility && !isAudit) {
mediaSnapshot = /*#__PURE__*/_react.default.createElement(_MediaSnapshotPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
recordType: recordType,
sort: config.mediaSnapshotSort
});
if (config.altMediaSnapshot) {
const {
mediaRecordType,
mediaRecordBlobCsidField,
name,
sort,
titleMessage
} = config.altMediaSnapshot;
altMediaSnapshot = /*#__PURE__*/_react.default.createElement(_MediaSnapshotPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
mediaRecordType: mediaRecordType,
mediaRecordBlobCsidField: mediaRecordBlobCsidField,
name: name,
recordType: recordType,
sort: sort,
titleMessage: titleMessage
});
}
relatedRecords = relatedRecordDescriptors.map(relatedRecordDescriptor => {
const {
id,
sort,
serviceTag,
recordType: relatedRecordType,
columnSet = 'narrow'
} = relatedRecordDescriptor;
const panelName = id ? `related${(0, _upperFirst.default)(id)}Panel` : `related${(0, _upperFirst.default)(relatedRecordType)}Panel`;
return /*#__PURE__*/_react.default.createElement(_RelatedRecordPanelContainer.default, {
color: panelColor,
csid: csid,
columnSetName: columnSet,
config: config,
initialSort: sort,
key: panelName,
name: panelName,
panelId: id,
recordType: recordType,
relatedRecordType: relatedRecordType,
showAddButton: isRelatable,
serviceTag: serviceTag
});
});
}
if (!isAudit) {
// Temporarily disable until services support exists.
// audit = (
// <RelatedRecordPanelContainer
// color={panelColor}
// csid={csid}
// columnSetName="narrow"
// config={config}
// initialSort={undefined}
// key="audit"
// name="relatedAuditPanel"
// recordType={recordType}
// relatedRecordType="audit"
// showAddButton={false}
// showSearchButton={false}
// listType="audit"
// />
// );
audit = null;
}
if (!isUtility) {
reports = /*#__PURE__*/_react.default.createElement(_RecordReportPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
recordType: recordType
});
batchJobs = /*#__PURE__*/_react.default.createElement(_RecordBatchPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
history: history,
recordType: recordType
});
}
if (isAuthority) {
usedBy = /*#__PURE__*/_react.default.createElement(_UsedByPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
recordType: recordType,
vocabulary: vocabulary
});
}
return /*#__PURE__*/_react.default.createElement("div", {
className: _RecordSidebar.default[serviceType]
}, /*#__PURE__*/_react.default.createElement(_RecordSidebarToggleButtonContainer.default, {
recordType: recordType,
config: config
}), mediaSnapshot, altMediaSnapshot, /*#__PURE__*/_react.default.createElement(_TermsUsedPanelContainer.default, {
color: panelColor,
csid: csid,
config: config,
recordType: recordType,
vocabulary: vocabulary
}), relatedRecords, usedBy, reports, batchJobs, audit);
}
RecordSidebar.propTypes = propTypes;
RecordSidebar.defaultProps = defaultProps;