| 'use client' | |
| import type { FC } from 'react' | |
| import React, { useEffect, useState } from 'react' | |
| import { useRouter } from 'next/navigation' | |
| import { useTranslation } from 'react-i18next' | |
| import ExploreContext from '@/context/explore-context' | |
| import Sidebar from '@/app/components/explore/sidebar' | |
| import { useAppContext } from '@/context/app-context' | |
| import { fetchMembers } from '@/service/common' | |
| import type { InstalledApp } from '@/models/explore' | |
| export type IExploreProps = { | |
| children: React.ReactNode | |
| } | |
| const Explore: FC<IExploreProps> = ({ | |
| children, | |
| }) => { | |
| const { t } = useTranslation() | |
| const router = useRouter() | |
| const [controlUpdateInstalledApps, setControlUpdateInstalledApps] = useState(0) | |
| const { userProfile, isCurrentWorkspaceDatasetOperator } = useAppContext() | |
| const [hasEditPermission, setHasEditPermission] = useState(false) | |
| const [installedApps, setInstalledApps] = useState<InstalledApp[]>([]) | |
| useEffect(() => { | |
| document.title = `${t('explore.title')} - Dify`; | |
| (async () => { | |
| const { accounts } = await fetchMembers({ url: '/workspaces/current/members', params: {} }) | |
| if (!accounts) | |
| return | |
| const currUser = accounts.find(account => account.id === userProfile.id) | |
| setHasEditPermission(currUser?.role !== 'normal') | |
| })() | |
| }, []) | |
| useEffect(() => { | |
| if (isCurrentWorkspaceDatasetOperator) | |
| return router.replace('/datasets') | |
| }, [isCurrentWorkspaceDatasetOperator]) | |
| return ( | |
| <div className='flex h-full bg-gray-100 border-t border-gray-200 overflow-hidden'> | |
| <ExploreContext.Provider | |
| value={ | |
| { | |
| controlUpdateInstalledApps, | |
| setControlUpdateInstalledApps, | |
| hasEditPermission, | |
| installedApps, | |
| setInstalledApps, | |
| } | |
| } | |
| > | |
| <Sidebar controlUpdateInstalledApps={controlUpdateInstalledApps} /> | |
| <div className='grow w-0'> | |
| {children} | |
| </div> | |
| </ExploreContext.Provider> | |
| </div> | |
| ) | |
| } | |
| export default React.memo(Explore) | |