@@ -63,3 +63,50 @@ export const compare = (a, b) => {
6363
6464 return result ;
6565} ;
66+
67+ export const isSaveNeeded = ( flowData , flowDataDraft ) => {
68+ if ( flowData . nodes . length != flowDataDraft . nodes . length ) {
69+ console . log ( 'Detected unsaved changes: node count' ) ;
70+ return true ;
71+ }
72+
73+ if ( flowData . edges . length != flowDataDraft . edges . length ) {
74+ console . log ( 'Detected unsaved changes: edges count' ) ;
75+ return true ;
76+ }
77+
78+ const unwrapEdge = function ( { source, sourceHandle, target, targetHandle } ) {
79+ return { source, sourceHandle, target, targetHandle } ;
80+ } ;
81+
82+ const edges = flowData . edges . map ( ( e ) => unwrapEdge ( e ) ) ;
83+ const edgesDraft = flowDataDraft . edges . map ( ( e ) => unwrapEdge ( e ) ) ;
84+
85+ if ( ! isEqual ( edges , edgesDraft ) ) {
86+ console . log ( 'Detected unsaved changes: ' , compare ( edges , edgesDraft ) ) ;
87+ return true ;
88+ }
89+
90+ const unwrapNode = function ( { id, type, data, position } ) {
91+ return { id, type, data, position } ;
92+ } ;
93+
94+ const nodes = flowData . nodes . map ( ( e ) => unwrapNode ( e ) ) ;
95+ const nodesDraft = flowDataDraft . nodes . map ( ( node ) => {
96+ if ( node . type === 'outputNode' && node . data . output ) {
97+ const { [ 'output' ] : _ , ...data } = node . data ;
98+ return unwrapNode ( {
99+ ...node ,
100+ data,
101+ } ) ;
102+ }
103+ return unwrapNode ( node ) ;
104+ } ) ;
105+
106+ if ( ! isEqual ( nodes , nodesDraft ) ) {
107+ console . log ( 'Detected unsaved changes: ' , compare ( nodes , nodesDraft ) ) ;
108+ return true ;
109+ }
110+
111+ return false ;
112+ } ;
0 commit comments