diff --git a/web/app/(commonLayout)/apps/AppCard.tsx b/web/app/(commonLayout)/apps/AppCard.tsx index d77fb8b8e3..9f895573b8 100644 --- a/web/app/(commonLayout)/apps/AppCard.tsx +++ b/web/app/(commonLayout)/apps/AppCard.tsx @@ -24,6 +24,7 @@ import { AiText, ChatBot, CuteRobote } from '@/app/components/base/icons/src/ven import { Route } from '@/app/components/base/icons/src/vender/line/mapsAndTravel' import type { CreateAppModalProps } from '@/app/components/explore/create-app-modal' import EditAppModal from '@/app/components/explore/create-app-modal' +import SwitchAppModal from '@/app/components/app/switch-app-modal' export type AppCardProps = { app: App @@ -44,6 +45,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { const [showEditModal, setShowEditModal] = useState(false) const [showDuplicateModal, setShowDuplicateModal] = useState(false) + const [showSwitchModal, setShowSwitchModal] = useState(false) const [showConfirmDelete, setShowConfirmDelete] = useState(false) const onConfirmDelete = useCallback(async () => { @@ -132,6 +134,13 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { } } + const onSwitch = () => { + if (onRefresh) + onRefresh() + mutateApps() + setShowSwitchModal(false) + } + const Operations = (props: HtmlContentProps) => { const onClickSettings = async (e: React.MouseEvent) => { e.stopPropagation() @@ -151,6 +160,12 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { e.preventDefault() onExport() } + const onClickSwitch = async (e: React.MouseEvent) => { + e.stopPropagation() + props.onClick?.() + e.preventDefault() + setShowSwitchModal(true) + } const onClickDelete = async (e: React.MouseEvent) => { e.stopPropagation() props.onClick?.() @@ -158,7 +173,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { setShowConfirmDelete(true) } return ( -
+
@@ -169,6 +184,17 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { + {(app.mode === 'completion' || app.mode === 'chat') && ( + <> + +
+ {t('app.switch')} +
+ + )}
{ ) } className={'!w-[128px] h-fit !z-20'} + popupClassName={ + (app.mode === 'completion' || app.mode === 'chat') + ? '!w-[238px] translate-x-[-110px]' + : '' + } manualClose />}
@@ -276,6 +307,14 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { onHide={() => setShowDuplicateModal(false)} /> )} + {showSwitchModal && ( + setShowSwitchModal(false)} + onSuccess={onSwitch} + /> + )} {showConfirmDelete && ( )}
-
OR
+
OR
diff --git a/web/service/apps.ts b/web/service/apps.ts index 75f6792346..66d848d8c4 100644 --- a/web/service/apps.ts +++ b/web/service/apps.ts @@ -29,7 +29,7 @@ export const copyApp: Fetcher = (appID) => { - return post<{ data: string }>(`apps/${appID}/export`) + return get<{ data: string }>(`apps/${appID}/export`) } export const importApp: Fetcher = ({ name, description, icon, icon_background }) => {