fix(dashboards): prevent render loops with stable ready handlers and idempotent updates; improve filter hydration guards
fix(export): return 501 with hint when Playwright browsers missing; nicer error toast in UI fix(site-header): export primary/secondary buttons as named for SC safety; keep static props for compat fix(portal): add DialogDescription for a11y; tidy preview dialog fix(csats): avoid reinit state loops with timestamp guard chore(prisma): default dev DB to prisma/db.dev.sqlite and log path chore(auth): add dev bypass flags wiring (server/client) for local testing dev: seed script for Convex demo data
This commit is contained in:
parent
ff0254df18
commit
b62e14d8eb
13 changed files with 210 additions and 103 deletions
|
|
@ -90,12 +90,20 @@ export function TicketCsatCard({ ticket }: TicketCsatCardProps) {
|
|||
const [hoverScore, setHoverScore] = useState<number | null>(null)
|
||||
const [submitting, setSubmitting] = useState(false)
|
||||
|
||||
const ratedAtTimestamp = ticket.csatRatedAt ? ticket.csatRatedAt.getTime() : null
|
||||
|
||||
useEffect(() => {
|
||||
setScore(initialScore)
|
||||
setComment(initialComment)
|
||||
setRatedAt(ticket.csatRatedAt ?? null)
|
||||
setHasSubmitted(initialScore > 0)
|
||||
}, [initialScore, initialComment, ticket.csatRatedAt])
|
||||
setScore((prev) => (prev === initialScore ? prev : initialScore))
|
||||
setComment((prev) => (prev === initialComment ? prev : initialComment))
|
||||
const nextRatedAt = ratedAtTimestamp == null ? null : new Date(ratedAtTimestamp)
|
||||
setRatedAt((prev) => {
|
||||
if (prev === nextRatedAt) return prev
|
||||
if (prev && nextRatedAt && prev.getTime() === nextRatedAt.getTime()) return prev
|
||||
return nextRatedAt
|
||||
})
|
||||
const nextHasSubmitted = initialScore > 0
|
||||
setHasSubmitted((prev) => (prev === nextHasSubmitted ? prev : nextHasSubmitted))
|
||||
}, [initialScore, initialComment, ratedAtTimestamp])
|
||||
|
||||
const effectiveScore = hasSubmitted ? score : hoverScore ?? score
|
||||
const viewerIsStaff = viewerRole === "ADMIN" || viewerRole === "AGENT" || viewerRole === "MANAGER"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue