import React, { useMemo } from 'react'; import PropTypes from 'prop-types'; import HadronDocument from 'hadron-document'; import type { EditableDocumentProps } from './editable-document'; import EditableDocument from './editable-document'; import type { ReadonlyDocumentProps } from './readonly-document'; import ReadonlyDocument from './readonly-document'; import type { BSONObject } from '../stores/crud-store'; export type DocumentProps = { doc: HadronDocument | BSONObject; editable: boolean; isTimeSeries?: boolean; } & Omit & Pick; const Document = (props: DocumentProps) => { const { editable, isTimeSeries, copyToClipboard, openInsertDocumentDialog, doc: _doc, } = props; const doc = useMemo(() => { // COMPASS-5872 If _doc is a plain js object rather than an instance of hadron-document Document // it may have an isRoot prop, which would cause the isRoot() to throw an error. if (typeof _doc?.isRoot === 'function' && _doc?.isRoot()) { return _doc as HadronDocument; } return new HadronDocument(_doc as any); }, [_doc]); if (editable && isTimeSeries) { return ( ); } if (editable) { return ; } return ; }; Document.propTypes = { doc: PropTypes.object.isRequired, editable: PropTypes.bool, isTimeSeries: PropTypes.bool, removeDocument: PropTypes.func, replaceDocument: PropTypes.func, updateDocument: PropTypes.func, openInsertDocumentDialog: PropTypes.func, copyToClipboard: PropTypes.func, isExpanded: PropTypes.bool, }; export default Document;