From a6f2af8f1085971c91227bde3a295978f09c9d63 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 10 May 2022 15:14:54 +0200 Subject: [PATCH 1/4] chore(compass-crud): Do not recreate HadronDocument instances in render --- .../input-preview/input-preview.jsx | 3 +- .../stage-preview/stage-preview.jsx | 6 +-- .../compass-crud/src/components/document.jsx | 53 ++++++++++--------- .../document-preview/document-preview.jsx | 4 +- 4 files changed, 30 insertions(+), 36 deletions(-) diff --git a/packages/compass-aggregations/src/components/input-preview/input-preview.jsx b/packages/compass-aggregations/src/components/input-preview/input-preview.jsx index cfb98b59928..087239770bc 100644 --- a/packages/compass-aggregations/src/components/input-preview/input-preview.jsx +++ b/packages/compass-aggregations/src/components/input-preview/input-preview.jsx @@ -1,7 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Document } from '@mongodb-js/compass-crud'; -import HadronDocument from 'hadron-document'; import LoadingOverlay from '../loading-overlay'; import styles from './input-preview.module.less'; @@ -26,7 +25,7 @@ class InputPreview extends Component { const documents = (this.props.documents || []).map((doc, i) => { return (
- +
); }); diff --git a/packages/compass-aggregations/src/components/stage-preview/stage-preview.jsx b/packages/compass-aggregations/src/components/stage-preview/stage-preview.jsx index 361c33d5777..abda00062b3 100644 --- a/packages/compass-aggregations/src/components/stage-preview/stage-preview.jsx +++ b/packages/compass-aggregations/src/components/stage-preview/stage-preview.jsx @@ -3,7 +3,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { Document } from '@mongodb-js/compass-crud'; import { TextButton } from 'hadron-react-buttons'; -import HadronDocument from 'hadron-document'; import LoadingOverlay from '../loading-overlay'; import { OUT, MERGE } from '../../modules/pipeline'; import decomment from 'decomment'; @@ -211,10 +210,7 @@ class StagePreview extends Component { const documents = this.props.documents.map((doc, i) => { return (
- +
); }); diff --git a/packages/compass-crud/src/components/document.jsx b/packages/compass-crud/src/components/document.jsx index 61f67273c26..5f14019d178 100644 --- a/packages/compass-crud/src/components/document.jsx +++ b/packages/compass-crud/src/components/document.jsx @@ -1,40 +1,41 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import PropTypes from 'prop-types'; +import HadronDocument from 'hadron-document'; import EditableDocument from './editable-document'; import ReadonlyDocument from './readonly-document'; -/** - * Component for a single document in a list of documents. - */ -class Document extends React.Component { - /** - * Render a single document list item. - * - * @returns {React.Component} The component. - */ - render() { - if (this.props.editable && this.props.isTimeSeries) { - return ( - - ); - } - if (this.props.editable) { - return (); +const Document = (props) => { + const { + editable, + isTimeSeries, + copyToClipboard, + openInsertDocumentDialog, + doc: _doc, + } = props; + + const doc = useMemo(() => { + if (_doc.type === 'Document') { + return _doc; } + return new HadronDocument(_doc); + }, [_doc]); + + if (editable && isTimeSeries) { return ( ); } -} -Document.displayName = 'Document'; + if (editable) { + return ; + } + + return ; +}; Document.propTypes = { doc: PropTypes.object.isRequired, diff --git a/packages/compass-schema-validation/src/components/document-preview/document-preview.jsx b/packages/compass-schema-validation/src/components/document-preview/document-preview.jsx index 3ace355a72a..a64b809a1fc 100644 --- a/packages/compass-schema-validation/src/components/document-preview/document-preview.jsx +++ b/packages/compass-schema-validation/src/components/document-preview/document-preview.jsx @@ -1,8 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; -import classnames from 'classnames'; import { Document } from '@mongodb-js/compass-crud'; -import HadronDocument from 'hadron-document'; import styles from './document-preview.module.less'; @@ -37,7 +35,7 @@ class DocumentPreview extends Component {
From fe18ba3fb659f9f9ec56a167d6dd17cd29186397 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 10 May 2022 15:54:10 +0200 Subject: [PATCH 2/4] chore(compass-crud): Use isRoot instead of type prop check --- packages/compass-crud/src/components/document.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compass-crud/src/components/document.jsx b/packages/compass-crud/src/components/document.jsx index 5f14019d178..da9bcb51c4d 100644 --- a/packages/compass-crud/src/components/document.jsx +++ b/packages/compass-crud/src/components/document.jsx @@ -14,7 +14,7 @@ const Document = (props) => { } = props; const doc = useMemo(() => { - if (_doc.type === 'Document') { + if (_doc?.isRoot()) { return _doc; } return new HadronDocument(_doc); From cd679f23084b5fb88a0694d5234847ad61a41707 Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 10 May 2022 15:57:40 +0200 Subject: [PATCH 3/4] chore(compass-schema-validation): Remove unused dependency --- package-lock.json | 2 -- packages/compass-schema-validation/package.json | 1 - 2 files changed, 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a7ee9a7593..a27fafd028d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -78770,7 +78770,6 @@ "font-awesome": "^4.7.0", "hadron-app": "^4.22.0", "hadron-app-registry": "^8.11.0", - "hadron-document": "^7.10.0", "hadron-react-buttons": "^5.8.0", "hadron-react-components": "^5.14.0", "html-webpack-plugin": "^3.2.0", @@ -123665,7 +123664,6 @@ "font-awesome": "^4.7.0", "hadron-app": "^4.22.0", "hadron-app-registry": "^8.11.0", - "hadron-document": "^7.10.0", "hadron-react-buttons": "^5.8.0", "hadron-react-components": "^5.14.0", "html-webpack-plugin": "^3.2.0", diff --git a/packages/compass-schema-validation/package.json b/packages/compass-schema-validation/package.json index 774e98599f9..70562a23735 100644 --- a/packages/compass-schema-validation/package.json +++ b/packages/compass-schema-validation/package.json @@ -82,7 +82,6 @@ "font-awesome": "^4.7.0", "hadron-app": "^4.22.0", "hadron-app-registry": "^8.11.0", - "hadron-document": "^7.10.0", "hadron-react-buttons": "^5.8.0", "hadron-react-components": "^5.14.0", "html-webpack-plugin": "^3.2.0", From 532ba0c3f3f1823f6ccdfa0de31616a43fb48d5e Mon Sep 17 00:00:00 2001 From: Sergey Petushkov Date: Tue, 10 May 2022 16:08:17 +0200 Subject: [PATCH 4/4] chore(compass-crud): More optional chaining --- packages/compass-crud/src/components/document.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compass-crud/src/components/document.jsx b/packages/compass-crud/src/components/document.jsx index da9bcb51c4d..c48455eca2f 100644 --- a/packages/compass-crud/src/components/document.jsx +++ b/packages/compass-crud/src/components/document.jsx @@ -14,7 +14,7 @@ const Document = (props) => { } = props; const doc = useMemo(() => { - if (_doc?.isRoot()) { + if (_doc?.isRoot?.()) { return _doc; } return new HadronDocument(_doc);