import { useState } from "react"; import { useVirtualRoot } from "../../../hooks/virtual-drive/virtualRootContext.js"; import styles from "./FileExplorer.module.css"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faArrowUp, faCaretLeft, faCaretRight, faCircleInfo, faCog, faDesktop, faFileLines, faHouse, faImage, faPlus, faSearch, faTrash } from "@fortawesome/free-solid-svg-icons"; import { useWindowsManager } from "../../../hooks/windows/windowsManagerContext.js"; import { useContextMenu } from "../../../hooks/modals/contextMenu.js"; import { QuickAccessButton } from "./QuickAccessButton.jsx"; import { useWindowedModal } from "../../../hooks/modals/windowedModal.js"; import Vector2 from "../../../features/math/vector2.js"; import { DIALOG_CONTENT_TYPES } from "../../../constants/modals.js"; import { DirectoryList } from "./directory-list/DirectoryList.jsx"; import { Actions } from "../../actions/Actions.jsx"; import { ClickAction } from "../../actions/actions/ClickAction.jsx"; import utilStyles from "../../../styles/utils.module.css"; import { DialogBox } from "../../modals/dialog-box/DialogBox.jsx"; import AppsManager from "../../../features/applications/applications.js"; import { APPS } from "../../../constants/applications.js"; import { TITLE_SEPARATOR } from "../../../constants/windows.js"; import { FileProperties } from "../../modals/file-properties/FileProperties.jsx"; /** * @param {import("../../windows/WindowView.jsx").windowProps} props */ export function FileExplorer({ startPath, app, modalsManager }) { const virtualRoot = useVirtualRoot(); const [currentDirectory, setCurrentDirectory] = useState(virtualRoot.navigate(startPath ?? "~")); const [path, setPath] = useState(currentDirectory?.path ?? ""); const windowsManager = useWindowsManager(); const [showHidden] = useState(true); const { openWindowedModal } = useWindowedModal({ modalsManager }); const { onContextMenu: onContextMenuFile } = useContextMenu({ modalsManager, Actions: (props) => { file.open(windowsManager); }}/> { file.delete(); }}/> { openWindowedModal({ title: `${file.id} ${TITLE_SEPARATOR} Properties`, iconUrl: file.getIconUrl(), size: new Vector2(400, 500), Modal: (props) => }); // modalsManager.open(new Modal(FileProperties) // .setPosition(new Vector2(positionX, positionY)) // .setProps({ // triggerParams: params, // className: STYLES.CONTEXT_MENU, // onAnyTrigger: () => { // newModal.close(); // } // })); }}/> }); const { onContextMenu: onContextMenuFolder } = useContextMenu({ modalsManager, Actions: (props) => { changeDirectory(folder.name); }}/> { folder.delete(); }}/> }); // const { onContextMenu: onNew } = useContextMenu({ // modalsManager, // options: { // "File": () => { currentDirectory.createFile("New File"); }, // "Folder": () => { currentDirectory.createFolder("New Folder"); } // } // }); const changeDirectory = (path, absolute = false) => { if (currentDirectory == null) absolute = true; const directory = absolute ? virtualRoot.navigate(path) : currentDirectory.navigate(path); console.debug(directory); if (directory) { setCurrentDirectory(directory); setPath(directory.root ? "/" : directory.path); } }; const onPathChange = (event) => { return setPath(event.target.value); }; const onKeyDown = (event) => { let value = event.target.value; if (event.key === "Enter") { if (value === "") value = "~"; const directory = virtualRoot.navigate(value); setCurrentDirectory(directory); setPath(directory.root ? "/" : directory.path); } }; const itemCount = currentDirectory.getItemCount(showHidden); return (
}); // if (currentDirectory.canBeEdited) { // onNew(event); // } else { // } }} >
{ changeDirectory("~"); }} icon={faHouse}/> { changeDirectory("~/Desktop"); }} icon={faDesktop}/> { changeDirectory("~/Images"); }} icon={faImage}/> { changeDirectory("~/Documents"); }} icon={faFileLines}/>
{ event.preventDefault(); windowsManager.openFile(file); }} onClickFolder={(event, folder) => { changeDirectory(folder.linkedPath ?? folder.name); }} onContextMenuFile={onContextMenuFile} onContextMenuFolder={onContextMenuFolder} />

{itemCount === 1 ? itemCount + " item" : itemCount + " items" }

); }