Skip to content

Commit 6e36bde

Browse files
committed
Connect redux directly
1 parent 0142677 commit 6e36bde

File tree

2 files changed

+40
-38
lines changed

2 files changed

+40
-38
lines changed

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

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import {
2222
generateFakerMappings,
2323
mockDataGeneratorPreviousButtonClicked,
2424
} from '../../modules/collection-tab';
25-
import { SCHEMA_ANALYSIS_STATE_COMPLETE } from '../../schema-analysis-types';
25+
2626
import RawSchemaConfirmationScreen from './raw-schema-confirmation-screen';
2727
import FakerSchemaEditorScreen from './faker-schema-editor-screen';
2828
import ScriptScreen from './script-screen';
@@ -52,7 +52,6 @@ interface Props {
5252
onPreviousStep: () => void;
5353
namespace: string;
5454
fakerSchemaGenerationState: MockDataGeneratorState;
55-
schemaAnalysis: CollectionState['schemaAnalysis'];
5655
}
5756

5857
const MockDataGeneratorModal = ({
@@ -64,17 +63,10 @@ const MockDataGeneratorModal = ({
6463
onPreviousStep,
6564
namespace,
6665
fakerSchemaGenerationState,
67-
schemaAnalysis,
6866
}: Props) => {
6967
const [isSchemaConfirmed, setIsSchemaConfirmed] =
7068
React.useState<boolean>(false);
7169

72-
const arrayLengthMap = useMemo(() => {
73-
return schemaAnalysis?.status === SCHEMA_ANALYSIS_STATE_COMPLETE
74-
? schemaAnalysis.arrayLengthMap
75-
: {};
76-
}, [schemaAnalysis]);
77-
7870
const modalBodyContent = useMemo(() => {
7971
switch (currentStep) {
8072
case MockDataGeneratorStep.SCHEMA_CONFIRMATION:
@@ -92,27 +84,9 @@ const MockDataGeneratorModal = ({
9284
case MockDataGeneratorStep.PREVIEW_DATA:
9385
return <></>; // TODO: CLOUDP-333857
9486
case MockDataGeneratorStep.GENERATE_DATA:
95-
// UX flow ensures faker schema is completed, but TypeScript needs the guard
96-
if (fakerSchemaGenerationState.status === 'completed') {
97-
return (
98-
<ScriptScreen
99-
fakerSchema={fakerSchemaGenerationState.fakerSchema}
100-
namespace={namespace}
101-
arrayLengthMap={arrayLengthMap}
102-
documentCount={100} // TODO(CLOUDP-333856): Get from document count step
103-
/>
104-
);
105-
}
106-
// Should never happen, but needed for TypeScript guard
107-
return <div>Loading script...</div>;
87+
return <ScriptScreen />;
10888
}
109-
}, [
110-
currentStep,
111-
fakerSchemaGenerationState,
112-
isSchemaConfirmed,
113-
namespace,
114-
arrayLengthMap,
115-
]);
89+
}, [currentStep, fakerSchemaGenerationState, isSchemaConfirmed]);
11690

11791
const isNextButtonDisabled =
11892
currentStep === MockDataGeneratorStep.SCHEMA_EDITOR && !isSchemaConfirmed;
@@ -186,7 +160,6 @@ const mapStateToProps = (state: CollectionState) => ({
186160
currentStep: state.mockDataGenerator.currentStep,
187161
namespace: state.namespace,
188162
fakerSchemaGenerationState: state.fakerSchemaGeneration,
189-
schemaAnalysis: state.schemaAnalysis,
190163
});
191164

192165
const ConnectedMockDataGeneratorModal = connect(mapStateToProps, {

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

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { useMemo } from 'react';
2+
import { connect } from 'react-redux';
23
import {
34
Banner,
45
Body,
@@ -19,6 +20,8 @@ import toNS from 'mongodb-ns';
1920
import { generateScript } from './script-generation-utils';
2021
import type { FakerSchema } from './types';
2122
import type { ArrayLengthMap } from './script-generation-utils';
23+
import type { CollectionState } from '../../modules/collection-tab';
24+
import { SCHEMA_ANALYSIS_STATE_COMPLETE } from '../../schema-analysis-types';
2225

2326
const RUN_SCRIPT_COMMAND = `
2427
mongosh "mongodb+srv://<your-cluster>.mongodb.net/<your-database>" \\
@@ -27,8 +30,6 @@ mongosh "mongodb+srv://<your-cluster>.mongodb.net/<your-database>" \\
2730
mockdatascript.js
2831
`;
2932

30-
const DEFAULT_DOCUMENT_COUNT = 100;
31-
3233
const outerSectionStyles = css({
3334
display: 'flex',
3435
flexDirection: 'column',
@@ -71,17 +72,17 @@ const resourceSectionHeader = css({
7172
});
7273

7374
interface ScriptScreenProps {
74-
fakerSchema: FakerSchema;
75+
fakerSchema: FakerSchema | null;
7576
namespace: string;
76-
arrayLengthMap?: ArrayLengthMap;
77-
documentCount?: number;
77+
arrayLengthMap: ArrayLengthMap;
78+
documentCount: number;
7879
}
7980

8081
const ScriptScreen = ({
8182
fakerSchema,
8283
namespace,
83-
arrayLengthMap = {},
84-
documentCount = DEFAULT_DOCUMENT_COUNT,
84+
arrayLengthMap,
85+
documentCount,
8586
}: ScriptScreenProps) => {
8687
const isDarkMode = useDarkMode();
8788
const connectionInfo = useConnectionInfo();
@@ -90,6 +91,14 @@ const ScriptScreen = ({
9091

9192
// Generate the script using the faker schema
9293
const scriptResult = useMemo(() => {
94+
// Handle case where fakerSchema is not yet available
95+
if (!fakerSchema) {
96+
return {
97+
success: false as const,
98+
error: 'Faker schema not available',
99+
};
100+
}
101+
93102
return generateScript(fakerSchema, {
94103
documentCount,
95104
databaseName: database,
@@ -200,5 +209,25 @@ const ScriptScreen = ({
200209
);
201210
};
202211

203-
export default ScriptScreen;
212+
const mapStateToProps = (state: CollectionState) => {
213+
const { fakerSchemaGeneration, namespace, schemaAnalysis } = state;
214+
215+
return {
216+
fakerSchema:
217+
fakerSchemaGeneration.status === 'completed'
218+
? fakerSchemaGeneration.fakerSchema
219+
: null,
220+
namespace,
221+
arrayLengthMap:
222+
schemaAnalysis?.status === SCHEMA_ANALYSIS_STATE_COMPLETE
223+
? schemaAnalysis.arrayLengthMap
224+
: {},
225+
// TODO(CLOUDP-333856): When document count step is implemented, get documentCount from state
226+
documentCount: 100,
227+
};
228+
};
229+
230+
const ConnectedScriptScreen = connect(mapStateToProps)(ScriptScreen);
231+
232+
export default ConnectedScriptScreen;
204233
export type { ScriptScreenProps };

0 commit comments

Comments
 (0)