Skip to content

Commit 93eb5ce

Browse files
authored
chore(aggregations): refactor create-view to use service injection COMPASS-7410 (#5087)
chore(aggregations): refactor create-view to use service injection
1 parent 20aa4f5 commit 93eb5ce

File tree

20 files changed

+335
-491
lines changed

20 files changed

+335
-491
lines changed

package-lock.json

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

packages/compass-aggregations/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"hadron-app-registry": "^9.0.14",
5555
"hadron-document": "^8.4.3",
5656
"hadron-type-checker": "^7.1.0",
57+
"mongodb-data-service": "^22.15.1",
5758
"react": "^17.0.2"
5859
},
5960
"devDependencies": {
@@ -80,7 +81,6 @@
8081
"lodash": "^4.17.21",
8182
"mocha": "^10.2.0",
8283
"mongodb": "^6.0.0",
83-
"mongodb-data-service": "^22.15.1",
8484
"mongodb-ns": "^2.4.0",
8585
"mongodb-query-parser": "^3.1.3",
8686
"mongodb-schema": "^12.0.0",
@@ -113,7 +113,8 @@
113113
"compass-preferences-model": "^2.15.6",
114114
"hadron-app-registry": "^9.0.13",
115115
"hadron-document": "^8.4.3",
116-
"hadron-type-checker": "^7.1.0"
116+
"hadron-type-checker": "^7.1.0",
117+
"mongodb-data-service": "^22.15.1"
117118
},
118119
"homepage": "https://github.com/mongodb-js/compass",
119120
"bugs": {
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import React, { PureComponent } from 'react';
2-
import PropTypes from 'prop-types';
32
import { connect } from 'react-redux';
4-
53
import {
64
Banner,
75
Body,
@@ -11,38 +9,36 @@ import {
119
spacing,
1210
TextInput,
1311
} from '@mongodb-js/compass-components';
14-
15-
import { createView } from '../../modules/create-view';
16-
import { changeViewName } from '../../modules/create-view/name';
17-
import { toggleIsVisible } from '../../modules/create-view/is-visible';
18-
import { createLoggerAndTelemetry } from '@mongodb-js/compass-logging';
19-
const { track } = createLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
12+
import {
13+
createView,
14+
changeViewName,
15+
toggleIsVisible,
16+
} from '../../modules/create-view';
17+
import type { LoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
18+
import { withLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
19+
import type { CreateViewRootState } from '../../stores/create-view';
2020

2121
const progressContainerStyles = css({
2222
display: 'flex',
2323
gap: spacing[2],
2424
alignItems: 'center',
2525
});
2626

27-
class CreateViewModal extends PureComponent {
28-
static displayName = 'CreateViewModalComponent';
29-
30-
static propTypes = {
31-
createView: PropTypes.func.isRequired,
32-
33-
isVisible: PropTypes.bool.isRequired,
34-
toggleIsVisible: PropTypes.func.isRequired,
35-
36-
name: PropTypes.string,
37-
changeViewName: PropTypes.func.isRequired,
38-
isDuplicating: PropTypes.bool.isRequired,
39-
40-
source: PropTypes.string.isRequired,
41-
pipeline: PropTypes.array.isRequired,
42-
isRunning: PropTypes.bool.isRequired,
43-
error: PropTypes.object,
44-
};
45-
27+
type CreateViewModalProps = {
28+
createView: () => void;
29+
isVisible?: boolean;
30+
toggleIsVisible: (newVal: boolean) => void;
31+
name?: string;
32+
changeViewName: (name: string) => void;
33+
isDuplicating?: boolean;
34+
source?: string;
35+
pipeline?: unknown[];
36+
isRunning?: boolean;
37+
error: Error | null;
38+
logger: LoggerAndTelemetry;
39+
};
40+
41+
class CreateViewModal extends PureComponent<CreateViewModalProps> {
4642
static defaultProps = {
4743
name: '',
4844
source: '',
@@ -52,19 +48,17 @@ class CreateViewModal extends PureComponent {
5248
isDuplicating: false,
5349
};
5450

55-
componentDidUpdate(prevProps) {
51+
componentDidUpdate(prevProps: CreateViewModalProps) {
5652
if (prevProps.isVisible !== this.props.isVisible && this.props.isVisible) {
57-
track('Screen', { name: 'create_view_modal' });
53+
this.props.logger.track('Screen', { name: 'create_view_modal' });
5854
}
5955
}
6056

61-
onNameChange = (evt) => {
62-
this.props.changeViewName(evt.target.value);
57+
onNameChange = (evt: React.ChangeEvent<HTMLInputElement>) => {
58+
this.props.changeViewName(evt.currentTarget.value);
6359
};
6460

65-
onFormSubmit = (evt) => {
66-
evt.preventDefault();
67-
evt.stopPropagation();
61+
onFormSubmit = () => {
6862
this.props.createView();
6963
};
7064

@@ -74,15 +68,13 @@ class CreateViewModal extends PureComponent {
7468

7569
/**
7670
* Render the save pipeline component.
77-
*
78-
* @returns {Component} The component.
7971
*/
8072
render() {
8173
return (
8274
<FormModal
8375
title={this.props.isDuplicating ? 'Duplicate View' : 'Create a View'}
8476
open={this.props.isVisible}
85-
onSubmit={this.props.createView}
77+
onSubmit={this.onFormSubmit}
8678
onCancel={this.onCancel}
8779
submitButtonText="Create"
8880
data-testid="create-view-modal"
@@ -110,12 +102,8 @@ class CreateViewModal extends PureComponent {
110102

111103
/**
112104
* Map the store state to properties to pass to the components.
113-
*
114-
* @param {Object} state - The store state.
115-
*
116-
* @returns {Object} The mapped properties.
117105
*/
118-
const mapStateToProps = (state) => ({
106+
const mapStateToProps = (state: CreateViewRootState) => ({
119107
isRunning: state.isRunning,
120108
isVisible: state.isVisible,
121109
isDuplicating: state.isDuplicating,
@@ -129,11 +117,14 @@ const mapStateToProps = (state) => ({
129117
* Connect the redux store to the component.
130118
* (dispatch)
131119
*/
132-
const MappedCreateViewModal = connect(mapStateToProps, {
133-
createView,
134-
changeViewName,
135-
toggleIsVisible,
136-
})(CreateViewModal);
120+
const MappedCreateViewModal = withLoggerAndTelemetry(
121+
connect(mapStateToProps, {
122+
createView,
123+
changeViewName,
124+
toggleIsVisible,
125+
})(CreateViewModal),
126+
'COMPASS-CREATE-VIEW-UI'
127+
);
137128

138129
export default MappedCreateViewModal;
139130
export { CreateViewModal };

packages/compass-aggregations/src/index.ts

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import { Aggregations } from './components/aggregations';
66
import { activateCreateViewPlugin } from './stores/create-view';
77
import StageEditor from './components/stage-editor';
88
import CreateViewModal from './components/create-view-modal';
9+
import { dataServiceLocator } from 'mongodb-data-service/provider';
10+
import { createLoggerAndTelemetryLocator } from '@mongodb-js/compass-logging/provider';
911

1012
/**
1113
* A sample role for the component.
@@ -40,11 +42,17 @@ const deactivate = (appRegistry: AppRegistry) => {
4042
appRegistry.deregisterRole('Collection.Tab', ROLE);
4143
};
4244

43-
export const CreateViewPlugin = registerHadronPlugin({
44-
name: 'CreateView',
45-
component: CreateViewModal,
46-
activate: activateCreateViewPlugin,
47-
});
45+
export const CreateViewPlugin = registerHadronPlugin(
46+
{
47+
name: 'CreateView',
48+
component: CreateViewModal,
49+
activate: activateCreateViewPlugin,
50+
},
51+
{
52+
dataService: dataServiceLocator as typeof dataServiceLocator<'createView'>,
53+
logger: createLoggerAndTelemetryLocator('COMPASS-CREATE-VIEW-UI'),
54+
}
55+
);
4856

4957
export default AggregationsPlugin;
5058
export { activate, deactivate, Aggregations, StageEditor, configureStore };

packages/compass-aggregations/src/modules/create-view/error.js

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)