perf(web): 优化大数据量页面切换与聚合性能
This commit is contained in:
@@ -17,28 +17,36 @@ import { BUG_STATUS_LABEL, BUG_SEVERITY_LABEL, aggregateBugActualHours, bugInter
|
||||
import { calcTwoMetrics } from '@/lib/work-hours';
|
||||
import { isMemberReference, resolveMemberDisplayName } from '@/lib/member-system';
|
||||
import { buildEffortSummaryMetrics, sumPositiveHours } from '@/lib/effort-summary';
|
||||
import type { BugStatus, BugSeverity } from '@/lib/bug';
|
||||
import type { Bug, BugStatus, BugSeverity } from '@/lib/bug';
|
||||
import type { TestCase } from '@/lib/test-case';
|
||||
|
||||
interface Props {
|
||||
versionId: string;
|
||||
requirementIds: string[];
|
||||
readOnly?: boolean;
|
||||
versionBugs?: Bug[];
|
||||
versionTestCases?: TestCase[];
|
||||
}
|
||||
|
||||
export function BugTab({ versionId, requirementIds, readOnly = false }: Props) {
|
||||
export function BugTab({ versionId, requirementIds, readOnly = false, versionBugs: scopedVersionBugs, versionTestCases }: Props) {
|
||||
const { bugs, fetchBugs } = useBugStore();
|
||||
const { testCases, fetchTestCases } = useTestCaseStore();
|
||||
const { requirements } = useRequirementStore();
|
||||
const user = useAuthStore((s) => s.user);
|
||||
const members = useMemberStore((s) => s.members);
|
||||
|
||||
useEffect(() => { fetchBugs(); }, [fetchBugs]);
|
||||
useEffect(() => { fetchTestCases(); }, [fetchTestCases]);
|
||||
useEffect(() => {
|
||||
if (!scopedVersionBugs) fetchBugs();
|
||||
}, [fetchBugs, scopedVersionBugs]);
|
||||
useEffect(() => {
|
||||
if (!versionTestCases) fetchTestCases();
|
||||
}, [fetchTestCases, versionTestCases]);
|
||||
|
||||
const versionBugs = useMemo(
|
||||
const fallbackVersionBugs = useMemo(
|
||||
() => bugs.filter((b) => b.versionId === versionId),
|
||||
[bugs, versionId],
|
||||
);
|
||||
const versionBugs = scopedVersionBugs ?? fallbackVersionBugs;
|
||||
|
||||
const openCount = versionBugs.filter((b) => b.status === 'open').length;
|
||||
const fixingCount = versionBugs.filter((b) => b.status === 'fixing').length;
|
||||
@@ -66,7 +74,8 @@ export function BugTab({ versionId, requirementIds, readOnly = false }: Props) {
|
||||
|
||||
const [selectedBugId, setSelectedBugId] = useState<string | null>(null);
|
||||
|
||||
const testCaseMap = useMemo(() => new Map(testCases.map((c) => [c.id, c])), [testCases]);
|
||||
const visibleTestCases = versionTestCases ?? testCases;
|
||||
const testCaseMap = useMemo(() => new Map(visibleTestCases.map((c) => [c.id, c])), [visibleTestCases]);
|
||||
const currentMember = useMemo(() => members.find((m) => m.id === user?.id), [members, user?.id]);
|
||||
const currentUserName = currentMember?.name ?? user?.name;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user