file-tree-doc.tsx 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { useCallback } from 'react'
  2. import { useSelectableEntity } from '../contexts/file-tree-selectable'
  3. import FileTreeIcon from './file-tree-icon'
  4. import FileTreeItemInner from './file-tree-item/file-tree-item-inner'
  5. import { useTabsContext } from '@/features/ide-react/context/tabs-context'
  6. import { useAreTabsEnabled } from '@/features/ide-react/hooks/use-are-tabs-enabled'
  7. function FileTreeDoc({
  8. name,
  9. id,
  10. isFile,
  11. isLinkedFile,
  12. }: {
  13. name: string
  14. id: string
  15. isFile?: boolean
  16. isLinkedFile?: boolean
  17. }) {
  18. const type = isFile ? 'file' : 'doc'
  19. const { isSelected, props: selectableEntityProps } = useSelectableEntity(
  20. id,
  21. type
  22. )
  23. const { makeTabPermanent } = useTabsContext()
  24. const areTabsEnabled = useAreTabsEnabled()
  25. const onDoubleClick = useCallback(() => {
  26. if (areTabsEnabled) {
  27. makeTabPermanent(id)
  28. }
  29. }, [makeTabPermanent, areTabsEnabled, id])
  30. return (
  31. <li
  32. // eslint-disable-next-line jsx-a11y/role-has-required-aria-props
  33. role="treeitem"
  34. // aria-selected is provided in selectableEntityProps
  35. {...selectableEntityProps}
  36. aria-label={name}
  37. tabIndex={0}
  38. translate="no"
  39. onDoubleClick={onDoubleClick}
  40. >
  41. <FileTreeItemInner
  42. id={id}
  43. name={name}
  44. type={type}
  45. isSelected={isSelected}
  46. icons={<FileTreeIcon isLinkedFile={isLinkedFile} name={name} />}
  47. />
  48. </li>
  49. )
  50. }
  51. export default FileTreeDoc