'use client' import { useTranslation } from 'react-i18next' import { useEffect, useRef, useState } from 'react' import cn from 'classnames' import AccountPage from './account-page' import MembersPage from './members-page' import IntegrationsPage from './Integrations-page' import LanguagePage from './language-page' import PluginPage from './plugin-page' import DataSourcePage from './data-source-page' import ModelPage from './model-page' import s from './index.module.css' import Modal from '@/app/components/base/modal' import { Database03, PuzzlePiece01 } from '@/app/components/base/icons/src/vender/line/development' import { Database03 as Database03Solid, PuzzlePiece01 as PuzzlePiece01Solid } from '@/app/components/base/icons/src/vender/solid/development' import { User01, Users01 } from '@/app/components/base/icons/src/vender/line/users' import { User01 as User01Solid, Users01 as Users01Solid } from '@/app/components/base/icons/src/vender/solid/users' import { Globe01 } from '@/app/components/base/icons/src/vender/line/mapsAndTravel' import { AtSign, XClose } from '@/app/components/base/icons/src/vender/line/general' import { CubeOutline } from '@/app/components/base/icons/src/vender/line/shapes' const iconClassName = ` w-4 h-4 ml-3 mr-2 ` const scrolledClassName = ` border-b shadow-xs bg-white/[.98] ` type IAccountSettingProps = { onCancel: () => void activeTab?: string } export default function AccountSetting({ onCancel, activeTab = 'account', }: IAccountSettingProps) { const [activeMenu, setActiveMenu] = useState(activeTab) const { t } = useTranslation() const menuItems = [ { key: 'workspace-group', name: t('common.settings.workplaceGroup'), items: [ { key: 'members', name: t('common.settings.members'), icon: , activeIcon: , }, { key: 'provider', name: t('common.settings.provider'), icon: , activeIcon: , }, { key: 'data-source', name: t('common.settings.dataSource'), icon: , activeIcon: , }, { key: 'plugin', name: t('common.settings.plugin'), icon: , activeIcon: , }, ], }, { key: 'account-group', name: t('common.settings.accountGroup'), items: [ { key: 'account', name: t('common.settings.account'), icon: , activeIcon: , }, { key: 'integrations', name: t('common.settings.integrations'), icon: , activeIcon: , }, { key: 'language', name: t('common.settings.language'), icon: , activeIcon: , }, ], }, ] const scrollRef = useRef(null) const [scrolled, setScrolled] = useState(false) const scrollHandle = (e: Event) => { if ((e.target as HTMLDivElement).scrollTop > 0) setScrolled(true) else setScrolled(false) } useEffect(() => { const targetElement = scrollRef.current targetElement?.addEventListener('scroll', scrollHandle) return () => { targetElement?.removeEventListener('scroll', scrollHandle) } }, []) return ( { }} className={s.modal} wrapperClassName='pt-[60px]' > {t('common.userProfile.settings')} { menuItems.map(menuItem => ( {menuItem.name} { menuItem.items.map(item => ( setActiveMenu(item.key)} > {activeMenu === item.key ? item.activeIcon : item.icon}{item.name} )) } )) } {[...menuItems[0].items, ...menuItems[1].items].find(item => item.key === activeMenu)?.name} {activeMenu === 'account' && } {activeMenu === 'members' && } {activeMenu === 'integrations' && } {activeMenu === 'language' && } {activeMenu === 'provider' && } {activeMenu === 'data-source' && } {activeMenu === 'plugin' && } ) }