Explorar o código

fix: fix chatbot publish and restore handling (#15462)

Wu Tianwei hai 1 mes
pai
achega
b6b1903a37
Modificáronse 1 ficheiros con 38 adicións e 10 borrados
  1. 38 10
      web/app/components/app/app-publisher/index.tsx

+ 38 - 10
web/app/components/app/app-publisher/index.tsx

@@ -45,6 +45,7 @@ export type AppPublisherProps = {
   multipleModelConfigs?: ModelAndParameter[]
   /** modelAndParameter is passed when debugWithMultipleModel is true */
   onPublish?: (params?: any) => Promise<any> | any
+  onRestore?: () => Promise<any> | any
   onToggle?: (state: boolean) => void
   crossAxisOffset?: number
   toolPublished?: boolean
@@ -62,6 +63,7 @@ const AppPublisher = ({
   debugWithMultipleModel = false,
   multipleModelConfigs = [],
   onPublish,
+  onRestore,
   onToggle,
   crossAxisOffset = 0,
   toolPublished,
@@ -76,13 +78,14 @@ const AppPublisher = ({
   const { app_base_url: appBaseURL = '', access_token: accessToken = '' } = appDetail?.site ?? {}
   const appMode = (appDetail?.mode !== 'completion' && appDetail?.mode !== 'workflow') ? 'chat' : appDetail.mode
   const appURL = `${appBaseURL}/${appMode}/${accessToken}`
+  const isChatApp = ['chat', 'agent-chat', 'completion'].includes(appDetail?.mode || '')
 
   const language = useGetLanguage()
   const formatTimeFromNow = useCallback((time: number) => {
     return dayjs(time).locale(language === 'zh_Hans' ? 'zh-cn' : language.replace('_', '-')).fromNow()
   }, [language])
 
-  const handlePublish = async (params?: ModelAndParameter | PublishWorkflowParams) => {
+  const handlePublish = useCallback(async (params?: ModelAndParameter | PublishWorkflowParams) => {
     try {
       await onPublish?.(params)
       setPublished(true)
@@ -90,7 +93,15 @@ const AppPublisher = ({
     catch {
       setPublished(false)
     }
-  }
+  }, [onPublish])
+
+  const handleRestore = useCallback(async () => {
+    try {
+      await onRestore?.()
+      setOpen(false)
+    }
+    catch {}
+  }, [onRestore])
 
   const handleTrigger = useCallback(() => {
     const state = !open
@@ -122,20 +133,27 @@ const AppPublisher = ({
 
   const [embeddingModalOpen, setEmbeddingModalOpen] = useState(false)
 
-  const openPublishModal = () => {
+  const openPublishModal = useCallback(() => {
     setOpen(false)
     setPublishModalOpen(true)
-  }
+  }, [])
 
-  const closePublishModal = () => {
+  const closePublishModal = useCallback(() => {
     setPublishModalOpen(false)
-  }
+  }, [])
+
+  const onClickPublishBtn = useCallback(() => {
+    if (isChatApp)
+      handlePublish()
+    else
+      openPublishModal()
+  }, [isChatApp, handlePublish, openPublishModal])
 
   useKeyPress(`${getKeyboardKeyCodeBySystem('ctrl')}.shift.p`, (e) => {
     e.preventDefault()
     if (publishDisabled || published)
       return
-    openPublishModal()
+    onClickPublishBtn()
   }
   , { exactMatch: true, useCapture: true })
 
@@ -168,8 +186,18 @@ const AppPublisher = ({
               </div>
               {publishedAt
                 ? (
-                  <div className='flex items-center system-sm-medium text-text-secondary'>
-                    {t('workflow.common.publishedAt')} {formatTimeFromNow(publishedAt)}
+                  <div className='flex justify-between items-center'>
+                    <div className='flex items-center system-sm-medium text-text-secondary'>
+                      {t('workflow.common.publishedAt')} {formatTimeFromNow(publishedAt)}
+                    </div>
+                    {isChatApp && <Button
+                      variant='secondary-accent'
+                      size='small'
+                      onClick={handleRestore}
+                      disabled={published}
+                    >
+                      {t('workflow.common.restore')}
+                    </Button>}
                   </div>
                 )
                 : (
@@ -189,7 +217,7 @@ const AppPublisher = ({
                   <Button
                     variant='primary'
                     className='w-full mt-3'
-                    onClick={openPublishModal}
+                    onClick={onClickPublishBtn}
                     disabled={publishDisabled || published}
                   >
                     {