1414 * limitations under the License.
1515 */
1616
17- import Image from 'next/image' ;
18- import Link from 'next/link' ;
1917import { useSearchParams , useRouter } from 'next/navigation' ;
20- import TrophiesSvg from 'public/images/trophies.svg' ;
2118import { useState } from 'react' ;
2219import useSWR from 'swr' ;
2320import { useDebouncedCallback } from 'use-debounce' ;
@@ -27,74 +24,11 @@ import Input from '@/components/Input';
2724import { OPagination } from '@/components/Pagination' ;
2825import { ReactSelect } from '@/components/Select/ReactSelect' ;
2926import useMounted from '@/hooks/useMounted' ;
30- import { markdownToPlainText } from '@/utils/markdown' ;
3127import { fetcher } from '@/utils/request' ;
3228
3329import { fetchTeamList } from '#/domain/quiz/repository' ;
34- import { useMediaUrl } from '#/state/application/hooks' ;
3530
36- function List ( { data } ) {
37- const mediaUrl = useMediaUrl ( ) ;
38-
39- return (
40- < Link
41- href = { `/quiz/${ data . id } ` }
42- className = "p-6 bg-white flex max-md:flex-col gap-4 md:gap-9 mb-4 rounded-xl transition-all hover:shadow-[0_4px_24px_rgba(0,0,0,0.08)]"
43- >
44- < div className = "relative" >
45- < Image width = { 370 } height = { 200 } src = { mediaUrl + data ?. img } alt = "" className = "rounded-xl" />
46- </ div >
47- < div className = "flex flex-col justify-between flex-1" >
48- < div >
49- < h3 className = "text-2xl mb-2" > { data ?. title } </ h3 >
50- < p className = "text-base md:mb-2 opacity-60 md:line-clamp-2" > { markdownToPlainText ( data ?. describe ) } </ p >
51- { data ?. reward_text && (
52- < div className = "flex w-fit pr-2 items-center h-6 bg-[rgba(239,78,22,0.1)] rounded-full max-md:mt-4" >
53- < div className = "w-6 h-6 rounded-full flex items-center justify-center bg-[#EF4E16] mr-2" >
54- < Image width = { 16 } height = { 16 } src = { TrophiesSvg } alt = "Trophies" />
55- </ div >
56- < p className = "text-sm text-[#EF4E16]" > { data ?. reward_text } </ p >
57- </ div >
58- ) }
59- </ div >
60- < span className = "md:hidden -mx-6 h-[1px] bg-[#1A1A1A] opacity-[.06] mt-6 mb-4 scale-y-50" />
61- < div className = "flex justify-between items-center" >
62- < div className = "flex items-center text-sm" >
63- < p className = "flex items-center" >
64- < Image
65- width = { 32 }
66- height = { 32 }
67- src = { mediaUrl + data ?. quiz_user . user_avatar }
68- alt = ""
69- className = "rounded-full mr-3"
70- />
71- by
72- < a href = { `/u/${ data ?. quiz_user ?. user_handle } ` } >
73- < strong > { data ?. quiz_user . user_nick_name } </ strong >
74- </ a >
75- </ p >
76- < span className = "mx-2 opacity-10 text-xl font-light" > |</ span >
77- < p >
78- < strong > { data ?. user_num } </ strong > builders
79- </ p >
80- </ div >
81- < span className = { 'hidden md:inline-flex h-10 w-10 justify-center items-center rounded bg-gray' } >
82- < svg width = "13" height = "13" viewBox = "0 0 13 13" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
83- < path d = "M1 12L12 1" stroke = { 'white' } strokeWidth = "2" strokeLinecap = "round" strokeLinejoin = "round" />
84- < path
85- d = "M2.57143 1H12V10.4286"
86- stroke = { 'white' }
87- strokeWidth = "2"
88- strokeLinecap = "round"
89- strokeLinejoin = "round"
90- />
91- </ svg >
92- </ span >
93- </ div >
94- </ div >
95- </ Link >
96- ) ;
97- }
31+ import QuizListItem from '../quiz-list-item' ;
9832
9933const pageSize = 10 ;
10034
@@ -190,7 +124,7 @@ export default function QuizList() {
190124 ) : (
191125 < >
192126 { data ?. list . map ( ( i , k ) => (
193- < List key = { `quiz-list-${ k } ` } data = { i } />
127+ < QuizListItem key = { `quiz-list-${ k } ` } data = { i } />
194128 ) ) }
195129 < OPagination page = { page } pageSize = { pageSize } total = { data ?. total } changeCallback = { handlePageChange } />
196130 </ >
0 commit comments