From b33da6a09cf80fa94927c74708a010c17f0fe962 Mon Sep 17 00:00:00 2001 From: JzoNg Date: Sun, 3 Mar 2024 13:41:14 +0800 Subject: [PATCH] duplicate app supported --- web/app/(commonLayout)/apps/AppCard.tsx | 21 ++++++++++++------- .../components/app/duplicate-modal/index.tsx | 1 - web/service/apps.ts | 3 +++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/web/app/(commonLayout)/apps/AppCard.tsx b/web/app/(commonLayout)/apps/AppCard.tsx index d7d632c9eb..35194e91e6 100644 --- a/web/app/(commonLayout)/apps/AppCard.tsx +++ b/web/app/(commonLayout)/apps/AppCard.tsx @@ -13,7 +13,7 @@ import type { ConfigParams } from '@/app/components/app/overview/settings' import type { App } from '@/types/app' import Confirm from '@/app/components/base/confirm' import { ToastContext } from '@/app/components/base/toast' -import { createApp, deleteApp, fetchAppDetail, updateAppSiteConfig } from '@/service/apps' +import { copyApp, deleteApp, fetchAppDetail, updateAppSiteConfig } from '@/service/apps' import DuplicateAppModal from '@/app/components/app/duplicate-modal' import type { DuplicateAppModalProps } from '@/app/components/app/duplicate-modal' import AppIcon from '@/app/components/base/app-icon' @@ -106,16 +106,14 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { [app.id], ) - const onCreate: DuplicateAppModalProps['onConfirm'] = async ({ name, icon, icon_background }) => { - const { app_model_config: model_config } = await fetchAppDetail({ url: '/apps', id: app.id }) - + const onCopy: DuplicateAppModalProps['onConfirm'] = async ({ name, icon, icon_background }) => { try { - const newApp = await createApp({ + const newApp = await copyApp({ + appID: app.id, name, icon, icon_background, mode: app.mode, - config: model_config, }) setShowDuplicateModal(false) notify({ @@ -123,7 +121,14 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { message: t('app.newApp.appCreated'), }) localStorage.setItem(NEED_REFRESH_APP_LIST_KEY, '1') - push(`/app/${newApp.id}/${isCurrentWorkspaceManager ? 'configuration' : 'overview'}`) + if (!isCurrentWorkspaceManager) { + push(`/app/${newApp.id}/'overview'`) + } + else { + if (newApp.mode === 'workflow' || newApp.mode === 'advanced-chat') + push(`/app/${newApp.id}/'workflow'`) + push(`/app/${newApp.id}/'configuration'`) + } } catch (e) { notify({ type: 'error', message: t('app.newApp.appCreateFailed') }) @@ -237,7 +242,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => { icon={app.icon} icon_background={app.icon_background} show={showDuplicateModal} - onConfirm={onCreate} + onConfirm={onCopy} onHide={() => setShowDuplicateModal(false)} /> )} diff --git a/web/app/components/app/duplicate-modal/index.tsx b/web/app/components/app/duplicate-modal/index.tsx index 65fbf12305..4413c0426a 100644 --- a/web/app/components/app/duplicate-modal/index.tsx +++ b/web/app/components/app/duplicate-modal/index.tsx @@ -72,7 +72,6 @@ const DuplicateAppModal = ({ className='h-10 px-3 text-sm font-normal bg-gray-100 rounded-lg grow' /> - {/* TODO loc */} {isAppsFull && }
diff --git a/web/service/apps.ts b/web/service/apps.ts index f712eae582..43de7a23c3 100644 --- a/web/service/apps.ts +++ b/web/service/apps.ts @@ -19,6 +19,9 @@ export const fetchAppTemplates: Fetcher = export const createApp: Fetcher = ({ name, icon, icon_background, mode, description, config }) => { return post('apps', { body: { name, icon, icon_background, mode, description, model_config: config } }) } +export const copyApp: Fetcher = ({ appID, name, icon, icon_background, mode, description }) => { + return post(`apps/${appID}/copy`, { body: { name, icon, icon_background, mode, description } }) +} export const deleteApp: Fetcher = (appID) => { return del(`apps/${appID}`)