Skip to content

Commit 5e3deea

Browse files
authored
chore(atlas-service): move all sign in logic to atlas-service package (#4680)
* chore(atlas-service): move all sign in logic to atlas-service package * chore(atlas-service): add more tests
1 parent 9f01b11 commit 5e3deea

File tree

17 files changed

+564
-340
lines changed

17 files changed

+564
-340
lines changed

package-lock.json

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

packages/atlas-service/.mocharc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
module.exports = require('@mongodb-js/mocha-config-compass');
1+
module.exports = require('@mongodb-js/mocha-config-compass/react');

packages/atlas-service/package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,14 @@
6767
"typescript": "^5.0.4"
6868
},
6969
"dependencies": {
70+
"@mongodb-js/compass-components": "^1.10.0",
7071
"@mongodb-js/devtools-connect": "^2.4.0",
7172
"@mongodb-js/oidc-plugin": "^0.3.0",
7273
"electron": "^23.3.10",
73-
"node-fetch": "^2.6.7"
74+
"node-fetch": "^2.6.7",
75+
"react": "^17.0.2",
76+
"react-redux": "^8.0.5",
77+
"redux": "^4.2.1",
78+
"redux-thunk": "^2.4.1"
7479
}
7580
}

packages/compass-query-bar/src/components/generative-ai/ai-sign-in-banner-image.tsx renamed to packages/atlas-service/src/components/ai-signin-banner-image.tsx

File renamed without changes.

packages/compass-query-bar/src/components/generative-ai/ai-sign-in-modal.tsx renamed to packages/atlas-service/src/components/ai-signin-modal.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import React from 'react';
22
import { connect } from 'react-redux';
3-
import type { RootState } from '../../stores/query-bar-store';
4-
import { signIn, closeSignInModal } from '../../stores/atlas-signin-reducer';
53
import {
64
Badge,
75
Button,
@@ -13,7 +11,9 @@ import {
1311
cx,
1412
spacing,
1513
} from '@mongodb-js/compass-components';
16-
import { AISignInImageBanner } from './ai-sign-in-banner-image';
14+
import { AISignInImageBanner } from './ai-signin-banner-image';
15+
import type { AtlasSignInState } from '../store/atlas-signin-reducer';
16+
import { closeSignInModal, signIn } from '../store/atlas-signin-reducer';
1717

1818
type SignInModalProps = {
1919
isSignInModalVisible?: boolean;
@@ -120,10 +120,10 @@ const AISignInModal: React.FunctionComponent<SignInModalProps> = ({
120120
};
121121

122122
export default connect(
123-
(state: RootState) => {
123+
(state: AtlasSignInState) => {
124124
return {
125-
isSignInModalVisible: state.atlasSignIn.isModalOpen,
126-
isSignInInProgress: state.atlasSignIn.state === 'in-progress',
125+
isSignInModalVisible: state.isModalOpen,
126+
isSignInInProgress: state.state === 'in-progress',
127127
};
128128
},
129129
{ onSignInModalClose: closeSignInModal, onSignInClick: signIn }
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import React, { useEffect } from 'react';
2+
import { Provider, useDispatch } from 'react-redux';
3+
import AISignInModal from './ai-signin-modal';
4+
import { getStore } from '../store/atlas-signin-store';
5+
import { restoreSignInState } from '../store/atlas-signin-reducer';
6+
7+
function Modal() {
8+
const dispatch = useDispatch();
9+
useEffect(() => {
10+
dispatch(restoreSignInState() as any);
11+
}, [dispatch]);
12+
return <AISignInModal></AISignInModal>;
13+
}
14+
15+
export const AtlasSignIn = () => {
16+
return (
17+
<Provider store={getStore()}>
18+
<Modal></Modal>
19+
</Provider>
20+
);
21+
};

packages/atlas-service/src/renderer.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import type { AtlasService as AtlasServiceMain } from './main';
22
import { ipcInvoke } from './util';
3+
import { signInWithModalPrompt } from './store/atlas-signin-reducer';
4+
import { dispatch } from './store/atlas-signin-store';
35

46
export class AtlasService {
57
private ipc = ipcInvoke<
@@ -21,7 +23,26 @@ export class AtlasService {
2123
introspect = this.ipc.introspect;
2224
isAuthenticated = this.ipc.isAuthenticated;
2325
getQueryFromUserPrompt = this.ipc.getQueryFromUserPrompt;
24-
signIn = this.ipc.signIn;
26+
27+
async signIn(
28+
options: {
29+
signal?: AbortSignal;
30+
promptType?: 'none' | 'ai-promo-modal';
31+
} = {}
32+
) {
33+
switch (options.promptType ?? 'none') {
34+
case 'none':
35+
await this.ipc.signIn({ signal: options.signal });
36+
return;
37+
case 'ai-promo-modal':
38+
await dispatch(signInWithModalPrompt({ signal: options.signal }));
39+
return;
40+
default:
41+
return Promise.reject(new Error('Not implemented'));
42+
}
43+
}
2544
}
2645

46+
export { AtlasSignIn } from './components/atlas-signin';
47+
2748
export type { UserInfo, IntrospectInfo, Token } from './util';

0 commit comments

Comments
 (0)