feat: Aktualisieren-Button auf Projektkarten (Re-Deploy gehosteter Projekte)
Dritter Aktions-Button neben Bearbeiten/Vorschau: stoesst fuer bereits gehostete/deployte Projekte den Deploy erneut an (updateWebsiteProject mit gleichem Typ), damit eine ueberarbeitete Website neu geladen wird. Spinner waehrend der Aktualisierung. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -109,6 +109,7 @@ export default function ProjectsPage() {
|
|||||||
const [notice, setNotice] = useState('')
|
const [notice, setNotice] = useState('')
|
||||||
const [assignBusyId, setAssignBusyId] = useState('')
|
const [assignBusyId, setAssignBusyId] = useState('')
|
||||||
const [hostBusyId, setHostBusyId] = useState('')
|
const [hostBusyId, setHostBusyId] = useState('')
|
||||||
|
const [refreshBusyId, setRefreshBusyId] = useState('')
|
||||||
|
|
||||||
// Bearbeiten-Modal
|
// Bearbeiten-Modal
|
||||||
const [editProject, setEditProject] = useState(null)
|
const [editProject, setEditProject] = useState(null)
|
||||||
@@ -272,6 +273,25 @@ export default function ProjectsPage() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bereits gehostetes Projekt erneut deployen (nach Website-Ueberarbeitung neu laden)
|
||||||
|
const handleRefresh = async (project) => {
|
||||||
|
setRefreshBusyId(project.$id)
|
||||||
|
setNotice('')
|
||||||
|
try {
|
||||||
|
const r = await updateWebsiteProject(project.$id, { projectType: typeOf(project) })
|
||||||
|
setNotice(
|
||||||
|
r.deploy?.deployed
|
||||||
|
? `"${project.projectName}" wurde aktualisiert${r.previewUrl ? ': ' + r.previewUrl : ''}`
|
||||||
|
: `Aktualisierung angestossen, aber nicht bestaetigt: ${r.deploy?.error || 'siehe Server-Logs'}`
|
||||||
|
)
|
||||||
|
await fetchAllProjects()
|
||||||
|
} catch (err) {
|
||||||
|
setNotice('Aktualisieren fehlgeschlagen: ' + (err.message || 'unbekannt'))
|
||||||
|
} finally {
|
||||||
|
setRefreshBusyId('')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const openEdit = (project) => {
|
const openEdit = (project) => {
|
||||||
setEditError('')
|
setEditError('')
|
||||||
setEditProject(project)
|
setEditProject(project)
|
||||||
@@ -543,6 +563,21 @@ export default function ProjectsPage() {
|
|||||||
) : (
|
) : (
|
||||||
<PreviewLinkButton href={project.previewUrl} />
|
<PreviewLinkButton href={project.previewUrl} />
|
||||||
)}
|
)}
|
||||||
|
{hosted && ready && !project.archived && (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="btn btn-dark"
|
||||||
|
style={{ padding: '6px 12px', fontSize: '13px' }}
|
||||||
|
onClick={() => handleRefresh(project)}
|
||||||
|
disabled={refreshBusyId === project.$id}
|
||||||
|
title="Projekt neu deployen / Website neu laden"
|
||||||
|
>
|
||||||
|
<FaArrowsRotate
|
||||||
|
style={refreshBusyId === project.$id ? { animation: 'spin 1s linear infinite' } : undefined}
|
||||||
|
/>{' '}
|
||||||
|
{refreshBusyId === project.$id ? 'Aktualisiere…' : 'Aktualisieren'}
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
<GiteaLinkButton href={project.giteaRepoUrl} />
|
<GiteaLinkButton href={project.giteaRepoUrl} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user