refactor: use Convex skip sentinel in query args

This commit is contained in:
Esdras Renan 2025-11-01 02:31:17 -03:00
parent 3de7eccaa8
commit bd2f22d046
32 changed files with 167 additions and 157 deletions

View file

@ -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 }[])

View file

@ -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]

View file

@ -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

View file

@ -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[]>([])

View file

@ -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 }[])
: []

View file

@ -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) {

View file

@ -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 (

View file

@ -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">

View file

@ -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[]) : []),