refactor: use Convex skip sentinel in query args
This commit is contained in:
parent
3de7eccaa8
commit
bd2f22d046
32 changed files with 167 additions and 157 deletions
|
|
@ -135,8 +135,8 @@ export function CloseTicketDialog({
|
|||
const closingTemplateArgs =
|
||||
actorId && open ? { tenantId, viewerId: actorId, kind: "closing" as const } : undefined
|
||||
const closingTemplatesRemote = useQuery(
|
||||
actorId && open ? api.commentTemplates.list : undefined,
|
||||
closingTemplateArgs
|
||||
api.commentTemplates.list,
|
||||
closingTemplateArgs ?? "skip"
|
||||
)
|
||||
const closingTemplates = Array.isArray(closingTemplatesRemote)
|
||||
? (closingTemplatesRemote as { id: string; title: string; body: string }[])
|
||||
|
|
|
|||
|
|
@ -126,12 +126,11 @@ export function NewTicketDialog({ triggerClassName }: { triggerClassName?: strin
|
|||
})
|
||||
const { convexUserId, isStaff, role } = useAuth()
|
||||
const queuesEnabled = Boolean(isStaff && convexUserId)
|
||||
const queueArgs = queuesEnabled
|
||||
? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
|
||||
useDefaultQueues(DEFAULT_TENANT_ID)
|
||||
const queuesRemote = useQuery(queuesEnabled ? api.queues.summary : undefined, queueArgs)
|
||||
const queuesRemote = useQuery(
|
||||
api.queues.summary,
|
||||
queuesEnabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const queues = useMemo(
|
||||
() => (Array.isArray(queuesRemote) ? (queuesRemote as TicketQueueSummary[]) : []),
|
||||
[queuesRemote]
|
||||
|
|
@ -145,10 +144,10 @@ export function NewTicketDialog({ triggerClassName }: { triggerClassName?: strin
|
|||
)
|
||||
|
||||
const directoryQueryEnabled = queuesEnabled && Boolean(convexUserId)
|
||||
const companiesArgs = directoryQueryEnabled
|
||||
? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const companiesRemote = useQuery(directoryQueryEnabled ? api.companies.list : undefined, companiesArgs)
|
||||
const companiesRemote = useQuery(
|
||||
api.companies.list,
|
||||
directoryQueryEnabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const companies = useMemo(
|
||||
() =>
|
||||
(Array.isArray(companiesRemote) ? companiesRemote : []).map((company) => ({
|
||||
|
|
@ -159,10 +158,10 @@ export function NewTicketDialog({ triggerClassName }: { triggerClassName?: strin
|
|||
[companiesRemote]
|
||||
)
|
||||
|
||||
const customersArgs = directoryQueryEnabled
|
||||
? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const customersRemote = useQuery(directoryQueryEnabled ? api.users.listCustomers : undefined, customersArgs)
|
||||
const customersRemote = useQuery(
|
||||
api.users.listCustomers,
|
||||
directoryQueryEnabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const customers = useMemo(
|
||||
() => (Array.isArray(customersRemote) ? (customersRemote as CustomerOption[]) : []),
|
||||
[customersRemote]
|
||||
|
|
|
|||
|
|
@ -32,14 +32,16 @@ export function PlayNextTicketCard({ context }: PlayNextTicketCardProps) {
|
|||
const router = useRouter()
|
||||
const { convexUserId, isStaff } = useAuth()
|
||||
const queuesEnabled = Boolean(isStaff && convexUserId)
|
||||
const queueArgs = queuesEnabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : undefined
|
||||
const queueSummaryResult = useQuery(queuesEnabled ? api.queues.summary : undefined, queueArgs)
|
||||
const queueSummaryResult = useQuery(
|
||||
api.queues.summary,
|
||||
queuesEnabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const queueSummary: TicketQueueSummary[] = Array.isArray(queueSummaryResult) ? queueSummaryResult : []
|
||||
const playNext = useMutation(api.tickets.playNext)
|
||||
const [selectedQueueId, setSelectedQueueId] = useState<string | undefined>(undefined)
|
||||
|
||||
const nextTicketFromServer = useQuery(
|
||||
convexUserId ? api.tickets.list : undefined,
|
||||
api.tickets.list,
|
||||
convexUserId
|
||||
? {
|
||||
tenantId: DEFAULT_TENANT_ID,
|
||||
|
|
@ -50,7 +52,7 @@ export function PlayNextTicketCard({ context }: PlayNextTicketCardProps) {
|
|||
queueId: (selectedQueueId as Id<"queues">) || undefined,
|
||||
limit: 1,
|
||||
}
|
||||
: undefined
|
||||
: "skip"
|
||||
)?.[0]
|
||||
const nextTicketUi = nextTicketFromServer ? mapTicketFromServer(nextTicketFromServer as unknown) : null
|
||||
|
||||
|
|
|
|||
|
|
@ -74,10 +74,12 @@ function TicketRow({ ticket, entering }: { ticket: Ticket; entering: boolean })
|
|||
|
||||
export function RecentTicketsPanel() {
|
||||
const { convexUserId } = useAuth()
|
||||
const ticketsArgs = convexUserId
|
||||
? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users">, limit: 12 }
|
||||
: undefined
|
||||
const ticketsResult = useQuery(convexUserId ? api.tickets.list : undefined, ticketsArgs)
|
||||
const ticketsResult = useQuery(
|
||||
api.tickets.list,
|
||||
convexUserId
|
||||
? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users">, limit: 12 }
|
||||
: "skip"
|
||||
)
|
||||
const [enteringId, setEnteringId] = useState<string | null>(null)
|
||||
const previousIdsRef = useRef<string[]>([])
|
||||
|
||||
|
|
|
|||
|
|
@ -73,8 +73,8 @@ export function TicketComments({ ticket }: TicketCommentsProps) {
|
|||
const templateArgs =
|
||||
convexUserId && isStaff
|
||||
? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users">, kind: "comment" as const }
|
||||
: undefined
|
||||
const templatesResult = useQuery(convexUserId && isStaff ? api.commentTemplates.list : undefined, templateArgs)
|
||||
: "skip"
|
||||
const templatesResult = useQuery(api.commentTemplates.list, templateArgs)
|
||||
const templates = Array.isArray(templatesResult)
|
||||
? (templatesResult as { id: string; title: string; body: string }[])
|
||||
: []
|
||||
|
|
|
|||
|
|
@ -17,14 +17,16 @@ import { useAuth } from "@/lib/auth-client";
|
|||
export function TicketDetailView({ id }: { id: string }) {
|
||||
const { convexUserId } = useAuth();
|
||||
const canLoadTicket = Boolean(convexUserId);
|
||||
const queryArgs = canLoadTicket
|
||||
? {
|
||||
tenantId: DEFAULT_TENANT_ID,
|
||||
id: id as Id<"tickets">,
|
||||
viewerId: convexUserId as Id<"users">,
|
||||
}
|
||||
: undefined;
|
||||
const t = useQuery(canLoadTicket ? api.tickets.getById : undefined, queryArgs);
|
||||
const t = useQuery(
|
||||
api.tickets.getById,
|
||||
canLoadTicket
|
||||
? {
|
||||
tenantId: DEFAULT_TENANT_ID,
|
||||
id: id as Id<"tickets">,
|
||||
viewerId: convexUserId as Id<"users">,
|
||||
}
|
||||
: "skip"
|
||||
);
|
||||
const isLoading = !convexUserId || t === undefined;
|
||||
|
||||
if (isLoading) {
|
||||
|
|
|
|||
|
|
@ -16,10 +16,11 @@ interface TicketQueueSummaryProps {
|
|||
export function TicketQueueSummaryCards({ queues }: TicketQueueSummaryProps) {
|
||||
const { convexUserId, isStaff } = useAuth()
|
||||
const enabled = Boolean(isStaff && convexUserId)
|
||||
const queueArgs = enabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : undefined
|
||||
const fromServer = useQuery(enabled ? api.queues.summary : undefined, queueArgs)
|
||||
const serverData = Array.isArray(fromServer) ? fromServer : undefined
|
||||
const data: TicketQueueSummary[] = queues ?? serverData ?? []
|
||||
const fromServer = useQuery(
|
||||
api.queues.summary,
|
||||
enabled ? { tenantId: DEFAULT_TENANT_ID, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
) as TicketQueueSummary[] | undefined
|
||||
const data: TicketQueueSummary[] = queues ?? fromServer ?? []
|
||||
|
||||
if (!queues && fromServer === undefined) {
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -167,10 +167,10 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) {
|
|||
const updateCategories = useMutation(api.tickets.updateCategories)
|
||||
const agents = (useQuery(api.users.listAgents, { tenantId: ticket.tenantId }) as Doc<"users">[] | undefined) ?? []
|
||||
const queuesEnabled = Boolean(isStaff && convexUserId)
|
||||
const companiesArgs = convexUserId
|
||||
? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const companiesRemote = useQuery(convexUserId ? api.companies.list : undefined, companiesArgs)
|
||||
const companiesRemote = useQuery(
|
||||
api.companies.list,
|
||||
convexUserId ? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const companies = useMemo(
|
||||
() =>
|
||||
(Array.isArray(companiesRemote) ? companiesRemote : []).map((company) => ({
|
||||
|
|
@ -181,27 +181,26 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) {
|
|||
[companiesRemote]
|
||||
)
|
||||
|
||||
const customersArgs = convexUserId
|
||||
? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const customersRemote = useQuery(convexUserId ? api.users.listCustomers : undefined, customersArgs)
|
||||
const customersRemote = useQuery(
|
||||
api.users.listCustomers,
|
||||
convexUserId ? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const customers = useMemo(
|
||||
() => (Array.isArray(customersRemote) ? (customersRemote as CustomerOption[]) : []),
|
||||
[customersRemote]
|
||||
)
|
||||
|
||||
const queueArgs = queuesEnabled
|
||||
? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const queuesResult = useQuery(queuesEnabled ? api.queues.summary : undefined, queueArgs)
|
||||
const queuesResult = useQuery(
|
||||
api.queues.summary,
|
||||
queuesEnabled ? { tenantId: ticket.tenantId, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const queues: TicketQueueSummary[] = Array.isArray(queuesResult) ? queuesResult : []
|
||||
const { categories, isLoading: categoriesLoading } = useTicketCategories(ticket.tenantId)
|
||||
const workSummaryArgs = convexUserId
|
||||
? { ticketId: ticket.id as Id<"tickets">, viewerId: convexUserId as Id<"users"> }
|
||||
: undefined
|
||||
const workSummaryRemote = useQuery(
|
||||
convexUserId ? api.tickets.workSummary : undefined,
|
||||
workSummaryArgs
|
||||
api.tickets.workSummary,
|
||||
convexUserId
|
||||
? { ticketId: ticket.id as Id<"tickets">, viewerId: convexUserId as Id<"users"> }
|
||||
: "skip"
|
||||
) as
|
||||
| {
|
||||
ticketId: Id<"tickets">
|
||||
|
|
|
|||
|
|
@ -65,8 +65,10 @@ export function TicketsView({ initialFilters }: TicketsViewProps = {}) {
|
|||
useDefaultQueues(tenantId)
|
||||
|
||||
const queuesEnabled = Boolean(isStaff && convexUserId)
|
||||
const queueArgs = queuesEnabled ? { tenantId, viewerId: convexUserId as Id<"users"> } : undefined
|
||||
const queuesResult = useQuery(queuesEnabled ? api.queues.summary : undefined, queueArgs)
|
||||
const queuesResult = useQuery(
|
||||
api.queues.summary,
|
||||
queuesEnabled ? { tenantId, viewerId: convexUserId as Id<"users"> } : "skip"
|
||||
)
|
||||
const queues: TicketQueueSummary[] = Array.isArray(queuesResult) ? queuesResult : []
|
||||
const agents = useQuery(api.users.listAgents, { tenantId }) as { _id: string; name: string }[] | undefined
|
||||
const ticketsArgs = convexUserId
|
||||
|
|
@ -80,8 +82,8 @@ export function TicketsView({ initialFilters }: TicketsViewProps = {}) {
|
|||
assigneeId: filters.assigneeId ? (filters.assigneeId as unknown as Id<"users">) : undefined,
|
||||
search: filters.search || undefined,
|
||||
}
|
||||
: undefined
|
||||
const ticketsRaw = useQuery(convexUserId ? api.tickets.list : undefined, ticketsArgs)
|
||||
: "skip"
|
||||
const ticketsRaw = useQuery(api.tickets.list, ticketsArgs)
|
||||
|
||||
const tickets = useMemo(
|
||||
() => mapTicketsFromServerList(Array.isArray(ticketsRaw) ? (ticketsRaw as unknown[]) : []),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue