1- import { Avatar , Card , CardContent , CardProps , Chip } from '@mui/material' ;
1+ import { Avatar , Box , Card , CardContent , CardProps , Chip } from '@mui/material' ;
22import { marked } from 'marked' ;
33import { Issue } from 'mobx-github' ;
44import { FC } from 'react' ;
@@ -9,6 +9,7 @@ export type IssueCardProps = Issue & Omit<CardProps, 'id'>;
99
1010export const IssueCard : FC < IssueCardProps > = ( {
1111 id,
12+ className = '' ,
1213 repository_url,
1314 number,
1415 title,
@@ -18,51 +19,60 @@ export const IssueCard: FC<IssueCardProps> = ({
1819 user,
1920 comments,
2021 created_at,
22+ component = 'li' ,
2123 ...props
2224} ) => (
23- < Card { ... props } >
24- < CardContent className = "flex h-full flex-col justify-between gap-2" >
25- < h2 className = "text-2xl font-semibold" >
26- < a
27- href = { html_url }
28- target = "_blank"
29- rel = "noreferrer "
30- style = { { textDecoration : 'none' , color : 'inherit' } }
31- >
32- { repository_url . split ( '/' ) . slice ( - 2 ) . join ( '/' ) } # { number }
33- < br / >
34- { title }
35- </ a >
25+ < Box
26+ { ... props }
27+ component = { component }
28+ className = { `elevation-1 hover:elevation-4 relative mb-4 grid break-inside-avoid grid-cols-1 grid-rows-5 gap-2 rounded-2xl border border-gray-200 p-4 dark:border-0 ${ className } ` }
29+ >
30+ < a
31+ className = "row-span-1 text-2xl font-semibold "
32+ href = { html_url }
33+ target = "_blank"
34+ rel = "noreferrer"
35+ >
36+ < h2 className = "text-lg" >
37+ { title } # { number }
3638 </ h2 >
39+ </ a >
3740
38- < div className = "flex items-center gap-2" >
39- { labels ?. map (
40- label =>
41- typeof label === 'object' && (
42- < Chip
43- key = { label . name }
44- label = { label . name }
45- style = { { backgroundColor : `#${ label . color || 'e0e0e0' } ` } }
46- />
47- ) ,
48- ) }
49- </ div >
41+ < ul className = "scrollbar-none scroll-snap-x row-span-1 flex snap-mandatory flex-nowrap gap-2 overflow-x-scroll" >
42+ { labels ?. map (
43+ label =>
44+ typeof label === 'object' && (
45+ < Chip
46+ key = { label . name }
47+ size = "small"
48+ component = "li"
49+ variant = "outlined"
50+ color = "primary"
51+ label = { label . name }
52+ />
53+ ) ,
54+ ) }
55+ </ ul >
5056
51- < article dangerouslySetInnerHTML = { { __html : marked ( body || '' , { async : false } ) } } />
57+ < article
58+ dangerouslySetInnerHTML = { { __html : marked ( body || '' , { async : false } ) } }
59+ className = "row-span-3"
60+ />
5261
53- < footer className = "flex items-center justify-between" >
54- { user && (
55- < div className = "flex items-center gap-2" >
56- < Avatar src = { user . avatar_url } alt = { user . name || '' } />
57- { user . name || '' }
58- </ div >
59- ) }
62+ < footer className = "row-span-1 flex items-center justify-between text-neutral-500" >
63+ { user && (
6064 < div className = "flex items-center gap-2" >
61- < SymbolIcon name = "chat" />
62- { comments }
65+ < Avatar src = { user . avatar_url } alt = { user . name || '' } />
66+ { user . name || '' }
6367 </ div >
64- < time dateTime = { created_at } > { new Date ( created_at ) . toLocaleString ( ) } </ time >
65- </ footer >
66- </ CardContent >
67- </ Card >
68+ ) }
69+ < div className = "flex items-center gap-2" >
70+ < SymbolIcon name = "chat" />
71+ { comments }
72+ </ div >
73+ < time className = "text-sm" dateTime = { created_at } >
74+ { new Date ( created_at ) . toLocaleString ( ) }
75+ </ time >
76+ </ footer >
77+ </ Box >
6878) ;
0 commit comments