refactor: toggle button disable

This commit is contained in:
puriphatt 2024-08-13 08:55:49 +00:00
parent 0869ff10e0
commit 50b63d4eca

View file

@ -1,19 +1,25 @@
<script lang="ts" setup> <script lang="ts" setup>
defineEmits<{ const emit = defineEmits<{
(e: 'click'): void; (e: 'click'): void;
}>(); }>();
defineProps<{ const props = defineProps<{
twoWay?: boolean; twoWay?: boolean;
color?: string; color?: string;
disable?: boolean;
}>(); }>();
const model = defineModel<boolean>({ default: false }); const model = defineModel<boolean>({ default: false });
function handleClick() {
if (props.disable) return;
emit('click');
}
</script> </script>
<template> <template>
<label class="switch" @click="$emit('click')"> <label class="switch" @click.stop="handleClick">
<input type="checkbox" :disabled="twoWay" v-model="model" /> <input type="checkbox" :disabled="twoWay || disable" v-model="model" />
<div class="slider round"></div> <div class="slider round" :class="{ disable: disable }"></div>
</label> </label>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -38,6 +44,11 @@ const model = defineModel<boolean>({ default: false });
background-color: hsl(var(--text-mute)); background-color: hsl(var(--text-mute));
-webkit-transition: 0.3s; -webkit-transition: 0.3s;
transition: 0.3s; transition: 0.3s;
&.disable {
cursor: not-allowed !important;
background-color: var(--stone-4);
}
} }
.slider:before { .slider:before {
@ -54,6 +65,10 @@ const model = defineModel<boolean>({ default: false });
input:checked + .slider { input:checked + .slider {
background-color: hsl(var(--positive-bg)); background-color: hsl(var(--positive-bg));
&.disable {
background-color: var(--stone-4);
}
} }
input:focus + .slider { input:focus + .slider {