feat: ensure queue summary widget in dashboards

This commit is contained in:
Esdras Renan 2025-11-06 17:23:29 -03:00
parent a542846313
commit 343f0c8c64
2 changed files with 201 additions and 0 deletions

View file

@ -570,6 +570,7 @@ export function DashboardBuilder({ dashboardId, editable = true, mode = "edit" }
const [isDeletingDashboard, setIsDeletingDashboard] = useState(false)
const fullscreenContainerRef = useRef<HTMLDivElement | null>(null)
const previousSidebarStateRef = useRef<{ open: boolean; openMobile: boolean } | null>(null)
const ensureQueueSummaryRequestedRef = useRef(false)
const updateLayoutMutation = useMutation(api.dashboards.updateLayout)
const updateFiltersMutation = useMutation(api.dashboards.updateFilters)
@ -578,6 +579,7 @@ export function DashboardBuilder({ dashboardId, editable = true, mode = "edit" }
const duplicateWidgetMutation = useMutation(api.dashboards.duplicateWidget)
const removeWidgetMutation = useMutation(api.dashboards.removeWidget)
const updateMetadataMutation = useMutation(api.dashboards.updateMetadata)
const ensureQueueSummaryWidgetMutation = useMutation(api.dashboards.ensureQueueSummaryWidget)
const archiveDashboardMutation = useMutation(api.dashboards.archive)
useEffect(() => {
@ -625,6 +627,43 @@ export function DashboardBuilder({ dashboardId, editable = true, mode = "edit" }
layoutRef.current = layoutState
}, [layoutState])
useEffect(() => {
if (!dashboard || !convexUserId || !isStaff) return
if (widgets.length === 0) return
const queueIndex = widgets.findIndex((widget) => {
const type = (widget.type ?? "").toLowerCase()
if (type === "queue-summary") return true
const configType =
widget.config && typeof widget.config === "object"
? ((widget.config as WidgetConfig).type ?? "").toLowerCase()
: ""
return configType === "queue-summary"
})
if (queueIndex === 0) {
ensureQueueSummaryRequestedRef.current = false
return
}
if (queueIndex === -1 || queueIndex > 0) {
if (ensureQueueSummaryRequestedRef.current) return
ensureQueueSummaryRequestedRef.current = true
ensureQueueSummaryWidgetMutation({
tenantId,
actorId: convexUserId as Id<"users">,
dashboardId: dashboard.id as Id<"dashboards">,
}).catch((error) => {
console.error("[dashboards] Failed to ensure queue summary widget", error)
ensureQueueSummaryRequestedRef.current = false
})
}
}, [
dashboard,
widgets,
convexUserId,
isStaff,
tenantId,
ensureQueueSummaryWidgetMutation,
])
useEffect(() => {
if (sections.length === 0) {
setActiveSectionIndex(0)