blob: bb690d6c976b55d99715876b912fcef50696c1f5 [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"
28 name="power-cap-setting"
29 >
30 {{ $t('pageManagePowerUsage.powerCapSettingData') }}
31 </b-form-checkbox>
32 </b-form-group>
33 </b-col>
34 </b-row>
35
36 <b-row>
37 <b-col sm="8" md="6" xl="3">
38 <b-form-group
39 id="input-group-1"
40 :label="$t('pageManagePowerUsage.powerCapLabel')"
41 label-for="input-1"
42 >
43 <b-form-text id="power-help-text">
44 {{
45 $t('pageManagePowerUsage.powerCapLabelTextInfo', {
46 min: 1,
47 max: 10000
48 })
49 }}
50 </b-form-text>
51
52 <b-form-input
53 id="input-1"
54 v-model.number="powerCapValue"
55 :disabled="!isPowerCapFieldEnabled"
56 type="number"
57 aria-describedby="power-help-text"
58 :state="getValidationState($v.powerCapValue)"
59 ></b-form-input>
60
61 <b-form-invalid-feedback id="input-live-feedback" role="alert">
62 <template v-if="!$v.powerCapValue.required">
63 {{ $t('global.form.fieldRequired') }}
64 </template>
65 <template v-else-if="!$v.powerCapValue.between">
66 {{ $t('global.form.invalidValue') }}
67 </template>
68 </b-form-invalid-feedback>
69 </b-form-group>
70 </b-col>
71 </b-row>
72
73 <b-button variant="primary" type="submit">
74 {{ $t('global.action.save') }}
75 </b-button>
76 </b-form>
77 </b-container>
78</template>
79
80<script>
81import PageTitle from '@/components/Global/PageTitle';
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053082import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
Sukanya Pandey9055d982020-03-31 17:37:53 +053083import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
84import BVToastMixin from '@/components/Mixins/BVToastMixin';
85import { requiredIf, between } from 'vuelidate/lib/validators';
86import { mapGetters } from 'vuex';
87
88export default {
89 name: 'ManagePowerUsage',
90 components: { PageTitle },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +053091 mixins: [VuelidateMixin, BVToastMixin, LoadingBarMixin],
Sukanya Pandey9055d982020-03-31 17:37:53 +053092 computed: {
93 ...mapGetters({
94 powerConsumptionValue: 'powerControl/powerConsumptionValue'
95 }),
96
97 /**
98 Computed property isPowerCapFieldEnabled is used to enable or disable the input field.
99 The input field is enabled when the powercapValue property is not null.
100 **/
101 isPowerCapFieldEnabled: {
102 get() {
103 return this.powerCapValue !== null;
104 },
105 set(value) {
106 let newValue = value ? '' : null;
107 this.$v.$reset();
108 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', newValue);
109 }
110 },
111 powerCapValue: {
112 get() {
113 return this.$store.getters['powerControl/powerCapValue'];
114 },
115 set(value) {
116 this.$v.$touch();
117 this.$store.dispatch('powerControl/setPowerCapUpdatedValue', value);
118 }
119 }
120 },
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530121 created() {
122 this.startLoader();
123 this.$store
124 .dispatch('powerControl/getPowerControl')
125 .finally(() => this.endLoader());
126 },
127 beforeRouteLeave(to, from, next) {
128 this.hideLoader();
129 next();
130 },
Sukanya Pandey9055d982020-03-31 17:37:53 +0530131 validations: {
132 powerCapValue: {
133 between: between(1, 10000),
134 required: requiredIf(function() {
135 return this.isPowerCapFieldEnabled;
136 })
137 }
138 },
139 methods: {
140 submitForm() {
141 this.$v.$touch();
142 if (this.$v.$invalid) return;
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530143 this.startLoader();
Sukanya Pandey9055d982020-03-31 17:37:53 +0530144 this.$store
145 .dispatch('powerControl/setPowerControl', this.powerCapValue)
146 .then(message => this.successToast(message))
Sukanya Pandey8cb0d252020-06-14 20:28:56 +0530147 .catch(({ message }) => this.errorToast(message))
148 .finally(() => this.endLoader());
Sukanya Pandey9055d982020-03-31 17:37:53 +0530149 }
150 }
151};
152</script>