Skip to content

Commit ae0d002

Browse files
committed
controller in args and add comment for rafraf
1 parent d4cbc4d commit ae0d002

File tree

5 files changed

+26
-17
lines changed

5 files changed

+26
-17
lines changed

packages/compass-data-modeling/src/services/export-diagram.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ export function getExportPngDataUri(diagram: DiagramInstance): Promise<string> {
7575
</DiagramProvider>,
7676
container,
7777
() => {
78+
// We skip some frames here to ensure that the DOM has fully rendered and React has
79+
// committed all updates before we try to query for viewport element. Without this,
80+
// the element may not exist yet or may not have the correct styles etc.
7881
rafraf(() => {
7982
// For export we are selecting react-flow__viewport element,
8083
// which contains the export canvas. It excludes diagram

packages/compass-data-modeling/src/store/analysis-process.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ export function startAnalysis(
144144
const namespaces = collections.map((collName) => {
145145
return `${database}.${collName}`;
146146
});
147-
const cancelController = (services.cancelControllerRef.current =
147+
const cancelController = (services.cancelAnalysisControllerRef.current =
148148
new AbortController());
149149
dispatch({
150150
type: AnalysisProcessActionTypes.ANALYZING_COLLECTIONS_START,
@@ -223,7 +223,7 @@ export function startAnalysis(
223223
});
224224
}
225225
} finally {
226-
services.cancelControllerRef.current = null;
226+
services.cancelAnalysisControllerRef.current = null;
227227
}
228228
};
229229
}
@@ -250,8 +250,8 @@ export function retryAnalysis(): DataModelingThunkAction<void, never> {
250250
}
251251

252252
export function cancelAnalysis(): DataModelingThunkAction<void, never> {
253-
return (_dispatch, _getState, { cancelControllerRef }) => {
254-
cancelControllerRef.current?.abort();
255-
cancelControllerRef.current = null;
253+
return (_dispatch, _getState, { cancelAnalysisControllerRef }) => {
254+
cancelAnalysisControllerRef.current?.abort();
255+
cancelAnalysisControllerRef.current = null;
256256
};
257257
}

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ const INITIAL_STATE = {
5656
isExporting: false,
5757
};
5858

59-
let cancelExportAbortController: AbortController | null = null;
60-
6159
export const exportDiagramReducer: Reducer<ExportDiagramState> = (
6260
state = INITIAL_STATE,
6361
action
@@ -103,7 +101,7 @@ export function exportDiagram(
103101
Promise<void>,
104102
ExportStartedAction | ExportCompletedAction
105103
> {
106-
return async (dispatch, getState, { track }) => {
104+
return async (dispatch, getState, { track, cancelExportControllerRef }) => {
107105
const {
108106
exportDiagram: { exportFormat, isExporting },
109107
diagram,
@@ -117,7 +115,8 @@ export function exportDiagram(
117115
type: ExportDiagramActionTypes.EXPORT_STARTED,
118116
});
119117

120-
cancelExportAbortController = new AbortController();
118+
const cancelController = (cancelExportControllerRef.current =
119+
new AbortController());
121120

122121
const model = selectCurrentModel(getCurrentDiagramFromState(getState()));
123122
if (exportFormat === 'json') {
@@ -126,7 +125,7 @@ export function exportDiagram(
126125
await exportToPng(
127126
diagram.name,
128127
diagramInstance,
129-
cancelExportAbortController.signal
128+
cancelController.signal
130129
);
131130
}
132131
track('Data Modeling Diagram Exported', {
@@ -143,7 +142,7 @@ export function exportDiagram(
143142
});
144143
}
145144
} finally {
146-
cancelExportAbortController = null;
145+
cancelExportControllerRef.current = null;
147146
dispatch({
148147
type: ExportDiagramActionTypes.EXPORT_COMPLETED,
149148
});
@@ -155,7 +154,7 @@ export function showExportModal(): DataModelingThunkAction<
155154
void,
156155
ModalOpenedAction
157156
> {
158-
return (dispatch, getState, { track }) => {
157+
return (dispatch, _getState, { track }) => {
159158
track('Screen', { name: 'export_diagram_modal' }, undefined);
160159
return dispatch({ type: ExportDiagramActionTypes.MODAL_OPENED });
161160
};
@@ -165,8 +164,8 @@ export function closeExportModal(): DataModelingThunkAction<
165164
void,
166165
ModalClosedAction
167166
> {
168-
return (dispatch) => {
169-
cancelExportAbortController?.abort();
167+
return (dispatch, _getState, { cancelExportControllerRef }) => {
168+
cancelExportControllerRef.current?.abort();
170169
dispatch({ type: ExportDiagramActionTypes.MODAL_CLOSED });
171170
};
172171
}

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type { MongoDBInstancesManager } from '@mongodb-js/compass-app-stores/pro
66
import type { DataModelStorageService } from '../provider';
77
import { applyMiddleware, createStore } from 'redux';
88
import reducer from './reducer';
9+
import type { DataModelingExtraArgs } from './reducer';
910
import thunk from 'redux-thunk';
1011
import type { ActivateHelpers } from '@mongodb-js/compass-app-registry';
1112

@@ -25,11 +26,16 @@ export function activateDataModelingStore(
2526
services: DataModelingStoreServices,
2627
{ cleanup }: ActivateHelpers
2728
) {
28-
const cancelControllerRef = { current: null };
29+
const cancelAnalysisControllerRef = { current: null };
30+
const cancelExportControllerRef = { current: null };
2931
const store = createStore(
3032
reducer,
3133
applyMiddleware(
32-
thunk.withExtraArgument({ ...services, cancelControllerRef })
34+
thunk.withExtraArgument<DataModelingExtraArgs>({
35+
...services,
36+
cancelAnalysisControllerRef,
37+
cancelExportControllerRef,
38+
})
3339
)
3440
);
3541
return { store, deactivate: cleanup };

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ export type DataModelingActionTypes =
4444
export type DataModelingState = ReturnType<typeof reducer>;
4545

4646
export type DataModelingExtraArgs = DataModelingStoreServices & {
47-
cancelControllerRef: { current: AbortController | null };
47+
cancelAnalysisControllerRef: { current: AbortController | null };
48+
cancelExportControllerRef: { current: AbortController | null };
4849
};
4950

5051
export type DataModelingThunkAction<R, A extends AnyAction> = ThunkAction<

0 commit comments

Comments
 (0)