Skip to content

Commit e7b94f6

Browse files
committed
move download diagram to export modal
1 parent f6a1e48 commit e7b94f6

File tree

5 files changed

+56
-15
lines changed

5 files changed

+56
-15
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import React, { useMemo } from 'react';
2+
import { useDarkMode } from '../../hooks/use-theme';
3+
import { palette } from '@leafygreen-ui/palette';
4+
5+
export function PngIcon() {
6+
const darkMode = useDarkMode();
7+
8+
const fillColor = useMemo(
9+
() => (darkMode ? palette.white : palette.black),
10+
[darkMode]
11+
);
12+
13+
return (
14+
<svg
15+
width="16"
16+
height="16"
17+
viewBox="0 0 16 16"
18+
fill="none"
19+
xmlns="http://www.w3.org/2000/svg"
20+
>
21+
<path
22+
d="M3.5 8.75H2.5C2.30109 8.75 2.11032 8.82902 1.96967 8.96967C1.82902 9.11032 1.75 9.30109 1.75 9.5V13C1.75 13.1989 1.82902 13.3897 1.96967 13.5303C2.11032 13.671 2.30109 13.75 2.5 13.75C2.69891 13.75 2.88968 13.671 3.03033 13.5303C3.17098 13.3897 3.25 13.1989 3.25 13V12.75H3.5C4.03043 12.75 4.53914 12.5393 4.91421 12.1642C5.28929 11.7891 5.5 11.2804 5.5 10.75C5.5 10.2196 5.28929 9.71086 4.91421 9.33579C4.53914 8.96071 4.03043 8.75 3.5 8.75ZM3.5 11.25H3.25V10.25H3.5C3.63261 10.25 3.75979 10.3027 3.85355 10.3964C3.94732 10.4902 4 10.6174 4 10.75C4 10.8826 3.94732 11.0098 3.85355 11.1036C3.75979 11.1973 3.63261 11.25 3.5 11.25ZM14.5 12.5544C14.5001 12.7476 14.4255 12.9335 14.2919 13.0731C14.0945 13.285 13.856 13.4544 13.5908 13.5708C13.3257 13.6872 13.0396 13.7482 12.75 13.75C11.5094 13.75 10.5 12.6281 10.5 11.25C10.5 9.87187 11.5094 8.75 12.75 8.75C13.1673 8.75121 13.5746 8.87748 13.9194 9.1125C14.0034 9.1665 14.0759 9.23676 14.1324 9.31914C14.1889 9.40152 14.2284 9.49436 14.2486 9.59222C14.2687 9.69008 14.2691 9.79098 14.2497 9.88899C14.2304 9.98701 14.1916 10.0802 14.1357 10.163C14.0798 10.2458 14.008 10.3166 13.9243 10.3713C13.8407 10.426 13.747 10.4634 13.6487 10.4813C13.5504 10.4992 13.4495 10.4974 13.352 10.4758C13.2544 10.4542 13.1622 10.4134 13.0806 10.3556C12.9836 10.2879 12.8683 10.2511 12.75 10.25C12.3438 10.25 12 10.7081 12 11.25C12 11.7919 12.3438 12.25 12.75 12.25C12.8073 12.2499 12.8642 12.241 12.9187 12.2238C12.8292 12.1138 12.7726 11.9807 12.7556 11.8399C12.7386 11.6991 12.7619 11.5563 12.8227 11.4282C12.8836 11.3001 12.9795 11.1919 13.0994 11.1161C13.2193 11.0403 13.3582 11 13.5 11H13.75C13.9489 11 14.1397 11.079 14.2803 11.2197C14.421 11.3603 14.5 11.5511 14.5 11.75V12.5544ZM10 9.5V13C10 13.1589 9.94955 13.3138 9.85586 13.4422C9.76218 13.5706 9.63012 13.6659 9.47875 13.7144C9.40477 13.7379 9.32762 13.7499 9.25 13.75C9.13081 13.7501 9.0133 13.7219 8.90722 13.6675C8.80113 13.6132 8.70953 13.5343 8.64 13.4375L7.5 11.84V13C7.5 13.1989 7.42098 13.3897 7.28033 13.5303C7.13968 13.671 6.94891 13.75 6.75 13.75C6.55109 13.75 6.36032 13.671 6.21967 13.5303C6.07902 13.3897 6 13.1989 6 13V9.5C5.99976 9.34104 6.05002 9.18612 6.14354 9.05759C6.23706 8.92905 6.369 8.83356 6.52032 8.78488C6.67164 8.7362 6.83451 8.73686 6.98543 8.78676C7.13636 8.83666 7.26752 8.93322 7.36 9.0625L8.5 10.6594V9.5C8.5 9.30109 8.57902 9.11032 8.71967 8.96967C8.86032 8.82902 9.05109 8.75 9.25 8.75C9.44891 8.75 9.63968 8.82902 9.78033 8.96967C9.92098 9.11032 10 9.30109 10 9.5ZM3 7.5C3.19891 7.5 3.38968 7.42098 3.53033 7.28033C3.67098 7.13968 3.75 6.94891 3.75 6.75V2.75H8.5V5.75C8.5 5.94891 8.57902 6.13968 8.71967 6.28033C8.86032 6.42098 9.05109 6.5 9.25 6.5H12.25V6.75C12.25 6.94891 12.329 7.13968 12.4697 7.28033C12.6103 7.42098 12.8011 7.5 13 7.5C13.1989 7.5 13.3897 7.42098 13.5303 7.28033C13.671 7.13968 13.75 6.94891 13.75 6.75V5.5C13.7501 5.40148 13.7307 5.30391 13.6931 5.21286C13.6555 5.12182 13.6003 5.03908 13.5306 4.96938L10.0306 1.46938C9.96092 1.39975 9.87818 1.34454 9.78714 1.3069C9.69609 1.26926 9.59852 1.24992 9.5 1.25H3.5C3.16848 1.25 2.85054 1.3817 2.61612 1.61612C2.3817 1.85054 2.25 2.16848 2.25 2.5V6.75C2.25 6.94891 2.32902 7.13968 2.46967 7.28033C2.61032 7.42098 2.80109 7.5 3 7.5ZM10 3.5625L11.4375 5H10V3.5625Z"
23+
fill={fillColor}
24+
/>
25+
</svg>
26+
);
27+
}

