DigitalConsumer.FixMyGlass/src/common-components/dropdown-question/dropdown-question.vue
2022-02-24 13:24:02 -05:00

85 lines
2.1 KiB
Vue

<template>
<div class="dropdown-question">
<label :for="inputId" class="form-label">{{labelText}}</label>
<select v-model="selectedOption"
class="form-select"
aria-label="Default select example"
:id="inputId"
:aria-disabled="isDisabled"
:disabled="isDisabled"
:aria-required="isRequired">
<option v-for="(value, name, index) in options" :value="name" :key="index">
{{ value }}
</option>
</select>
<p class="mt-1 mb-0">There has been an error!</p>
</div>
</template>
<script>
import { useField } from "vee-validate";
export default {
name: "dropdownQuestion",
props: {
modelValue: String,
labelText: String,
inputId: String,
options: {
type: Object,
required: true
},
},
data() {
},
computed: {
selectedOption: {
get: function() {
return this.modelValue;
},
set: function(newValue) {
this.$emit("update:modelValue", newValue);
}
},
},
};
</script>
<style lang="scss">
.dropdown-question {
.form-label {
margin-bottom: .25rem;
}
.form-select {
color: $gray-500;
background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 8.89' xml:space='preserve'%3e%3cpath d='M8 8.89c-.24 0-.46-.09-.63-.26L.26 1.53a.901.901 0 0 1 0-1.27C.43.1.66 0 .9 0s.47.1.64.26L8 6.74 14.47.27c.17-.17.4-.27.64-.27s.47.1.63.27c.17.17.26.4.26.64s-.1.47-.27.63l-7.1 7.09a.86.86 0 0 1-.63.26z' fill='%231474a2'/%3e%3c/svg%3e");
border: 1px solid $gray-500;
border-radius: .5rem;
min-height: 3rem;
option[selected] {
color: $gray-500;
background-color: red;
}
&:focus,
&:focus-visible {
box-shadow: 0 0 0 2px $blue;
}
&:disabled,
&.disabled {
background-color: $gray-100;
filter: grayscale(100%);
&:hover {
box-shadow: 0 0 0 4px transparent;
border: 1px solid $gray-500;
}
}
&:hover {
border: 1px solid transparent;
box-shadow: 0 0 0 4px $blue-300;
}
}
}
</style>