@@ -18,7 +18,7 @@ import { memoize } from 'lodash';
1818import type { DataModelingState , DataModelingThunkAction } from './reducer' ;
1919import {
2020 getCoordinatesForNewNode ,
21- openToast ,
21+ type openToast as _openToast ,
2222 showConfirmation ,
2323 showPrompt ,
2424} from '@mongodb-js/compass-components' ;
@@ -225,7 +225,6 @@ export const diagramReducer: Reducer<DiagramState> = (
225225 state . draftCollection ,
226226 action . edit . toNS
227227 ) ,
228- editErrors : undefined ,
229228 updatedAt : new Date ( ) . toISOString ( ) ,
230229 selectedItems : {
231230 type : 'collection' ,
@@ -242,7 +241,6 @@ export const diagramReducer: Reducer<DiagramState> = (
242241 current : [ ...state . edits . current , action . edit ] as [ Edit , ...Edit [ ] ] ,
243242 next : [ ] ,
244243 } ,
245- editErrors : undefined ,
246244 updatedAt : new Date ( ) . toISOString ( ) ,
247245 selectedItems : updateSelectedItemsFromAppliedEdit (
248246 state . selectedItems ,
@@ -501,7 +499,7 @@ export function redoEdit(): DataModelingThunkAction<void, RedoEditAction> {
501499export function onAddNestedField (
502500 ns : string ,
503501 parentFieldPath : string [ ]
504- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
502+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
505503 return ( dispatch , getState ) => {
506504 const modelState = selectCurrentModelFromState ( getState ( ) ) ;
507505
@@ -532,7 +530,7 @@ export function onAddNestedField(
532530
533531export function addNewFieldToCollection (
534532 ns : string
535- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
533+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
536534 return ( dispatch , getState ) => {
537535 const modelState = selectCurrentModelFromState ( getState ( ) ) ;
538536
@@ -561,7 +559,7 @@ export function addNewFieldToCollection(
561559export function moveCollection (
562560 ns : string ,
563561 newPosition : [ number , number ]
564- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
562+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
565563 const edit : Omit <
566564 Extract < Edit , { type : 'MoveCollection' } > ,
567565 'id' | 'timestamp'
@@ -578,7 +576,7 @@ export function renameCollection(
578576 toNS : string
579577) : DataModelingThunkAction <
580578 void ,
581- ApplyEditAction | ApplyEditFailedAction | CollectionSelectedAction
579+ ApplyEditAction | RevertFailedEditAction | CollectionSelectedAction
582580> {
583581 const edit : Omit <
584582 Extract < Edit , { type : 'RenameCollection' } > ,
@@ -592,18 +590,21 @@ export function renameCollection(
592590 return applyEdit ( edit ) ;
593591}
594592
595- function handleError ( messages : string [ ] ) {
593+ function handleError ( openToast : typeof _openToast , messages : string [ ] ) {
596594 openToast ( 'data-modeling-error' , {
597595 variant : 'warning' ,
598596 title : 'Error opening diagram' ,
599597 description : messages . join ( ' ' ) ,
600598 } ) ;
601599}
602600
601+ /**
602+ * Not intended to be called directly, only exported for testing.
603+ */
603604export function applyEdit (
604605 rawEdit : EditAction
605606) : DataModelingThunkAction < boolean , ApplyEditAction | RevertFailedEditAction > {
606- return ( dispatch , getState , { dataModelStorage } ) => {
607+ return ( dispatch , getState , { dataModelStorage, openToast } ) => {
607608 const edit = {
608609 ...rawEdit ,
609610 id : new UUID ( ) . toString ( ) ,
@@ -612,7 +613,7 @@ export function applyEdit(
612613 const { result, errors } = validateEdit ( edit ) ;
613614 let isValid = result ;
614615 if ( ! result ) {
615- handleError ( errors ) ;
616+ handleError ( openToast , errors ) ;
616617 return isValid ;
617618 }
618619 dispatch ( {
@@ -624,7 +625,7 @@ export function applyEdit(
624625 try {
625626 selectCurrentModelFromState ( getState ( ) ) ;
626627 } catch ( e ) {
627- handleError ( [
628+ handleError ( openToast , [
628629 'Something went wrong when applying the changes.' ,
629630 ( e as Error ) . message ,
630631 ] ) ;
@@ -689,7 +690,7 @@ export function renameDiagram(
689690export function openDiagramFromFile (
690691 file : File
691692) : DataModelingThunkAction < Promise < void > , OpenDiagramAction > {
692- return async ( dispatch , getState , { dataModelStorage, track } ) => {
693+ return async ( dispatch , getState , { dataModelStorage, track, openToast } ) => {
693694 try {
694695 const { name, edits } = await getDiagramContentsFromFile ( file ) ;
695696
@@ -720,7 +721,7 @@ export function openDiagramFromFile(
720721
721722export function updateRelationship (
722723 relationship : Relationship
723- ) : DataModelingThunkAction < boolean , ApplyEditAction | ApplyEditFailedAction > {
724+ ) : DataModelingThunkAction < boolean , ApplyEditAction | RevertFailedEditAction > {
724725 return applyEdit ( {
725726 type : 'UpdateRelationship' ,
726727 relationship,
@@ -748,7 +749,7 @@ export function deleteRelationship(
748749
749750export function deleteCollection (
750751 ns : string
751- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
752+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
752753 return ( dispatch , getState , { track } ) => {
753754 track ( 'Data Modeling Collection Removed' , {
754755 source : 'side_panel' ,
@@ -761,14 +762,14 @@ export function deleteCollection(
761762export function updateCollectionNote (
762763 ns : string ,
763764 note : string
764- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
765+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
765766 return applyEdit ( { type : 'UpdateCollectionNote' , ns, note } ) ;
766767}
767768
768769export function removeField (
769770 ns : string ,
770771 field : FieldPath
771- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
772+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
772773 return ( dispatch , getState , { track } ) => {
773774 track ( 'Data Modeling Field Removed' , {
774775 source : 'side_panel' ,
@@ -782,7 +783,7 @@ export function renameField(
782783 ns : string ,
783784 field : FieldPath ,
784785 newName : string
785- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
786+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
786787 return ( dispatch , getState , { track } ) => {
787788 track ( 'Data Modeling Field Renamed' , {
788789 source : 'side_panel' ,
@@ -818,7 +819,7 @@ export function changeFieldType(
818819 ns : string ,
819820 fieldPath : FieldPath ,
820821 newTypes : string [ ]
821- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
822+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
822823 return ( dispatch , getState , { track } ) => {
823824 const collectionSchema = selectCurrentModelFromState (
824825 getState ( )
@@ -886,7 +887,7 @@ export function addCollection(
886887 position ?: [ number , number ]
887888) : DataModelingThunkAction <
888889 void ,
889- ApplyEditAction | ApplyEditFailedAction | CollectionSelectedAction
890+ ApplyEditAction | RevertFailedEditAction | CollectionSelectedAction
890891> {
891892 return ( dispatch , getState , { track } ) => {
892893 const existingCollections = selectCurrentModelFromState (
0 commit comments