feat(error-book): update components, actions, data-access, and add analytics
- Add data-access-analytics for error book analytics queries - Update actions, data-access for improved error book operations - Update components: add-error-book-dialog, analytics-stats-cards, chapter-weakness-chart, class-error-bar-chart, class-filter, error-book-detail-dialog, error-book-filters, error-book-item-card, error-book-list, error-book-stats-cards, grouped-student-error-table, knowledge-point-weakness-chart, review-buttons, subject-distribution-chart, subject-tabs, top-wrong-questions - Remove class-error-overview (replaced by new components)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
"use client"
|
||||
|
||||
import { useRouter, useSearchParams } from "next/navigation"
|
||||
import { useTranslations } from "next-intl"
|
||||
import { cn } from "@/shared/lib/utils"
|
||||
import { Badge } from "@/shared/components/ui/badge"
|
||||
|
||||
@@ -25,6 +26,7 @@ export function SubjectTabs({
|
||||
}: SubjectTabsProps) {
|
||||
const router = useRouter()
|
||||
const searchParams = useSearchParams()
|
||||
const t = useTranslations("error-book")
|
||||
|
||||
const handleSelect = (subjectId: string | null) => {
|
||||
const params = new URLSearchParams(searchParams.toString())
|
||||
@@ -44,6 +46,8 @@ export function SubjectTabs({
|
||||
<div className="flex flex-wrap gap-2">
|
||||
<button
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={currentSubjectId === null}
|
||||
onClick={() => handleSelect(null)}
|
||||
className={cn(
|
||||
"inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-sm transition-colors",
|
||||
@@ -52,7 +56,7 @@ export function SubjectTabs({
|
||||
: "bg-card hover:bg-muted"
|
||||
)}
|
||||
>
|
||||
<span className="font-medium">全部学科</span>
|
||||
<span className="font-medium">{t("subjectTabs.all")}</span>
|
||||
<Badge
|
||||
variant={currentSubjectId === null ? "secondary" : "outline"}
|
||||
className="text-xs"
|
||||
@@ -66,6 +70,8 @@ export function SubjectTabs({
|
||||
<button
|
||||
key={subject.subjectId}
|
||||
type="button"
|
||||
role="tab"
|
||||
aria-selected={isActive}
|
||||
onClick={() => handleSelect(subject.subjectId)}
|
||||
className={cn(
|
||||
"inline-flex items-center gap-2 rounded-full border px-3 py-1.5 text-sm transition-colors",
|
||||
@@ -88,7 +94,7 @@ export function SubjectTabs({
|
||||
isActive ? "text-primary-foreground/80" : "text-rose-600"
|
||||
)}
|
||||
>
|
||||
待复习 {subject.dueReviewCount}
|
||||
{t("subjectTabs.dueReview", { count: subject.dueReviewCount })}
|
||||
</span>
|
||||
) : null}
|
||||
</button>
|
||||
|
||||
Reference in New Issue
Block a user