Skip to content

Commit 4760859

Browse files
OrbisKdanielroe
andauthored
perf: dedupe onKeyStroke (#490)
Co-authored-by: Daniel Roe <daniel@roe.dev>
1 parent 8274fa1 commit 4760859

3 files changed

Lines changed: 49 additions & 33 deletions

File tree

app/components/AppHeader.vue

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,22 @@ withDefaults(
1010
1111
const { isConnected, npmUser } = useConnector()
1212
13-
const router = useRouter()
14-
1513
const showFullSearch = shallowRef(false)
1614
17-
onKeyStroke(',', e => {
18-
// Don't trigger if user is typing in an input
19-
const target = e.target as HTMLElement
20-
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {
21-
return
22-
}
15+
onKeyStroke(
16+
',',
17+
e => {
18+
// Don't trigger if user is typing in an input
19+
const target = e.target as HTMLElement
20+
if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {
21+
return
22+
}
2323
24-
e.preventDefault()
25-
router.push('/settings')
26-
})
24+
e.preventDefault()
25+
navigateTo('/settings')
26+
},
27+
{ dedupe: true },
28+
)
2729
</script>
2830

2931
<template>

app/pages/[...package].vue

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import type { NpmVersionDist, PackumentVersion, ReadmeResponse } from '#shared/types'
33
import type { JsrPackageInfo } from '#shared/types/jsr'
44
import { assertValidPackageName } from '#shared/utils/npm'
5-
import { onKeyStroke } from '@vueuse/core'
65
import { joinURL } from 'ufo'
76
import { areUrlsEquivalent } from '#shared/utils/url'
87
@@ -331,22 +330,32 @@ useSeoMeta({
331330
description: () => pkg.value?.description ?? '',
332331
})
333332
334-
onKeyStroke('.', () => {
335-
if (pkg.value && displayVersion.value) {
336-
router.push({
337-
name: 'code',
338-
params: {
339-
path: [pkg.value.name, 'v', displayVersion.value.version],
340-
},
341-
})
342-
}
343-
})
333+
onKeyStroke(
334+
'.',
335+
e => {
336+
if (pkg.value && displayVersion.value) {
337+
e.preventDefault()
338+
navigateTo({
339+
name: 'code',
340+
params: {
341+
path: [pkg.value.name, 'v', displayVersion.value.version],
342+
},
343+
})
344+
}
345+
},
346+
{ dedupe: true },
347+
)
344348
345-
onKeyStroke('d', () => {
346-
if (docsLink.value) {
347-
router.push(docsLink.value)
348-
}
349-
})
349+
onKeyStroke(
350+
'd',
351+
e => {
352+
if (docsLink.value) {
353+
e.preventDefault()
354+
navigateTo(docsLink.value)
355+
}
356+
},
357+
{ dedupe: true },
358+
)
350359
351360
defineOgImageComponent('Package', {
352361
name: () => pkg.value?.name ?? 'Package',

app/pages/settings.vue

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,17 @@ const colorMode = useColorMode()
66
const { currentLocaleStatus, isSourceLocale } = useI18nStatus()
77
88
// Escape to go back (but not when focused on form elements)
9-
onKeyStroke('Escape', e => {
10-
const target = e.target as HTMLElement
11-
if (!['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.tagName)) {
12-
router.back()
13-
}
14-
})
9+
onKeyStroke(
10+
'Escape',
11+
e => {
12+
const target = e.target as HTMLElement
13+
if (!['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.tagName)) {
14+
e.preventDefault()
15+
router.back()
16+
}
17+
},
18+
{ dedupe: true },
19+
)
1520
1621
useSeoMeta({
1722
title: () => `${$t('settings.title')} - npmx`,

0 commit comments

Comments
 (0)