From 6a520698723db34fc4c343498244d7a8998afd5f Mon Sep 17 00:00:00 2001 From: yyh <92089059+lyzno1@users.noreply.github.com> Date: Thu, 30 Jul 2026 16:24:22 +0800 Subject: [PATCH] refactor(web): narrow app list context (#39802) --- .../app-card/__tests__/index.spec.tsx | 7 ++----- .../app/create-app-dialog/app-card/index.tsx | 6 +++--- .../components/apps/__tests__/index.spec.tsx | 4 ++-- web/app/components/apps/index.tsx | 18 ++++++------------ web/context/app-list-context.ts | 12 +++--------- web/types/try-app.ts | 2 -- 6 files changed, 16 insertions(+), 33 deletions(-) diff --git a/web/app/components/app/create-app-dialog/app-card/__tests__/index.spec.tsx b/web/app/components/app/create-app-dialog/app-card/__tests__/index.spec.tsx index 628a10ff3eb..99611185136 100644 --- a/web/app/components/app/create-app-dialog/app-card/__tests__/index.spec.tsx +++ b/web/app/components/app/create-app-dialog/app-card/__tests__/index.spec.tsx @@ -89,10 +89,7 @@ describe('AppCard', () => { // oxlint-disable-next-line eslint-react/no-context-provider @@ -105,6 +102,6 @@ describe('AppCard', () => { 'preview_template', expect.objectContaining({ template_id: 'app-1', page: 'studio' }), ) - expect(openPreview).toHaveBeenCalledWith(true, { appId: 'app-1', app }) + expect(openPreview).toHaveBeenCalledWith({ appId: 'app-1', app }) }) }) diff --git a/web/app/components/app/create-app-dialog/app-card/index.tsx b/web/app/components/app/create-app-dialog/app-card/index.tsx index 05b6d7439f6..76417fbd4e8 100644 --- a/web/app/components/app/create-app-dialog/app-card/index.tsx +++ b/web/app/components/app/create-app-dialog/app-card/index.tsx @@ -28,7 +28,7 @@ const AppCard = ({ app, canCreate, onCreate }: AppCardProps) => { }) const { app: appBasicInfo } = app const canViewApp = deploymentEdition === 'CLOUD' - const setShowTryAppPanel = useContextSelector(AppListContext, (ctx) => ctx.setShowTryAppPanel) + const openTryAppPanel = useContextSelector(AppListContext, (ctx) => ctx.openTryAppPanel) const handleShowTryAppPanel = useCallback(() => { trackEvent('preview_template', { template_id: app.app_id, @@ -37,8 +37,8 @@ const AppCard = ({ app, canCreate, onCreate }: AppCardProps) => { template_categories: app.categories, page: 'studio', }) - setShowTryAppPanel?.(true, { appId: app.app_id, app }) - }, [setShowTryAppPanel, app, appBasicInfo]) + openTryAppPanel({ appId: app.app_id, app }) + }, [openTryAppPanel, app, appBasicInfo]) return (
{ onCreateLearnDify?: (app: App) => void onTryLearnDify?: (params: TryAppSelection) => void }) => { - const setShowTryAppPanel = useContextSelector(AppListContext, (ctx) => ctx.setShowTryAppPanel) + const openTryAppPanel = useContextSelector(AppListContext, (ctx) => ctx.openTryAppPanel) return React.createElement( 'div', { 'data-testid': 'apps-list' }, @@ -117,7 +117,7 @@ vi.mock('../list', () => { { 'data-testid': 'open-preview', onClick: () => - setShowTryAppPanel(true, { + openTryAppPanel({ appId: mockTemplateApp.app_id, app: mockTemplateApp, }), diff --git a/web/app/components/apps/index.tsx b/web/app/components/apps/index.tsx index 6c0b3b89c07..5f680f078b5 100644 --- a/web/app/components/apps/index.tsx +++ b/web/app/components/apps/index.tsx @@ -54,15 +54,14 @@ const AppsContent = () => { const hideTryAppPanel = useCallback(() => { setIsShowTryAppPanel(false) }, []) - const setShowTryAppPanel = (showTryAppPanel: boolean, params?: TryAppSelection) => { - if (showTryAppPanel) setCurrentTryAppParams(params) - else setCurrentTryAppParams(undefined) - setIsShowTryAppPanel(showTryAppPanel) - } + const openTryAppPanel = useCallback((selection: TryAppSelection) => { + setCurrentTryAppParams(selection) + setIsShowTryAppPanel(true) + }, []) const [isShowCreateModal, setIsShowCreateModal] = useState(false) const handleTryLearnDify = (params: TryAppSelection) => { - setShowTryAppPanel(true, params) + openTryAppPanel(params) } const handleCreateLearnDify = (app: App) => { if (!canCreateApp) return @@ -97,10 +96,8 @@ const AppsContent = () => { ) const [controlRefreshList, setControlRefreshList] = useState(0) - const [controlHideCreateFromTemplatePanel, setControlHideCreateFromTemplatePanel] = useState(0) const onSuccess = useCallback(() => { setControlRefreshList((prev) => prev + 1) - setControlHideCreateFromTemplatePanel((prev) => prev + 1) }, []) const [showDSLConfirmModal, setShowDSLConfirmModal] = useState(false) @@ -196,10 +193,7 @@ const AppsContent = () => {
diff --git a/web/context/app-list-context.ts b/web/context/app-list-context.ts index 6357df2dd73..ed9f548ef34 100644 --- a/web/context/app-list-context.ts +++ b/web/context/app-list-context.ts @@ -1,19 +1,13 @@ -import type { SetTryAppPanel, TryAppSelection } from '@/types/try-app' +import type { TryAppSelection } from '@/types/try-app' import { noop } from 'es-toolkit/function' import { createContext } from 'use-context-selector' type Props = Readonly<{ - currentApp?: TryAppSelection - isShowTryAppPanel: boolean - setShowTryAppPanel: SetTryAppPanel - controlHideCreateFromTemplatePanel: number + openTryAppPanel: (selection: TryAppSelection) => void }> const AppListContext = createContext({ - isShowTryAppPanel: false, - setShowTryAppPanel: noop, - currentApp: undefined, - controlHideCreateFromTemplatePanel: 0, + openTryAppPanel: noop, }) export default AppListContext diff --git a/web/types/try-app.ts b/web/types/try-app.ts index a2a598e5cfd..0aa9462371c 100644 --- a/web/types/try-app.ts +++ b/web/types/try-app.ts @@ -4,5 +4,3 @@ export type TryAppSelection = { appId: string app: App } - -export type SetTryAppPanel = (showTryAppPanel: boolean, params?: TryAppSelection) => void