diff --git a/src/pages/AssignProjectPage.jsx b/src/pages/AssignProjectPage.jsx index 33a550c..2128f03 100644 --- a/src/pages/AssignProjectPage.jsx +++ b/src/pages/AssignProjectPage.jsx @@ -44,6 +44,8 @@ export default function AssignProjectPage() { const [showNewCustomer, setShowNewCustomer] = useState(false) const [tickets, setTickets] = useState([]) const [ticketsLoading, setTicketsLoading] = useState(false) + const [ticketsError, setTicketsError] = useState(false) + const [ticketsReload, setTicketsReload] = useState(0) const [previewOn, setPreviewOn] = useState(true) const [subdomain, setSubdomain] = useState('') const [busy, setBusy] = useState(false) @@ -75,17 +77,20 @@ export default function AssignProjectPage() { if (state.step !== 'ticket' || !state.customerId) return let cancelled = false setTicketsLoading(true) + setTicketsError(false) databases .listDocuments(DATABASE_ID, COLLECTIONS.WORKORDERS, [ Query.equal('customerId', state.customerId), + Query.notEqual('status', 'Closed'), + Query.notEqual('status', 'Cancelled'), Query.orderDesc('$createdAt'), Query.limit(200), ]) .then((r) => { if (!cancelled) setTickets(r.documents || []) }) - .catch(() => { if (!cancelled) setTickets([]) }) + .catch(() => { if (!cancelled) { setTickets([]); setTicketsError(true) } }) .finally(() => { if (!cancelled) setTicketsLoading(false) }) return () => { cancelled = true } - }, [state.step, state.customerId]) + }, [state.step, state.customerId, ticketsReload]) const openTickets = useMemo(() => openTicketsFor(tickets, state.customerId), [tickets, state.customerId]) @@ -142,7 +147,7 @@ export default function AssignProjectPage() { } try { const result = await completeAssignment(id, body) - let path = '/projects' + let path = state.forCustomer ? '/projects' : '/services' if (result.ticketId) { try { const t = await databases.getDocument(DATABASE_ID, COLLECTIONS.WORKORDERS, result.ticketId) @@ -183,7 +188,7 @@ export default function AssignProjectPage() {
{repoName || project.projectName}
{repoUrl && Repository in Gitea öffnen} - {project.$createdAt && <> · angelegt am {fmtDate(project.$createdAt)}{project.createdByGitea ? ' (über Gitea)' : ''}} + {project.$createdAt && <> · angelegt am {fmtDate(project.$createdAt)}{project.createdByGitea ? ` von ${project.createdByGitea}` : ''}}
) @@ -239,7 +244,7 @@ export default function AssignProjectPage() { key={k.key} variant={state.kind === k.key ? 'primary' : 'default'} style={{ padding: '18px 12px', fontSize: 16, fontWeight: 700 }} - onClick={() => patch({ kind: k.key })} + onClick={() => patch({ kind: k.key, newTicket: null, ticketId: '' })} > {k.label} @@ -298,7 +303,12 @@ export default function AssignProjectPage() { {state.step === 'ticket' && ( <> - {ticketsLoading ? : ( + {ticketsLoading ? : ticketsError ? ( +
+
Die Tickets des Kunden konnten nicht geladen werden.
+ +
+ ) : (
{openTickets.map((t) => (
Dieser Kunde hat keine offenen Tickets.
}
)} - + {!ticketsError && !ticketsLoading && ( + + )} {state.newTicket && (