'use client' import type { AccountSettingTab } from '@/app/components/header/account-setting/constants' import { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import SearchInput from '@/app/components/base/search-input' import { ScrollArea } from '@/app/components/base/ui/scroll-area' import BillingPage from '@/app/components/billing/billing-page' import CustomPage from '@/app/components/custom/custom-page' import { ACCOUNT_SETTING_TAB, } from '@/app/components/header/account-setting/constants' import MenuDialog from '@/app/components/header/account-setting/menu-dialog' import { useAppContext } from '@/context/app-context' import { useProviderContext } from '@/context/provider-context' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import { cn } from '@/utils/classnames' import Button from '../../base/button' import ApiBasedExtensionPage from './api-based-extension-page' import DataSourcePage from './data-source-page-new' import LanguagePage from './language-page' import MembersPage from './members-page' import ModelProviderPage from './model-provider-page' import { useResetModelProviderListExpanded } from './model-provider-page/atoms' const iconClassName = ` w-5 h-5 mr-2 ` type IAccountSettingProps = { onCancelAction: () => void activeTab: AccountSettingTab onTabChangeAction: (tab: AccountSettingTab) => void } type GroupItem = { key: AccountSettingTab name: string description?: string icon: React.JSX.Element activeIcon: React.JSX.Element } export default function AccountSetting({ onCancelAction, activeTab, onTabChangeAction, }: IAccountSettingProps) { const resetModelProviderListExpanded = useResetModelProviderListExpanded() const activeMenu = activeTab const { t } = useTranslation() const { enableBilling, enableReplaceWebAppLogo } = useProviderContext() const { isCurrentWorkspaceDatasetOperator } = useAppContext() const workplaceGroupItems: GroupItem[] = (() => { if (isCurrentWorkspaceDatasetOperator) return [] const items: GroupItem[] = [ { key: ACCOUNT_SETTING_TAB.PROVIDER, name: t('settings.provider', { ns: 'common' }), icon: , activeIcon: , }, { key: ACCOUNT_SETTING_TAB.MEMBERS, name: t('settings.members', { ns: 'common' }), icon: , activeIcon: , }, ] if (enableBilling) { items.push({ key: ACCOUNT_SETTING_TAB.BILLING, name: t('settings.billing', { ns: 'common' }), description: t('plansCommon.receiptInfo', { ns: 'billing' }), icon: , activeIcon: , }) } items.push( { key: ACCOUNT_SETTING_TAB.DATA_SOURCE, name: t('settings.dataSource', { ns: 'common' }), icon: , activeIcon: , }, { key: ACCOUNT_SETTING_TAB.API_BASED_EXTENSION, name: t('settings.apiBasedExtension', { ns: 'common' }), icon: , activeIcon: , }, ) if (enableReplaceWebAppLogo || enableBilling) { items.push({ key: ACCOUNT_SETTING_TAB.CUSTOM, name: t('custom', { ns: 'custom' }), icon: , activeIcon: , }) } return items })() const media = useBreakpoints() const isMobile = media === MediaType.mobile const menuItems = [ { key: 'workspace-group', name: t('settings.workplaceGroup', { ns: 'common' }), items: workplaceGroupItems, }, { key: 'account-group', name: t('settings.generalGroup', { ns: 'common' }), items: [ { key: ACCOUNT_SETTING_TAB.LANGUAGE, name: t('settings.language', { ns: 'common' }), icon: , activeIcon: , }, ], }, ] const activeItem = [...menuItems[0].items, ...menuItems[1].items].find(item => item.key === activeMenu) const [searchValue, setSearchValue] = useState('') const handleTabChange = useCallback((tab: AccountSettingTab) => { if (tab === ACCOUNT_SETTING_TAB.PROVIDER) resetModelProviderListExpanded() onTabChangeAction(tab) }, [onTabChangeAction, resetModelProviderListExpanded]) const handleClose = useCallback(() => { resetModelProviderListExpanded() onCancelAction() }, [onCancelAction, resetModelProviderListExpanded]) return (
{t('userProfile.settings', { ns: 'common' })}
{ menuItems.map(menuItem => (
{!isCurrentWorkspaceDatasetOperator && (
{menuItem.name}
)}
{ menuItem.items.map(item => ( )) }
)) }
ESC
{activeItem?.name} {activeItem?.description && (
{activeItem?.description}
)}
{activeItem?.key === ACCOUNT_SETTING_TAB.PROVIDER && (
)}
{activeMenu === ACCOUNT_SETTING_TAB.PROVIDER && } {activeMenu === ACCOUNT_SETTING_TAB.MEMBERS && } {activeMenu === ACCOUNT_SETTING_TAB.BILLING && } {activeMenu === ACCOUNT_SETTING_TAB.DATA_SOURCE && } {activeMenu === ACCOUNT_SETTING_TAB.API_BASED_EXTENSION && } {activeMenu === ACCOUNT_SETTING_TAB.CUSTOM && } {activeMenu === ACCOUNT_SETTING_TAB.LANGUAGE && }
) }