Skip to content

Commit 830421d

Browse files
authored
Merge pull request #898 from dnum-mi/develop
Develop
2 parents 0b915cd + 008e8fb commit 830421d

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

src/components/DsfrSelect/DsfrSelect.types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
export type DsfrSelectOption = string | number | null | undefined
12
export type DsfrSelectProps = {
23
required?: boolean
34
disabled?: boolean
45
selectId?: string
56
name?: string
67
description?: string
7-
modelValue?: string | number
8+
modelValue?: DsfrSelectOption
89
label?: string
9-
options?: (string | undefined | { value: string | undefined, text: string, disabled?: boolean })[]
10+
options?: (DsfrSelectOption | { value: DsfrSelectOption, text: string, disabled?: boolean })[]
1011
successMessage?: string
1112
errorMessage?: string
1213
defaultUnselectedText?: string

src/components/DsfrSelect/DsfrSelect.vue

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const props = withDefaults(defineProps<DsfrSelectProps>(), {
2222
defaultUnselectedText: 'Sélectionner une option',
2323
})
2424
25-
defineEmits<{ (e: 'update:modelValue', payload: string): void }>()
25+
defineEmits<{ (e: 'update:modelValue', payload: string | number): void }>()
2626
2727
const message = computed(() => {
2828
return props.errorMessage || props.successMessage
@@ -71,7 +71,6 @@ const messageType = computed(() => {
7171
@change="$emit('update:modelValue', ($event.target as HTMLInputElement)?.value)"
7272
>
7373
<option
74-
value=""
7574
:selected="modelValue == null"
7675
disabled
7776
hidden
@@ -82,12 +81,12 @@ const messageType = computed(() => {
8281
<option
8382
v-for="(option, index) in options"
8483
:key="index"
85-
:selected="modelValue === option || (typeof option === 'object' && option.value === modelValue)"
86-
:value="typeof option === 'object' ? option.value : option"
87-
:disabled="!!(typeof option === 'object' && option.disabled)"
88-
:aria-disabled="!!(typeof option === 'object' && option.disabled)"
84+
:selected="modelValue === option || (typeof option === 'object' && option!.value === modelValue)"
85+
:value="typeof option === 'object' ? option!.value : option"
86+
:disabled="!!(typeof option === 'object' && option!.disabled)"
87+
:aria-disabled="!!(typeof option === 'object' && option!.disabled)"
8988
>
90-
{{ typeof option === 'object' ? option.text : option }}
89+
{{ typeof option === 'object' ? option!.text : option }}
9190
</option>
9291
</select>
9392

src/components/DsfrSelect/docs-demo/DsfrSelectDemo.vue

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,33 @@
11
<script lang="ts" setup>
2+
import { ref } from 'vue'
3+
24
import DsfrSelect from '../DsfrSelect.vue'
5+
6+
const selectedOption1 = ref(0)
7+
const selectedOption2 = ref(null)
8+
const selectedOption3 = ref('')
39
</script>
410

511
<template>
612
<div
713
class="flex flex-col"
814
>
915
<DsfrSelect
16+
v-model.number="selectedOption1"
1017
label="Label du select"
1118
:options="[1, 2, 3, 4, 5]"
1219
/>
20+
Select 1 : {{ selectedOption1 }} ({{ typeof selectedOption1 }})
1321
<DsfrSelect
14-
label="Label du select"
22+
v-model="selectedOption2"
23+
label="Label du select 1"
1524
description="Description du select"
1625
:options="['Value 1', 'Value 2', 'Value 3', 'Value 4', 'Value 5']"
1726
/>
27+
Select 2 : {{ selectedOption2 }} ({{ typeof selectedOption2 }})
1828
<DsfrSelect
19-
label="Label du select"
29+
v-model="selectedOption3"
30+
label="Label du select 3"
2031
border-bottom
2132
required
2233
:options="[
@@ -27,5 +38,6 @@ import DsfrSelect from '../DsfrSelect.vue'
2738
{ value: 'Value 5', text: 'Text 5' },
2839
]"
2940
/>
41+
Select 3 : {{ selectedOption3 }} ({{ typeof selectedOption3 }})
3042
</div>
3143
</template>

0 commit comments

Comments
 (0)