yunohost-admin/app/src/components/AdressInputSelect.vue

80 lines
2 KiB
Vue
Raw Normal View History

<template>
2020-10-28 16:49:43 +01:00
<b-input-group v-bind="$attrs">
<input-item
2020-08-03 19:32:53 +02:00
:id="id" :placeholder="placeholder"
2020-10-28 16:49:43 +01:00
:state="state" :aria-describedby="id + 'local-part-desc'"
v-model="value.localPart"
v-on="listeners"
/>
<b-input-group-append>
2020-10-28 16:49:43 +01:00
<b-input-group-text>{{ value.separator }}</b-input-group-text>
</b-input-group-append>
<b-input-group-append>
2020-10-28 16:49:43 +01:00
<select-item
v-model="value.domain"
:choices="choices"
:aria-describedby="id + 'domain-desc'"
/>
</b-input-group-append>
2020-10-28 16:49:43 +01:00
<span class="sr-only" :id="id + 'local-part-desc'">
{{ localPartDesc || $t('user_mail_local_part_description') }}
</span>
<span class="sr-only" :id="id + 'domain-desc'">
{{ domainDesc || $t('user_mail_domain_description') }}
</span>
</b-input-group>
</template>
<script>
export default {
2020-08-03 19:32:53 +02:00
name: 'AdressInputSelect',
2020-10-28 16:49:43 +01:00
inheritAttrs: false,
props: {
// `value` is actually passed thru the `v-model` directive
2020-10-28 16:49:43 +01:00
value: { type: Object, required: true },
choices: { type: Array, required: true },
2020-08-03 19:32:53 +02:00
placeholder: { type: String, default: null },
id: { type: String, default: null },
state: { type: null, default: null },
2020-10-28 16:49:43 +01:00
localPartDesc: { type: String, default: null },
domainDesc: { type: String, default: null }
},
computed: {
listeners: function () {
return Object.assign({},
// Forwards all parent events listeners
this.$listeners,
// Overwrite input behavior so this component can work with v-model
{
input: (event) => {
this.$parent.$emit('touch')
this.$emit('input', this.value)
},
blur: event => {
this.$parent.$emit('touch')
this.$emit('blur', this.value)
}
}
)
}
}
}
</script>
2020-08-07 19:04:22 +02:00
<style lang="scss" scoped>
.input-group-append ~ .input-group-append {
2020-10-28 16:49:43 +01:00
flex-basis: 40%;
2020-08-07 19:04:22 +02:00
}
select {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
</style>