platypush/platypush/backend/http/webapp/src/components/panels/Switches/Mixin.vue

82 lines
1.5 KiB
Vue

<script>
import Utils from "@/Utils";
export default {
name: "SwitchesMixin",
mixins: [Utils],
props: {
pluginName: {
type: String,
required: true,
},
bus: {
type: Object,
required: true,
},
config: {
type: Object,
default: () => { return {} },
},
selected: {
type: Boolean,
default: false,
}
},
data() {
return {
loading: false,
initialized: false,
selectedDevice: null,
devices: {},
}
},
methods: {
onRefreshEvent(pluginName) {
if (pluginName !== this.pluginName)
return
this.refresh()
},
async toggle(device) {
const response = await this.request(`${this.pluginName}.toggle`, {device: device})
this.devices[device].on = response.on
},
async refresh() {
this.loading = true
try {
this.devices = (await this.request(`${this.pluginName}.switch_status`)).reduce((obj, device) => {
const name = device.name?.length ? device.name : device.id
obj[name] = device
return obj
}, {})
} finally {
this.loading = false
}
}
},
mounted() {
this.$watch(() => this.selected, (newValue) => {
if (newValue && !this.initialized) {
this.refresh()
this.initialized = true
}
})
this.bus.on('refresh', this.onRefreshEvent)
},
unmounted() {
this.bus.off('refresh', this.onRefreshEvent)
},
}
</script>