import React, { useEffect, useState } from 'react'; import { ServerContext } from '@/state/server'; import { NavLink, useParams } from 'react-router-dom'; interface Props { withinFileEditor?: boolean; isNewFile?: boolean; } export default ({ withinFileEditor, isNewFile }: Props) => { const { action } = useParams(); const [ file, setFile ] = useState(null); const id = ServerContext.useStoreState(state => state.server.data!.id); const directory = ServerContext.useStoreState(state => state.files.directory); const setDirectory = ServerContext.useStoreActions(actions => actions.files.setDirectory); useEffect(() => { const parts = window.location.hash.replace(/^#(\/)*/, '/').split('/'); if (withinFileEditor && !isNewFile) { setFile(parts.pop() || null); } setDirectory(parts.join('/')); }, [ withinFileEditor, isNewFile, setDirectory ]); 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 (
/home/ setDirectory('/')} className={'px-1 text-neutral-200 no-underline hover:text-neutral-100'} > container / { breadcrumbs().map((crumb, index) => ( crumb.path ? setDirectory(crumb.path!)} className={'px-1 text-neutral-200 no-underline hover:text-neutral-100'} > {crumb.name} / : {crumb.name} )) } {file && {file} }
); };