blob: bbe32404a16a668ed4e257426dae1851fd5c04de [file] [log] [blame]
Sukanya Pandey9055d982020-03-31 17:37:53 +05301<template>
2 <b-container fluid="xl">
3 <page-title :description="$t('pageManagePowerUsage.description')" />
4
5 <b-row>
6 <b-col sm="8" md="6" xl="12">
7 <dl>
8 <dt>{{ $t('pageManagePowerUsage.powerConsumption') }}</dt>
9 <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">
21 <b-row>
22 <b-col sm="8" md="6" xl="12">
23 <b-form-group
24 :label="$t('pageManagePowerUsage.powerCapSettingLabel')"
25 >
26 <b-form-checkbox
27 v-model="isPowerCapFieldEnabled"
Sukanya Pandey50badd62020-07-15 23:03:00 +053028 data-test-id="managePowerUsage-checkbox-togglePowerCapField"
Sukanya Pandey9055d982020-03-31 17:37:53 +053029 name="power-cap-setting"
30 >
31 {{ $t('pageManagePowerUsage.powerCapSettingData') }}
32 </b-form-checkbox>
33 </b-form-group>
34 </b-col>
35 </b-row>
36
37 <b-row>
38 <b-col sm="8" md="6" xl="3">
39 <b-form-group
40 id="input-group-1"
41 :label="$t('pageManagePowerUsage.powerCapLabel')"
42 label-for="input-1"
43 >
44 <b-form-text id="power-help-text">
45 {{
46 $t('pageManagePowerUsage.powerCapLabelTextInfo', {
47 min: 1,
48 max: 10000
49 })
50 }}
51 </b-form-text>
52
53 <b-form-input
54 id="input-1"
55 v-model.number="powerCapValue"
56 :disabled="!isPowerCapFieldEnabled"
Sukanya Pandey50badd62020-07-15 23:03:00 +053057 data-test-id="managePowerUsage-input-powerCapValue"
Sukanya Pandey9055d982020-03-31 17:37:53 +053058 type="number"
59 aria-describedby="power-help-text"
60 :state="getValidationState($v.powerCapValue)"
61 ></b-form-input>
62
63 <b-form-invalid-feedback id="input-live-feedback" role="alert">
64 <template v-if="!$v.powerCapValue.required">
65 {{ $t('global.form.fieldRequired') }}
66 </template>
67 <template v-else-if="!$v.powerCapValue.between">
68 {{ $t('global.form.invalidValue') }}
69 </template>
70 </b-form-invalid-feedback>
71 </b-form-group>
72 </b-col>
73 </b-row>
74
Sukanya Pandey50badd62020-07-15 23:03:00 +053075 <b-button
76 variant="primary"
77 type="submit"
78 data-test-id="managePowerUsage-button-savePowerCapValue"
79 >
Sukanya Pandey9055d982020-03-31 17:37:53 +053080 {{ $t('global.action.save') }}
81 </b-button>
82 </b-form>
83 </b-container>
84</template>
85
86<script>
87import PageTitle from '@/components/Global/PageTitle';
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053088import LoadingBarMixin 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 {
95 name: 'ManagePowerUsage',
96 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053097 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Sukanya Pandey9055d982020-03-31 17:37:53 +053098 computed: {
99 ...mapGetters({
100 powerConsumptionValue: 'powerControl/powerConsumptionValue'
101 }),
102
103 /**
104 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
105 The input field is enabled when the powercapValue property is not null.
106 **/
107 isPowerCapFieldEnabled: {
108 get() {
109 return this.powerCapValue !== null;
110 },
111 set(value) {
112 let newValue = value ? '' : null;
113 this.$v.$reset();
114 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
115 }
116 },
117 powerCapValue: {
118 get() {
119 return this.$store.getters['powerControl/powerCapValue'];
120 },
121 set(value) {
122 this.$v.$touch();
123 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
124 }
125 }
126 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530127 created() {
128 this.startLoader();
129 this.$store
130 .dispatch('powerControl/getPowerControl')
131 .finally(() => this.endLoader());
132 },
133 beforeRouteLeave(to, from, next) {
134 this.hideLoader();
135 next();
136 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530137 validations: {
138 powerCapValue: {
139 between: between(1, 10000),
140 required: requiredIf(function() {
141 return this.isPowerCapFieldEnabled;
142 })
143 }
144 },
145 methods: {
146 submitForm() {
147 this.$v.$touch();
148 if (this.$v.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530149 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530150 this.$store
151 .dispatch('powerControl/setPowerControl', this.powerCapValue)
152 .then(message => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530153 .catch(({ message }) => this.errorToast(message))
154 .finally(() => this.endLoader());
Sukanya Pandey9055d982020-03-31 17:37:53 +0530155 }
156 }
157};
158</script>