@@ -11,8 +11,6 @@ import Aura from '@primeuix/themes/aura'
1111
1212window . assistantPollTimerId = null
1313
14- // TODO add param to lock on specific task type
15-
1614/**
1715 * Creates an assistant modal and return a promise which provides the result
1816 *
@@ -63,6 +61,12 @@ export async function openAssistantForm({
6361 const selectedTaskTypeId = taskType ?? ( await getLastSelectedTaskType ( ) ) ?. data
6462
6563 return new Promise ( ( resolve , reject ) => {
64+ if ( OCA . Assistant . isAssistantDialogOpen ) {
65+ reject ( new Error ( 'Assistant dialog is already open' ) )
66+ return
67+ }
68+ OCA . Assistant . isAssistantDialogOpen = true
69+
6670 let modalMountPoint
6771 const content = document . querySelector ( '#content' ) ?? document . querySelector ( '#content-vue' )
6872
@@ -121,6 +125,7 @@ export async function openAssistantForm({
121125 modalMountPoint . addEventListener ( 'cancel' , ( ) => {
122126 cancelTaskPolling ( )
123127 app . unmount ( )
128+ OCA . Assistant . isAssistantDialogOpen = false
124129 reject ( new Error ( 'User cancellation' ) )
125130 } )
126131 const syncSubmit = ( inputs , taskTypeId , newTaskCustomId = '' ) => {
@@ -144,6 +149,7 @@ export async function openAssistantForm({
144149 if ( finishedTask . status === TASK_STATUS_STRING . successful ) {
145150 if ( closeOnResult ) {
146151 app . unmount ( )
152+ OCA . Assistant . isAssistantDialogOpen = false
147153 } else {
148154 view . outputs = finishedTask ?. output
149155 }
@@ -305,6 +311,7 @@ export async function openAssistantForm({
305311 data . detail . button . onClick ( lastTask )
306312 }
307313 app . unmount ( )
314+ OCA . Assistant . isAssistantDialogOpen = false
308315 } )
309316 } )
310317}
@@ -487,7 +494,9 @@ export function handleNotification(event) {
487494async function showAssistantTaskResult ( taskId ) {
488495 getTask ( taskId ) . then ( response => {
489496 console . debug ( 'showing results for task' , response . data ?. ocs ?. data ?. task )
490- openAssistantTask ( response . data ?. ocs ?. data ?. task , { } )
497+ openAssistantTask ( response . data ?. ocs ?. data ?. task , { } ) . catch ( error => {
498+ console . error ( error . message )
499+ } )
491500 } ) . catch ( error => {
492501 if ( error . response ?. status === 401 ) {
493502 showError ( t ( 'assistant' , 'Please log in to view the task result' ) )
@@ -516,6 +525,11 @@ export async function openAssistantTask(
516525 actionButtons = undefined ,
517526 mountPoint = null ,
518527 } = { } ) {
528+ if ( OCA . Assistant . isAssistantDialogOpen ) {
529+ throw new Error ( 'Assistant dialog is already open' )
530+ }
531+ OCA . Assistant . isAssistantDialogOpen = true
532+
519533 const { createApp } = await import ( 'vue' )
520534 const { default : AssistantTextProcessingModal } = await import ( './components/AssistantTextProcessingModal.vue' )
521535
@@ -567,6 +581,7 @@ export async function openAssistantTask(
567581 modalMountPoint . addEventListener ( 'cancel' , ( ) => {
568582 cancelTaskPolling ( )
569583 app . unmount ( )
584+ OCA . Assistant . isAssistantDialogOpen = false
570585 } )
571586 modalMountPoint . addEventListener ( 'submit' , ( data ) => {
572587 scheduleTask ( task . appId , task . identifier ?? '' , data . detail . selectedTaskTypeId , data . detail . inputs )
@@ -575,6 +590,7 @@ export async function openAssistantTask(
575590 } )
576591 . catch ( error => {
577592 app . unmount ( )
593+ OCA . Assistant . isAssistantDialogOpen = false
578594 console . error ( 'Assistant scheduling error' , error )
579595 showError (
580596 t ( 'assistant' , 'Assistant failed to schedule your task' )
@@ -754,6 +770,7 @@ export async function openAssistantTask(
754770 data . detail . button . onClick ( lastTask )
755771 }
756772 app . unmount ( )
773+ OCA . Assistant . isAssistantDialogOpen = false
757774 } )
758775}
759776
0 commit comments