blob: cc0cc993be851d48283e2eb74dcd5a9f7cc8b65b [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';
90import BVToastMixin from '@/components/Mixins/BVToastMixin';
91import { requiredIf, between } from 'vuelidate/lib/validators';
92import { mapGetters } from 'vuex';
93
94export default {
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053095 name: 'Power',
Sukanya Pandey9055d982020-03-31 17:37:53 +053096 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053097 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -050098 beforeRouteLeave(to, from, next) {
99 this.hideLoader();
100 next();
101 },
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800102 data() {
103 return {
104 loading,
105 };
106 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530107 computed: {
108 ...mapGetters({
Derick Montague602e98a2020-10-21 16:20:00 -0500109 powerConsumptionValue: 'powerControl/powerConsumptionValue',
Sukanya Pandey9055d982020-03-31 17:37:53 +0530110 }),
111
112 /**
113 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
114 The input field is enabled when the powercapValue property is not null.
115 **/
116 isPowerCapFieldEnabled: {
117 get() {
118 return this.powerCapValue !== null;
119 },
120 set(value) {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530121 this.$v.$reset();
MichalX Szopinskif4328ed2021-07-12 12:59:30 +0200122 let newValue = null;
123 if (value) {
124 if (this.powerCapValue) {
125 newValue = this.powerCapValue;
126 } else {
127 newValue = '';
128 }
129 }
Sukanya Pandey9055d982020-03-31 17:37:53 +0530130 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
Derick Montague602e98a2020-10-21 16:20:00 -0500131 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530132 },
133 powerCapValue: {
134 get() {
135 return this.$store.getters['powerControl/powerCapValue'];
136 },
137 set(value) {
138 this.$v.$touch();
139 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
Derick Montague602e98a2020-10-21 16:20:00 -0500140 },
141 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530142 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530143 created() {
144 this.startLoader();
145 this.$store
146 .dispatch('powerControl/getPowerControl')
147 .finally(() => this.endLoader());
148 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530149 validations: {
150 powerCapValue: {
151 between: between(1, 10000),
Derick Montague602e98a2020-10-21 16:20:00 -0500152 required: requiredIf(function () {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530153 return this.isPowerCapFieldEnabled;
Derick Montague602e98a2020-10-21 16:20:00 -0500154 }),
155 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530156 },
157 methods: {
158 submitForm() {
159 this.$v.$touch();
160 if (this.$v.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530161 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530162 this.$store
163 .dispatch('powerControl/setPowerControl', this.powerCapValue)
Derick Montague602e98a2020-10-21 16:20:00 -0500164 .then((message) => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530165 .catch(({ message }) => this.errorToast(message))
166 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500167 },
168 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530169};
170</script>