page.tsx 1.4 KB

1234567891011121314151617181920212223242526272829
  1. 'use client'
  2. import { useContextSelector } from 'use-context-selector'
  3. import { useTranslation } from 'react-i18next'
  4. import style from '../list.module.css'
  5. import Apps from './Apps'
  6. import classNames from '@/utils/classnames'
  7. import AppContext from '@/context/app-context'
  8. import { LicenseStatus } from '@/types/feature'
  9. const AppList = () => {
  10. const { t } = useTranslation()
  11. const systemFeatures = useContextSelector(AppContext, v => v.systemFeatures)
  12. return (
  13. <div className='relative flex flex-col overflow-y-auto bg-gray-100 shrink-0 h-0 grow'>
  14. <Apps />
  15. {systemFeatures.license.status === LicenseStatus.NONE && <footer className='px-12 py-6 grow-0 shrink-0'>
  16. <h3 className='text-xl font-semibold leading-tight text-gradient'>{t('app.join')}</h3>
  17. <p className='mt-1 text-sm font-normal leading-tight text-gray-700'>{t('app.communityIntro')}</p>
  18. <div className='flex items-center gap-2 mt-3'>
  19. <a className={style.socialMediaLink} target='_blank' rel='noopener noreferrer' href='https://github.com/langgenius/dify'><span className={classNames(style.socialMediaIcon, style.githubIcon)} /></a>
  20. <a className={style.socialMediaLink} target='_blank' rel='noopener noreferrer' href='https://discord.gg/FngNHpbcY7'><span className={classNames(style.socialMediaIcon, style.discordIcon)} /></a>
  21. </div>
  22. </footer>}
  23. </div >
  24. )
  25. }
  26. export default AppList