Skip to content

Commit c206f6e

Browse files
committedNov 7, 2023
fix: support alias to custom component
1 parent 6df72f8 commit c206f6e

File tree

4 files changed

+16
-16
lines changed

4 files changed

+16
-16
lines changed
 

‎playground/app.config.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ export default defineAppConfig({
44
aliases: {
55
github: 'carbon:logo-github',
66
nuxt: 'logos:nuxt-icon',
7-
rocket: 'fluent-emoji:rocket'
7+
rocket: 'fluent-emoji:rocket',
8+
nxt: 'NuxtIcon'
89
}
910
}
1011
})

‎playground/app.vue

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
<Icon name="github" size="24" />
2424
<Icon name="nuxt" size="24" />
2525
<Icon name="rocket" size="24" />
26+
<Icon name="nxt" size="24" />
2627
</p>
2728
<p>
2829
CSS:
2930
<IconCSS name="uil:github" size="24" />
30-
<IconCSS name="uil:github" size="48" />
31+
<IconCSS name="i-ph-rocket" size="48" />
3132
<IconCSS name="nuxt" size="48" style="color: #00DC82;" />
3233
</p>
3334
<p>

‎src/runtime/Icon.vue

+7-8
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,15 @@ watch(() => appConfig.nuxtIcon?.iconifyApiOptions, () => {
6060
const state = useState<Record<string, IconifyIcon | undefined>>('icons', () => ({}))
6161
const isFetching = ref(false)
6262
const iconName = computed(() => {
Has a conversation. Original line has a conversation.
63-
let name = props.name
64-
if (appConfig.nuxtIcon?.aliases?.[name]) {
65-
name = appConfig.nuxtIcon.aliases[name]
63+
if (appConfig.nuxtIcon?.aliases?.[props.name]) {
64+
return appConfig.nuxtIcon.aliases[props.name]
6665
}
67-
68-
return resolveIconName(name)
66+
return props.name
6967
})
70-
const iconKey = computed(() => [iconName.value.provider, iconName.value.prefix, iconName.value.name].filter(Boolean).join(':'))
68+
const resolvedIcon = computed(() => resolveIconName(iconName.value))
69+
const iconKey = computed(() => [resolvedIcon.value.provider, resolvedIcon.value.prefix, resolvedIcon.value.name].filter(Boolean).join(':'))
7170
const icon = computed<IconifyIcon | undefined>(() => state.value?.[iconKey.value])
72-
const component = computed(() => nuxtApp.vueApp.component(props.name))
71+
const component = computed(() => nuxtApp.vueApp.component(iconName.value))
7372
const sSize = computed(() => {
7473
// Disable size if appConfig.nuxtIcon.size === false
7574
// @ts-ignore
@@ -91,7 +90,7 @@ async function loadIconComponent () {
9190
}
9291
if (!state.value?.[iconKey.value]) {
9392
isFetching.value = true
94-
state.value[iconKey.value] = await loadIcon(iconName.value).catch(() => undefined)
93+
state.value[iconKey.value] = await loadIcon(resolvedIcon.value).catch(() => undefined)
9594
isFetching.value = false
9695
}
9796
}

‎src/runtime/IconCSS.vue

+5-6
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,12 @@ const props = defineProps({
2727
})
2828
2929
const iconName = computed(() => {
30-
let name = props.name
31-
if (appConfig.nuxtIcon?.aliases?.[name]) {
32-
name = appConfig.nuxtIcon.aliases[name]
30+
if (appConfig.nuxtIcon?.aliases?.[props.name]) {
31+
return appConfig.nuxtIcon.aliases[props.name]
3332
}
34-
35-
return resolveIconName(name)
33+
return props.name
3634
})
35+
const resolvedIcon = computed(() => resolveIconName(iconName.value))
3736
const iconUrl = computed(() => {
3837
const customUrl = appConfig.nuxtIcon?.iconifyApiOptions?.url
3938
@@ -48,7 +47,7 @@ const iconUrl = computed(() => {
4847
}
4948
5049
const baseUrl = customUrl || 'https://api.iconify.design'
51-
return `url('${baseUrl}/${iconName.value.prefix}/${iconName.value.name}.svg')`
50+
return `url('${baseUrl}/${resolvedIcon.value.prefix}/${resolvedIcon.value.name}.svg')`
5251
})
5352
const sSize = computed(() => {
5453
// Disable size if appConfig.nuxtIcon.size === false

0 commit comments

Comments
 (0)
Please sign in to comment.