|  | <template> | 
|  | <div class="form-background p-3"> | 
|  | <b-form novalidate @submit.prevent="handleSubmit"> | 
|  | <b-form-group | 
|  | :label=" | 
|  | $t('pageServerPowerOperations.bootSettings.bootSettingsOverride') | 
|  | " | 
|  | label-for="boot-option" | 
|  | class="mb-3" | 
|  | > | 
|  | <b-form-select | 
|  | id="boot-option" | 
|  | v-model="form.bootOption" | 
|  | :disabled="bootSourceOptions.length === 0" | 
|  | :options="bootSourceOptions" | 
|  | @change="onChangeSelect" | 
|  | > | 
|  | </b-form-select> | 
|  | </b-form-group> | 
|  | <b-form-checkbox | 
|  | v-model="form.oneTimeBoot" | 
|  | class="mb-4" | 
|  | :disabled="form.bootOption === 'None'" | 
|  | @change="v$.form.oneTimeBoot.$touch()" | 
|  | > | 
|  | {{ $t('pageServerPowerOperations.bootSettings.enableOneTimeBoot') }} | 
|  | </b-form-checkbox> | 
|  | <b-form-group | 
|  | :label="$t('pageServerPowerOperations.bootSettings.tpmRequiredPolicy')" | 
|  | > | 
|  | <b-form-text id="tpm-required-policy-help-block"> | 
|  | {{ | 
|  | $t('pageServerPowerOperations.bootSettings.tpmRequiredPolicyHelper') | 
|  | }} | 
|  | </b-form-text> | 
|  | <b-form-checkbox | 
|  | id="tpm-required-policy" | 
|  | v-model="form.tpmPolicyOn" | 
|  | aria-describedby="tpm-required-policy-help-block" | 
|  | @change="v$.form.tpmPolicyOn.$touch()" | 
|  | > | 
|  | {{ $t('global.status.enabled') }} | 
|  | </b-form-checkbox> | 
|  | </b-form-group> | 
|  | <b-button variant="primary" type="submit" class="mb-3"> | 
|  | {{ $t('global.action.save') }} | 
|  | </b-button> | 
|  | </b-form> | 
|  | </div> | 
|  | </template> | 
|  |  | 
|  | <script> | 
|  | import { mapState } from 'vuex'; | 
|  | import BVToastMixin from '@/components/Mixins/BVToastMixin'; | 
|  | import LoadingBarMixin from '@/components/Mixins/LoadingBarMixin'; | 
|  | import { useI18n } from 'vue-i18n'; | 
|  | import { useVuelidate } from '@vuelidate/core'; | 
|  |  | 
|  | export default { | 
|  | name: 'BootSettings', | 
|  | mixins: [BVToastMixin, LoadingBarMixin], | 
|  | setup() { | 
|  | return { | 
|  | v$: useVuelidate(), | 
|  | }; | 
|  | }, | 
|  | data() { | 
|  | return { | 
|  | $t: useI18n().t, | 
|  | form: { | 
|  | bootOption: this.$store.getters['serverBootSettings/bootSource'], | 
|  | oneTimeBoot: this.$store.getters['serverBootSettings/overrideEnabled'], | 
|  | tpmPolicyOn: this.$store.getters['serverBootSettings/tpmEnabled'], | 
|  | }, | 
|  | }; | 
|  | }, | 
|  | computed: { | 
|  | ...mapState('serverBootSettings', [ | 
|  | 'bootSourceOptions', | 
|  | 'bootSource', | 
|  | 'overrideEnabled', | 
|  | 'tpmEnabled', | 
|  | ]), | 
|  | }, | 
|  | watch: { | 
|  | bootSource: function (value) { | 
|  | this.form.bootOption = value; | 
|  | }, | 
|  | overrideEnabled: function (value) { | 
|  | this.form.oneTimeBoot = value; | 
|  | }, | 
|  | tpmEnabled: function (value) { | 
|  | this.form.tpmPolicyOn = value; | 
|  | }, | 
|  | }, | 
|  | validations: { | 
|  | // Empty validations to leverage vuelidate form states | 
|  | // to check for changed values | 
|  | form: { | 
|  | bootOption: {}, | 
|  | oneTimeBoot: {}, | 
|  | tpmPolicyOn: {}, | 
|  | }, | 
|  | }, | 
|  | created() { | 
|  | this.$store | 
|  | .dispatch('serverBootSettings/getTpmPolicy') | 
|  | .finally(() => | 
|  | this.$root.$emit('server-power-operations-boot-settings-complete'), | 
|  | ); | 
|  | }, | 
|  | methods: { | 
|  | handleSubmit() { | 
|  | this.startLoader(); | 
|  | const tpmPolicyChanged = this.v$.form.tpmPolicyOn.$dirty; | 
|  | let settings; | 
|  | let bootSource = this.form.bootOption; | 
|  | let overrideEnabled = this.form.oneTimeBoot; | 
|  | let tpmEnabled = null; | 
|  |  | 
|  | if (tpmPolicyChanged) tpmEnabled = this.form.tpmPolicyOn; | 
|  | settings = { bootSource, overrideEnabled, tpmEnabled }; | 
|  |  | 
|  | this.$store | 
|  | .dispatch('serverBootSettings/saveSettings', settings) | 
|  | .then((message) => this.successToast(message)) | 
|  | .catch(({ message }) => this.errorToast(message)) | 
|  | .finally(() => { | 
|  | this.v$.form.$reset(); | 
|  | this.endLoader(); | 
|  | }); | 
|  | }, | 
|  | onChangeSelect(selectedOption) { | 
|  | this.v$.form.bootOption.$touch(); | 
|  | // Disable one time boot if selected boot option is 'None' | 
|  | if (selectedOption === 'None') this.form.oneTimeBoot = false; | 
|  | }, | 
|  | }, | 
|  | }; | 
|  | </script> |