@@ -576,7 +575,7 @@ import FormRow from "./FormRow.vue";
import PropertyField from "./PropertyField.vue";
import SelectGroup from "../Helper/SelectGroup.vue";
import api from "@/api";
-import GenericModal, { type ModalFade } from "../Helper/GenericModal.vue";
+import GenericModal from "../Helper/GenericModal.vue";
import deepClone from "@/utils/deepClone";
import deepEqual from "@/utils/deepEqual";
import formatter, { POWER_UNIT } from "@/mixins/formatter";
@@ -584,6 +583,7 @@ import EditIcon from "../MaterialIcon/Edit.vue";
import NewDeviceButton from "./NewDeviceButton.vue";
import InvalidReferenceAlert from "./InvalidReferenceAlert.vue";
import { handleError, customChargerName } from "./DeviceModal";
+import { getModal, openModal, replaceModal, closeModal } from "@/configModal";
import {
LOADPOINT_TYPE,
type DeviceType,
@@ -637,11 +637,8 @@ export default {
},
mixins: [formatter],
props: {
- id: Number,
- name: String,
vehicleOptions: { type: Array as PropType
, default: () => [] },
loadpointCount: { type: Number, default: 0 },
- fade: String as PropType,
chargers: { type: Array as PropType, default: () => [] },
chargerValues: { type: Object, default: () => {} },
meters: { type: Array as PropType, default: () => [] },
@@ -651,12 +648,11 @@ export default {
default: () => false,
},
},
- emits: ["updated", "openMeterModal", "openChargerModal", "opened"],
+ emits: ["changed"],
data() {
return {
isModalVisible: false,
saving: false,
- selectedType: null as LoadpointType | null,
values: deepClone(defaultValues) as ConfigLoadpoint,
chargerPower: "11kw",
solarMode: "default",
@@ -665,6 +661,12 @@ export default {
};
},
computed: {
+ id(): number | undefined {
+ return getModal("loadpoint")?.id;
+ },
+ selectedType(): LoadpointType | undefined {
+ return getModal("loadpoint")?.type as LoadpointType | undefined;
+ },
modalTitle() {
if (this.isNew) {
return this.$t(`config.loadpoint.titleAdd.${this.loadpointType || "unknown"}`);
@@ -814,7 +816,6 @@ export default {
},
methods: {
reset() {
- this.selectedType = null;
this.values = deepClone(defaultValues);
this.updatePhases();
},
@@ -829,13 +830,17 @@ export default {
console.error(e);
}
},
+ async emitChanged(action: "added" | "updated" | "removed") {
+ const result = { action };
+ await closeModal(result);
+ this.$emit("changed", result);
+ },
async update() {
this.saving = true;
try {
const values = deepClone(this.values);
await api.put(`config/loadpoints/${this.id}`, values);
- this.$emit("updated");
- (this.$refs["modal"] as any).close();
+ this.emitChanged("updated");
} catch (e) {
handleError(e, "update failed");
}
@@ -844,8 +849,7 @@ export default {
async remove() {
try {
await api.delete(`config/loadpoints/${this.id}`);
- this.$emit("updated");
- (this.$refs["modal"] as any).close();
+ this.emitChanged("removed");
} catch (e) {
console.error(e);
alert("delete failed");
@@ -855,8 +859,7 @@ export default {
this.saving = true;
try {
await api.post("config/loadpoints", this.values);
- this.$emit("updated");
- (this.$refs["modal"] as any).close();
+ this.emitChanged("added");
} catch (e) {
handleError(e, "create failed");
}
@@ -865,25 +868,32 @@ export default {
onOpen() {
this.isModalVisible = true;
},
- onOpened() {
- this.$emit("opened");
- },
onClose() {
this.isModalVisible = false;
},
- editCharger() {
- this.$emit("openChargerModal", this.values.charger, this.loadpointType);
+ async editCharger() {
+ const charger = this.chargers.find((c) => c.name === this.values.charger);
+ const result = await openModal("charger", {
+ id: charger?.id,
+ type: this.loadpointType || undefined,
+ });
+ if (result.action === "added" && result.name) {
+ this.values.charger = result.name;
+ } else if (result.action === "removed") {
+ this.values.charger = "";
+ }
},
- editMeter() {
- this.$emit("openMeterModal", this.values.meter);
- },
- // called externally
- setMeter(meter: string) {
- this.values.meter = meter;
- },
- // called externally
- setCharger(charger: string) {
- this.values.charger = charger;
+ async editMeter() {
+ const meter = this.meters.find((m) => m.name === this.values.meter);
+ const result = await openModal("meter", {
+ id: meter?.id,
+ type: "charge",
+ });
+ if (result.action === "added" && result.name) {
+ this.values.meter = result.name;
+ } else if (result.action === "removed") {
+ this.values.meter = "";
+ }
},
updateChargerPower() {
const { minCurrent, maxCurrent } = this.values;
@@ -919,7 +929,7 @@ export default {
}
},
selectType(type: LoadpointType) {
- this.selectedType = type;
+ replaceModal("loadpoint", { id: this.id, type });
},
},
};
diff --git a/assets/js/components/Config/MessagingModal.vue b/assets/js/components/Config/MessagingModal.vue
index 34ae1167b..69dcaa7f6 100644
--- a/assets/js/components/Config/MessagingModal.vue
+++ b/assets/js/components/Config/MessagingModal.vue
@@ -1,13 +1,12 @@
diff --git a/assets/js/components/Config/MeterModal.vue b/assets/js/components/Config/MeterModal.vue
index fc64e9003..fd5d6bb43 100644
--- a/assets/js/components/Config/MeterModal.vue
+++ b/assets/js/components/Config/MeterModal.vue
@@ -2,9 +2,8 @@
emitChanged('added', name)"
+ @updated="() => emitChanged('updated')"
+ @removed="() => emitChanged('removed')"
@close="handleClose"
>
-
+
- {{ $t(`config.${meterType}.description`) }}
+ {{ $t(`config.${selectedType}.description`) }}
@@ -72,7 +71,7 @@
/>
@@ -90,14 +89,13 @@