blob: dfb5c68913d7a48f03e761a06109998e28eb1bdd [file] [log] [blame]
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -08001<template>
2 <div>
3 <div class="form-background p-3">
4 <b-form @submit.prevent="onSubmitUpload">
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -08005 <!-- Workstation Upload -->
Nikhil Ashokabc49e092024-06-11 12:19:11 +05306 <template>
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -08007 <b-form-group
Yoshie Muranaka33d755f2021-02-18 15:24:14 -08008 :label="$t('pageFirmware.form.updateFirmware.imageFile')"
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -08009 label-for="image-file"
10 >
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080011 <form-file
12 id="image-file"
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080013 :disabled="isPageDisabled"
14 :state="getValidationState($v.file)"
15 aria-describedby="image-file-help-block"
16 @input="onFileUpload($event)"
17 >
18 <template #invalid>
19 <b-form-invalid-feedback role="alert">
20 {{ $t('global.form.required') }}
21 </b-form-invalid-feedback>
22 </template>
23 </form-file>
24 </b-form-group>
25 </template>
26
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080027 <b-btn
28 data-test-id="firmware-button-startUpdate"
29 type="submit"
30 variant="primary"
31 :disabled="isPageDisabled"
32 >
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080033 {{ $t('pageFirmware.form.updateFirmware.startUpdate') }}
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080034 </b-btn>
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080035 </b-form>
36 </div>
37
38 <!-- Modals -->
39 <modal-update-firmware @ok="updateFirmware" />
40 </div>
41</template>
42
43<script>
Nikhil Ashokabc49e092024-06-11 12:19:11 +053044import { required } from 'vuelidate/lib/validators';
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080045
46import BVToastMixin from '@/components/Mixins/BVToastMixin';
47import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
48import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
Ed Tanous7d6b44c2024-03-23 14:56:34 -070049import { useVuelidate } from '@vuelidate/core';
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080050
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080051import FormFile from '@/components/Global/FormFile';
52import ModalUpdateFirmware from './FirmwareModalUpdateFirmware';
Surya Vde23ea22024-07-11 15:19:46 +053053import { useI18n } from 'vue-i18n';
54import i18n from '@/i18n';
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080055
56export default {
Kenneth Fullbright19b2cfb2022-02-21 16:27:32 -060057 components: { FormFile, ModalUpdateFirmware },
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080058 mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin],
59 props: {
60 isPageDisabled: {
61 required: true,
62 type: Boolean,
63 default: false,
64 },
Derick Montague71114fe2021-05-06 18:17:34 -050065 isServerOff: {
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080066 required: true,
67 type: Boolean,
68 },
69 },
Ed Tanous7d6b44c2024-03-23 14:56:34 -070070 setup() {
71 return {
Surya Vde23ea22024-07-11 15:19:46 +053072 $v: useVuelidate(),
Ed Tanous7d6b44c2024-03-23 14:56:34 -070073 };
74 },
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080075 data() {
76 return {
Surya Vde23ea22024-07-11 15:19:46 +053077 $t: useI18n().t,
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080078 loading,
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080079 file: null,
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080080 isServerPowerOffRequired:
81 process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true',
82 };
83 },
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080084 validations() {
85 return {
86 file: {
Nikhil Ashokabc49e092024-06-11 12:19:11 +053087 required,
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080088 },
89 };
90 },
91 created() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080092 this.$store.dispatch('firmware/getUpdateServiceSettings');
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080093 },
94 methods: {
95 updateFirmware() {
96 this.startLoader();
97 const timerId = setTimeout(() => {
98 this.endLoader();
Surya Vde23ea22024-07-11 15:19:46 +053099 this.infoToast(
100 i18n.global.t('pageFirmware.toast.verifyUpdateMessage'),
101 {
102 title: i18n.global.t('pageFirmware.toast.verifyUpdate'),
103 refreshAction: true,
104 },
105 );
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800106 }, 360000);
Surya Vde23ea22024-07-11 15:19:46 +0530107 this.infoToast(i18n.global.t('pageFirmware.toast.updateStartedMessage'), {
108 title: i18n.global.t('pageFirmware.toast.updateStarted'),
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800109 timestamp: true,
110 });
Nikhil Ashokabc49e092024-06-11 12:19:11 +0530111 this.dispatchWorkstationUpload(timerId);
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800112 },
113 dispatchWorkstationUpload(timerId) {
114 this.$store
Leo Xue2c716a2024-07-29 05:54:18 +0300115 .dispatch('firmware/uploadFirmware', {
116 image: this.file,
117 })
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800118 .catch(({ message }) => {
119 this.endLoader();
120 this.errorToast(message);
121 clearTimeout(timerId);
122 });
123 },
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800124 onSubmitUpload() {
125 this.$v.$touch();
126 if (this.$v.$invalid) return;
127 this.$bvModal.show('modal-update-firmware');
128 },
129 onFileUpload(file) {
130 this.file = file;
131 this.$v.file.$touch();
132 },
133 },
134};
135</script>