akaunting/resources/assets/js/components/AkauntingSwitch.vue
2022-12-30 15:00:46 +03:00

77 lines
2.2 KiB
Vue

<template>
<div class="xl:absolute w-12 xl:ltr:right-0 xl:rtl:left-0 xl:-top-12">
<label class="text-black text-sm font-medium mb-1 xl:hidden">{{ label }}</label>
<div class="relative full flex items-center cursor-pointer">
<input type="radio" :name="name" v-show="selected == '0'" @click="enabled = 1" value="1" id="enabled-1" v-model="selected" class="w-full h-full absolute right-0 z-20 opacity-0 cursor-pointer">
<input type="radio" :name="name" v-show="selected == '1'" @click="enabled = 0" value="0" id="enabled-0" v-model="selected" class="w-full h-full absolute left-0 z-20 opacity-0 cursor-pointer">
<div class="absolute left-1 top-1 bg-white w-5 h-5 rounded-full transition transform" :class="selected == '1' ? 'translate-x-full' : 'translate-x-0'"></div>
<div class="block w-full h-7 rounded-full transition transition-color" :class="selected == '1' ? 'bg-green' : 'bg-green-200'"></div>
</div>
</div>
</template>
<script>
export default {
name: 'akaunting-switch',
props: {
name: null,
value: {
type: [String, Number, Array, Object, Boolean],
default: '1',
description: "Selectbox selected value"
},
label: {
type: String,
description: "Selectbox selected label"
},
model: {
type: [String, Number, Array, Object, Boolean],
default: '',
description: "Selectbox selected model"
},
inputData: {
type: [String, Number, Array, Object, Boolean],
},
},
data() {
return {
enabled: 1,
selected: this.value,
}
},
methods: {
change() {
this.$emit('interface', this.selected);
this.$emit('change', this.selected);
}
},
mounted() {
this.$emit('interface', this.selected);
setTimeout(function() {
this.change();
}.bind(this), 800);
},
watch: {
value: function(val) {
this.selected = val;
},
selected: function(val) {
this.change();
},
}
}
</script>