4646 option-label="name"
4747 option-value="id"
4848 />
49- <BaseCheckbox
50- id="demo-content"
51- v-model =" fillDemoContent "
52- :label =" t (' Fill with demo content' )"
53- name=""
54- />
55- <!-- BaseAutocomplete
56- id="template"
57- v-model="courseTemplate"
58- :label="t('Course template')"
59- :search="searchTemplates"
60- /-->
6149 </div >
6250 <!-- Form Footer -->
6351 <div class =" form-footer" >
@@ -83,20 +71,32 @@ import { onMounted, ref, nextTick } from "vue"
8371import BaseInputText from " ../basecomponents/BaseInputText.vue"
8472import BaseAdvancedSettingsButton from " ../basecomponents/BaseAdvancedSettingsButton.vue"
8573import BaseSelect from " ../basecomponents/BaseSelect.vue"
86- import BaseCheckbox from " ../basecomponents/BaseCheckbox.vue"
8774import BaseButton from " ../basecomponents/BaseButton.vue"
8875import { useRouter } from " vue-router"
8976import courseService from " ../../services/courseService"
9077import languageService from " ../../services/languageService"
9178import BaseMultiSelect from " ../basecomponents/BaseMultiSelect.vue"
9279import { useI18n } from " vue-i18n"
9380
94- const { t } = useI18n ()
81+ const props = defineProps ({
82+ values: {
83+ type: Object ,
84+ default : () => ({}),
85+ },
86+ errors: {
87+ type: [Array , Object , null ],
88+ default: null ,
89+ },
90+ })
91+
92+ const emit = defineEmits ([" submit" ])
93+
94+ const { t , locale } = useI18n ()
95+
9596const courseName = ref (" " )
9697const courseCategory = ref ([])
9798const courseCode = ref (" " )
9899const courseLanguage = ref (null )
99- const fillDemoContent = ref (false )
100100const courseTemplate = ref (null )
101101const showAdvancedSettings = ref (false )
102102const router = useRouter ()
@@ -111,7 +111,38 @@ const isCourseNameInvalid = ref(false)
111111
112112const formSubmitted = ref (false )
113113
114- const emit = defineEmits ([" submit" ])
114+ function normalizeLocale (value ) {
115+ return String (value || " " )
116+ .trim ()
117+ .replace (" -" , " _" )
118+ .toLowerCase ()
119+ }
120+
121+ function resolveDefaultLanguageId (options , desiredLocale ) {
122+ // Options are { name, id } where id is language.isocode (e.g. "en", "fr", "es")
123+ const desired = normalizeLocale (desiredLocale)
124+ const base = desired .split (" _" )[0 ] // e.g. "en_US" -> "en"
125+
126+ const byExact = options .find ((opt ) => normalizeLocale (opt .id ) === desired)
127+ if (byExact) return byExact .id
128+
129+ const byBase = options .find ((opt ) => normalizeLocale (opt .id ) === base)
130+ if (byBase) return byBase .id
131+
132+ return null
133+ }
134+
135+ function applyDefaultLanguageIfEmpty () {
136+ if (courseLanguage .value ) return
137+ if (! languageOptions .value || languageOptions .value .length === 0 ) return
138+
139+ const desired = props .values ? .language || locale .value
140+ const resolvedId = resolveDefaultLanguageId (languageOptions .value , desired)
141+
142+ if (resolvedId) {
143+ courseLanguage .value = resolvedId
144+ }
145+ }
115146
116147const validateCourseCode = () => {
117148 const pattern = / ^ [a-zA-Z0-9 ] * $ /
@@ -147,7 +178,7 @@ const submitForm = () => {
147178 code: courseCode .value ,
148179 language: courseLanguage .value ,
149180 template: courseTemplate .value ? courseTemplate .value .value : null ,
150- fillDemoContent: fillDemoContent . value ,
181+ fillDemoContent: false ,
151182 })
152183}
153184
@@ -188,19 +219,13 @@ onMounted(async () => {
188219 name: language .originalName ,
189220 id: language .isocode ,
190221 }))
222+ // Apply default language after options are loaded
223+ applyDefaultLanguageIfEmpty ()
191224 } catch (error) {
192225 // Keep messages in English
193226 console .error (" Failed to load dropdown data" , error)
194227 }
195228})
196-
197- const searchTemplates = async (query ) => {
198- if (query && query .length >= 3 ) {
199- return courseService .searchTemplates (query)
200- }
201- return []
202- }
203-
204229const goBack = () => {
205230 router .go (- 1 )
206231}
0 commit comments