packages/compass-components/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export { DocumentIcon } from './components/icons/document-icon';
6969
export { FavoriteIcon } from './components/icons/favorite-icon';
7070
export { ServerIcon } from './components/icons/server-icon';
7171
export { NoSavedItemsIcon } from './components/icons/no-saved-items-icon';
72+
export { PngIcon } from './components/icons/png-icon';
7273
export { GuideCue as LGGuideCue } from '@leafygreen-ui/guide-cue';
7374
export { Variant as BadgeVariant } from '@leafygreen-ui/badge';
7475
export { Variant as BannerVariant } from '@leafygreen-ui/banner';

packages/compass-data-modeling/src/components/export-diagram-modal.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
RadioGroup,
1414
spacing,
1515
SpinLoader,
16+
PngIcon,
1617
} from '@mongodb-js/compass-components';
1718
import type { ExportDiagramFormat } from '../store/export-diagram';
1819
import {
@@ -39,8 +40,10 @@ const contentContainerStyles = css({
3940

4041
const radioItemStyles = css({
4142
display: 'flex',
42-
alignItems: 'center',
4343
gap: spacing[200],
44+
'> svg': {
45+
marginTop: spacing[50],
46+
},
4447
});
4548

4649
const footerStyles = css({
@@ -94,13 +97,27 @@ const ExportDiagramModal = ({
9497
<Label htmlFor="">Select file format:</Label>
9598
<RadioGroup className={contentContainerStyles} value={exportFormat}>
9699
<div className={radioItemStyles}>
97-
<Icon glyph="Diagram2" />
100+
<Icon glyph="Diagram" />
101+
<Radio
102+
checked={exportFormat === 'diagram'}
103+
value="diagram"
104+
aria-label="Diagram File"
105+
onClick={() => onSelectFormat('diagram')}
106+
size="small"
107+
description="Importable into Compass so teammates can collaborate."
108+
>
109+
Diagram File
110+
</Radio>
111+
</div>
112+
<div className={radioItemStyles}>
113+
<PngIcon />
98114
<Radio
99115
checked={exportFormat === 'png'}
100116
value="png"
101117
aria-label="PNG"
102118
onClick={() => onSelectFormat('png')}
103119
size="small"
120+
description="Shareable image for documentation or presentations."
104121
>
105122
PNG
106123
</Radio>
@@ -113,6 +130,7 @@ const ExportDiagramModal = ({
113130
aria-label="JSON"
114131
onClick={() => onSelectFormat('json')}
115132
size="small"
133+
description="Raw schema data for programmatic use."
116134
>
117135
JSON
118136
</Radio>

packages/compass-data-modeling/src/store/diagram.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import {
1717
showPrompt,
1818
} from '@mongodb-js/compass-components';
1919
import {
20-
downloadDiagram,
2120
getDiagramContentsFromFile,
2221
getDiagramName,
2322
} from '../services/open-and-download-diagram';
@@ -435,16 +434,6 @@ export function deleteDiagram(
435434
};
436435
}
437436

438-
export function saveDiagram(): DataModelingThunkAction<void, never> {
439-
return (_dispatch, getState) => {
440-
const { diagram } = getState();
441-
if (!diagram) {
442-
return;
443-
}
444-
downloadDiagram(diagram.name, diagram.edits.current);
445-
};
446-
}
447-
448437
export function renameDiagram(
449438
id: string // TODO maybe pass the whole thing here, we always have it when calling this, then we don't need to re-load storage
450439
): DataModelingThunkAction<Promise<void>, RenameDiagramAction> {
@@ -473,7 +462,7 @@ export function renameDiagram(
473462
export function openDiagramFromFile(
474463
file: File
475464
): DataModelingThunkAction<Promise<void>, OpenDiagramAction> {
476-
return async (dispatch, getState, { dataModelStorage }) => {
465+
return async (dispatch, getState, { dataModelStorage, track }) => {
477466
try {
478467
const { name, edits } = await getDiagramContentsFromFile(file);
479468

@@ -490,6 +479,7 @@ export function openDiagramFromFile(
490479
edits,
491480
};
492481
dispatch(openDiagram(diagram));
482+
track('Data Modeling Diagram Imported', {});
493483
void dataModelStorage.save(diagram);
494484
} catch (error) {
495485
openToast('data-modeling-file-read-error', {

packages/compass-data-modeling/src/store/export-diagram.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import { getCurrentDiagramFromState, selectCurrentModel } from './diagram';
66
import { openToast } from '@mongodb-js/compass-components';
77
import { isCancelError } from '@mongodb-js/compass-utils';
88
import type { DiagramInstance } from '@mongodb-js/diagramming';
9+
import { downloadDiagram } from '../services/open-and-download-diagram';
910

10-
export type ExportDiagramFormat = 'png' | 'json';
11+
export type ExportDiagramFormat = 'png' | 'json' | 'diagram';
1112

1213
export type ExportDiagramState = {
1314
isModalOpen: boolean;
@@ -129,6 +130,10 @@ export function exportDiagram(
129130
diagramInstance,
130131
cancelController.signal
131132
);
133+
} else if (exportFormat === 'diagram') {
134+
downloadDiagram(diagram.name, diagram.edits.current);
135+
} else {
136+
throw new Error(`Unsupported export format: ${exportFormat}`);
132137
}
133138
track('Data Modeling Diagram Exported', {
134139
format: exportFormat,

0 commit comments

Comments
 (0)