chonky
Version:
A File Browser component for React
46 lines (40 loc) • 1.6 kB
text/typescript
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;
};