diff --git a/web/app/components/app/switch-app-modal/index.tsx b/web/app/components/app/switch-app-modal/index.tsx index 1cc4cb3118..c0b744da31 100644 --- a/web/app/components/app/switch-app-modal/index.tsx +++ b/web/app/components/app/switch-app-modal/index.tsx @@ -1,6 +1,6 @@ 'use client' -import { useState } from 'react' +import { useEffect, useState } from 'react' import { useRouter } from 'next/navigation' import { useContext } from 'use-context-selector' import { useTranslation } from 'react-i18next' @@ -8,6 +8,7 @@ import cn from 'classnames' import s from './style.module.css' import Button from '@/app/components/base/button' import Modal from '@/app/components/base/modal' +import Confirm from '@/app/components/base/confirm' import { ToastContext } from '@/app/components/base/toast' import { deleteApp, switchApp } from '@/service/apps' import { useAppContext } from '@/context/app-context' @@ -44,10 +45,16 @@ const SwitchAppModal = ({ show, appDetail, inAppDetail = false, onSuccess, onClo const [showEmojiPicker, setShowEmojiPicker] = useState(false) const [name, setName] = useState(`${appDetail.name}(copy)`) const [removeOriginal, setRemoveOriginal] = useState(false) + const [showConfirmDelete, setShowConfirmDelete] = useState(false) const goStart = async () => { try { - const { new_app_id: newAppID } = await switchApp(appDetail.id) + const { new_app_id: newAppID } = await switchApp({ + appID: appDetail.id, + name, + icon: emoji.icon, + icon_background: emoji.icon_background, + }) if (onSuccess) onSuccess() if (onClose) @@ -72,59 +79,82 @@ const SwitchAppModal = ({ show, appDetail, inAppDetail = false, onSuccess, onClo } } + useEffect(() => { + if (removeOriginal) + setShowConfirmDelete(true) + }, [removeOriginal]) + return ( - {}} - > -
- -
-
- -
-
{t('app.switch')}
-
- {t('app.switchTipStart')} - {t('app.switchTip')} - {t('app.switchTipEnd')} -
-
-
{t('app.switchLabel')}
-
- { setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.icon} background={emoji.icon_background} /> - setName(e.target.value)} - placeholder={t('app.newApp.appNamePlaceholder') || ''} - className='grow h-10 px-3 text-sm font-normal bg-gray-100 rounded-lg border border-transparent outline-none appearance-none caret-primary-600 placeholder:text-gray-400 hover:bg-gray-50 hover:border hover:border-gray-300 focus:bg-gray-50 focus:border focus:border-gray-300 focus:shadow-xs' - /> + <> + {}} + > +
+
- {showEmojiPicker && { - setEmoji({ icon, icon_background }) - setShowEmojiPicker(false) +
+ +
+
{t('app.switch')}
+
+ {t('app.switchTipStart')} + {t('app.switchTip')} + {t('app.switchTipEnd')} +
+
+
{t('app.switchLabel')}
+
+ { setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.icon} background={emoji.icon_background} /> + setName(e.target.value)} + placeholder={t('app.newApp.appNamePlaceholder') || ''} + className='grow h-10 px-3 text-sm font-normal bg-gray-100 rounded-lg border border-transparent outline-none appearance-none caret-primary-600 placeholder:text-gray-400 hover:bg-gray-50 hover:border hover:border-gray-300 focus:bg-gray-50 focus:border focus:border-gray-300 focus:shadow-xs' + /> +
+ {showEmojiPicker && { + setEmoji({ icon, icon_background }) + setShowEmojiPicker(false) + }} + onClose={() => { + setEmoji({ icon: appDetail.icon, icon_background: appDetail.icon_background }) + setShowEmojiPicker(false) + }} + />} +
+ {isAppsFull && } +
+
+ setRemoveOriginal(!removeOriginal)} className="w-4 h-4 rounded border-gray-300 text-blue-700 cursor-pointer focus:ring-blue-700" /> + +
+
+ + +
+
+
+ {showConfirmDelete && ( + setShowConfirmDelete(false)} + onCancel={() => { + setShowConfirmDelete(false) + setRemoveOriginal(false) }} onClose={() => { - setEmoji({ icon: appDetail.icon, icon_background: appDetail.icon_background }) - setShowEmojiPicker(false) + setShowConfirmDelete(false) + setRemoveOriginal(false) }} - />} -
- {isAppsFull && } -
-
- setRemoveOriginal(!removeOriginal)} className="w-4 h-4 rounded border-gray-300 text-blue-700 cursor-pointer focus:ring-blue-700" /> - -
-
- - -
-
- + /> + )} + ) } diff --git a/web/service/apps.ts b/web/service/apps.ts index 5c4995c485..b20739898e 100644 --- a/web/service/apps.ts +++ b/web/service/apps.ts @@ -36,8 +36,8 @@ export const importApp: Fetcher('apps/import', { body: { data, name, description, icon, icon_background } }) } -export const switchApp: Fetcher<{ new_app_id: string }, string> = (appID) => { - return post<{ new_app_id: string }>(`apps/${appID}/convert-to-workflow`) +export const switchApp: Fetcher<{ new_app_id: string }, { appID: string; name: string; icon: string; icon_background: string }> = ({ appID, name, icon, icon_background }) => { + return post<{ new_app_id: string }>(`apps/${appID}/convert-to-workflow`, { body: { name, icon, icon_background } }) } export const deleteApp: Fetcher = (appID) => {