1- import { connect } from 'react-redux' ;
1+ import { connect as reduxConnect } from 'react-redux' ;
22import ConnectionFormModal from '@mongodb-js/connection-form' ;
33import type { ConnectionInfo } from '@mongodb-js/connection-storage/provider' ;
4+ import {
5+ connect ,
6+ disconnect ,
7+ cancelEditConnection ,
8+ saveEditedConnectionInfo ,
9+ saveAndConnect ,
10+ } from '../stores/connections-store-redux' ;
11+
412import type {
513 ConnectionId ,
614 ConnectionState ,
@@ -11,11 +19,13 @@ function shouldDisableConnectionEditing(connection: ConnectionState): boolean {
1119}
1220
1321function mapState ( {
22+ isEditingNewConnection,
1423 isEditingConnectionInfoModalOpen,
1524 editingConnectionInfo,
1625 connectionErrors,
1726 connections,
1827} : {
28+ isEditingNewConnection : boolean ;
1929 isEditingConnectionInfoModalOpen : boolean ;
2030 editingConnectionInfo : ConnectionInfo ;
2131 connectionErrors : Record < string , Error | null > ;
@@ -32,53 +42,86 @@ function mapState({
3242 initialConnectionInfo : editingConnectionInfo ,
3343 connectionErrorMessage : connectionErrors [ editingConnectionInfo . id ] ?. message ,
3444 disableEditingConnectedConnection,
45+ editingConnectionInfo,
46+ isEditingNewConnection,
47+ connections,
3548 } ;
3649}
3750
38- function mapDispatch (
39- {
40- disconnect,
41- cancelEditConnection,
42- } : {
43- //connect: (connectionInfo: ConnectionInfo) => Promise<void>;
44- //saveAndConnect: (connectionInfo: ConnectionInfo) => Promise<void>;
45- disconnect : ( connectionId : string ) => void ;
46-
47- //createNewConnection: () => void;
48- //editConnection: (connectionId: string) => void;
49- //saveEditedConnection: (connectionInfo: ConnectionInfo) => Promise<void>;
50- cancelEditConnection : ( connectionId : string ) => void ;
51- /*
52- duplicateConnection: (
53- connectionId: string,
54- options?: { autoDuplicate: boolean }
55- ) => void;
56- */
57- //toggleConnectionFavoritedStatus: (connectionId: string) => void;
58- //removeConnection: (connectionId: string) => void;
51+ const mapDispatch = {
52+ connect,
53+ disconnect,
54+ cancelEditConnection,
55+ saveEditedConnectionInfo,
56+ saveAndConnect,
57+ } ;
5958
60- //removeAllRecentConnections: () => void;
61- //showNonGenuineMongoDBWarningModal: (connectionId: string) => void;
62- } ,
63- {
64- isEditingNewConnection,
65- editingConnectionInfo,
66- connections,
67- } : {
68- isEditingNewConnection : boolean ;
69- editingConnectionInfo : ConnectionInfo ;
70- connections : {
71- byId : Record < ConnectionId , ConnectionState > ;
72- } ;
59+ function mergeProps (
60+ stateProps : ReturnType < typeof mapState > ,
61+ dispatchProps : {
62+ // TODO: surely there's a way of inferring these types?
63+ connect : ( connectionInfo : ConnectionInfo ) => any ;
64+ disconnect : ( id : string ) => void ;
65+ cancelEditConnection : ( id : string ) => void ;
66+ saveEditedConnectionInfo : ( connectionInfo : ConnectionInfo ) => any ;
67+ saveAndConnect : ( connectionInfo : ConnectionInfo ) => any ;
7368 }
7469) {
75- const disableEditingConnectedConnection = shouldDisableConnectionEditing (
76- connections . byId [ editingConnectionInfo . id ]
77- ) ;
70+ const {
71+ isOpen,
72+ initialConnectionInfo,
73+ connectionErrorMessage,
74+ disableEditingConnectedConnection,
75+ editingConnectionInfo,
76+ isEditingNewConnection,
77+ } = stateProps ;
7878
79- return {
79+ const {
80+ connect,
8081 disconnect,
82+ saveAndConnect,
83+ saveEditedConnectionInfo,
84+ cancelEditConnection,
85+ } = dispatchProps ;
86+
87+ return {
88+ isOpen,
89+ initialConnectionInfo,
90+ connectionErrorMessage,
91+ disableEditingConnectedConnection,
92+
93+ onDisconnectClicked : ( ) => disconnect ( editingConnectionInfo . id ) ,
94+ setOpen : ( newOpen : boolean ) => {
95+ // This is how leafygreen propagates `X` button click
96+ if ( newOpen === false ) {
97+ cancelEditConnection ( editingConnectionInfo . id ) ;
98+ }
99+ } ,
100+ openSettingsModal : ( ) => {
101+ // TODO: this has to emit on the global app registry somehow
102+ } ,
103+ onCancel : ( ) => {
104+ cancelEditConnection ( editingConnectionInfo . id ) ;
105+ } ,
106+ onSaveClicked : ( connectionInfo : ConnectionInfo ) => {
107+ return saveEditedConnectionInfo ( connectionInfo ) ;
108+ } ,
109+ onConnectClicked :
110+ isEditingNewConnection || disableEditingConnectedConnection
111+ ? undefined
112+ : ( connectionInfo : ConnectionInfo ) => {
113+ void connect ( connectionInfo ) ;
114+ } ,
115+ onSaveAndConnectClicked : disableEditingConnectedConnection
116+ ? undefined
117+ : ( connectionInfo : ConnectionInfo ) => {
118+ void saveAndConnect ( connectionInfo ) ;
119+ } ,
81120 } ;
82121}
83122
84- export default connect ( mapState , mapDispatch ) ( ConnectionFormModal ) ;
123+ export default reduxConnect (
124+ mapState ,
125+ mapDispatch ,
126+ mergeProps
127+ ) ( ConnectionFormModal ) ;
0 commit comments