feat: agenda polish, SLA sync, filters
This commit is contained in:
parent
7fb6c65d9a
commit
6ab8a6ce89
40 changed files with 2771 additions and 154 deletions
|
|
@ -1,8 +1,49 @@
|
|||
import { TicketsPageClient } from "./tickets-page-client"
|
||||
import { requireAuthenticatedSession } from "@/lib/auth-server"
|
||||
import type { TicketFiltersState } from "@/lib/ticket-filters"
|
||||
import type { TicketStatus } from "@/lib/schemas/ticket"
|
||||
|
||||
export default async function TicketsPage() {
|
||||
type TicketsPageProps = {
|
||||
searchParams?: Record<string, string | string[] | undefined>
|
||||
}
|
||||
|
||||
export default async function TicketsPage({ searchParams }: TicketsPageProps) {
|
||||
await requireAuthenticatedSession()
|
||||
return <TicketsPageClient />
|
||||
const initialFilters = deriveInitialFilters(searchParams ?? {})
|
||||
return <TicketsPageClient initialFilters={initialFilters} />
|
||||
}
|
||||
|
||||
function getParamValue(value: string | string[] | undefined): string | undefined {
|
||||
if (Array.isArray(value)) {
|
||||
return value[0]
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
function deriveInitialFilters(params: Record<string, string | string[] | undefined>): Partial<TicketFiltersState> {
|
||||
const initial: Partial<TicketFiltersState> = {}
|
||||
const view = getParamValue(params.view)
|
||||
if (view === "completed" || view === "active") {
|
||||
initial.view = view
|
||||
}
|
||||
const status = getParamValue(params.status)
|
||||
if (status && ["PENDING", "AWAITING_ATTENDANCE", "PAUSED", "RESOLVED"].includes(status)) {
|
||||
initial.status = status as TicketStatus
|
||||
}
|
||||
const priority = getParamValue(params.priority)
|
||||
if (priority) initial.priority = priority
|
||||
const queue = getParamValue(params.queue)
|
||||
if (queue) initial.queue = queue
|
||||
const channel = getParamValue(params.channel)
|
||||
if (channel) initial.channel = channel
|
||||
const company = getParamValue(params.company)
|
||||
if (company) initial.company = company
|
||||
const assigneeId = getParamValue(params.assignee)
|
||||
if (assigneeId) initial.assigneeId = assigneeId
|
||||
const focus = getParamValue(params.focus)
|
||||
if (focus === "visits") {
|
||||
initial.focusVisits = true
|
||||
}
|
||||
return initial
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import dynamic from "next/dynamic"
|
|||
|
||||
import { AppShell } from "@/components/app-shell"
|
||||
import { SiteHeader } from "@/components/site-header"
|
||||
import type { TicketFiltersState } from "@/components/tickets/tickets-filters"
|
||||
|
||||
const TicketQueueSummaryCards = dynamic(
|
||||
() =>
|
||||
|
|
@ -29,7 +30,11 @@ const NewTicketDialog = dynamic(
|
|||
{ ssr: false }
|
||||
)
|
||||
|
||||
export function TicketsPageClient() {
|
||||
type TicketsPageClientProps = {
|
||||
initialFilters?: Partial<TicketFiltersState>
|
||||
}
|
||||
|
||||
export function TicketsPageClient({ initialFilters }: TicketsPageClientProps = {}) {
|
||||
return (
|
||||
<AppShell
|
||||
header={
|
||||
|
|
@ -44,7 +49,7 @@ export function TicketsPageClient() {
|
|||
<div className="px-4 lg:px-6">
|
||||
<TicketQueueSummaryCards />
|
||||
</div>
|
||||
<TicketsView />
|
||||
<TicketsView initialFilters={initialFilters} />
|
||||
</div>
|
||||
</AppShell>
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue