From 5cffcd6336469cf836c71757da3030e20d17f1c2 Mon Sep 17 00:00:00 2001 From: akou Date: Wed, 2 Apr 2025 21:44:09 +0800 Subject: [PATCH] fix: improve error handling and default values in fetchPlan function (#17320) --- web/context/provider-context.tsx | 43 ++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/web/context/provider-context.tsx b/web/context/provider-context.tsx index 67c389167d..ce3e15e8b8 100644 --- a/web/context/provider-context.tsx +++ b/web/context/provider-context.tsx @@ -111,20 +111,37 @@ export const ProviderContextProvider = ({ const { data: isEducationAccount } = useEducationStatus(!enableEducationPlan) const fetchPlan = async () => { - const data = await fetchCurrentPlanInfo() - const enabled = data.billing.enabled - setEnableBilling(enabled) - setEnableEducationPlan(data.education.enabled) - setIsEducationWorkspace(data.education.activated) - setEnableReplaceWebAppLogo(data.can_replace_logo) - if (enabled) { - setPlan(parseCurrentPlan(data) as any) - setIsFetchedPlan(true) + try { + const data = await fetchCurrentPlanInfo() + if (!data) { + console.error('Failed to fetch plan info: data is undefined') + return + } + + // set default value to avoid undefined error + setEnableBilling(data.billing?.enabled ?? false) + setEnableEducationPlan(data.education?.enabled ?? false) + setIsEducationWorkspace(data.education?.activated ?? false) + setEnableReplaceWebAppLogo(data.can_replace_logo ?? false) + + if (data.billing?.enabled) { + setPlan(parseCurrentPlan(data) as any) + setIsFetchedPlan(true) + } + + if (data.model_load_balancing_enabled) + setModelLoadBalancingEnabled(true) + if (data.dataset_operator_enabled) + setDatasetOperatorEnabled(true) + } + catch (error) { + console.error('Failed to fetch plan info:', error) + // set default value to avoid undefined error + setEnableBilling(false) + setEnableEducationPlan(false) + setIsEducationWorkspace(false) + setEnableReplaceWebAppLogo(false) } - if (data.model_load_balancing_enabled) - setModelLoadBalancingEnabled(true) - if (data.dataset_operator_enabled) - setDatasetOperatorEnabled(true) } useEffect(() => { fetchPlan()