From 36a38b8e8489eb5ca5b9e7fe4aede178e300cb3b Mon Sep 17 00:00:00 2001 From: Hanbin Cho Date: Tue, 21 Apr 2026 17:19:47 +0900 Subject: [PATCH] Empty test case ui --- apps/landing/src/app/test-case/page.tsx | 459 ++++++++++-------- .../test-case/TestCaseTotalBoundary.tsx | 17 + 2 files changed, 268 insertions(+), 208 deletions(-) create mode 100644 apps/landing/src/components/test-case/TestCaseTotalBoundary.tsx diff --git a/apps/landing/src/app/test-case/page.tsx b/apps/landing/src/app/test-case/page.tsx index 672f48d..94c50d5 100644 --- a/apps/landing/src/app/test-case/page.tsx +++ b/apps/landing/src/app/test-case/page.tsx @@ -20,6 +20,7 @@ import { TestCaseFilterContainer } from '@/components/test-case/TestCaseFilterCo import { TestCaseProvider } from '@/components/test-case/TestCaseProvider' import { TestCaseRuleContainer } from '@/components/test-case/TestCaseRuleContainer' import { TestCaseStat } from '@/components/test-case/TestCaseStat' +import { TestCaseTotalBoundary } from '@/components/test-case/TestCaseTotalBoundary' import { TestCaseTypeToggle } from '@/components/test-case/TestCaseTypeToggle' import { createFilterMap, TEST_CASE_FILTERS } from '@/constants' import { TestStatusMap } from '@/types' @@ -217,44 +218,68 @@ export default async function TestCasePage() { 실패한 케이스만 표시하기 - - - - - + + + - 목차 펼치기 - - - - + + + 목차 펼치기 + + + + + - + - {cases} + {cases} + +
+ + 등록된 테스트가 없습니다. + +
+
- {/* mobile bottom sheet */} - - -
- + + {/* mobile bottom sheet */} + + +
+ + + 접기 + +
+
+ - 접기 + 한글 목차 -
-
- - - 한글 목차 - - + 클릭 시 해당 항으로 이동합니다. + + + - 클릭 시 해당 항으로 이동합니다. - - - - {Object.entries(ruleMap).map(([key, value]) => { - const isBut = value.title.includes('다만') - if (isBut) return null - return ( - { + const isBut = value.title.includes('다만') + if (isBut) return null + return ( + + + + +
+ + {value.title.replace(/[^\d~]/g, '')} + +
+
+
+
+
+ ) + })} +
+
+ {/* desktop side sheet */} + + +
+ + - - + 접기 + +
+
+ + + 한글 목차 + + + 클릭 시 해당 항으로 이동합니다. + + + + {Object.entries(ruleMap).map(([key, value]) => { + const isBut = value.title.includes('다만') + if (isBut) return null + return ( + + - + - - ) - })} - -
- {/* desktop side sheet */} - - -
- - - 접기 - -
-
- - - 한글 목차 - - - 클릭 시 해당 항으로 이동합니다. - - - - {Object.entries(ruleMap).map(([key, value]) => { - const isBut = value.title.includes('다만') - if (isBut) return null - return ( - - - -
- - {value.title.replace(/[^\d~]/g, '')} - -
-
-
-
- ) - })} -
-
+ ) + })} + + + ) diff --git a/apps/landing/src/components/test-case/TestCaseTotalBoundary.tsx b/apps/landing/src/components/test-case/TestCaseTotalBoundary.tsx new file mode 100644 index 0000000..d31e940 --- /dev/null +++ b/apps/landing/src/components/test-case/TestCaseTotalBoundary.tsx @@ -0,0 +1,17 @@ +'use client' + +import { useTestCase } from './TestCaseProvider' + +export function TestCaseTotalBoundary({ + reverse = false, + children, +}: { + reverse?: boolean + children: React.ReactNode +}) { + const { filterMap, options } = useTestCase() + const selected = options.filters[0] + const length = filterMap[selected].length + if (reverse) return length ? null : children + return length ? children : null +}