import { ExplorerItem, getExplorerStore } from '@sd/client'; import clsx from 'clsx'; import { HTMLAttributes } from 'react'; import FileThumb from './FileThumb'; import { isObject } from './utils'; interface Props extends HTMLAttributes { data: ExplorerItem; selected: boolean; index: number; } function FileItem({ data, selected, index, ...rest }: Props) { // const store = useExplorerStore(); // store.layoutMode; // props.index === store.selectedRowIndex const isVid = isVideo(data.extension || ''); return (
{ const objectId = isObject(data) ? data.id : data.object?.id; if (objectId != undefined) { getExplorerStore().contextMenuObjectId = objectId; if (index != undefined) { getExplorerStore().selectedRowIndex = index; } } }} {...rest} draggable className={clsx('inline-block w-[100px] mb-3', rest.className)} >
{data?.extension && isVid && (
{data.extension}
)}
{data?.name} {data?.extension && `.${data.extension}`}
); } export default FileItem; function isVideo(extension: string) { return [ 'avi', 'asf', 'mpeg', 'mts', 'mpe', 'vob', 'qt', 'mov', 'asf', 'asx', 'mjpeg', 'ts', 'mxf', 'm2ts', 'f4v', 'wm', '3gp', 'm4v', 'wmv', 'mp4', 'webm', 'flv', 'mpg', 'hevc', 'ogv', 'swf', 'wtv' ].includes(extension); }