11/**
22 * Handles API communication for the workflow graph.
33 */
4+
45class WorkflowGraphApi {
56
67 /**
@@ -11,7 +12,7 @@ class WorkflowGraphApi {
1112 constructor ( ) {
1213 const {
1314 apiBaseUrl,
14- extension
15+ extension,
1516 } = Joomla . getOptions ( 'com_workflow' , { } ) ;
1617
1718 if ( ! apiBaseUrl ) {
@@ -47,33 +48,30 @@ class WorkflowGraphApi {
4748 Joomla . request ( {
4849 url : `${ this . baseUrl } ${ url } &extension=${ this . extension } ` ,
4950 ...options ,
50- onSuccess : ( responseText , xhr ) => {
51+ onSuccess : ( responseText ) => {
5152 const response = responseText ?. trim ( ) ;
5253 try {
5354 const parsed = JSON . parse ( response ) ;
5455 resolve ( parsed ) ;
55- return ;
5656 } catch {
57-
58- }
59- const temp = document . createElement ( 'div' ) ;
60- temp . innerHTML = response ;
61-
62- const success = temp . querySelector ( 'joomla-alert[type="success"] .alert-message' ) ;
63- if ( success ) {
64- resolve ( { success : true , message : success . textContent . trim ( ) } ) ;
65- return ;
66- }
67-
68- const error = temp . querySelector ( 'joomla-alert[type="error"], joomla-alert[type="danger"], joomla-alert[type="warning"] .alert-message' ) ;
69- if ( error ) {
70- const msg = error . querySelector ( '.alert-message' ) ?. textContent . trim ( ) || 'An error occurred.' ;
71- reject ( new Error ( msg ) ) ;
72- return ;
57+ const temp = document . createElement ( 'div' ) ;
58+ temp . innerHTML = response ;
59+
60+ const success = temp . querySelector ( 'joomla-alert[type="success"] .alert-message' ) ;
61+ if ( success ) {
62+ resolve ( { success : true , message : success . textContent . trim ( ) } ) ;
63+ return ;
64+ }
65+
66+ const error = temp . querySelector ( 'joomla-alert[type="error"], joomla-alert[type="danger"], joomla-alert[type="warning"] .alert-message' ) ;
67+ if ( error ) {
68+ const msg = error . querySelector ( '.alert-message' ) ?. textContent . trim ( ) || 'An error occurred.' ;
69+ reject ( new Error ( msg ) ) ;
70+ return ;
71+ }
72+
73+ resolve ( { success : true , message : 'No system message. Assuming success.' , raw : response } ) ;
7374 }
74-
75- // No message, assume okay
76- resolve ( { success : true , message : 'No system message. Assuming success.' , raw : response } ) ;
7775 } ,
7876 onError : ( xhr ) => {
7977 let message = 'Network error' ;
@@ -84,7 +82,7 @@ class WorkflowGraphApi {
8482 message = xhr . statusText || message ;
8583 }
8684 reject ( new Error ( message ) ) ;
87- }
85+ } ,
8886 } ) ;
8987 } ) ;
9088 }
@@ -101,13 +99,13 @@ class WorkflowGraphApi {
10199 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
102100
103101 if ( data . success === false ) {
104- WorkflowGraph . Event . fire ( 'onWorkflowError' , { error : data . message || 'Failed to load workflow' } ) ;
102+ window . WorkflowGraph . Event . fire ( 'onWorkflowError' , { error : data . message || 'Failed to load workflow' } ) ;
105103 return null ;
106104 }
107105
108106 return data ?. data || data ;
109107 } catch ( error ) {
110- WorkflowGraph . Event . fire ( 'onWorkflowError' , { error : error . message } ) ;
108+ window . WorkflowGraph . Event . fire ( 'onWorkflowError' , { error : error . message } ) ;
111109 throw error ;
112110 }
113111 }
@@ -124,13 +122,13 @@ class WorkflowGraphApi {
124122 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
125123
126124 if ( data . success === false ) {
127- WorkflowGraph . Event . fire ( 'onStagesError' , { error : data . message || 'Failed to load stages' } ) ;
125+ window . WorkflowGraph . Event . fire ( 'onStagesError' , { error : data . message || 'Failed to load stages' } ) ;
128126 return null ;
129127 }
130128
131129 return data ?. data || data ;
132130 } catch ( error ) {
133- WorkflowGraph . Event . fire ( 'onStagesError' , { error : error . message } ) ;
131+ window . WorkflowGraph . Event . fire ( 'onStagesError' , { error : error . message } ) ;
134132 throw error ;
135133 }
136134 }
@@ -147,13 +145,13 @@ class WorkflowGraphApi {
147145 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
148146
149147 if ( data . success === false ) {
150- WorkflowGraph . Event . fire ( 'onTransitionsError' , { error : data . message || 'Failed to load transitions' } ) ;
148+ window . WorkflowGraph . Event . fire ( 'onTransitionsError' , { error : data . message || 'Failed to load transitions' } ) ;
151149 return null ;
152150 }
153151
154152 return data ?. data || data ;
155153 } catch ( error ) {
156- WorkflowGraph . Event . fire ( 'onTransitionsError' , { error : error . message } ) ;
154+ window . WorkflowGraph . Event . fire ( 'onTransitionsError' , { error : error . message } ) ;
157155 throw error ;
158156 }
159157 }
@@ -173,7 +171,7 @@ class WorkflowGraphApi {
173171 formData . append ( 'cid[]' , id ) ;
174172 formData . append ( 'workflow_id' , workflowId ) ;
175173 formData . append ( this . csrfToken , '1' ) ;
176- if ( stageDelete ) {
174+ if ( stageDelete ) {
177175 formData . append ( 'task' , 'stages.delete' ) ;
178176 } else {
179177 formData . append ( 'task' , 'stages.trash' ) ;
@@ -186,13 +184,13 @@ class WorkflowGraphApi {
186184
187185 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
188186 if ( data . success === false ) {
189- WorkflowGraph . Event . fire ( 'onStageError' , { error : data . message || 'Failed to delete stage' } ) ;
187+ window . WorkflowGraph . Event . fire ( 'onStageError' , { error : data . message || 'Failed to delete stage' } ) ;
190188 return false ;
191189 }
192190
193191 return true ;
194192 } catch ( error ) {
195- WorkflowGraph . Event . fire ( 'onStageError' , { error : error . message } ) ;
193+ window . WorkflowGraph . Event . fire ( 'onStageError' , { error : error . message } ) ;
196194 throw error ;
197195 }
198196 }
@@ -220,12 +218,12 @@ class WorkflowGraphApi {
220218 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
221219
222220 if ( data . success === false ) {
223- WorkflowGraph . Event . fire ( 'onTransitionError' , { error : data . message || 'Failed to delete transition' } )
221+ window . WorkflowGraph . Event . fire ( 'onTransitionError' , { error : data . message || 'Failed to delete transition' } ) ;
224222 }
225223
226224 return true ;
227225 } catch ( error ) {
228- WorkflowGraph . Event . fire ( 'onTransitionError' , { error : error . message } ) ;
226+ window . WorkflowGraph . Event . fire ( 'onTransitionError' , { error : error . message } ) ;
229227 throw error ;
230228 }
231229 }
@@ -238,7 +236,7 @@ class WorkflowGraphApi {
238236 * @returns {Promise<Object|null> }
239237 */
240238 async updateStagePosition ( workflowId , positions ) {
241- try {
239+ try {
242240 const formData = new FormData ( ) ;
243241 formData . append ( 'workflow_id' , workflowId ) ;
244242 formData . append ( this . csrfToken , '1' ) ;
@@ -248,21 +246,21 @@ class WorkflowGraphApi {
248246 formData . append ( `positions[${ id } ][y]` , position . y ) ;
249247 } ) ;
250248
251- const response = await this . makeRequest ( ` &task=stages.updateStagesPosition&format=raw` , {
249+ const response = await this . makeRequest ( ' &task=stages.updateStagesPosition&format=raw' , {
252250 method : 'POST' ,
253- data : formData
251+ data : formData ,
254252 } ) ;
255253
256254 const data = typeof response === 'string' ? JSON . parse ( response ) : response ;
257255
258256 if ( data . success === false ) {
259- WorkflowGraph . Event . fire ( 'onUpdatePositionError' , { error : data . message || 'Failed to update stage positions' } ) ;
257+ window . WorkflowGraph . Event . fire ( 'onUpdatePositionError' , { error : data . message || 'Failed to update stage positions' } ) ;
260258 return null ;
261259 }
262260
263261 return data . data || data ;
264262 } catch ( error ) {
265- WorkflowGraph . Event . fire ( 'onStageError' , { error : error . message } ) ;
263+ window . WorkflowGraph . Event . fire ( 'onStageError' , { error : error . message } ) ;
266264 throw error ;
267265 }
268266 }
0 commit comments