1import { CUSTOMER_PORTAL_ROOT } from './utils'
2
3// Block JSONs repeat these paths.
4export const ROUTES = {
5 home: '/',
6 categories: '/categories',
7 // Lists link the bare name; the article page adds the slug.
8 article: ({ name, title_slug }: { name: string; title_slug?: string }) =>
9 `/articles/${[name, title_slug].filter(Boolean).join('-')}`,
10 category: (name: string) => `/category/${name}`,
11 ticketList: '/my-tickets',
12 newTicket: (origin?: TicketOrigin) => ({ path: '/my-tickets/new', query: originQuery(origin) }),
13 ticket: (name: string) => `/my-tickets/${name}`,
14 appRoot: CUSTOMER_PORTAL_ROOT,
15}
16
17// Stored as the ticket's entry point.
18export type TicketOrigin =
19 | { from: 'article'; article: string }
20 | { from: 'search'; q?: string }
21 | { from: 'ticket-list' | 'closed-ticket' }
22
23// Drop empty values, so no bare `q=`.
24function originQuery(origin?: TicketOrigin) {
25 return Object.fromEntries(Object.entries(origin ?? {}).filter(([, value]) => value))
26}
27