evcc-io/assets/js/components/VehicleOptions.vue
andig 54321c0cf7
Add configuration api (#6035)
Co-authored-by: Michael Geers <michael@geers.tv>
2023-02-08 11:29:27 +01:00

84 lines
1.9 KiB
Vue

<template>
<div>
<div
:id="dropdownId"
role="button"
tabindex="0"
data-bs-toggle="dropdown"
aria-expanded="false"
>
<slot />
</div>
<ul class="dropdown-menu dropdown-menu-start" :aria-labelledby="dropdownId">
<li>
<h6 class="dropdown-header">{{ $t("main.vehicle.changeVehicle") }}</h6>
</li>
<li v-for="vehicle in vehicles" :key="vehicle">
<button type="button" class="dropdown-item" @click="changeVehicle(vehicle.id)">
{{ vehicle.title }}
</button>
</li>
<li v-if="!isUnknown">
<button type="button" class="dropdown-item" @click="removeVehicle()">
{{ $t("main.vehicle.unknown") }}
</button>
</li>
<div v-if="$hiddenFeatures()">
<div class="dropdown-divider"></div>
<li>
<h6 class="dropdown-header">{{ $t("main.vehicle.moreActions") }}</h6>
</li>
<li>
<button type="button" class="dropdown-item" @click="addVehicle">
{{ $t("main.vehicle.addVehicle") }} 🧪
</button>
</li>
</div>
</ul>
</div>
</template>
<script>
import "@h2d2/shopicons/es/filled/options";
import Dropdown from "bootstrap/js/dist/dropdown";
import Modal from "bootstrap/js/dist/modal";
export default {
name: "VehicleOptions",
props: {
id: [String, Number],
vehicles: Array,
isUnknown: Boolean,
},
emits: ["change-vehicle", "remove-vehicle", "add-vehicle"],
computed: {
dropdownId() {
return `vehicleOptionsDropdown${this.id}`;
},
},
mounted() {
this.dropdown = new Dropdown(document.getElementById(this.dropdownId));
},
unmounted() {
this.dropdown?.dispose();
},
methods: {
changeVehicle(index) {
this.$emit("change-vehicle", index + 1);
},
removeVehicle() {
this.$emit("remove-vehicle");
},
addVehicle() {
this.$emit("remove-vehicle");
const modal = Modal.getOrCreateInstance(
document.getElementById("vehicleSettingsModal")
);
modal.show();
},
},
};
</script>
<style></style>