blob: 5248efce87a68290cfdadce0cf4d057125c64f8f [file] [log] [blame]
Sukanya Pandey9055d982020-03-31 17:37:53 +05301<template>
2 <b-container fluid="xl">
Sandeepa Singh6dba4be2021-07-28 15:25:14 +05303 <page-title :description="$t('pagePower.description')" />
Sukanya Pandey9055d982020-03-31 17:37:53 +05304
5 <b-row>
6 <b-col sm="8" md="6" xl="12">
7 <dl>
Sandeepa Singh6dba4be2021-07-28 15:25:14 +05308 <dt>{{ $t('pagePower.powerConsumption') }}</dt>
Sukanya Pandey9055d982020-03-31 17:37:53 +05309 <dd>
10 {{
11 powerConsumptionValue
12 ? `${powerConsumptionValue} W`
13 : $t('global.status.notAvailable')
14 }}
15 </dd>
16 </dl>
17 </b-col>
18 </b-row>
19
20 <b-form @submit.prevent="submitForm">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020021 <b-form-group :disabled="loading">
jason westoverd36ac8a2025-11-03 20:58:59 -060022 <b-row class="mb-3">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020023 <b-col sm="8" md="6" xl="12">
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053024 <b-form-group :label="$t('pagePower.powerCapSettingLabel')">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020025 <b-form-checkbox
26 v-model="isPowerCapFieldEnabled"
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053027 data-test-id="power-checkbox-togglePowerCapField"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020028 name="power-cap-setting"
29 >
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053030 {{ $t('pagePower.powerCapSettingData') }}
Mateusz Gapski471f2e02020-07-27 14:43:26 +020031 </b-form-checkbox>
32 </b-form-group>
33 </b-col>
34 </b-row>
Sukanya Pandey9055d982020-03-31 17:37:53 +053035
jason westoverd36ac8a2025-11-03 20:58:59 -060036 <b-row class="mb-3">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020037 <b-col sm="8" md="6" xl="3">
38 <b-form-group
39 id="input-group-1"
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053040 :label="$t('pagePower.powerCapLabel')"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020041 label-for="input-1"
42 >
43 <b-form-text id="power-help-text">
44 {{
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053045 $t('pagePower.powerCapLabelTextInfo', {
Mateusz Gapski471f2e02020-07-27 14:43:26 +020046 min: 1,
Derick Montague602e98a2020-10-21 16:20:00 -050047 max: 10000,
Mateusz Gapski471f2e02020-07-27 14:43:26 +020048 })
49 }}
50 </b-form-text>
Sukanya Pandey9055d982020-03-31 17:37:53 +053051
Mateusz Gapski471f2e02020-07-27 14:43:26 +020052 <b-form-input
53 id="input-1"
54 v-model.number="powerCapValue"
55 :disabled="!isPowerCapFieldEnabled"
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053056 data-test-id="power-input-powerCapValue"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020057 type="number"
58 aria-describedby="power-help-text"
Surya Vde23ea22024-07-11 15:19:46 +053059 :state="getValidationState(v$.powerCapValue)"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020060 ></b-form-input>
Sukanya Pandey9055d982020-03-31 17:37:53 +053061
Mateusz Gapski471f2e02020-07-27 14:43:26 +020062 <b-form-invalid-feedback id="input-live-feedback" role="alert">
Surya Venkatesan69be8242024-09-23 19:55:06 +053063 <template v-if="v$.powerCapValue.required.$invalid">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020064 {{ $t('global.form.fieldRequired') }}
65 </template>
Surya Venkatesan69be8242024-09-23 19:55:06 +053066 <template v-else-if="v$.powerCapValue.between.$invalid">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020067 {{ $t('global.form.invalidValue') }}
68 </template>
69 </b-form-invalid-feedback>
70 </b-form-group>
71 </b-col>
72 </b-row>
Sukanya Pandey9055d982020-03-31 17:37:53 +053073
Mateusz Gapski471f2e02020-07-27 14:43:26 +020074 <b-button
75 variant="primary"
76 type="submit"
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053077 data-test-id="power-button-savePowerCapValue"
jason westoverd36ac8a2025-11-03 20:58:59 -060078 class="mt-3"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020079 >
80 {{ $t('global.action.save') }}
81 </b-button>
82 </b-form-group>
Sukanya Pandey9055d982020-03-31 17:37:53 +053083 </b-form>
84 </b-container>
85</template>
86
87<script>
88import PageTitle from '@/components/Global/PageTitle';
Yoshie Muranakad73f4962020-12-09 08:52:23 -080089import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
Sukanya Pandey9055d982020-03-31 17:37:53 +053090import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -070091import { useVuelidate } from '@vuelidate/core';
92
Sukanya Pandey9055d982020-03-31 17:37:53 +053093import BVToastMixin from '@/components/Mixins/BVToastMixin';
Ed Tanous7d6b44c2024-03-23 14:56:34 -070094import { requiredIf, between } from '@vuelidate/validators';
Sukanya Pandey9055d982020-03-31 17:37:53 +053095import { mapGetters } from 'vuex';
Surya Vde23ea22024-07-11 15:19:46 +053096import { useI18n } from 'vue-i18n';
Sukanya Pandey9055d982020-03-31 17:37:53 +053097
98export default {
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053099 name: 'Power',
Sukanya Pandey9055d982020-03-31 17:37:53 +0530100 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530101 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -0500102 beforeRouteLeave(to, from, next) {
103 this.hideLoader();
104 next();
105 },
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700106 setup() {
107 return {
108 v$: useVuelidate(),
109 };
110 },
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800111 data() {
112 return {
Surya Vde23ea22024-07-11 15:19:46 +0530113 $t: useI18n().t,
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800114 loading,
115 };
116 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530117 computed: {
118 ...mapGetters({
Derick Montague602e98a2020-10-21 16:20:00 -0500119 powerConsumptionValue: 'powerControl/powerConsumptionValue',
Sukanya Pandey9055d982020-03-31 17:37:53 +0530120 }),
121
122 /**
123 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
124 The input field is enabled when the powercapValue property is not null.
125 **/
126 isPowerCapFieldEnabled: {
127 get() {
128 return this.powerCapValue !== null;
129 },
130 set(value) {
Surya Vde23ea22024-07-11 15:19:46 +0530131 this.v$.$reset();
MichalX Szopinskif4328ed2021-07-12 12:59:30 +0200132 let newValue = null;
133 if (value) {
134 if (this.powerCapValue) {
135 newValue = this.powerCapValue;
136 } else {
137 newValue = '';
138 }
139 }
Sukanya Pandey9055d982020-03-31 17:37:53 +0530140 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
Derick Montague602e98a2020-10-21 16:20:00 -0500141 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530142 },
143 powerCapValue: {
144 get() {
145 return this.$store.getters['powerControl/powerCapValue'];
146 },
147 set(value) {
Surya Vde23ea22024-07-11 15:19:46 +0530148 this.v$.$touch();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530149 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
Derick Montague602e98a2020-10-21 16:20:00 -0500150 },
151 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530152 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530153 created() {
154 this.startLoader();
155 this.$store
156 .dispatch('powerControl/getPowerControl')
157 .finally(() => this.endLoader());
158 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530159 validations: {
160 powerCapValue: {
161 between: between(1, 10000),
Derick Montague602e98a2020-10-21 16:20:00 -0500162 required: requiredIf(function () {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530163 return this.isPowerCapFieldEnabled;
Derick Montague602e98a2020-10-21 16:20:00 -0500164 }),
165 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530166 },
167 methods: {
168 submitForm() {
Surya Vde23ea22024-07-11 15:19:46 +0530169 this.v$.$touch();
170 if (this.v$.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530171 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530172 this.$store
173 .dispatch('powerControl/setPowerControl', this.powerCapValue)
Derick Montague602e98a2020-10-21 16:20:00 -0500174 .then((message) => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530175 .catch(({ message }) => this.errorToast(message))
176 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500177 },
178 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530179};
180</script>