Files
IoTManagerWeb/src/widgets/Toggle.svelte

41 lines
1.2 KiB
Svelte
Raw Normal View History

2021-10-19 21:59:48 +08:00
<script>
export let widget;
export let toggleState = false;
export let wsPush = (ws, topic, status) => {};
2022-08-15 19:31:01 +02:00
$: widget.status, setValue();
2022-08-15 19:31:01 +02:00
function setValue() {
2022-08-15 19:31:01 +02:00
if (widget.status == "1") {
toggleState = true;
2022-08-15 19:31:01 +02:00
} else if (widget.status == "0") {
toggleState = false;
2022-08-15 19:31:01 +02:00
}
}
function changeValue() {
widget.sent = true;
if (toggleState) {
2022-08-15 19:31:01 +02:00
widget.status = "1";
} else {
widget.status = "0";
}
}
2021-10-19 21:59:48 +08:00
</script>
2021-12-28 23:55:14 +01:00
<div class="crd-itm-psn">
2022-02-11 00:22:41 +01:00
<div class="w-2/3">
2021-10-19 21:59:48 +08:00
<!-- svelte-ignore a11y-label-has-associated-control -->
2021-12-28 23:55:14 +01:00
<label class="wgt-dscr-stl">{!widget.descr ? "" : widget.descr}</label>
2021-10-19 21:59:48 +08:00
</div>
2022-02-11 00:22:41 +01:00
<div class="flex justify-end w-1/3">
2021-10-25 16:50:31 +07:00
<label for={widget.topic} class="items-center cursor-pointer">
<div class="relative">
<input bind:checked={toggleState} on:change={() => (changeValue(), wsPush(widget.ws, widget.topic, widget.status))} id={widget.topic} type="checkbox" class="sr-only" />
<div class="block {toggleState ? 'bg-blue-600' : 'bg-gray-600'} w-10 h-6 rounded-full shadow-lg" />
<div class="dot {widget.sent ? 'bg-red-300' : 'bg-gray-100'} absolute left-1 top-1 w-4 h-4 rounded-full transition shadow-lg" />
2021-10-25 16:50:31 +07:00
</div>
</label>
2021-10-19 21:59:48 +08:00
</div>
</div>