Skip to content

Commit f360608

Browse files
committed
compass-connections plugin component
1 parent 104dc38 commit f360608

File tree

3 files changed

+66
-47
lines changed

3 files changed

+66
-47
lines changed

packages/compass-connections/src/components/connection-modal.tsx

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { connect as reduxConnect } from 'react-redux';
1+
import { connect as reduxConnect } from '../stores/store-context';
22
import ConnectionFormModal from '@mongodb-js/connection-form';
33
import type { ConnectionInfo } from '@mongodb-js/connection-storage/provider';
44
import {
@@ -21,30 +21,29 @@ function shouldDisableConnectionEditing(connection: ConnectionState): boolean {
2121
function mapState({
2222
isEditingNewConnection,
2323
isEditingConnectionInfoModalOpen,
24-
editingConnectionInfo,
25-
connectionErrors,
24+
editingConnectionInfoId,
2625
connections,
2726
}: {
2827
isEditingNewConnection: boolean;
2928
isEditingConnectionInfoModalOpen: boolean;
30-
editingConnectionInfo: ConnectionInfo;
31-
connectionErrors: Record<string, Error | null>;
29+
editingConnectionInfoId: ConnectionId;
3230
connections: {
3331
byId: Record<ConnectionId, ConnectionState>;
3432
};
3533
}) {
36-
const disableEditingConnectedConnection = shouldDisableConnectionEditing(
37-
connections.byId[editingConnectionInfo.id]
38-
);
34+
const editingConnection = connections.byId[editingConnectionInfoId];
35+
const editingConnectionInfo = editingConnection.info;
36+
37+
const disableEditingConnectedConnection =
38+
shouldDisableConnectionEditing(editingConnection);
3939

4040
return {
4141
isOpen: isEditingConnectionInfoModalOpen,
4242
initialConnectionInfo: editingConnectionInfo,
43-
connectionErrorMessage: connectionErrors[editingConnectionInfo.id]?.message,
43+
connectionErrorMessage: editingConnection?.error?.message,
4444
disableEditingConnectedConnection,
45-
editingConnectionInfo,
45+
editingConnectionInfoId,
4646
isEditingNewConnection,
47-
connections,
4847
};
4948
}
5049

@@ -72,7 +71,7 @@ function mergeProps(
7271
initialConnectionInfo,
7372
connectionErrorMessage,
7473
disableEditingConnectedConnection,
75-
editingConnectionInfo,
74+
editingConnectionInfoId,
7675
isEditingNewConnection,
7776
} = stateProps;
7877

@@ -90,18 +89,18 @@ function mergeProps(
9089
connectionErrorMessage,
9190
disableEditingConnectedConnection,
9291

93-
onDisconnectClicked: () => disconnect(editingConnectionInfo.id),
92+
onDisconnectClicked: () => disconnect(editingConnectionInfoId),
9493
setOpen: (newOpen: boolean) => {
9594
// This is how leafygreen propagates `X` button click
9695
if (newOpen === false) {
97-
cancelEditConnection(editingConnectionInfo.id);
96+
cancelEditConnection(editingConnectionInfoId);
9897
}
9998
},
10099
openSettingsModal: () => {
101100
// TODO: this has to emit on the global app registry somehow
102101
},
103102
onCancel: () => {
104-
cancelEditConnection(editingConnectionInfo.id);
103+
cancelEditConnection(editingConnectionInfoId);
105104
},
106105
onSaveClicked: (connectionInfo: ConnectionInfo) => {
107106
return saveEditedConnectionInfo(connectionInfo);

packages/compass-connections/src/index.tsx

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,49 +8,20 @@ import React, { useContext, useRef } from 'react';
88
import { createLoggerLocator } from '@mongodb-js/compass-logging/provider';
99
import { telemetryLocator } from '@mongodb-js/compass-telemetry/provider';
1010
import { preferencesLocator } from 'compass-preferences-model/provider';
11-
import type {
12-
ConnectionInfo,
13-
ConnectionStorage,
14-
} from '@mongodb-js/connection-storage/provider';
1511
import { connectionStorageLocator } from '@mongodb-js/connection-storage/provider';
16-
import {
17-
ConnectionActionsProvider,
18-
ConnectionsStoreContext,
19-
} from './stores/store-context';
12+
import { ConnectionsStoreContext } from './stores/store-context';
2013
export { default as SingleConnectionForm } from './components/legacy-connections';
2114
export { LegacyConnectionsModal } from './components/legacy-connections-modal';
2215
export { useConnectionFormPreferences } from './hooks/use-connection-form-preferences';
23-
import ConnectionModal from './components/connection-modal';
2416
import type { connect as devtoolsConnect } from 'mongodb-data-service';
25-
import type { ExtraConnectionData as ExtraConnectionDataForTelemetry } from '@mongodb-js/compass-telemetry';
26-
import { useConnectionFormPreferences } from './hooks/use-connection-form-preferences';
2717
export type { ConnectionFeature } from './utils/connection-supports';
2818
export { connectionSupports } from './utils/connection-supports';
29-
30-
const ConnectionsComponent: React.FunctionComponent<{
31-
appName: string;
32-
onExtraConnectionDataRequest: (
33-
connectionInfo: ConnectionInfo
34-
) => Promise<[ExtraConnectionDataForTelemetry, string | null]>;
35-
onAutoconnectInfoRequest?: (
36-
connectionStorage: ConnectionStorage
37-
) => Promise<ConnectionInfo | undefined>;
38-
connectFn?: typeof devtoolsConnect | undefined;
39-
preloadStorageConnectionInfos?: ConnectionInfo[];
40-
}> = ({ children }) => {
41-
const formPreferences = useConnectionFormPreferences();
42-
return (
43-
<ConnectionActionsProvider>
44-
{children}
45-
<ConnectionModal {...formPreferences} />
46-
</ConnectionActionsProvider>
47-
);
48-
};
19+
import ConnectionsPlugin from './plugin';
4920

5021
const CompassConnectionsPlugin = registerHadronPlugin(
5122
{
5223
name: 'CompassConnections',
53-
component: ConnectionsComponent,
24+
component: ConnectionsPlugin,
5425
activate(
5526
initialProps,
5627
{ logger, preferences, connectionStorage, track },
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import React from 'react';
2+
import type {
3+
ConnectionInfo,
4+
ConnectionStorage,
5+
} from '@mongodb-js/connection-storage/provider';
6+
7+
import {
8+
connect as reduxConnect,
9+
ConnectionActionsProvider,
10+
} from './stores/store-context';
11+
12+
import ConnectionModal from './components/connection-modal';
13+
14+
import type { ExtraConnectionData as ExtraConnectionDataForTelemetry } from '@mongodb-js/compass-telemetry';
15+
import { useConnectionFormPreferences } from './hooks/use-connection-form-preferences';
16+
17+
import type { connect as devtoolsConnect } from 'mongodb-data-service';
18+
import type { ConnectionId } from './stores/connections-store-redux';
19+
20+
const ConnectionsComponent: React.FunctionComponent<{
21+
appName: string;
22+
onExtraConnectionDataRequest: (
23+
connectionInfo: ConnectionInfo
24+
) => Promise<[ExtraConnectionDataForTelemetry, string | null]>;
25+
onAutoconnectInfoRequest?: (
26+
connectionStorage: ConnectionStorage
27+
) => Promise<ConnectionInfo | undefined>;
28+
connectFn?: typeof devtoolsConnect | undefined;
29+
preloadStorageConnectionInfos?: ConnectionInfo[];
30+
editingConnectionInfoId?: ConnectionId;
31+
}> = ({ editingConnectionInfoId, children }) => {
32+
const formPreferences = useConnectionFormPreferences();
33+
return (
34+
<ConnectionActionsProvider>
35+
{children}
36+
{editingConnectionInfoId && <ConnectionModal {...formPreferences} />}
37+
</ConnectionActionsProvider>
38+
);
39+
};
40+
41+
function mapState({
42+
editingConnectionInfoId,
43+
}: {
44+
editingConnectionInfoId?: ConnectionId;
45+
}) {
46+
return { editingConnectionInfoId };
47+
}
48+
49+
export default reduxConnect(mapState)(ConnectionsComponent);

0 commit comments

Comments
 (0)