Skip to content

Commit fb0d0fa

Browse files
committed
chore(schema): add tooltip showing folks the export button when they legacy export schema
1 parent 0c1ee0d commit fb0d0fa

File tree

6 files changed

+105
-88
lines changed

6 files changed

+105
-88
lines changed

packages/compass-schema/src/components/compass-schema.tsx

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useCallback } from 'react';
1+
import React, { useCallback, useState } from 'react';
22
import type { Schema as MongodbSchema } from 'mongodb-schema';
33
import { connect } from 'react-redux';
44
import type { AnalysisState } from '../constants/analysis-states';
@@ -7,11 +7,9 @@ import {
77
ANALYSIS_STATE_ANALYZING,
88
ANALYSIS_STATE_COMPLETE,
99
} from '../constants/analysis-states';
10-
11-
import { SchemaToolbar } from './schema-toolbar/schema-toolbar';
10+
import SchemaToolbar from './schema-toolbar';
1211
import Field from './field';
1312
import { ZeroGraphic } from './zero-graphic';
14-
1513
import {
1614
Button,
1715
CancelLoader,
@@ -39,7 +37,7 @@ import type { RootState } from '../stores/store';
3937
import { startAnalysis, stopAnalysis } from '../stores/schema-analysis-reducer';
4038
import { openExportSchema } from '../stores/schema-export-reducer';
4139
import ExportSchemaModal from './export-schema-modal';
42-
import ExportSchemaLegacyBanner from './export-schema-legacy-banner';
40+
import ExportSchemaLegacyModal from './export-schema-legacy-modal';
4341

4442
const rootStyles = css({
4543
width: '100%',
@@ -371,27 +369,16 @@ const PerformanceAdvisorBanner = () => {
371369

372370
const Schema: React.FunctionComponent<{
373371
analysisState: AnalysisState;
374-
errorMessage?: string;
375-
maxTimeMS?: number;
376372
schema: MongodbSchema | null;
377-
count?: number;
378-
resultId?: string;
379-
onExportSchemaClicked: () => void;
380373
onStartAnalysis: () => Promise<void>;
381374
onStopAnalysis: () => void;
382-
}> = ({
383-
analysisState,
384-
errorMessage,
385-
schema,
386-
resultId,
387-
onExportSchemaClicked,
388-
onStartAnalysis,
389-
onStopAnalysis,
390-
}) => {
375+
}> = ({ analysisState, schema, onStartAnalysis, onStopAnalysis }) => {
391376
const onApplyClicked = useCallback(() => {
392377
void onStartAnalysis();
393378
}, [onStartAnalysis]);
394379

380+
const [showLegacyExportTooltip, setShowLegacyExportTooltip] = useState(false);
381+
395382
const outdated = useIsLastAppliedQueryOutdated('schema');
396383

397384
const enablePerformanceAdvisorBanner = usePreference(
@@ -407,13 +394,10 @@ const Schema: React.FunctionComponent<{
407394
toolbar={
408395
<SchemaToolbar
409396
onAnalyzeSchemaClicked={onApplyClicked}
410-
onExportSchemaClicked={onExportSchemaClicked}
411397
onResetClicked={onApplyClicked}
412-
analysisState={analysisState}
413-
errorMessage={errorMessage || ''}
398+
showLegacyExportTooltip={showLegacyExportTooltip}
399+
setShowLegacyExportTooltip={setShowLegacyExportTooltip}
414400
isOutdated={!!outdated}
415-
sampleSize={schema ? schema.count : 0}
416-
schemaResultId={resultId || ''}
417401
/>
418402
}
419403
>
@@ -432,17 +416,19 @@ const Schema: React.FunctionComponent<{
432416
</WorkspaceContainer>
433417
</div>
434418
{enableExportSchema && <ExportSchemaModal />}
435-
{enableExportSchema && <ExportSchemaLegacyBanner />}
419+
{enableExportSchema && (
420+
<ExportSchemaLegacyModal
421+
setShowLegacyExportTooltip={setShowLegacyExportTooltip}
422+
/>
423+
)}
436424
</>
437425
);
438426
};
439427

440428
export default connect(
441429
(state: RootState) => ({
442430
analysisState: state.schemaAnalysis.analysisState,
443-
errorMessage: state.schemaAnalysis.errorMessage,
444431
schema: state.schemaAnalysis.schema,
445-
resultId: state.schemaAnalysis.resultId,
446432
}),
447433
{
448434
onStartAnalysis: startAnalysis,

packages/compass-schema/src/components/export-schema-legacy-banner.tsx renamed to packages/compass-schema/src/components/export-schema-legacy-modal.tsx

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
confirmedExportLegacySchemaToClipboard,
1717
switchToSchemaExport,
1818
SchemaExportActions,
19-
stopShowingLegacyBanner,
19+
stopShowingLegacyModal,
2020
} from '../stores/schema-export-reducer';
2121

2222
const SchemaExportSVG = () => (
@@ -463,28 +463,31 @@ const optionHeaderStyles = css({
463463
margin: '0px',
464464
});
465465

466-
const ExportSchemaLegacyBanner: React.FunctionComponent<{
466+
const ExportSchemaLegacyModal: React.FunctionComponent<{
467467
isOpen: boolean;
468468
onClose: () => void;
469469
onLegacyShare: () => void;
470470
onSwitchToSchemaExport: () => void;
471-
stopShowingLegacyBanner: (choice: 'legacy' | 'export') => void;
471+
setShowLegacyExportTooltip: (show: boolean) => void;
472+
stopShowingLegacyModal: (choice: 'legacy' | 'export') => void;
472473
}> = ({
473474
isOpen,
474475
onClose,
475476
onLegacyShare,
476477
onSwitchToSchemaExport,
477-
stopShowingLegacyBanner,
478+
setShowLegacyExportTooltip,
479+
stopShowingLegacyModal,
478480
}) => {
479481
const [dontShowAgainChecked, setDontShowAgainChecked] = useState(false);
480482
const handleLegacyShare = useCallback(() => {
481-
if (dontShowAgainChecked) stopShowingLegacyBanner('legacy');
483+
if (dontShowAgainChecked) stopShowingLegacyModal('legacy');
482484
onLegacyShare();
483-
}, [onLegacyShare, dontShowAgainChecked, stopShowingLegacyBanner]);
485+
setShowLegacyExportTooltip(true);
486+
}, [onLegacyShare, dontShowAgainChecked, stopShowingLegacyModal]);
484487
const handleSwitchToNew = useCallback(() => {
485-
if (dontShowAgainChecked) stopShowingLegacyBanner('export');
488+
if (dontShowAgainChecked) stopShowingLegacyModal('export');
486489
onSwitchToSchemaExport();
487-
}, [onSwitchToSchemaExport, dontShowAgainChecked, stopShowingLegacyBanner]);
490+
}, [onSwitchToSchemaExport, dontShowAgainChecked, stopShowingLegacyModal]);
488491
return (
489492
<Modal open={isOpen} setOpen={onClose} contentClassName={containerStyles}>
490493
<ModalHeader
@@ -535,13 +538,13 @@ const ExportSchemaLegacyBanner: React.FunctionComponent<{
535538

536539
export default connect(
537540
(state: RootState) => ({
538-
isOpen: state.schemaExport.isLegacyBannerOpen,
541+
isOpen: state.schemaExport.isLegacyModalOpen,
539542
}),
540543
(dispatch: SchemaThunkDispatch) => ({
541-
onClose: () => dispatch({ type: SchemaExportActions.closeLegacyBanner }),
544+
onClose: () => dispatch({ type: SchemaExportActions.closeLegacyModal }),
542545
onLegacyShare: () => dispatch(confirmedExportLegacySchemaToClipboard()),
543546
onSwitchToSchemaExport: () => dispatch(switchToSchemaExport()),
544-
stopShowingLegacyBanner: (choice: 'legacy' | 'export') =>
545-
dispatch(stopShowingLegacyBanner(choice)),
547+
stopShowingLegacyModal: (choice: 'legacy' | 'export') =>
548+
dispatch(stopShowingLegacyModal(choice)),
546549
})
547-
)(ExportSchemaLegacyBanner);
550+
)(ExportSchemaLegacyModal);
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ describe('SchemaToolbar', function () {
4747
sampleSize={10}
4848
schemaResultId="123"
4949
onExportSchemaClicked={() => {}}
50+
setShowLegacyExportTooltip={() => {}}
51+
showLegacyExportTooltip={false}
5052
{...props}
5153
/>
5254
</MockQueryBarPlugin>,

packages/compass-schema/src/components/schema-toolbar/schema-toolbar.tsx renamed to packages/compass-schema/src/components/schema-toolbar.tsx

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
11
import React, { useMemo } from 'react';
2+
import { connect } from 'react-redux';
23
import {
34
Body,
45
Button,
56
ErrorSummary,
67
Icon,
78
Link,
9+
Tooltip,
810
WarningSummary,
911
css,
1012
spacing,
1113
} from '@mongodb-js/compass-components';
1214
import { usePreference } from 'compass-preferences-model/provider';
13-
import type { AnalysisState } from '../../constants/analysis-states';
15+
import type { AnalysisState } from '../constants/analysis-states';
1416
import {
1517
ANALYSIS_STATE_ERROR,
1618
ANALYSIS_STATE_TIMEOUT,
1719
ANALYSIS_STATE_COMPLETE,
18-
} from '../../constants/analysis-states';
20+
} from '../constants/analysis-states';
1921
import { QueryBar } from '@mongodb-js/compass-query-bar';
22+
import type { RootState } from '../stores/store';
23+
import { openExportSchema } from '../stores/schema-export-reducer';
2024

2125
const schemaToolbarStyles = css({
2226
display: 'flex',
@@ -67,9 +71,11 @@ type SchemaToolbarProps = {
6771
onResetClicked: () => void;
6872
sampleSize: number;
6973
schemaResultId: string;
74+
setShowLegacyExportTooltip: (show: boolean) => void;
75+
showLegacyExportTooltip: boolean;
7076
};
7177

72-
const SchemaToolbar: React.FunctionComponent<SchemaToolbarProps> = ({
78+
export const SchemaToolbar: React.FunctionComponent<SchemaToolbarProps> = ({
7379
analysisState,
7480
errorMessage,
7581
isOutdated,
@@ -78,6 +84,8 @@ const SchemaToolbar: React.FunctionComponent<SchemaToolbarProps> = ({
7884
onResetClicked,
7985
sampleSize,
8086
schemaResultId,
87+
setShowLegacyExportTooltip,
88+
showLegacyExportTooltip,
8189
}) => {
8290
const documentsNoun = useMemo(
8391
() => (sampleSize === 1 ? 'document' : 'documents'),
@@ -101,15 +109,26 @@ const SchemaToolbar: React.FunctionComponent<SchemaToolbarProps> = ({
101109
<div className={schemaToolbarActionBarStyles}>
102110
{enableExportSchema && ANALYSIS_STATE_COMPLETE && (
103111
<div>
104-
<Button
105-
variant="default"
106-
onClick={onExportSchemaClicked}
107-
data-testid="open-schema-export-button"
108-
size="xsmall"
109-
leftGlyph={<Icon glyph="Export" />}
112+
<Tooltip
113+
id="export-schema-tooltip"
114+
open={showLegacyExportTooltip}
115+
onClose={() => setShowLegacyExportTooltip(false)}
116+
triggerEvent="click"
117+
trigger={
118+
<Button
119+
variant="default"
120+
onClick={onExportSchemaClicked}
121+
data-testid="open-schema-export-button"
122+
size="xsmall"
123+
leftGlyph={<Icon glyph="Export" />}
124+
>
125+
Export Schema
126+
</Button>
127+
}
110128
>
111-
Export Schema
112-
</Button>
129+
Next time, export the schema directly from Compass&apos; Schema
130+
tab.
131+
</Tooltip>
113132
</div>
114133
)}
115134
<div
@@ -146,4 +165,14 @@ const SchemaToolbar: React.FunctionComponent<SchemaToolbarProps> = ({
146165
);
147166
};
148167

149-
export { SchemaToolbar };
168+
export default connect(
169+
(state: RootState) => ({
170+
analysisState: state.schemaAnalysis.analysisState,
171+
errorMessage: state.schemaAnalysis.errorMessage,
172+
sampleSize: state.schemaAnalysis.schema?.count ?? 0,
173+
schemaResultId: state.schemaAnalysis.resultId ?? '',
174+
}),
175+
{
176+
onExportSchemaClicked: openExportSchema,
177+
}
178+
)(SchemaToolbar);

0 commit comments

Comments
 (0)