import { Popover, Transition } from '@headlessui/react'
import { ActionButton } from './ActionButton'
import { faHome } from '@fortawesome/free-solid-svg-icons'
import { type IndexLoaderData } from 'lib/types'
import { paths } from 'lib/paths'
import { isTauri } from '../lib/isTauri'
import { Link } from 'react-router-dom'
import { Fragment } from 'react'
import { FileTree } from './FileTree'
import { sep } from '@tauri-apps/api/path'
import { Logo } from './Logo'
import { APP_NAME } from 'lib/constants'
import { useCommandsContext } from 'hooks/useCommandsContext'
import { CustomIcon } from './CustomIcon'
import { useLspContext } from './LspProvider'
const ProjectSidebarMenu = ({
project,
file,
renderAsLink = false,
}: {
renderAsLink?: boolean
project?: IndexLoaderData['project']
file?: IndexLoaderData['file']
}) => {
const { onProjectClose } = useLspContext()
return (
{
onProjectClose(file || null, project?.path || null, false)
}}
to={paths.HOME}
className="group"
>
{renderAsLink ? (
<>
{
onProjectClose(file || null, project?.path || null, false)
}}
to={paths.HOME}
className="!no-underline"
data-testid="project-sidebar-link"
>
{project?.name ? project.name : APP_NAME}
>
) : (
)}
)
}
function ProjectMenuPopover({
project,
file,
}: {
project?: IndexLoaderData['project']
file?: IndexLoaderData['file']
}) {
const { commandBarState, commandBarSend } = useCommandsContext()
const { onProjectClose } = useLspContext()
const exportCommandInfo = { name: 'Export', ownerMachine: 'modeling' }
const findCommand = (obj: { name: string; ownerMachine: string }) =>
Boolean(
commandBarState.context.commands.find(
(c) => c.name === obj.name && c.ownerMachine === obj.ownerMachine
)
)
return (
{isTauri() && file?.name
? file.name.slice(file.name.lastIndexOf(sep) + 1)
: APP_NAME}
{isTauri() && project?.name && (
{project.name}
)}
{({ close }) => (
<>
{project?.name ? project.name : APP_NAME}
{project?.entrypointMetadata && (
Created{' '}
{project.entrypointMetadata.createdAt.toLocaleDateString()}
)}
{isTauri() ? (
) : (
In the browser version of Modeling App you can only have one
part, and the code is stored in your browser's storage.
Please save any code you want to keep more permanently, as
your browser's storage is not guaranteed to be permanent.
)}
commandBarSend({
type: 'Find and select command',
data: exportCommandInfo,
})
}
>
Export Part
{isTauri() && (
{
onProjectClose(file || null, project?.path || null, true)
}}
icon={{
icon: faHome,
className: 'p-1',
size: 'sm',
}}
className="border-transparent dark:border-transparent hover:bg-energy-10/20 dark:hover:bg-chalkboard-90"
>
Go to Home
)}
>
)}
)
}
export default ProjectSidebarMenu