blob: 28d1104d7c099674cd41d66d9447d910b568ff59 [file] [log] [blame]
<template>
<div>
<div class="form-background p-3">
<b-form @submit.prevent="onSubmitUpload">
<!-- Workstation Upload -->
<template>
<b-form-group
:label="$t('pageFirmware.form.updateFirmware.imageFile')"
label-for="image-file"
>
<form-file
id="image-file"
:disabled="isPageDisabled"
:state="getValidationState($v.file)"
aria-describedby="image-file-help-block"
@input="onFileUpload($event)"
>
<template #invalid>
<b-form-invalid-feedback role="alert">
{{ $t('global.form.required') }}
</b-form-invalid-feedback>
</template>
</form-file>
</b-form-group>
</template>
<b-btn
data-test-id="firmware-button-startUpdate"
type="submit"
variant="primary"
:disabled="isPageDisabled"
>
{{ $t('pageFirmware.form.updateFirmware.startUpdate') }}
</b-btn>
</b-form>
</div>
<!-- Modals -->
<modal-update-firmware @ok="updateFirmware" />
</div>
</template>
<script>
import { required } from 'vuelidate/lib/validators';
import BVToastMixin from '@/components/Mixins/BVToastMixin';
import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js';
import FormFile from '@/components/Global/FormFile';
import ModalUpdateFirmware from './FirmwareModalUpdateFirmware';
export default {
components: { FormFile, ModalUpdateFirmware },
mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin],
props: {
isPageDisabled: {
required: true,
type: Boolean,
default: false,
},
isServerOff: {
required: true,
type: Boolean,
},
},
data() {
return {
loading,
file: null,
isServerPowerOffRequired:
process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true',
};
},
validations() {
return {
file: {
required,
},
};
},
created() {
this.$store.dispatch('firmware/getUpdateServiceSettings');
},
methods: {
updateFirmware() {
this.startLoader();
const timerId = setTimeout(() => {
this.endLoader();
this.infoToast(this.$t('pageFirmware.toast.verifyUpdateMessage'), {
title: this.$t('pageFirmware.toast.verifyUpdate'),
refreshAction: true,
});
}, 360000);
this.infoToast(this.$t('pageFirmware.toast.updateStartedMessage'), {
title: this.$t('pageFirmware.toast.updateStarted'),
timestamp: true,
});
this.dispatchWorkstationUpload(timerId);
},
dispatchWorkstationUpload(timerId) {
this.$store
.dispatch('firmware/uploadFirmware', {
image: this.file,
})
.catch(({ message }) => {
this.endLoader();
this.errorToast(message);
clearTimeout(timerId);
});
},
onSubmitUpload() {
this.$v.$touch();
if (this.$v.$invalid) return;
this.$bvModal.show('modal-update-firmware');
},
onFileUpload(file) {
this.file = file;
this.$v.file.$touch();
},
},
};
</script>