import React from 'react'; import { Badge, Banner, Button, Icon, KeylineCard, Label, SpinLoader, Subtitle, Toggle, css, palette, spacing, useDarkMode, cx, } from '@mongodb-js/compass-components'; import { connect } from 'react-redux'; import type { RootState } from '../../stores'; import { disableAIFeature, enableAIFeature, signIn, signOut, } from '../../stores/atlas-login'; const atlasLoginKeylineCardStyles = css({ overflow: 'hidden', }); const atlasLoginHeaderStyles = css({ display: 'grid', gridTemplateAreas: ` "heading controls" "description description" `, gridTemplateColumns: `1fr auto`, gap: spacing[2], padding: spacing[3], boxShadow: `inset 0 -1px 0 ${palette.gray.light2}`, backgroundColor: palette.gray.light3, }); const atlasLoginHeaderDarkModeStyles = css({ backgroundColor: palette.gray.dark3, boxShadow: `inset 0 -1px 0 ${palette.gray.dark2}`, }); const atlasLoginHeadingTitleStyles = css({ display: 'flex', alignItems: 'center', gap: spacing[2], gridArea: 'heading', }); const atlasLoginControlsStyles = css({ gridArea: 'controls', }); const atlasLoginHeaderDescriptionStyles = css({ gridArea: 'description', }); const atlasLoginToggleControlContainerStyles = css({ padding: spacing[3], display: 'grid', gridTemplateColumns: '100%', gap: spacing[3], }); const atlasLoginToggleControlStyles = css({ display: 'flex', alignItems: 'center', gap: spacing[2], }); const atlasLoginToggleControlLabelStyles = css({ fontWeight: 'normal', }); export const AtlasLoginSettings: React.FunctionComponent<{ isSignInInProgress: boolean; userLogin: string | null; isAIFeatureEnabled: boolean; onSignInClick(): void; onSignOutClick(): void; onToggleAIFeature(newValue: boolean): void; }> = ({ isSignInInProgress, userLogin, isAIFeatureEnabled, onSignInClick, onSignOutClick, onToggleAIFeature, }) => { const darkMode = useDarkMode(); const isSignedIn = userLogin !== null; return (
Use Generative AI Preview
{isSignedIn && ( )} {!isSignedIn && ( )}
{isSignedIn ? ( <>Logged in with Atlas account {userLogin} ) : ( <>You must first connect your Atlas account to use this feature. )}
{isSignedIn && !isAIFeatureEnabled && ( When enabling artificial intelligence features, you will be required to understand and agree to our terms of service and privacy policy regarding how your data is handled by our artificial intelligence partner(s). )}
); }; export const ConnectedAtlasLoginSettings = connect( (state: RootState) => { return { isSignInInProgress: state.atlasLogin.status === 'in-progress', userLogin: state.atlasLogin.userInfo?.login ?? null, isAIFeatureEnabled: Boolean(state.atlasLogin.userInfo?.enabledAIFeature), }; }, { onSignInClick: signIn, onSignOutClick: signOut, onToggleAIFeature(newValue: boolean) { if (newValue === true) { return enableAIFeature(); } else { return disableAIFeature(); } }, } )(AtlasLoginSettings);