Skip to content
Snippets Groups Projects
Commit ce870e9b authored by thomas.blanc.2@etu.univ-amu.fr's avatar thomas.blanc.2@etu.univ-amu.fr
Browse files

Model add improvements

parent fd0d17d3
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<b-button class="addButton" icon-left="plus-box" type="is-info" @click="addLayer" expanded> Add custom layer </b-button> <b-button class="addButton" icon-left="plus-box" type="is-info" @click="addLayer" expanded> Add custom layer </b-button>
</b-field> </b-field>
<b-field v-for="(layer, index) in layers" v-bind:key="layer.name" grouped position="is-centered"> <b-field v-for="(layer, index) in layers" v-bind:key="index" grouped position="is-centered">
<p class="control"> <p class="control">
<b-button icon-left="close-circle" type="is-danger" outlined @click="deleteLayer(layer)"/> <b-button icon-left="close-circle" type="is-danger" outlined @click="deleteLayer(layer)"/>
...@@ -15,13 +15,14 @@ ...@@ -15,13 +15,14 @@
<b-input :placeholder="'Layer ' + index + ' name'" v-model="layer.name"/> <b-input :placeholder="'Layer ' + index + ' name'" v-model="layer.name"/>
<p class="control"> <p class="control">
<b-upload v-model="layer.file" accept=".py"> <span class="file-name" v-if="layer.file">{{ layer.file.name }}</span>
<b-upload v-else v-model="layer.file">
<a class="button is-primary"> <a class="button is-primary">
<b-icon icon="upload"></b-icon> <b-icon icon="upload"></b-icon>
<span>Upload layer file</span> <span>Upload layer file</span>
</a> </a>
</b-upload> </b-upload>
<span class="file-name" v-if="layer.file">{{ layer.file.name }}</span>
</p> </p>
</b-field> </b-field>
...@@ -45,12 +46,17 @@ export default { ...@@ -45,12 +46,17 @@ export default {
id: this.layers.length, id: this.layers.length,
name: null name: null
}) })
this.syncToParent()
}, },
deleteLayer (layer) { deleteLayer (layer) {
const index = this.layers.indexOf(layer) const index = this.layers.indexOf(layer)
if (index > -1) { if (index > -1) {
this.layers.splice(index, 1) this.layers.splice(index, 1)
} }
this.syncToParent()
},
syncToParent () {
this.$emit('update-layers', this.layers)
} }
} }
} }
......
...@@ -25,6 +25,7 @@ export default { ...@@ -25,6 +25,7 @@ export default {
}, },
computed: { computed: {
compiledMarkdown: function () { compiledMarkdown: function () {
this.$emit('update-description', this.input)
return marked(this.input) return marked(this.input)
} }
} }
......
<template> <template>
<div class="modal-card"> <div class="modal-card">
<b-progress :value="progress" size="is-large" show-value :type="status"> <b-progress :value="progress" size="is-large" show-value :type="status">
{{message}} {{statusMessage}}
</b-progress> </b-progress>
<b-progress v-if="subProgress" size="is-medium">
{{subMessage}}
</b-progress>
<b-button
v-if="progress === 100"
type="is-success"
tag="router-link"
:to="{ name: 'Model', query: { id: modelId } }"
>
Go to model page
</b-button>
</div> </div>
</template> </template>
...@@ -19,10 +30,11 @@ export default { ...@@ -19,10 +30,11 @@ export default {
}, },
data () { data () {
return { return {
message: '',
progress: 0, progress: 0,
status: 'is-primary', status: 'is-primary',
stausMessage: '', statusMessage: '',
subProgress: false,
subMessage: '',
modelId: null modelId: null
} }
}, },
...@@ -33,28 +45,31 @@ export default { ...@@ -33,28 +45,31 @@ export default {
setProgress (step) { setProgress (step) {
switch (step) { switch (step) {
case 0: case 0:
this.message = 'Sending description' this.statusMessage = 'Sending description'
this.progress = 25 this.progress = 25
break break
case 1: case 1:
this.message = 'Sending model file' this.statusMessage = 'Sending model file'
this.progress = 50 this.progress = 50
break break
case 2: case 2:
this.message = 'Sending custom layers model' this.statusMessage = 'Sending custom layers model'
this.progress = 75 this.progress = 75
break break
case 3: case 3:
this.message = 'Upload completed !' this.statusMessage = 'Upload completed !'
this.progress = 100 this.progress = 100
this.status = 'is-success' this.status = 'is-success'
break break
} }
}, },
setError (message) { setError (message) {
this.message = message this.statusMessage = message
this.status = 'is-danger' this.status = 'is-danger'
}, },
setSubMessage (message) {
this.subMessage = message
},
async saveModel () { async saveModel () {
this.setProgress(0) this.setProgress(0)
var response = await this.uploadModel() var response = await this.uploadModel()
...@@ -125,18 +140,22 @@ export default { ...@@ -125,18 +140,22 @@ export default {
}, },
body: data body: data
}) })
return response !== 200 if (response.status !== 200) return false
return true
} catch (error) { } catch (error) {
return null return false
} }
}, },
async uploadLayers () { async uploadLayers () {
this.subProgress = true
const token = await localStorage.getItem('token') const token = await localStorage.getItem('token')
for (var i = 0; i < this.model.customLayers.length; i++) { for (var i = 0; i < this.model.customLayers.length; i++) {
const layer = this.model.customLayers[i] const layer = this.model.customLayers[i]
const data = new FormData() const data = new FormData()
const url = this.$serverurl + 'models?id=' + this.modelId + '/layer?id=' + i const url = this.$serverurl + 'models?id=' + this.modelId + '/layer?id=' + i
this.subMessage = 'Uploading ' + layer.name
console.log('Upload layers ' + i + ' | ' + layer.file) console.log('Upload layers ' + i + ' | ' + layer.file)
if (layer.file === undefined) continue if (layer.file === undefined) continue
...@@ -150,11 +169,12 @@ export default { ...@@ -150,11 +169,12 @@ export default {
}, },
body: data body: data
}) })
if (response !== 200) return false if (response.status !== 200) return false
} catch (error) { } catch (error) {
return false return false
} }
} }
this.subProgress = false
return true return true
} }
} }
......
<template>
<div class="modelValidator">
</div>
</template>
<script>
export default {
name: 'ModelValidator',
props: {
model: {
type: Object,
default: function () {
return {}
}
}
},
data () {
return {
errorMessage: ''
}
},
methods: {
validate () {
if (this.model.name === undefined || this.model.name === null || this.model.name === '') {
this.errorMessage = 'The model name is empty'
return false
}
return true
}
}
}
</script>
<style>
</style>
...@@ -57,11 +57,9 @@ export default { ...@@ -57,11 +57,9 @@ export default {
computed: { computed: {
filteredTags () { filteredTags () {
if (this.selectedCategory === null) return [] if (this.selectedCategory === null) return []
console.log('SELECT ' + this.selectedCategory)
var category = this.tagList.filter((tag) => { var category = this.tagList.filter((tag) => {
return tag.name === this.selectedCategory return tag.name === this.selectedCategory
}) })
console.log('SELECT ' + category)
return category[0].types.filter((type) => { return category[0].types.filter((type) => {
return type return type
.toString() .toString()
...@@ -127,12 +125,17 @@ export default { ...@@ -127,12 +125,17 @@ export default {
type: this.tagName type: this.tagName
}) })
this.tagName = '' this.tagName = ''
this.syncToParent()
}, },
removeTagFromModel (tag) { removeTagFromModel (tag) {
const index = this.tags.indexOf(tag) const index = this.tags.indexOf(tag)
if (index > -1) { if (index > -1) {
this.tags.splice(index, 1) this.tags.splice(index, 1)
} }
this.syncToParent()
},
syncToParent () {
this.$emit('update-tags', this.tags)
} }
} }
} }
......
<template> <template>
<div class="model container"> <div class="model container">
<div v-if="isError" class="error"> <div v-if="isError" class="error">
<h1 class="title is-1">Erreur</h1> <h1 class="title is-1">Error</h1>
<h2 class="subtitle">Modèle introuvable</h2> <h2 class="subtitle">Cant find model</h2>
</div> </div>
<div v-else> <div v-else>
<div class="columns box"> <div class="columns box">
......
...@@ -11,12 +11,12 @@ ...@@ -11,12 +11,12 @@
</b-field> </b-field>
<b-field label="Long description"> <b-field label="Long description">
<markdownEditor v-bind:input="model.longDescription"/> <markdownEditor v-bind:input="model.longDescription" v-on:update-description="model.longDescription = $event"/>
</b-field> </b-field>
</b-step-item> </b-step-item>
<b-step-item step="2" label="Tags" clickable> <b-step-item step="2" label="Tags" clickable>
<tagEditor v-bind:tags="model.tags"/> <tagEditor v-bind:tags="model.tags" v-on:update-tags="model.tags = $event"/>
</b-step-item> </b-step-item>
<b-step-item step="3" label="Files" clickable> <b-step-item step="3" label="Files" clickable>
...@@ -31,11 +31,12 @@ ...@@ -31,11 +31,12 @@
</div> </div>
</section> </section>
</b-upload> </b-upload>
<span v-if="model.file" class="file-name">{{ model.file.name }}</span>
</b-field> </b-field>
</b-step-item> </b-step-item>
<b-step-item step="4" label="Custom layers" clickable> <b-step-item step="4" label="Custom layers" clickable>
<layersEditor v-bind:layers="model.customLayers"/> <layersEditor v-bind:layers="model.customLayers" v-on:update-layers="model.customLayers = $event"/>
</b-step-item> </b-step-item>
<b-step-item step="5" label="Finish" clickable> <b-step-item step="5" label="Finish" clickable>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment