feat(dashboard): 주차 체크리스트 → 학습 문서 연결 고리
All checks were successful
CI / backend-test (push) Successful in 1m25s
CI / frontend-build (push) Successful in 45s
CI / backend-dep-scan (push) Successful in 6s

대시보드에도 '이 주차 학습 문서' 링크를 붙였다. 과제 페이지와 같은 패턴.
대시보드가 '오늘 뭐하지'만 보여주고 끝나던 것 → 문서→체크 흐름의 허브로.
This commit is contained in:
AWESOMEDEV 2026-07-23 13:42:10 +09:00
parent 6f1c78bc03
commit 4b64d0ac9c

View File

@ -129,6 +129,7 @@ export default function DashboardPage() {
const [checkedIds, setCheckedIds] = useState(new Set()); // id
const [loading, setLoading] = useState(true);
const [toggleError, setToggleError] = useState(''); //
const [docs, setDocs] = useState([]); // ( )
// : week useEffect ( [week]).
// .
@ -155,6 +156,11 @@ export default function DashboardPage() {
};
}, [week]);
// .
useEffect(() => {
client.get('/documents').then((res) => setDocs(res.data)).catch(() => {});
}, []);
async function toggle(itemId) {
// , (checked) .
// : (··500) "
@ -179,6 +185,9 @@ export default function DashboardPage() {
const doneCount = items.filter((item) => checkedIds.has(item.id)).length;
const percent = items.length === 0 ? 0 : Math.round((doneCount / items.length) * 100);
// ( ). " " .
const weekDocs = docs.filter((d) => d.week === week);
// day (day null " ").
const groups = new Map();
for (const item of items) {
@ -253,6 +262,19 @@ export default function DashboardPage() {
))}
</div>
{/* 이 주차 학습 문서로 가는 고리 — 대시보드를 "학습 허브"로. 문서 → 체크 흐름을 만든다. */}
{weekDocs.length > 0 && (
<div className="assignment-doc-links">
{weekDocs.map((d) => (
<Link key={d.slug} to={`/docs/${d.slug}`} className="card assignment-doc-link">
<span className="assignment-doc-badge">📚 학습 문서</span>
<span className="assignment-doc-title">{d.title}</span>
<span className="assignment-doc-cta">체크 전에 먼저 읽어 보세요 </span>
</Link>
))}
</div>
)}
{toggleError && (
<p className="error-text" role="alert" style={{ marginBottom: 10 }}>{toggleError}</p>
)}