refactor(ui): Optimize LanguageSwitcher component rendering and type safety

- Simplify language display logic using computed property
- Add Locale interface for improved type checking
- Remove redundant v-for loops in template
- Enhance readability and performance of language selection rendering
This commit is contained in:
padreug 2025-03-11 02:18:29 +01:00
parent 3431dbdf97
commit 55e8fa59d0

View file

@ -8,20 +8,27 @@ import {
import { Button } from '@/components/ui/button' import { Button } from '@/components/ui/button'
import { Check } from 'lucide-vue-next' import { Check } from 'lucide-vue-next'
import { useLocale } from '@/composables/useLocale' import { useLocale } from '@/composables/useLocale'
import { computed } from 'vue'
interface Locale {
code: string
name: string
flag: string
}
const { currentLocale, locales, setLocale } = useLocale() const { currentLocale, locales, setLocale } = useLocale()
const currentLocaleInfo = computed<Locale | undefined>(() =>
locales.value.find((locale: Locale) => locale.code === currentLocale.value)
)
</script> </script>
<template> <template>
<DropdownMenu> <DropdownMenu>
<DropdownMenuTrigger as-child> <DropdownMenuTrigger as-child>
<Button variant="ghost" size="sm" class="gap-2 w-[120px] justify-start"> <Button variant="ghost" size="sm" class="w-[120px] justify-start">
<span v-for="locale in locales" :key="locale.code"> <span>{{ currentLocaleInfo?.flag }}</span>
{{ locale.code === currentLocale ? locale.flag : '' }} <span>{{ currentLocaleInfo?.name }}</span>
</span>
<span v-for="locale in locales" :key="locale.code">
{{ locale.code === currentLocale ? locale.name : '' }}
</span>
</Button> </Button>
</DropdownMenuTrigger> </DropdownMenuTrigger>
<DropdownMenuContent align="end" class="w-[120px]"> <DropdownMenuContent align="end" class="w-[120px]">