app-trigger.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 'use client'
  2. import React from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import {
  5. RiArrowDownSLine,
  6. } from '@remixicon/react'
  7. import AppIcon from '@/app/components/base/app-icon'
  8. import type { App } from '@/types/app'
  9. import cn from '@/utils/classnames'
  10. type Props = {
  11. open: boolean
  12. appDetail?: App
  13. }
  14. const AppTrigger = ({
  15. open,
  16. appDetail,
  17. }: Props) => {
  18. const { t } = useTranslation()
  19. return (
  20. <div className={cn(
  21. 'group flex items-center p-2 pl-3 bg-components-input-bg-normal rounded-lg cursor-pointer hover:bg-state-base-hover-alt',
  22. open && 'bg-state-base-hover-alt',
  23. appDetail && 'pl-1.5 py-1.5',
  24. )}>
  25. {appDetail && (
  26. <AppIcon
  27. className='mr-2'
  28. size='xs'
  29. iconType={appDetail.icon_type}
  30. icon={appDetail.icon}
  31. background={appDetail.icon_background}
  32. imageUrl={appDetail.icon_url}
  33. />
  34. )}
  35. {appDetail && (
  36. <div title={appDetail.name} className='grow system-sm-medium text-components-input-text-filled'>{appDetail.name}</div>
  37. )}
  38. {!appDetail && (
  39. <div className='grow text-components-input-text-placeholder system-sm-regular truncate'>{t('app.appSelector.placeholder')}</div>
  40. )}
  41. <RiArrowDownSLine className={cn('shrink-0 ml-0.5 w-4 h-4 text-text-quaternary group-hover:text-text-secondary', open && 'text-text-secondary')} />
  42. </div>
  43. )
  44. }
  45. export default AppTrigger