Roadmaps aus WOMS entfernt
Menüpunkt, die Seiten /roadmaps und /roadmaps/:id, der Roadmap-Kasten im Ticket und die Plan-Automatik (Auto-Ticket, Knoten-Kommentare, automatischer Abschluss) sind entfernt. Alte Links landen bei den Tickets. Die Projekt-Kontextbox im Ticket bleibt und zeigt das zugewiesene Projekt samt den anderen Tickets des Kunden, nur ohne Plan-Link. Die Daten in roadmaps/roadmapNodes bleiben in Appwrite unangetastet; das Kundenportal liest sie nicht. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
50d237a932
commit
7b31cb5368
16 files changed
+11
-1527
No files matched your search
@@ -3,13 +3,12 @@ import { Link } from 'react-router-dom'
|
||||
import { IconFolders } from '@tabler/icons-react'
|
||||
import { StatusPill } from './ui/StatusPill'
|
||||
import { databases, DATABASE_ID, COLLECTIONS, Query } from '../lib/appwrite'
|
||||
import { fetchRoadmapByTicketId } from '../lib/roadmaps'
|
||||
import { useWebsiteProjects } from '../hooks/useWebsiteProjects'
|
||||
|
||||
/**
|
||||
* Projekt-Kontextbox im Ticket: zeigt automatisch das zugehoerige Projekt,
|
||||
* alle anderen Tickets desselben Kunden (klickbar) und den Link zum aktiven Plan.
|
||||
* Rendert nichts, wenn das Ticket keinen Projektbezug hat.
|
||||
* Projekt-Kontextbox im Ticket: zeigt automatisch das zugewiesene Projekt
|
||||
* und alle anderen Tickets desselben Kunden (klickbar).
|
||||
* Rendert nichts, wenn dem Ticket kein Projekt zugewiesen ist.
|
||||
*/
|
||||
export default function ProjectContextPanel({ ticket }) {
|
||||
const { fetchByTicketId } = useWebsiteProjects()
|
||||
@@ -19,16 +18,12 @@ export default function ProjectContextPanel({ ticket }) {
|
||||
let cancelled = false
|
||||
async function load() {
|
||||
try {
|
||||
// Projektbezug: Roadmap dieses Tickets oder direkt zugewiesenes Projekt
|
||||
const [roadmap, assignedProjects] = await Promise.all([
|
||||
fetchRoadmapByTicketId(ticket.$id).catch(() => null),
|
||||
fetchByTicketId(ticket.$id),
|
||||
])
|
||||
const projectName = roadmap?.projectName || assignedProjects[0]?.projectName || ''
|
||||
if (!roadmap && !assignedProjects.length) {
|
||||
const assignedProjects = await fetchByTicketId(ticket.$id)
|
||||
if (!assignedProjects.length) {
|
||||
if (!cancelled) setContext(null)
|
||||
return
|
||||
}
|
||||
const projectName = assignedProjects[0].projectName || ''
|
||||
|
||||
let otherTickets = []
|
||||
if (ticket.customerId) {
|
||||
@@ -39,7 +34,7 @@ export default function ProjectContextPanel({ ticket }) {
|
||||
])
|
||||
otherTickets = res.documents.filter((t) => t.$id !== ticket.$id)
|
||||
}
|
||||
if (!cancelled) setContext({ roadmap, projectName, otherTickets })
|
||||
if (!cancelled) setContext({ projectName, otherTickets })
|
||||
} catch {
|
||||
if (!cancelled) setContext(null)
|
||||
}
|
||||
@@ -49,7 +44,7 @@ export default function ProjectContextPanel({ ticket }) {
|
||||
}, [ticket.$id, ticket.customerId, fetchByTicketId])
|
||||
|
||||
if (!context) return null
|
||||
const { roadmap, projectName, otherTickets } = context
|
||||
const { projectName, otherTickets } = context
|
||||
|
||||
return (
|
||||
<div className="ui-card pad" style={{ marginTop: 16 }}>
|
||||
@@ -57,11 +52,6 @@ export default function ProjectContextPanel({ ticket }) {
|
||||
<h5 style={{ fontWeight: 700, margin: 0, display: 'flex', alignItems: 'center', gap: 8 }}>
|
||||
<IconFolders size={18} /> Projekt: {projectName || '-'}
|
||||
</h5>
|
||||
{roadmap && (
|
||||
<Link to={`/roadmaps/${roadmap.$id}`} className="ui-btn">
|
||||
Plan: {roadmap.title}
|
||||
</Link>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{!ticket.customerId ? (
|
||||
|
||||
Reference in new issue
Block a user