Skip to content

Commit 17589f2

Browse files
Brett-S-OWBbenderl
andauthored
Koala-Theme: Plans - temporary mode warning, link to plan settings (#3147)
* Add warning text and settings link button * Add settings link * Add time charging plan settings link * update store time charging plans * Reuseable component for warning messages * update time plans with "BaseMessage" component * 1 warning message, update link button --------- Co-authored-by: Lutz Bender <github@lutz-bender.de>
1 parent 930b696 commit 17589f2

File tree

8 files changed

+178
-54
lines changed

8 files changed

+178
-54
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<template>
2+
<div
3+
v-if="showMessage"
4+
class="row q-mt-sm q-pa-sm text-white no-wrap cursor-pointer rounded-borders"
5+
:class="[{ 'items-center': collapsed }, messageClass]"
6+
@click="toggleCollapse"
7+
>
8+
<q-icon :name="iconName" size="sm" class="q-mr-xs" />
9+
<div :class="{ ellipsis: collapsed }">
10+
{{ message }}
11+
</div>
12+
</div>
13+
</template>
14+
15+
<script setup lang="ts">
16+
import { computed, ref } from 'vue';
17+
18+
const props = withDefaults(
19+
defineProps<{
20+
showMessage?: boolean;
21+
message: string;
22+
type?: 'info' | 'warning' | 'error';
23+
collapsed?: boolean;
24+
}>(),
25+
{
26+
collapsed: true,
27+
showMessage: true,
28+
},
29+
);
30+
31+
const collapsed = ref(props.collapsed);
32+
33+
const toggleCollapse = () => {
34+
collapsed.value = !collapsed.value;
35+
};
36+
37+
const messageClass = computed(() => {
38+
switch (props.type) {
39+
case 'warning':
40+
return 'bg-warning';
41+
case 'error':
42+
return 'bg-negative';
43+
default:
44+
return 'bg-primary';
45+
}
46+
});
47+
48+
const iconName = computed(() => {
49+
switch (props.type) {
50+
case 'warning':
51+
return 'warning';
52+
case 'error':
53+
return 'error';
54+
default:
55+
return 'info';
56+
}
57+
});
58+
</script>

packages/modules/web_themes/koala/source/src/components/ChargePointMessage.vue

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,22 @@
11
<template>
2-
<div
3-
v-if="showMessage"
4-
class="row q-mt-sm q-pa-sm text-white no-wrap cursor-pointer"
5-
:class="[{ 'items-center': collapsed }, messageClass]"
6-
style="border-radius: 10px"
7-
@click="toggleCollapse"
8-
>
9-
<q-icon :name="iconName" size="sm" class="q-mr-xs" />
10-
<div :class="{ ellipsis: collapsed }">
11-
{{ message }}
12-
</div>
13-
</div>
2+
<BaseMessage
3+
:show-message="showMessage"
4+
:message="message"
5+
:type="messageType"
6+
/>
147
</template>
158

169
<script setup lang="ts">
1710
import { useMqttStore } from 'src/stores/mqtt-store';
18-
import { computed, ref } from 'vue';
11+
import BaseMessage from './BaseMessage.vue';
12+
import { computed } from 'vue';
1913
2014
const props = defineProps<{
2115
chargePointId: number;
2216
faultMessage?: boolean;
2317
}>();
24-
2518
const mqttStore = useMqttStore();
26-
const collapsed = ref<boolean>(true);
2719
28-
const toggleCollapse = () => {
29-
collapsed.value = !collapsed.value;
30-
};
3120
3221
const showMessage = computed(() => {
3322
return state.value !== undefined && state.value !== 0;
@@ -39,24 +28,14 @@ const state = computed(() =>
3928
: -1,
4029
);
4130
42-
const message = computed(() =>
43-
props.faultMessage
31+
const message = computed(() => {
32+
const message = props.faultMessage
4433
? mqttStore.chargePointFaultMessage(props.chargePointId)
45-
: mqttStore.chargePointStateMessage(props.chargePointId),
46-
);
47-
48-
const messageClass = computed(() => {
49-
switch (state.value) {
50-
case 1:
51-
return 'bg-warning';
52-
case 2:
53-
return 'bg-negative';
54-
default:
55-
return 'bg-primary';
56-
}
34+
: mqttStore.chargePointStateMessage(props.chargePointId);
35+
return message ?? '';
5736
});
5837
59-
const iconName = computed(() => {
38+
const messageType = computed(() => {
6039
switch (state.value) {
6140
case 1:
6241
return 'warning';

packages/modules/web_themes/koala/source/src/components/ChargePointScheduledPlanDetails.vue

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<q-card>
2+
<q-card class="card-width">
33
<q-card-section>
44
<div class="row no-wrap">
55
<div class="text-h6 ellipsis" :title="planName.value">
@@ -8,6 +8,12 @@
88
<q-space />
99
<q-btn icon="close" flat round dense v-close-popup />
1010
</div>
11+
<BaseMessage
12+
:show-message="temporaryChargeModeActive"
13+
message="Temporärer Modus aktiv. Alle Planänderungen werden nach dem Abstecken verworfen."
14+
type="warning"
15+
:collapsed="false"
16+
/>
1117
</q-card-section>
1218
<q-separator />
1319
<q-card-section>
@@ -90,8 +96,7 @@
9096
/>
9197
</div>
9298
<div
93-
class="row q-mt-sm q-pa-sm text-white no-wrap items-center bg-primary"
94-
style="border-radius: 10px"
99+
class="row q-mt-sm q-pa-sm text-white no-wrap items-center bg-primary rounded-borders"
95100
>
96101
<q-icon name="info" size="sm" class="q-mr-xs" />
97102
<ChargePointScheduledPlanSummary
@@ -239,7 +244,7 @@
239244
color="positive"
240245
/>
241246
</div>
242-
<div class="row q-mt-md">
247+
<div class="row q-mt-lg">
243248
<q-btn
244249
size="sm"
245250
class="col"
@@ -248,6 +253,18 @@
248253
>Plan löschen</q-btn
249254
>
250255
</div>
256+
<div
257+
v-if="temporaryChargeModeActive && chargeTemplateId != null"
258+
class="row q-mt-md"
259+
>
260+
<q-btn
261+
size="sm"
262+
class="col charge-plan-link-button"
263+
:href="`/openWB/web/settings/#/VehicleConfiguration/charge_template/${chargeTemplateId ?? ''}`"
264+
><q-icon left size="xs" name="settings" />Persistente
265+
Ladeplan-Einstellungen</q-btn
266+
>
267+
</div>
251268
</q-card-section>
252269
</q-card>
253270
</template>
@@ -257,6 +274,7 @@ import { useMqttStore } from 'src/stores/mqtt-store';
257274
import { useQuasar } from 'quasar';
258275
import SliderStandard from './SliderStandard.vue';
259276
import ToggleStandard from './ToggleStandard.vue';
277+
import BaseMessage from './BaseMessage.vue';
260278
import { computed } from 'vue';
261279
import ChargePointScheduledPlanSummary from './ChargePointScheduledPlanSummary.vue';
262280
import { type ScheduledChargingPlan } from '../stores/mqtt-store-model';
@@ -433,14 +451,32 @@ const removeScheduledChargingPlan = (planId) => {
433451
);
434452
emit('close');
435453
};
454+
455+
const temporaryChargeModeActive = computed(
456+
() => mqttStore.temporaryChargeModeActive,
457+
);
458+
459+
const chargeTemplateId = computed(
460+
() =>
461+
mqttStore.chargePointConnectedVehicleChargeTemplate(props.chargePointId)
462+
.value?.id,
463+
);
436464
</script>
437465

438466
<style scoped>
467+
.card-width {
468+
max-width: 26em;
469+
}
439470
.q-btn-group .q-btn {
440471
min-width: 100px !important;
441472
font-size: 10px !important;
442473
}
443474
475+
.charge-plan-link-button {
476+
background-color: var(--q-charge-plan-link-button);
477+
color: white;
478+
}
479+
444480
.flex-grow {
445481
flex-grow: 1;
446482
}

packages/modules/web_themes/koala/source/src/components/ChargePointScheduledSettings.vue

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,11 @@
99
@click="addScheduledChargingPlan"
1010
/>
1111
</div>
12-
<div
12+
<BaseMessage
1313
v-if="plans.length === 0"
14-
class="row q-mt-sm q-pa-sm bg-primary text-white no-wrap message-text"
15-
color="primary"
16-
style="border-radius: 10px"
17-
>
18-
<q-icon name="info" size="sm" class="q-mr-xs" />
19-
Keine Ladeziele festgelegt.
20-
</div>
14+
message="Keine Zeitpläne vorhanden."
15+
type="info"
16+
/>
2117
<div v-else>
2218
<div v-for="plan in plans" :key="plan.id" class="row q-mt-sm">
2319
<ChargePointScheduledPlanButton
@@ -47,6 +43,7 @@ import { ref, computed } from 'vue';
4743
import { useMqttStore } from 'src/stores/mqtt-store';
4844
import ChargePointScheduledPlanButton from './ChargePointScheduledPlanButton.vue';
4945
import ChargePointScheduledPlanDetails from './ChargePointScheduledPlanDetails.vue';
46+
import BaseMessage from './BaseMessage.vue';
5047
import { Screen } from 'quasar';
5148
5249
const props = defineProps<{

packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingPlanDetails.vue

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<q-card class="rounded-borders-md">
2+
<q-card class="rounded-borders-md card-width">
33
<q-card-section>
44
<div class="row no-wrap">
55
<div class="text-h6 ellipsis" :title="planName.value">
@@ -8,6 +8,12 @@
88
<q-space />
99
<q-btn icon="close" flat round dense v-close-popup />
1010
</div>
11+
<BaseMessage
12+
:show-message="temporaryChargeModeActive"
13+
message="Temporärer Modus aktiv. Alle Planänderungen werden nach dem Abstecken verworfen."
14+
type="warning"
15+
:collapsed="false"
16+
/>
1117
</q-card-section>
1218
<q-separator />
1319
<q-card-section>
@@ -181,6 +187,18 @@
181187
>Plan löschen</q-btn
182188
>
183189
</div>
190+
<div
191+
v-if="temporaryChargeModeActive && chargeTemplateId != null"
192+
class="row q-mt-md"
193+
>
194+
<q-btn
195+
size="sm"
196+
class="col charge-plan-link-button"
197+
:href="`/openWB/web/settings/#/VehicleConfiguration/charge_template/${chargeTemplateId ?? ''}`"
198+
><q-icon left size="xs" name="settings" /> Persistente
199+
Ladeplan-Einstellungen</q-btn
200+
>
201+
</div>
184202
</q-card-section>
185203
</q-card>
186204
</template>
@@ -189,6 +207,7 @@
189207
import { useMqttStore } from 'src/stores/mqtt-store';
190208
import SliderStandard from './SliderStandard.vue';
191209
import ToggleStandard from './ToggleStandard.vue';
210+
import BaseMessage from './BaseMessage.vue';
192211
import { type TimeChargingPlan } from '../stores/mqtt-store-model';
193212
import { computed } from 'vue';
194213
@@ -298,18 +317,37 @@ const acChargingEnabled = computed(
298317
() => mqttStore.chargePointChargeType(props.chargePointId).value === 'AC',
299318
);
300319
320+
const temporaryChargeModeActive = computed(
321+
() => mqttStore.temporaryChargeModeActive,
322+
);
323+
324+
const chargeTemplateId = computed(
325+
() =>
326+
mqttStore.chargePointConnectedVehicleChargeTemplate(props.chargePointId)
327+
.value?.id,
328+
);
329+
301330
const removeTimeChargingPlan = (planId: number) => {
302331
mqttStore.removeTimeChargingPlanForChargePoint(props.chargePointId, planId);
303332
emit('close');
304333
};
305334
</script>
306335

307336
<style scoped>
337+
.card-width {
338+
max-width: 26em;
339+
}
340+
308341
.q-btn-group .q-btn {
309342
min-width: 100px !important;
310343
font-size: 10px !important;
311344
}
312345
346+
.charge-plan-link-button {
347+
background-color: var(--q-charge-plan-link-button);
348+
color: white;
349+
}
350+
313351
.flex-grow {
314352
flex-grow: 1;
315353
}

packages/modules/web_themes/koala/source/src/components/ChargePointTimeChargingSettings.vue

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,11 @@
2121
@click="addScheduledChargingPlan"
2222
/>
2323
</div>
24-
<div
24+
<BaseMessage
2525
v-if="plans.length === 0 && timeChargingEnabled"
26-
class="row q-mt-sm q-pa-sm bg-primary text-white no-wrap message-text"
27-
color="primary"
28-
style="border-radius: 10px"
29-
>
30-
<q-icon name="info" size="sm" class="q-mr-xs" />
31-
Keine Zeitpläne vorhanden.
32-
</div>
26+
message="Keine Zeitpläne vorhanden."
27+
type="info"
28+
/>
3329
<div v-else-if="timeChargingEnabled">
3430
<div v-for="(plan, index) in plans" :key="index" class="row q-mt-sm">
3531
<ChargePointTimeChargingPlanButton
@@ -61,6 +57,7 @@ import { computed, ref } from 'vue';
6157
import ChargePointTimeCharging from './ChargePointTimeCharging.vue';
6258
import ChargePointTimeChargingPlanButton from './ChargePointTimeChargingPlanButton.vue';
6359
import ChargePointTimeChargingPlanDetails from './ChargePointTimeChargingPlanDetails.vue';
60+
import BaseMessage from './BaseMessage.vue';
6461
import { Screen } from 'quasar';
6562
6663
const props = defineProps<{

0 commit comments

Comments
 (0)