Skip to content

Commit 5a0e1ac

Browse files
committed
feat: Add click events for VListItem prepend/append icon/avatars
1 parent f09fe03 commit 5a0e1ac

File tree

1 file changed

+29
-4
lines changed

1 file changed

+29
-4
lines changed

packages/vuetify/src/components/VList/VListItem.tsx

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ export const VListItem = genericComponent<new () => {
103103

104104
emits: {
105105
click: (e: MouseEvent | KeyboardEvent) => true,
106+
'click:prependIcon': (e: MouseEvent | KeyboardEvent) => true,
107+
'click:prependAvatar': (e: MouseEvent | KeyboardEvent) => true,
108+
'click:appendIcon': (e: MouseEvent | KeyboardEvent) => true,
109+
'click:appendAvatar': (e: MouseEvent | KeyboardEvent) => true,
106110
},
107111

108112
setup (props, { attrs, slots, emit }) {
@@ -162,6 +166,27 @@ export const VListItem = genericComponent<new () => {
162166
props.value != null && select(!isSelected.value, e)
163167
}
164168

169+
function onPrependAvatarClick (e: MouseEvent) {
170+
e.stopImmediatePropagation()
171+
emit('click:prependAvatar', e)
172+
}
173+
174+
function onPrependIconClick (e: MouseEvent) {
175+
e.stopImmediatePropagation()
176+
emit('click:prependIcon', e)
177+
}
178+
179+
function onAppendAvatarClick (e: MouseEvent) {
180+
e.stopImmediatePropagation()
181+
emit('click:appendAvatar', e)
182+
}
183+
184+
function onAppendIconClick (e: MouseEvent) {
185+
e.stopImmediatePropagation()
186+
emit('click:appendIcon', e)
187+
}
188+
189+
165190
function onKeyDown (e: KeyboardEvent) {
166191
if (e.key === 'Enter' || e.key === ' ') {
167192
e.preventDefault()
@@ -231,11 +256,11 @@ export const VListItem = genericComponent<new () => {
231256
>
232257
<div class="v-list-item__prepend">
233258
{ props.prependAvatar && (
234-
<VAvatar key="prepend-avatar" />
259+
<VAvatar key="prepend-avatar" onClick={ onPrependAvatarClick } />
235260
) }
236261

237262
{ props.prependIcon && (
238-
<VIcon key="prepend-icon" />
263+
<VIcon key="prepend-icon" onClick={ onPrependIconClick } />
239264
) }
240265

241266
{ slots.prepend?.(slotProps.value) }
@@ -280,11 +305,11 @@ export const VListItem = genericComponent<new () => {
280305
{ slots.append?.(slotProps.value) }
281306

282307
{ props.appendIcon && (
283-
<VIcon key="append-icon" />
308+
<VIcon key="append-icon" onClick={ onAppendIconClick } />
284309
) }
285310

286311
{ props.appendAvatar && (
287-
<VAvatar key="append-avatar" />
312+
<VAvatar key="append-avatar" onClick={ onAppendAvatarClick } />
288313
) }
289314
</div>
290315
</VDefaultsProvider>

0 commit comments

Comments
 (0)