@@ -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' ;
@@ -229,7 +229,6 @@ export const diagramReducer: Reducer<DiagramState> = (
229229 state . draftCollection ,
230230 action . edit . toNS
231231 ) ,
232- editErrors : undefined ,
233232 updatedAt : new Date ( ) . toISOString ( ) ,
234233 selectedItems : {
235234 type : 'collection' ,
@@ -246,7 +245,6 @@ export const diagramReducer: Reducer<DiagramState> = (
246245 current : [ ...state . edits . current , action . edit ] as [ Edit , ...Edit [ ] ] ,
247246 next : [ ] ,
248247 } ,
249- editErrors : undefined ,
250248 updatedAt : new Date ( ) . toISOString ( ) ,
251249 selectedItems : updateSelectedItemsFromAppliedEdit (
252250 state . selectedItems ,
@@ -509,7 +507,7 @@ export function redoEdit(): DataModelingThunkAction<void, RedoEditAction> {
509507export function onAddNestedField (
510508 ns : string ,
511509 parentFieldPath : string [ ]
512- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
510+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
513511 return ( dispatch , getState ) => {
514512 const modelState = selectCurrentModelFromState ( getState ( ) ) ;
515513
@@ -540,7 +538,7 @@ export function onAddNestedField(
540538
541539export function addNewFieldToCollection (
542540 ns : string
543- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
541+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
544542 return ( dispatch , getState ) => {
545543 const modelState = selectCurrentModelFromState ( getState ( ) ) ;
546544
@@ -569,7 +567,7 @@ export function addNewFieldToCollection(
569567export function moveCollection (
570568 ns : string ,
571569 newPosition : [ number , number ]
572- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
570+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
573571 const edit : Omit <
574572 Extract < Edit , { type : 'MoveCollection' } > ,
575573 'id' | 'timestamp'
@@ -586,7 +584,7 @@ export function renameCollection(
586584 toNS : string
587585) : DataModelingThunkAction <
588586 void ,
589- ApplyEditAction | ApplyEditFailedAction | CollectionSelectedAction
587+ ApplyEditAction | RevertFailedEditAction | CollectionSelectedAction
590588> {
591589 const edit : Omit <
592590 Extract < Edit , { type : 'RenameCollection' } > ,
@@ -600,18 +598,21 @@ export function renameCollection(
600598 return applyEdit ( edit ) ;
601599}
602600
603- function handleError ( messages : string [ ] ) {
601+ function handleError ( openToast : typeof _openToast , messages : string [ ] ) {
604602 openToast ( 'data-modeling-error' , {
605603 variant : 'warning' ,
606604 title : 'Error opening diagram' ,
607605 description : messages . join ( ' ' ) ,
608606 } ) ;
609607}
610608
609+ /**
610+ * Not intended to be called directly, only exported for testing.
611+ */
611612export function applyEdit (
612613 rawEdit : EditAction
613614) : DataModelingThunkAction < boolean , ApplyEditAction | RevertFailedEditAction > {
614- return ( dispatch , getState , { dataModelStorage } ) => {
615+ return ( dispatch , getState , { dataModelStorage, openToast } ) => {
615616 const edit = {
616617 ...rawEdit ,
617618 id : new UUID ( ) . toString ( ) ,
@@ -620,7 +621,7 @@ export function applyEdit(
620621 const { result, errors } = validateEdit ( edit ) ;
621622 let isValid = result ;
622623 if ( ! result ) {
623- handleError ( errors ) ;
624+ handleError ( openToast , errors ) ;
624625 return isValid ;
625626 }
626627 dispatch ( {
@@ -632,7 +633,7 @@ export function applyEdit(
632633 try {
633634 selectCurrentModelFromState ( getState ( ) ) ;
634635 } catch ( e ) {
635- handleError ( [
636+ handleError ( openToast , [
636637 'Something went wrong when applying the changes.' ,
637638 ( e as Error ) . message ,
638639 ] ) ;
@@ -697,7 +698,7 @@ export function renameDiagram(
697698export function openDiagramFromFile (
698699 file : File
699700) : DataModelingThunkAction < Promise < void > , OpenDiagramAction > {
700- return async ( dispatch , getState , { dataModelStorage, track } ) => {
701+ return async ( dispatch , getState , { dataModelStorage, track, openToast } ) => {
701702 try {
702703 const { name, edits } = await getDiagramContentsFromFile ( file ) ;
703704
@@ -728,7 +729,7 @@ export function openDiagramFromFile(
728729
729730export function updateRelationship (
730731 relationship : Relationship
731- ) : DataModelingThunkAction < boolean , ApplyEditAction | ApplyEditFailedAction > {
732+ ) : DataModelingThunkAction < boolean , ApplyEditAction | RevertFailedEditAction > {
732733 return applyEdit ( {
733734 type : 'UpdateRelationship' ,
734735 relationship,
@@ -756,7 +757,7 @@ export function deleteRelationship(
756757
757758export function deleteCollection (
758759 ns : string
759- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
760+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
760761 return ( dispatch , getState , { track } ) => {
761762 track ( 'Data Modeling Collection Removed' , {
762763 source : 'side_panel' ,
@@ -769,14 +770,14 @@ export function deleteCollection(
769770export function updateCollectionNote (
770771 ns : string ,
771772 note : string
772- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
773+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
773774 return applyEdit ( { type : 'UpdateCollectionNote' , ns, note } ) ;
774775}
775776
776777export function removeField (
777778 ns : string ,
778779 field : FieldPath
779- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
780+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
780781 return ( dispatch , getState , { track } ) => {
781782 track ( 'Data Modeling Field Removed' , {
782783 source : 'side_panel' ,
@@ -790,7 +791,7 @@ export function renameField(
790791 ns : string ,
791792 field : FieldPath ,
792793 newName : string
793- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
794+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
794795 return ( dispatch , getState , { track } ) => {
795796 track ( 'Data Modeling Field Renamed' , {
796797 source : 'side_panel' ,
@@ -826,7 +827,7 @@ export function changeFieldType(
826827 ns : string ,
827828 fieldPath : FieldPath ,
828829 newTypes : string [ ]
829- ) : DataModelingThunkAction < void , ApplyEditAction | ApplyEditFailedAction > {
830+ ) : DataModelingThunkAction < void , ApplyEditAction | RevertFailedEditAction > {
830831 return ( dispatch , getState , { track } ) => {
831832 const collectionSchema = selectCurrentModelFromState (
832833 getState ( )
@@ -895,7 +896,7 @@ export function addCollection(
895896 position ?: [ number , number ]
896897) : DataModelingThunkAction <
897898 void ,
898- ApplyEditAction | ApplyEditFailedAction | CollectionSelectedAction
899+ ApplyEditAction | RevertFailedEditAction | CollectionSelectedAction
899900> {
900901 return ( dispatch , getState , { track } ) => {
901902 const existingCollections = selectCurrentModelFromState (
0 commit comments