import { Fragment, useEffect, useState } from 'react'; import { ServerContext } from '@/state/server'; import { NavLink, useLocation } from 'react-router-dom'; import { encodePathSegments, hashToPath } from '@/helpers'; import tw from 'twin.macro'; interface Props { renderLeft?: JSX.Element; withinFileEditor?: boolean; isNewFile?: boolean; } export default ({ renderLeft, withinFileEditor, isNewFile }: Props) => { const [file, setFile] = useState(null); const id = ServerContext.useStoreState(state => state.server.data!.id); const directory = ServerContext.useStoreState(state => state.files.directory); const { hash } = useLocation(); useEffect(() => { const path = hashToPath(hash); if (withinFileEditor && !isNewFile) { const name = path.split('/').pop() || null; setFile(name); } }, [withinFileEditor, isNewFile, hash]); const breadcrumbs = (): { name: string; path?: string }[] => directory .split('/') .filter(directory => !!directory) .map((directory, index, dirs) => { if (!withinFileEditor && index === dirs.length - 1) { return { name: directory }; } return { name: directory, path: `/${dirs.slice(0, index + 1).join('/')}` }; }); return (
{renderLeft ||
}/home/ container / {breadcrumbs().map((crumb, index) => crumb.path ? ( {crumb.name} / ) : ( {crumb.name} ), )} {file && ( {file} )}
); };