fix(sidebar): подключить reviews badge к real count
Бэйдж 'На ревью' в sidebar (desktop + mobile) был захардкожен в 0 — TODO comment ждал cheap /drafts/pending/count endpoint. На самом деле existing /admin/reviews/pending и /admin/schema-reviews/pending уже возвращают paged response с totalElements/total в metadata — request size=1 даёт нужный counter с минимальным payload (~1 строка + 4 metadata field'а). Новый hook useReviewsBadgeCount(): - Параллельно дёргает обе queue (record + schema) - Суммирует totalElements (record) + total (schema) - Полл каждые 60s (lighter чем 30s queue refresh — badge не critical) - Gated на auth.isAuthenticated (anonymous не должен дёргать admin endpoint'ы) Sidebar.tsx (оба варианта — desktop + mobile MobileSidebar): - reviewsCount: 0 → reviews.total
This commit is contained in:
@@ -14,7 +14,7 @@ import {
|
||||
} from 'lucide-react'
|
||||
import { useAuth } from 'react-oidc-context'
|
||||
import { useCanMutate } from '@/auth/useCanMutate'
|
||||
import { useDictionaries, useMyDrafts } from '@/api/queries'
|
||||
import { useDictionaries, useMyDrafts, useReviewsBadgeCount } from '@/api/queries'
|
||||
import { Sheet, SheetContent } from '@/ui'
|
||||
import { ThemeSwitch } from '@/components/layout/ThemeSwitch'
|
||||
import { cn } from '@/lib/utils'
|
||||
@@ -55,13 +55,14 @@ export function Sidebar() {
|
||||
const dictsQuery = useDictionaries()
|
||||
// Loaded just for сидбар counter — light request, кэшируется.
|
||||
const myDrafts = useMyDrafts(0, 1)
|
||||
// Reviews badge — суммирует record-reviews + schema-reviews pending queues
|
||||
// через size=1 paged запросы (cheap: одна запись + metadata). Gated на
|
||||
// authenticated, чтобы anonymous не пытался admin endpoint'ы.
|
||||
const reviews = useReviewsBadgeCount(auth.isAuthenticated)
|
||||
|
||||
const dictsCount = dictsQuery.data?.length ?? 0
|
||||
const myDraftsCount = myDrafts.data?.totalElements ?? 0
|
||||
// Reviews count бэйдж — TODO когда будет cheap endpoint /drafts/pending/count.
|
||||
// Сейчас GET /drafts/pending возвращает page, paged запрос на каждый mount
|
||||
// sidebar'а — overkill. Skip badge.
|
||||
const reviewsCount = 0
|
||||
const reviewsCount = reviews.total
|
||||
|
||||
// Flat list per redesign/compact.html — no section labels, /graph removed
|
||||
// (now reachable via catalog toolbar "Граф ⇄" button). Order: Главная →
|
||||
@@ -392,10 +393,11 @@ export function MobileSidebar({ open, onClose }: { open: boolean; onClose: () =>
|
||||
const canMutate = useCanMutate()
|
||||
const dictsQuery = useDictionaries()
|
||||
const myDrafts = useMyDrafts(0, 1)
|
||||
const reviews = useReviewsBadgeCount(auth.isAuthenticated)
|
||||
|
||||
const dictsCount = dictsQuery.data?.length ?? 0
|
||||
const myDraftsCount = myDrafts.data?.totalElements ?? 0
|
||||
const reviewsCount = 0
|
||||
const reviewsCount = reviews.total
|
||||
|
||||
// Flat list per redesign — same as desktop Sidebar above.
|
||||
const sections: NavSection[] = [
|
||||
|
||||
Reference in New Issue
Block a user