@@ -4,6 +4,13 @@ import { useI18n } from 'vue-i18n'
44import { Input } from ' @/components/ui/input'
55import { Label } from ' @/components/ui/label'
66import { Textarea } from ' @/components/ui/textarea'
7+ import {
8+ Select ,
9+ SelectContent ,
10+ SelectItem ,
11+ SelectTrigger ,
12+ SelectValue ,
13+ } from ' @/components/ui/select'
714import { Item } from ' @/components/ui/item'
815
916interface EnvironmentVariable {
@@ -203,15 +210,18 @@ watch(() => props.serverData, (newData) => {
203210 })
204211
205212 teamSchema .forEach ((env ) => {
206- newTeamEnv [env .name ] = modelValue .value .team_env ?.[env .name ] || ' '
213+ const defaultValue = env .type === ' boolean' ? ' false' : ' '
214+ newTeamEnv [env .name ] = modelValue .value .team_env ?.[env .name ] || defaultValue
207215 })
208216
209217 teamHeadersSchema .forEach ((header ) => {
210- newTeamHeaders [header .name ] = modelValue .value .team_headers ?.[header .name ] || ' '
218+ const defaultValue = header .type === ' boolean' ? ' false' : ' '
219+ newTeamHeaders [header .name ] = modelValue .value .team_headers ?.[header .name ] || defaultValue
211220 })
212221
213222 teamQueryParamsSchemaData .forEach ((param ) => {
214- newTeamQueryParams [param .name ] = modelValue .value .team_url_query_params ?.[param .name ] || ' '
223+ const defaultValue = param .type === ' boolean' ? ' false' : ' '
224+ newTeamQueryParams [param .name ] = modelValue .value .team_url_query_params ?.[param .name ] || defaultValue
215225 })
216226
217227 userSchema .forEach ((env ) => {
@@ -248,6 +258,21 @@ const isTextarea = (envVar: EnvironmentVariable) => {
248258 (envVar .description ?.toLowerCase ().includes (' json' )) ||
249259 (envVar .placeholder && envVar .placeholder .length > 100 )
250260}
261+
262+ const isBoolean = (item : EnvironmentVariable | HeaderSchema | QueryParamSchema | ArgumentSchema ) => {
263+ return item .type === ' boolean'
264+ }
265+
266+ // Update boolean values with proper reactivity
267+ const updateBooleanValue = (type : ' team_env' | ' team_headers' | ' team_url_query_params' , key : string , value : string ) => {
268+ if (type === ' team_env' ) {
269+ modelValue .value .team_env = { ... modelValue .value .team_env , [key ]: value }
270+ } else if (type === ' team_headers' ) {
271+ modelValue .value .team_headers = { ... modelValue .value .team_headers , [key ]: value }
272+ } else if (type === ' team_url_query_params' ) {
273+ modelValue .value .team_url_query_params = { ... modelValue .value .team_url_query_params , [key ]: value }
274+ }
275+ }
251276 </script >
252277
253278<template >
@@ -348,18 +373,35 @@ const isTextarea = (envVar: EnvironmentVariable) => {
348373 {{ envVar.description }}
349374 </div >
350375
351- <div class =" relative" >
376+ <!-- Boolean select -->
377+ <Select
378+ v-if =" isBoolean(envVar)"
379+ :model-value =" modelValue.team_env[envVar.name]"
380+ @update:model-value =" (val) => updateBooleanValue('team_env', envVar.name, String(val))"
381+ >
382+ <SelectTrigger >
383+ <SelectValue placeholder =" Select value" />
384+ </SelectTrigger >
385+ <SelectContent >
386+ <SelectItem value =" false" >false</SelectItem >
387+ <SelectItem value =" true" >true</SelectItem >
388+ </SelectContent >
389+ </Select >
390+
391+ <!-- Textarea for long values -->
392+ <div v-else-if =" isTextarea(envVar)" class =" relative" >
352393 <Textarea
353- v-if =" isTextarea(envVar)"
354394 :id =" `team_${envVar.name}`"
355395 v-model =" modelValue.team_env[envVar.name]"
356396 :placeholder =" envVar.placeholder || t('mcpInstallations.teamConfiguration.editModal.form.placeholders.enterValue')"
357397 class =" min-h-[100px]"
358398 :required =" envVar.required"
359399 />
400+ </div >
360401
402+ <!-- Regular input -->
403+ <div v-else class =" relative" >
361404 <Input
362- v-else
363405 :id =" `team_${envVar.name}`"
364406 :type =" getInputType(envVar)"
365407 v-model =" modelValue.team_env[envVar.name]"
@@ -416,7 +458,23 @@ const isTextarea = (envVar: EnvironmentVariable) => {
416458 {{ header.description }}
417459 </div >
418460
419- <div class =" relative" >
461+ <!-- Boolean select -->
462+ <Select
463+ v-if =" isBoolean(header)"
464+ :model-value =" modelValue.team_headers[header.name]"
465+ @update:model-value =" (val) => updateBooleanValue('team_headers', header.name, String(val))"
466+ >
467+ <SelectTrigger >
468+ <SelectValue placeholder =" Select value" />
469+ </SelectTrigger >
470+ <SelectContent >
471+ <SelectItem value =" false" >false</SelectItem >
472+ <SelectItem value =" true" >true</SelectItem >
473+ </SelectContent >
474+ </Select >
475+
476+ <!-- Regular input -->
477+ <div v-else class =" relative" >
420478 <Input
421479 :id =" `team_header_${header.name}`"
422480 :type =" getInputType(header)"
@@ -474,7 +532,23 @@ const isTextarea = (envVar: EnvironmentVariable) => {
474532 {{ param.description }}
475533 </div >
476534
477- <div class =" relative" >
535+ <!-- Boolean select -->
536+ <Select
537+ v-if =" isBoolean(param)"
538+ :model-value =" modelValue.team_url_query_params[param.name]"
539+ @update:model-value =" (val) => updateBooleanValue('team_url_query_params', param.name, String(val))"
540+ >
541+ <SelectTrigger >
542+ <SelectValue placeholder =" Select value" />
543+ </SelectTrigger >
544+ <SelectContent >
545+ <SelectItem value =" false" >false</SelectItem >
546+ <SelectItem value =" true" >true</SelectItem >
547+ </SelectContent >
548+ </Select >
549+
550+ <!-- Regular input -->
551+ <div v-else class =" relative" >
478552 <Input
479553 :id =" `team_query_param_${param.name}`"
480554 :type =" getInputType(param)"
0 commit comments