From 67449ed79aeecee84bbcacbd84a6328c01ba16b0 Mon Sep 17 00:00:00 2001 From: Maschga <88616799+Maschga@users.noreply.github.com> Date: Mon, 28 Apr 2025 23:34:05 +0200 Subject: [PATCH] Chore: Typescript: Rewrite Loadpoints (#20859) Co-authored-by: Michael Geers --- .../Energyflow/Energyflow.stories.ts | 170 ++++++++++++++++-- assets/js/components/Helper/LabelAndValue.vue | 8 +- .../Loadpoints/Loadpoint.stories.js | 74 -------- .../Loadpoints/Loadpoint.stories.ts | 78 ++++++++ assets/js/components/Loadpoints/Loadpoint.vue | 78 ++++---- .../Loadpoints/Loadpoints.stories.js | 53 ------ .../Loadpoints/Loadpoints.stories.ts | 57 ++++++ .../js/components/Loadpoints/Loadpoints.vue | 64 ++++--- .../js/components/Loadpoints/Mode.stories.js | 44 ----- .../js/components/Loadpoints/Mode.stories.ts | 48 +++++ assets/js/components/Loadpoints/Mode.vue | 27 +-- .../components/Loadpoints/Phases.stories.js | 94 ---------- .../components/Loadpoints/Phases.stories.ts | 95 ++++++++++ assets/js/components/Loadpoints/Phases.vue | 29 +-- .../js/components/Loadpoints/SessionInfo.vue | 26 +-- .../Loadpoints/SettingsBatteryBoost.vue | 14 +- .../components/Loadpoints/SettingsButton.vue | 7 +- .../components/Loadpoints/SettingsModal.vue | 66 ++++--- assets/js/components/Loadpoints/session.ts | 2 +- assets/js/types/evcc.ts | 27 +++ 20 files changed, 636 insertions(+), 425 deletions(-) delete mode 100644 assets/js/components/Loadpoints/Loadpoint.stories.js create mode 100644 assets/js/components/Loadpoints/Loadpoint.stories.ts delete mode 100644 assets/js/components/Loadpoints/Loadpoints.stories.js create mode 100644 assets/js/components/Loadpoints/Loadpoints.stories.ts delete mode 100644 assets/js/components/Loadpoints/Mode.stories.js create mode 100644 assets/js/components/Loadpoints/Mode.stories.ts delete mode 100644 assets/js/components/Loadpoints/Phases.stories.js create mode 100644 assets/js/components/Loadpoints/Phases.stories.ts diff --git a/assets/js/components/Energyflow/Energyflow.stories.ts b/assets/js/components/Energyflow/Energyflow.stories.ts index 93e831a50..91c212031 100644 --- a/assets/js/components/Energyflow/Energyflow.stories.ts +++ b/assets/js/components/Energyflow/Energyflow.stories.ts @@ -23,9 +23,30 @@ GridAndPV.args = { gridPower: -2300, homePower: 800, loadpointsCompact: [ - { power: 1000, icon: "car", charging: true, title: "Garage" }, - { power: 1000, icon: "bike", charging: true, title: "Garage" }, - { power: 2200, icon: "car", charging: true, title: "Garage" }, + { + power: 1000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1000, + connected: true, + }, + { + power: 1000, + icon: "bike", + charging: true, + title: "Garage", + chargePower: 1000, + connected: true, + }, + { + power: 2200, + icon: "car", + charging: true, + title: "Garage", + chargePower: 2200, + connected: true, + }, ], tariffGrid: 0.25, tariffFeedIn: 0.08, @@ -61,7 +82,16 @@ BatteryCharging.args = { pvPower: 5000, gridPower: -1300, homePower: 800, - loadpointsCompact: [{ power: 1400, icon: "car", charging: true, title: "Garage" }], + loadpointsCompact: [ + { + power: 1400, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1400, + connected: true, + }, + ], batteryPower: -1500, batterySoc: 75, }; @@ -86,8 +116,22 @@ BatteryThresholds.args = { pvPower: 8700, gridPower: -500, loadpointsCompact: [ - { power: 5000, icon: "car", charging: true, title: "Garage" }, - { power: 2500, icon: "bus", charging: true, title: "Garage" }, + { + power: 5000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 5000, + connected: true, + }, + { + power: 2500, + icon: "bus", + charging: true, + title: "Garage", + chargePower: 2500, + connected: true, + }, ], batteryPower: -700, batterySoc: 95, @@ -102,8 +146,22 @@ PVThresholds.args = { gridPower: 6500, homePower: 1000, loadpointsCompact: [ - { power: 5000, icon: "car", charging: true, title: "Garage" }, - { power: 1600, icon: "car", charging: true, title: "Garage" }, + { + power: 5000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 5000, + connected: true, + }, + { + power: 1600, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1600, + connected: true, + }, ], batteryPower: 800, batterySoc: 76, @@ -118,10 +176,38 @@ GridOnly.args = { gridPower: 6500, homePower: 1000, loadpointsCompact: [ - { power: 5500, icon: "car", charging: true, title: "Garage" }, - { power: 0, icon: "car", charging: false, title: "Garage" }, - { power: 0, icon: "car", charging: false, title: "Garage" }, - { power: 0, icon: "car", charging: false, title: "Garage" }, + { + power: 5500, + icon: "car", + charging: true, + title: "Garage", + chargePower: 5500, + connected: true, + }, + { + power: 0, + icon: "car", + charging: false, + title: "Garage", + chargePower: 0, + connected: false, + }, + { + power: 0, + icon: "car", + charging: false, + title: "Garage", + chargePower: 0, + connected: false, + }, + { + power: 0, + icon: "car", + charging: false, + title: "Garage", + chargePower: 0, + connected: false, + }, ], batteryPower: 0, batterySoc: 0, @@ -150,9 +236,30 @@ CO2.args = { gridPower: -2300, homePower: 800, loadpointsCompact: [ - { power: 1000, icon: "car", charging: true, title: "Garage" }, - { power: 1000, icon: "car", charging: true, title: "Garage" }, - { power: 2200, icon: "car", charging: true, title: "Garage" }, + { + power: 1000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1000, + connected: true, + }, + { + power: 1000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1000, + connected: true, + }, + { + power: 2200, + icon: "car", + charging: true, + title: "Garage", + chargePower: 2200, + connected: true, + }, ], tariffGrid: 0.25, tariffFeedIn: 0.08, @@ -168,7 +275,16 @@ UnknownInput.args = { pvConfigured: true, pvPower: 2000, gridPower: -2000, - loadpointsCompact: [{ power: 1000, icon: "car", charging: true, title: "Garage" }], + loadpointsCompact: [ + { + power: 1000, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1000, + connected: true, + }, + ], }; export const UnknownInputFill = Template.bind({}); @@ -188,7 +304,16 @@ UnknownOutput.args = { pvConfigured: true, pvPower: 3000, gridPower: -1000, - loadpointsCompact: [{ power: 1700, icon: "car", charging: true, title: "Garage" }], + loadpointsCompact: [ + { + power: 1700, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1700, + connected: true, + }, + ], }; export const UnknownOutputLessThan10Percent = Template.bind({}); @@ -197,5 +322,14 @@ UnknownOutputLessThan10Percent.args = { pvConfigured: true, pvPower: 3000, gridPower: -1000, - loadpointsCompact: [{ power: 1800, icon: "car", charging: true, title: "Garage" }], + loadpointsCompact: [ + { + power: 1800, + icon: "car", + charging: true, + title: "Garage", + chargePower: 1800, + connected: true, + }, + ], }; diff --git a/assets/js/components/Helper/LabelAndValue.vue b/assets/js/components/Helper/LabelAndValue.vue index 794a5021b..5a57d66d3 100644 --- a/assets/js/components/Helper/LabelAndValue.vue +++ b/assets/js/components/Helper/LabelAndValue.vue @@ -6,7 +6,11 @@

- + {{ value }}
{{ extraValue || " " }} @@ -26,7 +30,7 @@ export default defineComponent({ components: { AnimatedNumber }, props: { label: String, - value: [Number], + value: [Number, String], valueFmt: Function as PropType<(n: number) => string>, extraValue: String, align: { type: String, default: "center" }, diff --git a/assets/js/components/Loadpoints/Loadpoint.stories.js b/assets/js/components/Loadpoints/Loadpoint.stories.js deleted file mode 100644 index 040e0e676..000000000 --- a/assets/js/components/Loadpoints/Loadpoint.stories.js +++ /dev/null @@ -1,74 +0,0 @@ -import Loadpoint from "./Loadpoint.vue"; - -export default { - title: "Loadpoints/Loadpoint", - component: Loadpoint, - parameters: { - layout: "centered", - }, -}; - -const baseState = { - id: 0, - pvConfigured: true, - chargePower: 2800, - chargedEnergy: 11e3, - chargeDuration: 95 * 60, - vehicleTitle: "Mein Auto", - vehicleName: "meinauto", - enabled: true, - connected: true, - mode: "pv", - charging: true, - vehicleSoc: 66, - limitSoc: 90, - offeredCurrent: 7, - minCurrent: 6, - maxCurrent: 16, - activePhases: 2, -}; - -const createStory = (props) => { - const story = (args) => ({ - components: { Loadpoint }, - setup() { - return { args }; - }, - template: '', - }); - story.args = { ...baseState, ...props }; - return story; -}; - -export const Standard = createStory({}); - -export const WithoutSoc = createStory({ - vehicleTitle: "", - vehicleName: "", -}); - -export const Idle = createStory({ - enabled: false, - connected: false, - vehicleName: "", - mode: "off", - charging: false, - offeredCurrent: 0, -}); - -export const DisabledLongTitle = createStory({ - title: "Charging point with a very very very long title!!!1!", - remoteDisabled: "soft", - remoteDisabledSource: "Sunny Home Manager", - mode: "now", - enabled: false, - charging: false, - chargePower: 0, -}); - -export const ChargerIconNoVehicle = createStory({ - chargerIcon: "heater", - title: "Heating device with long name", - mode: "now", - chargerFeatureIntegratedDevice: true, -}); diff --git a/assets/js/components/Loadpoints/Loadpoint.stories.ts b/assets/js/components/Loadpoints/Loadpoint.stories.ts new file mode 100644 index 000000000..a72312d1d --- /dev/null +++ b/assets/js/components/Loadpoints/Loadpoint.stories.ts @@ -0,0 +1,78 @@ +import Loadpoint from "./Loadpoint.vue"; +import type { Meta, StoryFn } from "@storybook/vue3"; + +export default { + title: "Loadpoints/Loadpoint", + component: Loadpoint, + parameters: { + layout: "centered", + }, +} as Meta; + +const baseState = { + id: 0, + pvConfigured: true, + chargePower: 2800, + chargedEnergy: 11e3, + chargeDuration: 95 * 60, + vehicleTitle: "Mein Auto", + vehicleName: "meinauto", + enabled: true, + connected: true, + mode: "pv", + charging: true, + vehicleSoc: 66, + limitSoc: 90, + offeredCurrent: 7, + minCurrent: 6, + maxCurrent: 16, + activePhases: 2, +}; + +const Template: StoryFn = (args) => { + const story = () => ({ + components: { Loadpoint }, + setup() { + return { args }; + }, + template: '', + }); + story.args = { ...baseState, ...args }; + return story; +}; + +export const Standard = Template.bind({}); + +export const WithoutSoc = Template.bind({}); +WithoutSoc.args = { + vehicleName: "", +}; + +export const Idle = Template.bind({}); +Idle.args = { + enabled: false, + connected: false, + vehicleName: "", + mode: "off", + charging: false, + offeredCurrent: 0, +}; + +export const DisabledLongTitle = Template.bind({}); +DisabledLongTitle.args = { + title: "Charging point with a very very very long title!!!1!", + remoteDisabled: "soft", + remoteDisabledSource: "Sunny Home Manager", + mode: "now", + enabled: false, + charging: false, + chargePower: 0, +}; + +export const ChargerIconNoVehicle = Template.bind({}); +ChargerIconNoVehicle.args = { + chargerIcon: "heater", + title: "Heating device with long name", + mode: "now", + chargerFeatureIntegratedDevice: true, +}; diff --git a/assets/js/components/Loadpoints/Loadpoint.vue b/assets/js/components/Loadpoints/Loadpoint.vue index 1261fc5be..14360c279 100644 --- a/assets/js/components/Loadpoints/Loadpoint.vue +++ b/assets/js/components/Loadpoints/Loadpoint.vue @@ -72,7 +72,8 @@ @@ -90,12 +91,12 @@
-