Skip to content

Commit 46b5a0a

Browse files
committed
feat(list-item): onClick event
1 parent f270dd8 commit 46b5a0a

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed

src/App.tsx

+24-4
Original file line numberDiff line numberDiff line change
@@ -781,31 +781,51 @@ export const App: React.FC = () => {
781781
<WidgetWrapper noPadding>
782782
<List>
783783
<ListHeader align="center">Select your music provider</ListHeader>
784-
<ListItem align="center" onClick={() => alert('Spotify')}>
784+
<ListItem
785+
align="center"
786+
name="music-provider"
787+
value="spotify"
788+
onClick={(data) => alert(JSON.stringify(data))}
789+
>
785790
<Image
786791
src="/spotify.svg"
787792
width={110}
788793
height={31}
789794
backgroundSize="contain"
790795
/>
791796
</ListItem>
792-
<ListItem align="center" onClick={() => alert('Apple Music')}>
797+
<ListItem
798+
align="center"
799+
name="music-provider"
800+
value="apple-music"
801+
onClick={(data) => alert(JSON.stringify(data))}
802+
>
793803
<Image
794804
src="/apple-music.svg"
795805
width={110}
796806
height={31}
797807
backgroundSize="contain"
798808
/>
799809
</ListItem>
800-
<ListItem align="center" onClick={() => alert('YouTube Music')}>
810+
<ListItem
811+
align="center"
812+
name="music-provider"
813+
value="youtube-music"
814+
onClick={(data) => alert(JSON.stringify(data))}
815+
>
801816
<Image
802817
src="/youtube-music.svg"
803818
width={110}
804819
height={31}
805820
backgroundSize="contain"
806821
/>
807822
</ListItem>
808-
<ListItem align="center" onClick={() => alert('Deezer')}>
823+
<ListItem
824+
align="center"
825+
name="music-provider"
826+
value="deezer"
827+
onClick={(data) => alert(JSON.stringify(data))}
828+
>
809829
<Image
810830
src="/deezer.svg"
811831
width={110}

src/components/lists/list-item/list-item.tsx

+33-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,28 @@ import classNames from 'clsx'
22

33
import { Icon } from '../../..'
44

5+
interface ListItemOnClickData {
6+
name: string | undefined
7+
value: string | number | undefined
8+
}
9+
510
export interface ListItemProps {
611
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
712
children: any
813
// children: React.ReactNode
914
align?: 'left' | 'center'
10-
onClick?: () => void
15+
name?: string
16+
value?: string | number | undefined
17+
onClick?: (data: ListItemOnClickData) => void
1118
}
1219

13-
export function ListItem({ children, align, onClick }: ListItemProps) {
20+
export function ListItem({
21+
children,
22+
align,
23+
name,
24+
value,
25+
onClick
26+
}: ListItemProps) {
1427
let isClickable = false
1528

1629
if (onClick) {
@@ -19,11 +32,28 @@ export function ListItem({ children, align, onClick }: ListItemProps) {
1932

2033
return (
2134
<li
35+
data-aurora-name={name}
36+
value={value}
2237
className={classNames('aurora-list-item', {
2338
'aurora-list-item--clickable': isClickable,
2439
[`aurora-list-item--${align}`]: align
2540
})}
26-
onClick={isClickable ? onClick : undefined}
41+
onClick={(event) => {
42+
if (!isClickable) {
43+
return
44+
}
45+
46+
event.preventDefault()
47+
48+
const data = {
49+
name,
50+
value
51+
}
52+
53+
if (onClick) {
54+
onClick(data)
55+
}
56+
}}
2757
>
2858
{isClickable ? (
2959
<>

0 commit comments

Comments
 (0)