feat: PSA ticket management — /tickets page, detail panel, AI ticket creation #141

Merged
chihlasm merged 36 commits from feat/psa-ticket-management into main 2026-04-25 04:59:02 +00:00
2 changed files with 3 additions and 2 deletions
Showing only changes of commit b2ee1a2150 - Show all commits

View File

@@ -42,6 +42,7 @@ export function AiTicketParseForm({ initialHint = '', onParsed }: Props) {
Describe the ticket in plain language who, what, which client, and priority.
</p>
<textarea
aria-label="Ticket description"
className="w-full bg-input border border-default rounded-[5px] px-3 py-2 text-sm text-primary placeholder:text-muted-foreground focus:border-accent focus:outline-none resize-none"
rows={4}
placeholder="e.g. Create a high priority ticket for Acme Corp — Outlook not syncing for jsmith, assign to me"

View File

@@ -39,7 +39,7 @@ export function NewTicketModal({ defaultTab = 'quick', initialValues, summaryHin
useEffect(() => {
integrationsApi.listBoards().then(setBoards).catch(() => {})
ticketsApi.listPriorities().then(setPriorities).catch(() => {})
ticketsApi.listPriorities().then(setPriorities).catch(err => console.error('Failed to load priorities', err))
}, [])
useEffect(() => {
@@ -89,7 +89,7 @@ export function NewTicketModal({ defaultTab = 'quick', initialValues, summaryHin
{/* Header */}
<div className="flex items-center justify-between px-5 py-4 border-b border-default shrink-0">
<h2 className="font-heading font-semibold text-heading">New Ticket</h2>
<button onClick={onClose} className="text-muted-foreground hover:text-primary transition-colors">
<button onClick={onClose} aria-label="Close" className="text-muted-foreground hover:text-primary transition-colors">
<X className="w-4 h-4" />
</button>
</div>