Skip to content

Commit 2bc9054

Browse files
authored
chore: hide __safeContent__ field COMPASS-5780 (#3045)
Grey out the field in the CRUD view, mark it non-editable, and deselect it by default when exporting from a collection.
1 parent b29c829 commit 2bc9054

File tree

16 files changed

+148
-29
lines changed

16 files changed

+148
-29
lines changed

package-lock.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compass-components/src/components/document-list/element.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ function useHadronElement(el: HadronElementType) {
149149
level: el.level,
150150
parentType: el.parent?.currentType,
151151
removed: el.isRemoved(),
152+
internal: el.isInternalField(),
152153
};
153154
}
154155
const buttonReset = css({
@@ -240,6 +241,10 @@ const elementKey = css({
240241
maxWidth: '60%',
241242
});
242243

244+
const elementKeyInternal = css({
245+
color: uiColors.gray.base,
246+
});
247+
243248
const elementDivider = css({
244249
flex: 'none',
245250
userSelect: 'none',
@@ -312,6 +317,7 @@ export const HadronElement: React.FunctionComponent<{
312317
level,
313318
parentType,
314319
removed,
320+
internal,
315321
} = useHadronElement(element);
316322

317323
useEffect(() => {
@@ -346,6 +352,10 @@ export const HadronElement: React.FunctionComponent<{
346352
onClick: onLineClick,
347353
};
348354

355+
const keyProps = {
356+
className: cx(elementKey, internal && elementKeyInternal),
357+
};
358+
349359
return (
350360
<>
351361
<div
@@ -435,7 +445,7 @@ export const HadronElement: React.FunctionComponent<{
435445
</button>
436446
)}
437447
</div>
438-
<div className={elementKey} data-testid="hadron-document-element-key">
448+
<div {...keyProps} data-testid="hadron-document-element-key">
439449
{key.editable ? (
440450
<KeyEditor
441451
value={key.value}

packages/compass-crud/src/components/document-table-view.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,8 @@ class DocumentTableView extends React.Component {
116116
* @param {Object} data - The data object.
117117
*/
118118
handleClone(data) {
119-
this.props.openInsertDocumentDialog(data.hadronDocument.generateObject(), true);
119+
const clonedDoc = data.hadronDocument.generateObject({ excludeInternalFields: true });
120+
this.props.openInsertDocumentDialog(clonedDoc, true);
120121
}
121122

122123
/**

packages/compass-crud/src/components/editable-document.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,8 @@ class EditableDocument extends React.Component {
159159
* Handle cloning of the document.
160160
*/
161161
handleClone() {
162-
this.props.openInsertDocumentDialog(this.props.doc.generateObject(), true);
162+
const clonedDoc = this.props.doc.generateObject({ excludeInternalFields: true });
163+
this.props.openInsertDocumentDialog(clonedDoc, true);
163164
}
164165

165166
/**

packages/compass-crud/src/components/json-editor.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ class EditableJson extends React.Component {
157157
* Handle cloning of the json document.
158158
*/
159159
handleClone() {
160-
this.props.openInsertDocumentDialog(this.props.doc.generateObject(), true);
160+
const clonedDoc = this.props.doc.generateObject({ excludeInternalFields: true });
161+
this.props.openInsertDocumentDialog(clonedDoc, true);
161162
}
162163

163164
/**

packages/compass-crud/src/components/readonly-document.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ class ReadonlyDocument extends React.Component {
3535
}
3636

3737
handleClone = () => {
38-
this.props.openInsertDocumentDialog(this.props.doc.generateObject(), true);
38+
const clonedDoc = this.props.doc.generateObject({ excludeInternalFields: true });
39+
this.props.openInsertDocumentDialog(clonedDoc, true);
3940
}
4041

4142
/**

packages/compass-import-export/src/modules/load-fields.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import util from 'util';
22
import dotnotation from '../utils/dotnotation';
33
import createLoggerAndTelemetry from '@mongodb-js/compass-logging';
4+
import { isInternalFieldPath } from 'hadron-document';
45

56
const { log, mongoLogId } = createLoggerAndTelemetry(
67
'COMPASS-IMPORT-EXPORT-UI'
@@ -54,5 +55,10 @@ export function getSelectableFields(fields, { maxDepth } = {}) {
5455
const selectableFields = Object.keys(fields).map((field) =>
5556
truncateFieldToDepth(field, maxDepth)
5657
);
57-
return Object.fromEntries(selectableFields.map((field) => [field, ENABLED]));
58+
return Object.fromEntries(
59+
selectableFields.map((field) => {
60+
const enabled = !isInternalFieldPath(field);
61+
return [field, +enabled];
62+
})
63+
);
5864
}

packages/compass-import-export/src/modules/load-fields.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,16 @@ describe('getSelectableFields', function () {
138138
});
139139
}
140140
});
141+
142+
it('excludes driver/server-internal fields by default', function () {
143+
const allFields = { a: 1, __safeContent__: 1, '__safeContent__.0': 1 };
144+
145+
const fields = getSelectableFields(allFields, { maxDepth: 2 });
146+
147+
expect(fields).to.deep.equal({
148+
a: 1,
149+
__safeContent__: 0,
150+
'__safeContent__.0': 0,
151+
});
152+
});
141153
});

packages/compass-schema/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
"bson": "*",
6262
"d3": "^3.5.17",
6363
"debug": "^3.0.1",
64+
"hadron-document": "^7.10.0",
6465
"hadron-ipc": "^2.10.0",
6566
"hadron-react-buttons": "^5.8.0",
6667
"hadron-react-components": "^5.14.0",
@@ -96,6 +97,7 @@
9697
"enzyme": "^3.11.0",
9798
"eslint": "^7.25.0",
9899
"hadron-app-registry": "^8.11.0",
100+
"hadron-document": "^7.10.0",
99101
"hadron-ipc": "^2.10.0",
100102
"hadron-react-buttons": "^5.8.0",
101103
"hadron-react-components": "^5.14.0",

packages/compass-schema/src/modules/schema-analysis.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import util from 'util';
2-
2+
import { isInternalFieldPath } from 'hadron-document';
33
import createLoggerAndTelemetry from '@mongodb-js/compass-logging';
4+
45
const { log, mongoLogId, debug } = createLoggerAndTelemetry('COMPASS-SCHEMA');
56

67
import mongodbSchema from 'mongodb-schema';
@@ -67,6 +68,9 @@ class SchemaAnalysis {
6768
.toArray()
6869
.catch((err) => Promise.reject(promoteMongoErrorCode(err)));
6970
const schemaData = await analyzeDocuments(docs);
71+
schemaData.fields = schemaData.fields.filter(
72+
({ path }) => !isInternalFieldPath(path)
73+
);
7074
log.info(mongoLogId(1001000090), 'Schema', 'Schema analysis completed', {
7175
ns: this._ns,
7276
});

0 commit comments

Comments
 (0)