148148
149149 <div class =" flex justify-end items-center gap-2" >
150150 <div class =" language-selector" >
151- <button
152- @click =" showLanguageMenu = !showLanguageMenu"
153- class =" nav-button-base language-select-button"
154- type =" button"
155- >
156- {{ currentLanguageLabel }}
157- <svg
158- class =" language-select-arrow"
159- :class =" { 'rotate-180': showLanguageMenu }"
160- xmlns =" http://www.w3.org/2000/svg"
161- viewBox =" 0 0 20 20"
162- fill =" currentColor"
163- >
164- <path fill-rule =" evenodd" d =" M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule =" evenodd" />
165- </svg >
166- </button >
167- <div
168- v-if =" showLanguageMenu"
169- class =" language-menu"
151+ <select
152+ v-model =" selectedLanguage"
153+ @change =" onLanguageChange"
154+ class =" language-select nav-button-base"
170155 >
171- <button
172- @click =" changeLanguage('en')"
173- class =" language-menu-item"
174- :class =" { 'language-menu-item-active': locale.value === 'en' }"
175- >
176- {{ $t('nav.english') }}
177- </button >
178- <button
179- @click =" changeLanguage('id')"
180- class =" language-menu-item"
181- :class =" { 'language-menu-item-active': locale.value === 'id' }"
182- >
183- {{ $t('nav.indonesian') }}
184- </button >
185- </div >
156+ <option value =" en" >{{ $t('nav.english') }}</option >
157+ <option value =" id" >{{ $t('nav.indonesian') }}</option >
158+ </select >
186159 </div >
187160 <a
188161 class =" nav-button-base"
@@ -460,7 +433,16 @@ const selectedMonth = computed({
460433 set : (value ) => { store .setSelectedMonth (value) }
461434})
462435
463- const showLanguageMenu = ref (false )
436+ // Language selection
437+ const selectedLanguage = computed ({
438+ get : () => locale .value ,
439+ set : (value ) => { locale .value = value }
440+ })
441+
442+ const onLanguageChange = () => {
443+ // Save to localStorage for persistence
444+ localStorage .setItem (' preferred-language' , selectedLanguage .value )
445+ }
464446
465447// Generate month options: current month + past 6 months
466448const generateMonthOptions = () => {
@@ -486,23 +468,6 @@ const onMonthChange = () => {
486468 console .log (' Selected month:' , selectedMonth .value )
487469}
488470
489- const currentLanguageLabel = computed (() => {
490- // Show language name in its own language
491- if (locale .value === ' en' ) {
492- return ' English'
493- } else {
494- // Use Indonesian translation for Indonesian
495- return t (' nav.indonesian' )
496- }
497- })
498-
499- const changeLanguage = (lang ) => {
500- locale .value = lang
501- showLanguageMenu .value = false
502- // Save to localStorage for persistence
503- localStorage .setItem (' preferred-language' , lang)
504- }
505-
506471// Navigate to upload page
507472const navigateToUpload = () => {
508473 emit (' navigate' , ' upload' )
@@ -513,13 +478,6 @@ const navigateToDashboard = () => {
513478 emit (' navigate' , ' dashboard' )
514479}
515480
516- // Close menu when clicking outside
517- const handleClickOutside = (event ) => {
518- if (! event .target .closest (' .language-selector' )) {
519- showLanguageMenu .value = false
520- }
521- }
522-
523481// Initialize expanded state based on current selection
524482const initializeExpandedState = () => {
525483 if (store .currentLevel === ' facility' && store .currentId ) {
@@ -542,11 +500,6 @@ const initializeExpandedState = () => {
542500}
543501
544502onMounted (() => {
545- document .addEventListener (' click' , handleClickOutside)
546503 initializeExpandedState ()
547504})
548-
549- onUnmounted (() => {
550- document .removeEventListener (' click' , handleClickOutside)
551- })
552505< / script>
0 commit comments