11import React , { PureComponent } from 'react' ;
2- import PropTypes from 'prop-types' ;
32import { connect } from 'react-redux' ;
4-
53import {
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
2121const 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
138129export default MappedCreateViewModal ;
139130export { CreateViewModal } ;
0 commit comments