feat: SQL filtering, Users admin tab, dashboard polish

- Move ticket filtering from in-memory to SQL WHERE clauses
  (queue_id, status, owner use Drizzle eq/isNull; text search uses ilike;
  custom field filters use EXISTS subqueries)
- Add limit param to GET /tickets
- Add POST/PATCH/DELETE /users routes
- Add Users tab to admin page with create/edit/delete
- Smart widget positioning in dashboard (3-column grid fill)
- Show pattern hint below CF inputs in New Ticket dialog

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Gjermund Høsøien Wiggen
2026-06-09 13:04:10 +02:00
parent affbbdaa46
commit c6c5272e50
6 changed files with 297 additions and 72 deletions

View File

@@ -1110,10 +1110,15 @@ function TicketWorkbenchContent() {
...current,
[field.id]: event.target.value,
}))}
placeholder={field.pattern ? field.pattern : "Optional value"}
placeholder={field.pattern ? `Pattern: ${field.pattern}` : "Optional value"}
className="h-9 rounded-md border border-input bg-background px-3 text-sm font-normal outline-none focus:border-ring"
/>
)}
{field.pattern && (
<span className="text-[11px] text-muted-foreground">
Must match: <code className="rounded bg-muted px-1 font-mono">{field.pattern}</code>
</span>
)}
</label>
);
})