blob: 12e4868b7c7a77ce1f57e24d06233bd660b651bd [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"
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 Vde23ea22024-07-11 15:19:46 +053063 <template v-if="!v$.powerCapValue.required">
Mateusz Gapski471f2e02020-07-27 14:43:26 +020064 {{ $t('global.form.fieldRequired') }}
65 </template>
Surya Vde23ea22024-07-11 15:19:46 +053066 <template v-else-if="!v$.powerCapValue.between">
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"
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 Tanous7d6b44c2024-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 Tanous7d6b44c2024-03-23 14:56:34 -070093import { requiredIf, between } from '@vuelidate/validators';
Sukanya Pandey9055d982020-03-31 17:37:53 +053094import { mapGetters } from 'vuex';
Surya Vde23ea22024-07-11 15:19:46 +053095import { useI18n } from 'vue-i18n';
Sukanya Pandey9055d982020-03-31 17:37:53 +053096
97export default {
Sandeepa Singh6dba4be2021-07-28 15:25:14 +053098 name: 'Power',
Sukanya Pandey9055d982020-03-31 17:37:53 +053099 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530100 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -0500101 beforeRouteLeave(to, from, next) {
102 this.hideLoader();
103 next();
104 },
Ed Tanous7d6b44c2024-03-23 14:56:34 -0700105 setup() {
106 return {
107 v$: useVuelidate(),
108 };
109 },
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800110 data() {
111 return {
Surya Vde23ea22024-07-11 15:19:46 +0530112 $t: useI18n().t,
Yoshie Muranakad73f4962020-12-09 08:52:23 -0800113 loading,
114 };
115 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530116 computed: {
117 ...mapGetters({
Derick Montague602e98a2020-10-21 16:20:00 -0500118 powerConsumptionValue: 'powerControl/powerConsumptionValue',
Sukanya Pandey9055d982020-03-31 17:37:53 +0530119 }),
120
121 /**
122 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
123 The input field is enabled when the powercapValue property is not null.
124 **/
125 isPowerCapFieldEnabled: {
126 get() {
127 return this.powerCapValue !== null;
128 },
129 set(value) {
Surya Vde23ea22024-07-11 15:19:46 +0530130 this.v$.$reset();
MichalX Szopinskif4328ed2021-07-12 12:59:30 +0200131 let newValue = null;
132 if (value) {
133 if (this.powerCapValue) {
134 newValue = this.powerCapValue;
135 } else {
136 newValue = '';
137 }
138 }
Sukanya Pandey9055d982020-03-31 17:37:53 +0530139 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
Derick Montague602e98a2020-10-21 16:20:00 -0500140 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530141 },
142 powerCapValue: {
143 get() {
144 return this.$store.getters['powerControl/powerCapValue'];
145 },
146 set(value) {
Surya Vde23ea22024-07-11 15:19:46 +0530147 this.v$.$touch();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530148 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
Derick Montague602e98a2020-10-21 16:20:00 -0500149 },
150 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530151 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530152 created() {
153 this.startLoader();
154 this.$store
155 .dispatch('powerControl/getPowerControl')
156 .finally(() => this.endLoader());
157 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530158 validations: {
159 powerCapValue: {
160 between: between(1, 10000),
Derick Montague602e98a2020-10-21 16:20:00 -0500161 required: requiredIf(function () {
Sukanya Pandey9055d982020-03-31 17:37:53 +0530162 return this.isPowerCapFieldEnabled;
Derick Montague602e98a2020-10-21 16:20:00 -0500163 }),
164 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530165 },
166 methods: {
167 submitForm() {
Surya Vde23ea22024-07-11 15:19:46 +0530168 this.v$.$touch();
169 if (this.v$.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530170 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530171 this.$store
172 .dispatch('powerControl/setPowerControl', this.powerCapValue)
Derick Montague602e98a2020-10-21 16:20:00 -0500173 .then((message) => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530174 .catch(({ message }) => this.errorToast(message))
175 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500176 },
177 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530178};
179</script>