168cbbe90SSandeepa Singh<template>
268cbbe90SSandeepa Singh  <div class="form-background p-3">
368cbbe90SSandeepa Singh    <b-form novalidate @submit.prevent="handleSubmit">
468cbbe90SSandeepa Singh      <b-form-group
568cbbe90SSandeepa Singh        :label="
668cbbe90SSandeepa Singh          $t('pageServerPowerOperations.bootSettings.bootSettingsOverride')
768cbbe90SSandeepa Singh        "
868cbbe90SSandeepa Singh        label-for="boot-option"
968cbbe90SSandeepa Singh        class="mb-3"
1068cbbe90SSandeepa Singh      >
1168cbbe90SSandeepa Singh        <b-form-select
1268cbbe90SSandeepa Singh          id="boot-option"
1368cbbe90SSandeepa Singh          v-model="form.bootOption"
1468cbbe90SSandeepa Singh          :disabled="bootSourceOptions.length === 0"
1568cbbe90SSandeepa Singh          :options="bootSourceOptions"
1668cbbe90SSandeepa Singh          @change="onChangeSelect"
1768cbbe90SSandeepa Singh        >
1868cbbe90SSandeepa Singh        </b-form-select>
1968cbbe90SSandeepa Singh      </b-form-group>
2068cbbe90SSandeepa Singh      <b-form-checkbox
2168cbbe90SSandeepa Singh        v-model="form.oneTimeBoot"
2268cbbe90SSandeepa Singh        class="mb-4"
2368cbbe90SSandeepa Singh        :disabled="form.bootOption === 'None'"
2468cbbe90SSandeepa Singh        @change="$v.form.oneTimeBoot.$touch()"
2568cbbe90SSandeepa Singh      >
2668cbbe90SSandeepa Singh        {{ $t('pageServerPowerOperations.bootSettings.enableOneTimeBoot') }}
2768cbbe90SSandeepa Singh      </b-form-checkbox>
2868cbbe90SSandeepa Singh      <b-form-group
2968cbbe90SSandeepa Singh        :label="$t('pageServerPowerOperations.bootSettings.tpmRequiredPolicy')"
3068cbbe90SSandeepa Singh      >
3168cbbe90SSandeepa Singh        <b-form-text id="tpm-required-policy-help-block">
3268cbbe90SSandeepa Singh          {{
3368cbbe90SSandeepa Singh            $t('pageServerPowerOperations.bootSettings.tpmRequiredPolicyHelper')
3468cbbe90SSandeepa Singh          }}
3568cbbe90SSandeepa Singh        </b-form-text>
3668cbbe90SSandeepa Singh        <b-form-checkbox
3768cbbe90SSandeepa Singh          id="tpm-required-policy"
3868cbbe90SSandeepa Singh          v-model="form.tpmPolicyOn"
3968cbbe90SSandeepa Singh          aria-describedby="tpm-required-policy-help-block"
4068cbbe90SSandeepa Singh          @change="$v.form.tpmPolicyOn.$touch()"
4168cbbe90SSandeepa Singh        >
4268cbbe90SSandeepa Singh          {{ $t('global.status.enabled') }}
4368cbbe90SSandeepa Singh        </b-form-checkbox>
4468cbbe90SSandeepa Singh      </b-form-group>
4568cbbe90SSandeepa Singh      <b-button variant="primary" type="submit" class="mb-3">
4668cbbe90SSandeepa Singh        {{ $t('global.action.save') }}
4768cbbe90SSandeepa Singh      </b-button>
4868cbbe90SSandeepa Singh    </b-form>
4968cbbe90SSandeepa Singh  </div>
5068cbbe90SSandeepa Singh</template>
5168cbbe90SSandeepa Singh
5268cbbe90SSandeepa Singh<script>
5368cbbe90SSandeepa Singhimport { mapState } from 'vuex';
5468cbbe90SSandeepa Singhimport BVToastMixin from '@/components/Mixins/BVToastMixin';
5568cbbe90SSandeepa Singhimport LoadingBarMixin from '@/components/Mixins/LoadingBarMixin';
5668cbbe90SSandeepa Singh
5768cbbe90SSandeepa Singhexport default {
5868cbbe90SSandeepa Singh  name: 'BootSettings',
5968cbbe90SSandeepa Singh  mixins: [BVToastMixin, LoadingBarMixin],
6068cbbe90SSandeepa Singh  data() {
6168cbbe90SSandeepa Singh    return {
6268cbbe90SSandeepa Singh      form: {
6368cbbe90SSandeepa Singh        bootOption: this.$store.getters['serverBootSettings/bootSource'],
6468cbbe90SSandeepa Singh        oneTimeBoot: this.$store.getters['serverBootSettings/overrideEnabled'],
6568cbbe90SSandeepa Singh        tpmPolicyOn: this.$store.getters['serverBootSettings/tpmEnabled'],
6668cbbe90SSandeepa Singh      },
6768cbbe90SSandeepa Singh    };
6868cbbe90SSandeepa Singh  },
6968cbbe90SSandeepa Singh  computed: {
7068cbbe90SSandeepa Singh    ...mapState('serverBootSettings', [
7168cbbe90SSandeepa Singh      'bootSourceOptions',
7268cbbe90SSandeepa Singh      'bootSource',
7368cbbe90SSandeepa Singh      'overrideEnabled',
7468cbbe90SSandeepa Singh      'tpmEnabled',
7568cbbe90SSandeepa Singh    ]),
7668cbbe90SSandeepa Singh  },
7768cbbe90SSandeepa Singh  watch: {
7868cbbe90SSandeepa Singh    bootSource: function (value) {
7968cbbe90SSandeepa Singh      this.form.bootOption = value;
8068cbbe90SSandeepa Singh    },
8168cbbe90SSandeepa Singh    overrideEnabled: function (value) {
8268cbbe90SSandeepa Singh      this.form.oneTimeBoot = value;
8368cbbe90SSandeepa Singh    },
8468cbbe90SSandeepa Singh    tpmEnabled: function (value) {
8568cbbe90SSandeepa Singh      this.form.tpmPolicyOn = value;
8668cbbe90SSandeepa Singh    },
8768cbbe90SSandeepa Singh  },
8868cbbe90SSandeepa Singh  validations: {
8968cbbe90SSandeepa Singh    // Empty validations to leverage vuelidate form states
9068cbbe90SSandeepa Singh    // to check for changed values
9168cbbe90SSandeepa Singh    form: {
9268cbbe90SSandeepa Singh      bootOption: {},
9368cbbe90SSandeepa Singh      oneTimeBoot: {},
9468cbbe90SSandeepa Singh      tpmPolicyOn: {},
9568cbbe90SSandeepa Singh    },
9668cbbe90SSandeepa Singh  },
9768cbbe90SSandeepa Singh  created() {
9868cbbe90SSandeepa Singh    this.$store
9968cbbe90SSandeepa Singh      .dispatch('serverBootSettings/getTpmPolicy')
10068cbbe90SSandeepa Singh      .finally(() =>
101*8132399cSEd Tanous        this.$root.$emit('server-power-operations-boot-settings-complete'),
10268cbbe90SSandeepa Singh      );
10368cbbe90SSandeepa Singh  },
10468cbbe90SSandeepa Singh  methods: {
10568cbbe90SSandeepa Singh    handleSubmit() {
10668cbbe90SSandeepa Singh      this.startLoader();
10768cbbe90SSandeepa Singh      const tpmPolicyChanged = this.$v.form.tpmPolicyOn.$dirty;
10868cbbe90SSandeepa Singh      let settings;
109e6807a4eSLei YU      let bootSource = this.form.bootOption;
110e6807a4eSLei YU      let overrideEnabled = this.form.oneTimeBoot;
11168cbbe90SSandeepa Singh      let tpmEnabled = null;
11268cbbe90SSandeepa Singh
11368cbbe90SSandeepa Singh      if (tpmPolicyChanged) tpmEnabled = this.form.tpmPolicyOn;
11468cbbe90SSandeepa Singh      settings = { bootSource, overrideEnabled, tpmEnabled };
11568cbbe90SSandeepa Singh
11668cbbe90SSandeepa Singh      this.$store
11768cbbe90SSandeepa Singh        .dispatch('serverBootSettings/saveSettings', settings)
11868cbbe90SSandeepa Singh        .then((message) => this.successToast(message))
11968cbbe90SSandeepa Singh        .catch(({ message }) => this.errorToast(message))
12068cbbe90SSandeepa Singh        .finally(() => {
12168cbbe90SSandeepa Singh          this.$v.form.$reset();
12268cbbe90SSandeepa Singh          this.endLoader();
12368cbbe90SSandeepa Singh        });
12468cbbe90SSandeepa Singh    },
12568cbbe90SSandeepa Singh    onChangeSelect(selectedOption) {
12668cbbe90SSandeepa Singh      this.$v.form.bootOption.$touch();
12768cbbe90SSandeepa Singh      // Disable one time boot if selected boot option is 'None'
12868cbbe90SSandeepa Singh      if (selectedOption === 'None') this.form.oneTimeBoot = false;
12968cbbe90SSandeepa Singh    },
13068cbbe90SSandeepa Singh  },
13168cbbe90SSandeepa Singh};
13268cbbe90SSandeepa Singh</script>
133