Config UI: fix default for required choice params (#28935)

This commit is contained in:
Michael Geers 2026-04-08 17:24:08 +02:00 • committed by GitHub
parent 80900fd648
commit 462dbd0def
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 11 additions and 12 deletions

View file

@ -68,6 +68,7 @@ export type ApiData = {
icon?: string;
usage?: MeterTemplateUsage;
title?: string;
priority?: number;
identifiers?: string[];
[key: string]: any;
};

View file

@ -114,7 +114,6 @@
v-model="values.defaultMode"
type="Choice"
class="w-100"
required
:choice="[
{ key: '', name: '---' },
{ key: 'off', name: $t('main.mode.off') },
@ -302,8 +301,8 @@
type="Choice"
size="w-100"
class="me-2"
:choice="priorityOptions"
required
:choice="priorityOptions"
/>
</FormRow>
@ -435,7 +434,6 @@
type="Choice"
class="me-2"
:choice="circuitOptions"
required
/>
</FormRow>
</div>
@ -465,7 +463,6 @@
type="Choice"
class="me-2"
:choice="allVehicleOptions"
required
/>
</FormRow>
@ -744,7 +741,6 @@ export default {
name: string;
}[];
result[0]!.name = "0 (default)";
result[0]!.key = undefined;
result[10]!.name = "10 (highest)";
return result;
},

View file

@ -51,9 +51,10 @@
v-model="value"
class="form-select"
:class="inputClasses"
:required="required"
:disabled="disabled"
>
<option v-if="!required" value="" :disabled="disabled">---</option>
<option v-if="!required || !modelValue" value="" :disabled="disabled">---</option>
<template v-for="({ key, name }, idx) in selectOptions">
<option
v-if="key !== null && name !== null"
@ -304,9 +305,8 @@ export default {
},
value: {
get() {
// use first option if no value is set
if (this.selectOptions.length > 0 && !this.modelValue) {
return this.required ? this.selectOptions[0].key : "";
if (this.select && this.modelValue == null) {
return "";
}
if (this.scale) {

View file

@ -162,6 +162,7 @@ import { getModal } from "@/configModal";
const initialValues = {
type: ConfigType.Template,
icon: "car",
priority: 0,
deviceProduct: undefined,
yaml: undefined,
template: null,
@ -206,7 +207,6 @@ export default defineComponent({
(_, i) => ({ key: i, name: `${i}` })
);
result[0]!.name = "0 (default)";
result[0]!.key = undefined;
result[10]!.name = "10 (highest)";
return result;
},
@ -258,6 +258,7 @@ export default defineComponent({
if (values.type === ConfigType.Custom) {
delete data.icon;
delete data.title;
delete data.priority;
}
if (Array.isArray(data.identifiers)) {
data.identifiers = data.identifiers.map((i) => i.trim()).filter((i) => i);

View file

@ -87,6 +87,7 @@ test.describe("boost", async () => {
await lp1.getByTestId("mode").getByRole("button", { name: "Solar", exact: true }).click();
await lp1.getByTestId("loadpoint-settings-button").last().click();
const modal = page.getByTestId("loadpoint-settings-modal").first();
await expectModalVisible(modal);
await modal.getByTestId("battery-boost-limit").selectOption("0 %");
await modal.getByLabel("Close").click();
await expectModalHidden(modal);

View file

@ -156,7 +156,7 @@ test.describe("charging loadpoint", async () => {
// second loadpoint: increase priority
await page.getByTestId("loadpoint").nth(1).getByRole("button", { name: "edit" }).click();
await expectModalVisible(lpModal);
await expect(lpModal.getByLabel("Priority")).toHaveValue("0 (default)");
await expect(lpModal.getByLabel("Priority")).toHaveValue("0");
await lpModal.getByLabel("Priority").selectOption("1");
await lpModal.getByRole("button", { name: "Save" }).click();
await expectModalHidden(lpModal);
@ -182,7 +182,7 @@ test.describe("charging loadpoint", async () => {
// check priorities
await page.getByTestId("loadpoint").nth(1).getByRole("button", { name: "edit" }).click();
await expectModalVisible(lpModal);
await expect(lpModal.getByLabel("Priority")).toHaveValue("0 (default)");
await expect(lpModal.getByLabel("Priority")).toHaveValue("0");
});
test("vehicle", async ({ page }) => {