2024-04-23 12:49:11 -04:00
|
|
|
import { useCallback, useMemo } from 'react'
|
2020-11-26 09:22:30 -05:00
|
|
|
import { useTranslation } from 'react-i18next'
|
2023-08-22 09:33:19 -04:00
|
|
|
import * as eventTracking from '../../../../infrastructure/event-tracking'
|
2024-04-23 12:49:11 -04:00
|
|
|
import { useProjectContext } from '@/shared/context/project-context'
|
2020-11-26 09:22:30 -05:00
|
|
|
|
|
|
|
import { MenuItem } from 'react-bootstrap'
|
|
|
|
import { useFileTreeActionable } from '../../contexts/file-tree-actionable'
|
2024-04-23 12:49:11 -04:00
|
|
|
import { useFileTreeData } from '@/shared/context/file-tree-data-context'
|
|
|
|
import { useFileTreeSelectable } from '../../contexts/file-tree-selectable'
|
|
|
|
import { findInTree } from '../../util/find-in-tree'
|
2020-11-26 09:22:30 -05:00
|
|
|
|
|
|
|
function FileTreeItemMenuItems() {
|
|
|
|
const { t } = useTranslation()
|
|
|
|
|
2024-04-23 12:49:11 -04:00
|
|
|
const { fileTreeData } = useFileTreeData()
|
|
|
|
const { selectedEntityIds } = useFileTreeSelectable()
|
|
|
|
|
|
|
|
// return the name of the selected file or doc if there is only one selected
|
|
|
|
const selectedFileName = useMemo(() => {
|
|
|
|
if (selectedEntityIds.size === 1) {
|
|
|
|
const [selectedEntityId] = selectedEntityIds
|
|
|
|
const selectedEntity = findInTree(fileTreeData, selectedEntityId)
|
|
|
|
return selectedEntity?.entity?.name
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
}, [fileTreeData, selectedEntityIds])
|
|
|
|
|
2020-11-26 09:22:30 -05:00
|
|
|
const {
|
|
|
|
canRename,
|
|
|
|
canDelete,
|
|
|
|
canCreate,
|
|
|
|
startRenaming,
|
|
|
|
startDeleting,
|
|
|
|
startCreatingFolder,
|
|
|
|
startCreatingDocOrFile,
|
2021-04-27 03:52:58 -04:00
|
|
|
startUploadingDocOrFile,
|
2022-08-12 05:54:32 -04:00
|
|
|
downloadPath,
|
2020-11-26 09:22:30 -05:00
|
|
|
} = useFileTreeActionable()
|
|
|
|
|
2024-04-23 12:49:11 -04:00
|
|
|
const { owner } = useProjectContext()
|
|
|
|
|
|
|
|
const downloadWithAnalytics = useCallback(() => {
|
|
|
|
// we are only interested in downloads of bib files WRT analytics, for the purposes of promoting the tpr integrations
|
|
|
|
if (selectedFileName?.endsWith('.bib')) {
|
|
|
|
eventTracking.sendMB('download-bib-file', { projectOwner: owner._id })
|
|
|
|
}
|
|
|
|
}, [selectedFileName, owner])
|
|
|
|
|
|
|
|
const createWithAnalytics = useCallback(() => {
|
2023-08-22 09:33:19 -04:00
|
|
|
eventTracking.sendMB('new-file-click', { location: 'file-menu' })
|
|
|
|
startCreatingDocOrFile()
|
2024-04-23 12:49:11 -04:00
|
|
|
}, [startCreatingDocOrFile])
|
2023-08-22 09:33:19 -04:00
|
|
|
|
2024-04-23 12:49:11 -04:00
|
|
|
const uploadWithAnalytics = useCallback(() => {
|
2023-08-22 09:33:19 -04:00
|
|
|
eventTracking.sendMB('upload-click', { location: 'file-menu' })
|
|
|
|
startUploadingDocOrFile()
|
2024-04-23 12:49:11 -04:00
|
|
|
}, [startUploadingDocOrFile])
|
2023-08-22 09:33:19 -04:00
|
|
|
|
2020-11-26 09:22:30 -05:00
|
|
|
return (
|
|
|
|
<>
|
|
|
|
{canRename ? (
|
|
|
|
<MenuItem onClick={startRenaming}>{t('rename')}</MenuItem>
|
|
|
|
) : null}
|
2022-08-12 05:54:32 -04:00
|
|
|
{downloadPath ? (
|
2024-04-23 12:49:11 -04:00
|
|
|
<MenuItem href={downloadPath} onClick={downloadWithAnalytics} download>
|
2023-03-08 09:42:51 -05:00
|
|
|
{t('download')}
|
|
|
|
</MenuItem>
|
2022-08-12 05:54:32 -04:00
|
|
|
) : null}
|
2020-11-26 09:22:30 -05:00
|
|
|
{canDelete ? (
|
|
|
|
<MenuItem onClick={startDeleting}>{t('delete')}</MenuItem>
|
|
|
|
) : null}
|
|
|
|
{canCreate ? (
|
|
|
|
<>
|
|
|
|
<MenuItem divider />
|
2023-08-22 09:33:19 -04:00
|
|
|
<MenuItem onClick={createWithAnalytics}>{t('new_file')}</MenuItem>
|
2020-11-26 09:22:30 -05:00
|
|
|
<MenuItem onClick={startCreatingFolder}>{t('new_folder')}</MenuItem>
|
2023-08-22 09:33:19 -04:00
|
|
|
<MenuItem onClick={uploadWithAnalytics}>{t('upload')}</MenuItem>
|
2020-11-26 09:22:30 -05:00
|
|
|
</>
|
|
|
|
) : null}
|
|
|
|
</>
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
export default FileTreeItemMenuItems
|