import { useState } from 'react' import { Badge, Button } from './ui' import PreviewBlock from './PreviewBlock' import AnalyseRow from './AnalyseRow' import GiteaLinkButton from './GiteaLinkButton' import PreviewLinkButton from './PreviewLinkButton' import { statusValueTone } from './projectTones' import { suggestSubdomain } from '../lib/subdomain' import { needsPreviewButton, assignSummary } from '../lib/projectAssign' import { updateWebsiteProject, backfillProjectPushes } from '../lib/projectAdminApi' // Status und Provisioning: Wert als Badge, ohne Wert nichts function StatusValue({ label, value }) { if (!value) return null return {label}: {value} } export default function AssignedProjectCard({ project, onUnassign, showActions = false, customerName = '', onChanged = () => {} }) { const [showPreviewInput, setShowPreviewInput] = useState(false) const [subdomain, setSubdomain] = useState('') const [previewBusy, setPreviewBusy] = useState(false) const [previewMessage, setPreviewMessage] = useState('') const [pushBusy, setPushBusy] = useState(false) const [pushMessage, setPushMessage] = useState('') const [showPreviewBlock, setShowPreviewBlock] = useState(false) const openPreviewInput = () => { setSubdomain(suggestSubdomain(customerName, project.projectName)) setPreviewMessage('') setShowPreviewInput(true) } const handleEnablePreview = async () => { setPreviewBusy(true) setPreviewMessage('') try { const r = await updateWebsiteProject(project.$id, { projectType: 'preview', subdomain }) setPreviewMessage(`Preview läuft: ${r.previewUrl}`) setShowPreviewInput(false) onChanged() } catch (err) { setPreviewMessage(err.message) } finally { setPreviewBusy(false) } } const handleBackfill = async () => { setPushBusy(true) setPushMessage('') try { const r = await backfillProjectPushes(project.$id) setPushMessage(assignSummary(project.projectName, r).text) onChanged() } catch (err) { setPushMessage(err.message) } finally { setPushBusy(false) } } return (
{project.projectName} {project.subdomain && <>{' '}({project.subdomain})} {project.repoFullName &&
{project.repoFullName}
}
{showActions && onUnassign && ( )}
{(project.status || project.provisioningStatus) && (
)} {project.subdomain && } {showActions && project.subdomain && ( <> {showPreviewBlock && } )} {showActions && ( <>
{needsPreviewButton(project) && !showPreviewInput && ( )} {showPreviewInput && ( <> setSubdomain(e.target.value)} /> )}
{previewMessage &&

{previewMessage}

} {pushMessage &&

{pushMessage}

} )}
) }