index.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 'use client'
  2. import type { FC } from 'react'
  3. import React, { useEffect, useState } from 'react'
  4. import { useTranslation } from 'react-i18next'
  5. import ExploreContext from '@/context/explore-context'
  6. import Sidebar from '@/app/components/explore/sidebar'
  7. import { useAppContext } from '@/context/app-context'
  8. import { fetchMembers } from '@/service/common'
  9. import type { InstalledApp } from '@/models/explore'
  10. export type IExploreProps = {
  11. children: React.ReactNode
  12. }
  13. const Explore: FC<IExploreProps> = ({
  14. children,
  15. }) => {
  16. const { t } = useTranslation()
  17. const [controlUpdateInstalledApps, setControlUpdateInstalledApps] = useState(0)
  18. const { userProfile } = useAppContext()
  19. const [hasEditPermission, setHasEditPermission] = useState(false)
  20. const [installedApps, setInstalledApps] = useState<InstalledApp[]>([])
  21. useEffect(() => {
  22. document.title = `${t('explore.title')} - Dify`;
  23. (async () => {
  24. const { accounts } = await fetchMembers({ url: '/workspaces/current/members', params: {} })
  25. if (!accounts)
  26. return
  27. const currUser = accounts.find(account => account.id === userProfile.id)
  28. setHasEditPermission(currUser?.role !== 'normal')
  29. })()
  30. }, [])
  31. return (
  32. <div className='flex h-full bg-gray-100 border-t border-gray-200 overflow-hidden'>
  33. <ExploreContext.Provider
  34. value={
  35. {
  36. controlUpdateInstalledApps,
  37. setControlUpdateInstalledApps,
  38. hasEditPermission,
  39. installedApps,
  40. setInstalledApps,
  41. }
  42. }
  43. >
  44. <Sidebar controlUpdateInstalledApps={controlUpdateInstalledApps} />
  45. <div className='grow w-0'>
  46. {children}
  47. </div>
  48. </ExploreContext.Provider>
  49. </div>
  50. )
  51. }
  52. export default React.memo(Explore)