| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import React, { useState } from 'react'
- import PropTypes from 'prop-types'
- import { useTranslation } from 'react-i18next'
- import classNames from 'classnames'
- import Icon from '../../../shared/components/icon'
- import { useSelectableEntity } from '../contexts/file-tree-selectable'
- import { useDroppable } from '../contexts/file-tree-draggable'
- import FileTreeItemInner from './file-tree-item/file-tree-item-inner'
- import FileTreeFolderList from './file-tree-folder-list'
- function FileTreeFolder({ name, id, folders, docs, files }) {
- const { t } = useTranslation()
- const { isSelected, props: selectableEntityProps } = useSelectableEntity(id)
- const [expanded, setExpanded] = useState(false)
- function handleExpandCollapseClick() {
- setExpanded(!expanded)
- }
- const { isOver: isOverRoot, dropRef: dropRefRoot } = useDroppable(id)
- const { isOver: isOverList, dropRef: dropRefList } = useDroppable(id)
- const icons = (
- <>
- <button
- onClick={handleExpandCollapseClick}
- aria-label={expanded ? t('collapse') : t('expand')}
- >
- <Icon type={expanded ? 'angle-down' : 'angle-right'} modifier="fw" />
- </button>
- <Icon type={expanded ? 'folder-open' : 'folder'} modifier="fw" />
- </>
- )
- return (
- <>
- <li
- role="treeitem"
- {...selectableEntityProps}
- aria-expanded={expanded}
- aria-label={name}
- tabIndex="0"
- ref={dropRefRoot}
- className={classNames(selectableEntityProps.className, {
- 'dnd-droppable-hover': isOverRoot || isOverList
- })}
- >
- <FileTreeItemInner
- id={id}
- name={name}
- isSelected={isSelected}
- icons={icons}
- />
- </li>
- {expanded ? (
- <FileTreeFolderList
- folders={folders}
- docs={docs}
- files={files}
- dropRef={dropRefList}
- />
- ) : null}
- </>
- )
- }
- FileTreeFolder.propTypes = {
- name: PropTypes.string.isRequired,
- id: PropTypes.string.isRequired,
- folders: PropTypes.array.isRequired,
- docs: PropTypes.array.isRequired,
- files: PropTypes.array.isRequired
- }
- export default FileTreeFolder
|