Skip to content

Commit f10b803

Browse files
authored
feat(compass-collection): add Disclaimer Screen - Mock Data Generator CLOUDP-333851 (#7212)
1 parent 196186e commit f10b803

File tree

23 files changed

+891
-718
lines changed

23 files changed

+891
-718
lines changed

package-lock.json

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

packages/compass-collection/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"@mongodb-js/compass-app-stores": "^7.57.0",
5353
"@mongodb-js/compass-components": "^1.49.0",
5454
"@mongodb-js/compass-connections": "^1.71.0",
55+
"@mongodb-js/compass-generative-ai": "^0.51.0",
5556
"@mongodb-js/compass-logging": "^1.7.12",
5657
"@mongodb-js/compass-telemetry": "^1.14.0",
5758
"@mongodb-js/compass-workspaces": "^0.52.0",

packages/compass-collection/src/components/collection-header/collection-header.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ function renderCollectionHeader(
2626
const mockStore = createStore(() => ({
2727
mockDataGenerator: {
2828
isModalOpen: false,
29-
currentStep: MockDataGeneratorStep.AI_DISCLAIMER,
29+
currentStep: MockDataGeneratorStep.SCHEMA_CONFIRMATION,
3030
},
3131
}));
3232

packages/compass-collection/src/components/collection-header/collection-header.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { useConnectionInfo } from '@mongodb-js/compass-connections/provider';
2020
import { getConnectionTitle } from '@mongodb-js/connection-info';
2121
import MockDataGeneratorModal from '../mock-data-generator-modal/mock-data-generator-modal';
2222
import { connect } from 'react-redux';
23-
import { mockDataGeneratorModalOpened } from '../../modules/collection-tab';
23+
import { openMockDataGeneratorModal } from '../../modules/collection-tab';
2424

2525
const collectionHeaderStyles = css({
2626
padding: spacing[400],
@@ -182,7 +182,7 @@ const CollectionHeader: React.FunctionComponent<CollectionHeaderProps> = ({
182182
};
183183

184184
const ConnectedCollectionHeader = connect(undefined, {
185-
onOpenMockDataModal: mockDataGeneratorModalOpened,
185+
onOpenMockDataModal: openMockDataGeneratorModal,
186186
})(CollectionHeader);
187187

188188
export default ConnectedCollectionHeader;

packages/compass-collection/src/components/mock-data-generator-modal/constants.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { MockDataGeneratorStep } from './types';
22

33
export const StepButtonLabelMap = {
4-
[MockDataGeneratorStep.AI_DISCLAIMER]: 'Use Natural Language',
54
[MockDataGeneratorStep.SCHEMA_CONFIRMATION]: 'Confirm',
65
[MockDataGeneratorStep.SCHEMA_EDITOR]: 'Next',
76
[MockDataGeneratorStep.DOCUMENT_COUNT]: 'Next',

packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ describe('MockDataGeneratorModal', () => {
2323

2424
function renderModal({
2525
isOpen = true,
26-
currentStep = MockDataGeneratorStep.AI_DISCLAIMER,
26+
currentStep = MockDataGeneratorStep.SCHEMA_CONFIRMATION,
2727
} = {}) {
2828
return render(
2929
<MockDataGeneratorModal

packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const MockDataGeneratorModal = ({
7070
<ModalFooter className={footerStyles}>
7171
<Button
7272
onClick={onPreviousStep}
73-
disabled={currentStep === MockDataGeneratorStep.AI_DISCLAIMER}
73+
disabled={currentStep === MockDataGeneratorStep.SCHEMA_CONFIRMATION}
7474
>
7575
Back
7676
</Button>

packages/compass-collection/src/components/mock-data-generator-modal/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
export enum MockDataGeneratorStep {
2-
AI_DISCLAIMER = 'AI_DISCLAIMER',
32
SCHEMA_CONFIRMATION = 'SCHEMA_CONFIRMATION',
43
SCHEMA_EDITOR = 'SCHEMA_EDITOR',
54
DOCUMENT_COUNT = 'DOCUMENT_COUNT',

packages/compass-collection/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
CollectionWorkspaceTitle,
1919
CollectionPluginTitleComponent,
2020
} from './plugin-tab-title';
21+
import { atlasAiServiceLocator } from '@mongodb-js/compass-generative-ai/provider';
2122

2223
export const WorkspaceTab: WorkspacePlugin<typeof CollectionWorkspaceTitle> = {
2324
name: CollectionWorkspaceTitle,
@@ -37,6 +38,7 @@ export const WorkspaceTab: WorkspacePlugin<typeof CollectionWorkspaceTitle> = {
3738
connectionInfoRef: connectionInfoRefLocator,
3839
logger: createLoggerLocator('COMPASS-COLLECTION'),
3940
preferences: preferencesLocator,
41+
atlasAiService: atlasAiServiceLocator,
4042
}
4143
),
4244
content: CollectionTab,

packages/compass-collection/src/modules/collection-tab.ts

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import type { DataService } from '@mongodb-js/compass-connections/provider';
1010
import type { experimentationServiceLocator } from '@mongodb-js/compass-telemetry/provider';
1111
import { type Logger, mongoLogId } from '@mongodb-js/compass-logging/provider';
1212
import { type PreferencesAccess } from 'compass-preferences-model/provider';
13+
import type { AtlasAiService } from '@mongodb-js/compass-generative-ai/provider';
14+
1315
import { isInternalFieldPath } from 'hadron-document';
1416
import toNS from 'mongodb-ns';
1517
import {
@@ -24,11 +26,11 @@ import {
2426
import { calculateSchemaDepth } from '../calculate-schema-depth';
2527
import { processSchema } from '../transform-schema-to-field-info';
2628
import type { Document, MongoError } from 'mongodb';
29+
import { MockDataGeneratorStep } from '../components/mock-data-generator-modal/types';
2730

2831
const DEFAULT_SAMPLE_SIZE = 100;
2932

3033
const NO_DOCUMENTS_ERROR = 'No documents found in the collection to analyze.';
31-
import { MockDataGeneratorStep } from '../components/mock-data-generator-modal/types';
3234

3335
function isAction<A extends AnyAction>(
3436
action: AnyAction,
@@ -65,6 +67,7 @@ type CollectionThunkAction<R, A extends AnyAction = AnyAction> = ThunkAction<
6567
experimentationServices: ReturnType<typeof experimentationServiceLocator>;
6668
logger: Logger;
6769
preferences: PreferencesAccess;
70+
atlasAiService: AtlasAiService;
6871
},
6972
A
7073
>;
@@ -148,7 +151,7 @@ const reducer: Reducer<CollectionState, Action> = (
148151
},
149152
mockDataGenerator: {
150153
isModalOpen: false,
151-
currentStep: MockDataGeneratorStep.AI_DISCLAIMER,
154+
currentStep: MockDataGeneratorStep.SCHEMA_CONFIRMATION,
152155
},
153156
},
154157
action
@@ -236,7 +239,7 @@ const reducer: Reducer<CollectionState, Action> = (
236239
mockDataGenerator: {
237240
...state.mockDataGenerator,
238241
isModalOpen: true,
239-
currentStep: MockDataGeneratorStep.AI_DISCLAIMER,
242+
currentStep: MockDataGeneratorStep.SCHEMA_CONFIRMATION,
240243
},
241244
};
242245
}
@@ -266,9 +269,6 @@ const reducer: Reducer<CollectionState, Action> = (
266269
let nextStep: MockDataGeneratorStep;
267270

268271
switch (currentStep) {
269-
case MockDataGeneratorStep.AI_DISCLAIMER:
270-
nextStep = MockDataGeneratorStep.SCHEMA_CONFIRMATION;
271-
break;
272272
case MockDataGeneratorStep.SCHEMA_CONFIRMATION:
273273
nextStep = MockDataGeneratorStep.SCHEMA_EDITOR;
274274
break;
@@ -305,7 +305,8 @@ const reducer: Reducer<CollectionState, Action> = (
305305

306306
switch (currentStep) {
307307
case MockDataGeneratorStep.SCHEMA_CONFIRMATION:
308-
previousStep = MockDataGeneratorStep.AI_DISCLAIMER;
308+
// TODO: Decide with product what we want behavior to be: close modal? Re-open disclaimer modal, if possible?
309+
previousStep = MockDataGeneratorStep.SCHEMA_CONFIRMATION;
309310
break;
310311
case MockDataGeneratorStep.SCHEMA_EDITOR:
311312
previousStep = MockDataGeneratorStep.SCHEMA_CONFIRMATION;
@@ -372,6 +373,27 @@ export const selectTab = (
372373
};
373374
};
374375

376+
export const openMockDataGeneratorModal = (): CollectionThunkAction<
377+
Promise<void>
378+
> => {
379+
return async (dispatch, _getState, { atlasAiService, logger }) => {
380+
try {
381+
if (process.env.COMPASS_E2E_SKIP_ATLAS_SIGNIN !== 'true') {
382+
await atlasAiService.ensureAiFeatureAccess();
383+
}
384+
dispatch(mockDataGeneratorModalOpened());
385+
} catch (error) {
386+
// if failed or user canceled we just don't show the modal
387+
logger.log.error(
388+
mongoLogId(1_001_000_364),
389+
'Collections',
390+
'Failed to ensure AI feature access and open mock data generator modal',
391+
error
392+
);
393+
}
394+
};
395+
};
396+
375397
export const analyzeCollectionSchema = (): CollectionThunkAction<
376398
Promise<void>
377399
> => {

0 commit comments

Comments
 (0)