blob: b194b59b3b9e76d4306a7deeae0d52c8ee1ab4d6 [file] [log] [blame]
<template>
<form @submit.prevent="sendForm">
<FileSelect
v-if="input.isIncremental"
v-model="input.incremental"
label="Select the source file"
:options="targetDetails"
/>
<FileSelect
v-model="input.target"
label="Select a target file"
:options="targetDetails"
/>
<v-row>
<v-col
v-for="flag in basicFlags"
:key="flag.key"
cols="12"
md="4"
>
<BaseCheckbox
v-model="input[flag.key]"
:label="flag.label"
/>
</v-col>
</v-row>
<div v-if="input.isPartial">
<v-divider />
<h3>Select Partitions</h3>
<PartialCheckbox
v-model="input.partial"
:labels="updatablePartitions"
/>
<v-divider />
</div>
<v-btn
block
@click="moreOptions = !moreOptions"
>
More Options
</v-btn>
<v-row v-if="moreOptions">
<v-col
v-for="flag in extraFlags"
:key="flag.key"
cols="12"
md="4"
>
<BaseCheckbox
v-model="input[flag.key]"
:label="flag.label"
/>
</v-col>
</v-row>
<v-divider class="my-5" />
<BaseInput
v-model="input.extra"
:label="'Extra Configurations'"
/>
<v-divider class="my-5" />
<v-btn
block
type="submit"
>
Submit
</v-btn>
</form>
</template>
<script>
import BaseInput from '@/components/BaseInput.vue'
import BaseCheckbox from '@/components/BaseCheckbox.vue'
import FileSelect from '@/components/FileSelect.vue'
import PartialCheckbox from '@/components/PartialCheckbox.vue'
import { OTAConfiguration, OTABasicFlags, OTAExtraFlags } from '@/services/JobSubmission.js'
export default {
components: {
BaseInput,
BaseCheckbox,
FileSelect,
PartialCheckbox,
},
props: {
targetDetails: {
type: Array,
default: () => [],
},
incrementalSource: {
type: String,
default: '',
},
targetBuild: {
type: String,
default: '',
},
},
data() {
return {
input: new OTAConfiguration(),
moreOptions: false,
basicFlags: OTABasicFlags,
extraFlags: OTAExtraFlags
}
},
computed: {
/**
* Return the partition list of the selected target build.
* @return Array<String>
*/
updatablePartitions() {
if (!this.input.target) return []
let target = this.targetDetails.filter(
(d) => d.path === this.input.target
)
return target[0].partitions
},
checkIncremental() {
return this.input.isIncremental
},
},
watch: {
incrementalSource: {
handler: function () {
this.input.isIncremental = true
this.input.incremental = this.incrementalSource
},
},
targetBuild: {
handler: function () {
this.input.target = this.targetBuild
},
},
checkIncremental: {
handler: function () {
this.$emit('update:isIncremental', this.checkIncremental)
},
},
},
methods: {
/**
* Send the configuration to the backend.
*/
async sendForm() {
try {
let response_message = await this.input.sendForm()
alert(response_message)
} catch (err) {
alert(
'Job cannot be started properly for the following reasons: ' + err
)
}
this.input = new OTAInput()
},
},
}
</script>