11import { useEffect , useState } from "react" ;
2+ import { useParams , useNavigate } from "react-router-dom" ;
23import {
34 Container ,
45 SpaceBetween ,
@@ -18,6 +19,9 @@ import BaseAppLayout from "../components/base-app-layout";
1819const client = generateClient < Schema > ( ) ;
1920
2021export default function Catalog ( props : any ) {
22+ const { courseId, classId } = useParams ( ) ;
23+ const navigate = useNavigate ( ) ;
24+
2125 const [ activeClass , setActiveClass ] = useState < Schema [ "Class" ] [ "type" ] > ( ) ;
2226 const [ activeCourse , setActiveCourse ] = useState < Schema [ "Course" ] [ "type" ] > ( ) ;
2327 const [ courses , setCourses ] = useState < Array < Schema [ "Course" ] [ "type" ] > > ( [ ] ) ;
@@ -26,25 +30,62 @@ export default function Catalog(props: any) {
2630 const fetchCourse = async ( ) => {
2731 const { data : items } = await client . models . Course . list ( ) ;
2832 setCourses ( items ) ;
29- if ( ! activeCourse && items . length > 0 ) {
33+
34+ // URL에 courseId가 있으면 해당 코스를 활성화
35+ if ( courseId && items . length > 0 ) {
36+ const selectedCourse = items . find ( c => c . id === courseId ) ;
37+ if ( selectedCourse ) {
38+ setActiveCourse ( selectedCourse ) ;
39+ setActiveTabId ( selectedCourse . id ) ;
40+ }
41+ } else if ( ! activeCourse && items . length > 0 ) {
3042 setActiveCourse ( items [ 0 ] ) ;
3143 setActiveTabId ( items [ 0 ] . id ) ;
3244 }
3345 } ;
3446
47+ const fetchClass = async ( ) => {
48+ if ( classId ) {
49+ try {
50+ const { data : classData } = await client . models . Class . get ( { id : classId } ) ;
51+ if ( classData ) {
52+ setActiveClass ( classData ) ;
53+ }
54+ } catch ( error ) {
55+ console . error ( 'Error fetching class:' , error ) ;
56+ }
57+ }
58+ } ;
59+
3560 useEffect ( ( ) => {
3661 fetchCourse ( ) ;
3762 } , [ ] ) ;
3863
64+ useEffect ( ( ) => {
65+ if ( classId ) {
66+ fetchClass ( ) ;
67+ } else {
68+ setActiveClass ( undefined ) ;
69+ }
70+ } , [ classId ] ) ;
71+
3972 const handleTabChange = ( detail : { activeTabId : string } ) => {
4073 const selectedCourse = courses . find ( c => c . id === detail . activeTabId ) ;
4174 if ( selectedCourse ) {
4275 setActiveCourse ( selectedCourse ) ;
43- setActiveClass ( undefined ) ; // Reset active class when changing course
76+ setActiveClass ( undefined ) ;
4477 setActiveTabId ( detail . activeTabId ) ;
78+ // URL 업데이트
79+ navigate ( `/catalog/course/${ detail . activeTabId } ` ) ;
4580 }
4681 } ;
4782
83+ const handleClassSelect = ( selectedClass : Schema [ "Class" ] [ "type" ] ) => {
84+ setActiveClass ( selectedClass ) ;
85+ // URL 업데이트
86+ navigate ( `/catalog/course/${ activeCourse ?. id } /class/${ selectedClass . id } ` ) ;
87+ } ;
88+
4889 return (
4990 < BaseAppLayout
5091 content = {
@@ -67,7 +108,7 @@ export default function Catalog(props: any) {
67108 ( activeClass && activeClass != null && activeClass . class_flag != null && activeClass . class_flag <= 0 ) ? (
68109 < Class activeClass = { activeClass } userName = { props . user } userId = { props . uid } />
69110 ) : (
70- < ClassCatalog activeCourse = { course } setActiveClass = { setActiveClass } />
111+ < ClassCatalog activeCourse = { course } setActiveClass = { handleClassSelect } />
71112 )
72113 )
73114 } ) ) }
0 commit comments