import { define } from '@because/forge'
import type { App } from '../../shared/types'
import { restartApp, startApp, stopApp } from '../api'
import { openDeleteAppModal, openRenameAppModal } from '../modals'
import { selectedTab } from '../state'
import {
ActionBar,
Button,
ClickableAppName,
HeaderActions,
InfoLabel,
InfoRow,
InfoValue,
Link,
LogLine,
LogsContainer,
LogTime,
Main,
MainContent,
MainHeader,
MainTitle,
Section,
SectionTitle,
stateLabels,
StatusDot,
TabContent,
} from '../styles'
import { openEmojiPicker } from './emoji-picker'
import { theme } from '../themes'
import { Nav } from './Nav'
const OpenEmojiPicker = define('OpenEmojiPicker', {
cursor: 'pointer',
render({ props: { app, children, render: renderFn }, parts: { Root } }) {
return openEmojiPicker((emoji) => {
if (!app) return
fetch(`/api/apps/${app.name}/icon?icon=${emoji}`, { method: 'POST' })
app.icon = emoji
renderFn()
})}>{children}
}
})
export function AppDetail({ app, render }: { app: App, render: () => void }) {
return (
{app.icon}
openRenameAppModal(app)}>{app.name}
Status
State
{stateLabels[app.state]}
{app.state === 'running' && app.port && (
URL
http://localhost:{app.port}
)}
{app.state === 'running' && app.port && (
Port
{app.port}
)}
{app.started && (
Started
{new Date(app.started).toLocaleString()}
)}
{app.error && (
Error
{app.error}
)}
Logs
{app.logs?.length ? (
app.logs.map((line, i) => (
{new Date(line.time).toLocaleTimeString()}
{line.text}
))
) : (
--:--:--
No logs yet
)}
{app.state === 'stopped' && (
)}
{app.state === 'running' && (
<>
>
)}
{(app.state === 'starting' || app.state === 'stopping') && (
)}
hardy har har
)
}