UNPKG

chonky

Version:

A File Browser component for React

46 lines (40 loc) 1.6 kB
import { useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Nullable } from 'tsdef'; import { ChonkyActions } from '../../action-definitions/index'; import { selectFolderChain } from '../../redux/selectors'; import { thunkRequestFileAction } from '../../redux/thunks/dispatchers.thunks'; import { FileData } from '../../types/file.types'; import { FileHelper } from '../../util/file-helper'; export interface FolderChainItem { file: Nullable<FileData>; disabled: boolean; onClick?: () => void; } export const useFolderChainItems = (): FolderChainItem[] => { const folderChain = useSelector(selectFolderChain); const dispatch = useDispatch(); const folderChainItems = useMemo(() => { const items: FolderChainItem[] = []; if (!folderChain) return items; for (let i = 0; i < folderChain.length; ++i) { const file = folderChain[i]; items.push({ file, disabled: !file, onClick: !FileHelper.isOpenable(file) || i === folderChain.length - 1 ? undefined : () => dispatch( thunkRequestFileAction(ChonkyActions.OpenFiles, { targetFile: file, files: [file], }) ), }); } return items; }, [dispatch, folderChain]); return folderChainItems; };