blob: 8a9503fdc0c3df7dac646d27bae89dd45ead6969 [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">
22 <b-row>
23 <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
Mateusz Gapski471f2e02020-07-27 14:43:26 +020036 <b-row>
37 <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"
59 :state="getValidationState($v.powerCapValue)"
60 ></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">
63 <template v-if="!$v.powerCapValue.required">
64 {{ $t('global.form.fieldRequired') }}
65 </template>
66 <template v-else-if="!$v.powerCapValue.between">
67 {{ $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"
Mateusz Gapski471f2e02020-07-27 14:43:26 +020078 >
79 {{ $t('global.action.save') }}
80 </b-button>
81 </b-form-group>
Sukanya Pandey9055d982020-03-31 17:37:53 +053082 </b-form>
83 </b-container>
84</template>
85
86<script>
87import PageTitle from '@/components/Global/PageTitle';
Yoshie Muranakad73f4962020-12-09 08:52:23 -080088import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
Sukanya Pandey9055d982020-03-31 17:37:53 +053089import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous9c729792024-03-23 14:56:34 -070090import { useVuelidate } from '@vuelidate/core';
91
Sukanya Pandey9055d982020-03-31 17:37:53 +053092import BVToastMixin from '@/components/Mixins/BVToastMixin';
Ed Tanous9c729792024-03-23 14:56:34 -070093import { requiredIf, between } from '@vuelidate/validators';
Sukanya Pandey9055d982020-03-31 17:37:53 +053094import { mapGetters } from 'vuex';
95
96export default {
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053097 name: 'Power',
Sukanya Pandey9055d982020-03-31 17:37:53 +053098 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053099 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -0500100 beforeRouteLeave(to, from, next) {
101 this.hideLoader();
102 next();
103 },
Ed Tanous9c729792024-03-23 14:56:34 -0700104 setup() {
105 return {
106 v$: useVuelidate(),
107 };
108 },
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800109 data() {
110 return {
111 loading,
112 };
113 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530114 computed: {
115 ...mapGetters({
Derick Montague602e98a2020-10-21 16:20:00 -0500116 powerConsumptionValue: 'powerControl/powerConsumptionValue',
Sukanya Pandey9055d982020-03-31 17:37:53 +0530117 }),
118
119 /**
120 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
121 The input field is enabled when the powercapValue property is not null.
122 **/
123 isPowerCapFieldEnabled: {
124 get() {
125 return this.powerCapValue !== null;
126 },
127 set(value) {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530128 this.$v.$reset();
MichalX Szopinskif4328ed2021-07-12 12:59:30 +0200129 let newValue = null;
130 if (value) {
131 if (this.powerCapValue) {
132 newValue = this.powerCapValue;
133 } else {
134 newValue = '';
135 }
136 }
Sukanya Pandey9055d982020-03-31 17:37:53 +0530137 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
Derick Montague602e98a2020-10-21 16:20:00 -0500138 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530139 },
140 powerCapValue: {
141 get() {
142 return this.$store.getters['powerControl/powerCapValue'];
143 },
144 set(value) {
145 this.$v.$touch();
146 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
Derick Montague602e98a2020-10-21 16:20:00 -0500147 },
148 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530149 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530150 created() {
151 this.startLoader();
152 this.$store
153 .dispatch('powerControl/getPowerControl')
154 .finally(() => this.endLoader());
155 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530156 validations: {
157 powerCapValue: {
158 between: between(1, 10000),
Derick Montague602e98a2020-10-21 16:20:00 -0500159 required: requiredIf(function () {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530160 return this.isPowerCapFieldEnabled;
Derick Montague602e98a2020-10-21 16:20:00 -0500161 }),
162 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530163 },
164 methods: {
165 submitForm() {
166 this.$v.$touch();
167 if (this.$v.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530168 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530169 this.$store
170 .dispatch('powerControl/setPowerControl', this.powerCapValue)
Derick Montague602e98a2020-10-21 16:20:00 -0500171 .then((message) => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530172 .catch(({ message }) => this.errorToast(message))
173 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500174 },
175 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530176};
177</script>