Skip to content

Commit f89546e

Browse files
committed
wip
1 parent e346d83 commit f89546e

File tree

3 files changed

+55
-53
lines changed

3 files changed

+55
-53
lines changed

app/components/Compare/ReplacementSuggestion.vue

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,8 @@ const props = defineProps<{
1010
showAction?: boolean
1111
}>()
1212
13-
const emit = defineEmits<{
14-
addNoDep: []
15-
}>()
16-
17-
const docUrl = computed(() => {
18-
if (props.replacement.type !== 'documented' || !props.replacement.docPath) return null
19-
return `https://e18e.dev/docs/replacements/${props.replacement.docPath}.html`
20-
})
13+
const emit = defineEmits<{ addNoDep: [] }>()
14+
const { externalUrl, nodeVersion, replacementName } = useReplacements(props.replacement)
2115
</script>
2216

2317
<template>
@@ -35,45 +29,40 @@ const docUrl = computed(() => {
3529
/>
3630
<div class="min-w-0 flex-1">
3731
<p class="font-medium">{{ packageName }}: {{ $t('package.replacement.title') }}</p>
38-
<p class="text-xs mt-0.5 opacity-80">
32+
<div class="text-xs mt-0.5 opacity-80">
3933
<template v-if="replacement.type === 'native'">
4034
{{
4135
$t('package.replacement.native', {
42-
replacement: replacement.replacement,
43-
nodeVersion: replacement.nodeVersion,
36+
replacement: replacementName,
37+
nodeVersion: nodeVersion || 'unknown',
4438
})
4539
}}
4640
</template>
4741
<template v-else-if="replacement.type === 'simple'">
4842
{{
4943
$t('package.replacement.simple', {
50-
replacement: replacement.replacement,
44+
replacement: replacementName,
5145
community: $t('package.replacement.community'),
5246
})
5347
}}
5448
</template>
5549
<template v-else-if="replacement.type === 'documented'">
5650
{{
57-
$t('package.replacement.documented', {
58-
community: $t('package.replacement.community'),
59-
})
51+
$t('package.replacement.documented', { community: $t('package.replacement.community') })
6052
}}
6153
</template>
62-
</p>
54+
</div>
6355
</div>
6456

65-
<!-- No dependency action button -->
6657
<ButtonBase
6758
v-if="variant === 'nodep' && showAction !== false"
6859
size="small"
69-
:aria-label="$t('compare.no_dependency.add_column')"
7060
@click="emit('addNoDep')"
7161
>
7262
{{ $t('package.replacement.consider_no_dep') }}
7363
</ButtonBase>
7464

75-
<!-- Info link -->
76-
<LinkBase v-else-if="docUrl" :to="docUrl" variant="button-secondary" size="small">
65+
<LinkBase v-else-if="externalUrl" :to="externalUrl" variant="button-secondary" size="small">
7766
{{ $t('package.replacement.learn_more') }}
7867
</LinkBase>
7968
</div>

app/components/Package/Replacement.vue

Lines changed: 8 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,11 @@
11
<script setup lang="ts">
2-
import type { ModuleReplacement, KnownUrl } from 'module-replacements'
2+
import type { ModuleReplacement } from 'module-replacements'
33
44
const props = defineProps<{
55
replacement: ModuleReplacement
66
}>()
77
8-
const resolveUrl = (url?: KnownUrl) => {
9-
if (!url) return null
10-
if (typeof url === 'string') return url
11-
12-
switch (url.type) {
13-
case 'mdn':
14-
return `https://developer.mozilla.org/en-US/docs/${url.id}`
15-
case 'node':
16-
return `https://nodejs.org/${url.id}`
17-
case 'e18e':
18-
return `https://e18e.dev/docs/replacements/${url.id}`
19-
default:
20-
return null
21-
}
22-
}
23-
24-
const externalUrl = computed(() => resolveUrl(props.replacement.url))
25-
26-
const nodeVersion = computed(() => {
27-
const nodeEngine = props.replacement.engines?.find(e => e.engine === 'nodejs')
28-
return nodeEngine?.minVersion || null
29-
})
8+
const { externalUrl, nodeVersion, replacementName } = useReplacements(props.replacement)
309
</script>
3110

3211
<template>
@@ -37,24 +16,20 @@ const nodeVersion = computed(() => {
3716
<span class="i-lucide:lightbulb w-4 h-4" aria-hidden="true" />
3817
{{ $t('package.replacement.title') }}
3918
</h2>
19+
4020
<i18n-t
4121
v-if="replacement.type === 'native'"
4222
keypath="package.replacement.native"
4323
scope="global"
4424
>
4525
<template #replacement>
46-
<code v-if="replacement.nodeFeatureId?.moduleName">
47-
{{ replacement.nodeFeatureId.moduleName }}
48-
</code>
49-
<code v-else-if="replacement.description">
50-
{{ replacement.description }}
51-
</code>
52-
<span v-else>{{ replacement.id }}</span>
26+
<code>{{ replacementName }}</code>
5327
</template>
5428
<template #nodeVersion>
5529
{{ nodeVersion || 'unknown' }}
5630
</template>
5731
</i18n-t>
32+
5833
<div v-else-if="replacement.type === 'simple'" class="block">
5934
<div class="mb-2">{{ replacement.description }}</div>
6035
<div v-if="replacement.example">
@@ -64,6 +39,7 @@ const nodeVersion = computed(() => {
6439
><code>{{ replacement.example }}</code></pre>
6540
</div>
6641
</div>
42+
6743
<i18n-t
6844
v-else-if="replacement.type === 'documented'"
6945
keypath="package.replacement.documented"
@@ -84,12 +60,11 @@ const nodeVersion = computed(() => {
8460
</a>
8561
</template>
8662
</i18n-t>
63+
8764
<template v-else-if="replacement.type === 'removal'">
8865
{{ replacement.description }}
8966
</template>
90-
<template v-else>
91-
{{ $t('package.replacement.none') }}
92-
</template>
67+
9368
<a
9469
v-if="externalUrl"
9570
:href="externalUrl"

app/composables/useReplacements.ts

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { computed } from 'vue'
2+
import type { ModuleReplacement, KnownUrl } from 'module-replacements'
3+
4+
export function useReplacements(replacement: ModuleReplacement | null | undefined) {
5+
const resolveUrl = (url?: KnownUrl) => {
6+
if (!url) return null
7+
if (typeof url === 'string') return url
8+
9+
switch (url.type) {
10+
case 'mdn':
11+
return `https://developer.mozilla.org/en-US/docs/${url.id}`
12+
case 'node':
13+
return `https://nodejs.org/${url.id}`
14+
case 'e18e':
15+
return `https://e18e.dev/docs/replacements/${url.id}`
16+
default:
17+
return null
18+
}
19+
}
20+
21+
const externalUrl = computed(() => resolveUrl(replacement?.url))
22+
23+
const nodeVersion = computed(() => {
24+
const nodeEngine = replacement?.engines?.find(e => e.engine === 'nodejs')
25+
return nodeEngine?.minVersion || null
26+
})
27+
28+
const replacementName = computed(() => {
29+
if (!replacement) return ''
30+
return replacement.nodeFeatureId?.moduleName || replacement.description || replacement.id || ''
31+
})
32+
33+
return {
34+
externalUrl,
35+
nodeVersion,
36+
replacementName,
37+
}
38+
}

0 commit comments

Comments
 (0)