import { FormEvent, useEffect, useRef, useState } from 'react' import { PATHS } from 'lib/paths' import { Link } from 'react-router-dom' import { ActionButton } from '../ActionButton' import { FILE_EXT } from 'lib/constants' import { useHotkeys } from 'react-hotkeys-hook' import Tooltip from '../Tooltip' import { DeleteConfirmationDialog } from './DeleteProjectDialog' import { ProjectCardRenameForm } from './ProjectCardRenameForm' import { Project } from 'wasm-lib/kcl/bindings/Project' function ProjectCard({ project, handleRenameProject, handleDeleteProject, ...props }: { project: Project handleRenameProject: ( e: FormEvent, f: Project ) => Promise handleDeleteProject: (f: Project) => Promise }) { useHotkeys('esc', () => setIsEditing(false)) const [isEditing, setIsEditing] = useState(false) const [isConfirmingDelete, setIsConfirmingDelete] = useState(false) const [numberOfFiles, setNumberOfFiles] = useState(1) const [numberOfFolders, setNumberOfFolders] = useState(0) // const [imageUrl, setImageUrl] = useState('') let inputRef = useRef(null) function handleSave(e: FormEvent) { e.preventDefault() void handleRenameProject(e, project).then(() => setIsEditing(false)) } function getDisplayedTime(dateTimeMs: number) { const date = new Date(dateTimeMs) const startOfToday = new Date() startOfToday.setHours(0, 0, 0, 0) return date.getTime() < startOfToday.getTime() ? date.toLocaleDateString() : date.toLocaleTimeString() } useEffect(() => { async function getNumberOfFiles() { setNumberOfFiles(project.kcl_file_count) setNumberOfFolders(project.directory_count) } // async function setupImageUrl() { // const projectImagePath = await join(project.file.path, PROJECT_IMAGE_NAME) // if (await exists(projectImagePath)) { // const imageData = await readFile(projectImagePath) // const blob = new Blob([imageData], { type: 'image/jpg' }) // const imageUrl = URL.createObjectURL(blob) // setImageUrl(imageUrl) // } // } void getNumberOfFiles() // void setupImageUrl() }, [project.kcl_file_count, project.directory_count]) useEffect(() => { if (inputRef.current && isEditing) { inputRef.current.focus() inputRef.current.select() } }, [isEditing, inputRef.current]) return (
  • {/*
    {imageUrl && ( )}
    */}
    {isEditing ? ( e.stopPropagation()} project={project} onDismiss={() => setIsEditing(false)} ref={inputRef} /> ) : (

    {project.name?.replace(FILE_EXT, '')}

    )} {numberOfFiles} file{numberOfFiles === 1 ? '' : 's'}{' '} {numberOfFolders > 0 && `/ ${numberOfFolders} folder${numberOfFolders === 1 ? '' : 's'}`} Edited{' '} {project.metadata && project.metadata.modified ? getDisplayedTime(parseInt(project.metadata.modified)) : 'never'}
    {!isEditing && (
    { e.stopPropagation() e.nativeEvent.stopPropagation() setIsEditing(true) }} className="!p-0" > Rename project { e.stopPropagation() e.nativeEvent.stopPropagation() setIsConfirmingDelete(true) }} > Delete project
    )} {isConfirmingDelete && ( { await handleDeleteProject(project) setIsConfirmingDelete(false) }} onDismiss={() => setIsConfirmingDelete(false)} >

    This will permanently delete "{project.name || 'this file'} ".

    Are you sure you want to delete "{project.name || 'this file'} "? This action cannot be undone.

    )}
  • ) } export default ProjectCard