diff --git a/src/components/LayersEditor.vue b/src/components/LayersEditor.vue index c3b86daa8d24674dafd054bd8fd48c49950e5be4..0d001c26e1426d6231fa75a246daf3745fc07fb1 100644 --- a/src/components/LayersEditor.vue +++ b/src/components/LayersEditor.vue @@ -6,7 +6,7 @@ <b-button class="addButton" icon-left="plus-box" type="is-info" @click="addLayer" expanded> Add custom layer </b-button> </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"> <b-button icon-left="close-circle" type="is-danger" outlined @click="deleteLayer(layer)"/> @@ -15,13 +15,14 @@ <b-input :placeholder="'Layer ' + index + ' name'" v-model="layer.name"/> <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"> <b-icon icon="upload"></b-icon> <span>Upload layer file</span> </a> </b-upload> - <span class="file-name" v-if="layer.file">{{ layer.file.name }}</span> </p> </b-field> @@ -45,12 +46,17 @@ export default { id: this.layers.length, name: null }) + this.syncToParent() }, deleteLayer (layer) { const index = this.layers.indexOf(layer) if (index > -1) { this.layers.splice(index, 1) } + this.syncToParent() + }, + syncToParent () { + this.$emit('update-layers', this.layers) } } } diff --git a/src/components/MarkdownEditor.vue b/src/components/MarkdownEditor.vue index 012aeb1da4bb8edfa394e9817915d0eab0490ddf..24798291d48282509eda207cc5b901febfbd625d 100644 --- a/src/components/MarkdownEditor.vue +++ b/src/components/MarkdownEditor.vue @@ -25,6 +25,7 @@ export default { }, computed: { compiledMarkdown: function () { + this.$emit('update-description', this.input) return marked(this.input) } } diff --git a/src/components/ModelUpload.vue b/src/components/ModelUpload.vue index f5e52b64caf1d90649d74de5a17d3770d80d62cf..83a4aa84666ac9a73bfa5fda129b839e69c043eb 100644 --- a/src/components/ModelUpload.vue +++ b/src/components/ModelUpload.vue @@ -1,8 +1,19 @@ <template> <div class="modal-card"> <b-progress :value="progress" size="is-large" show-value :type="status"> - {{message}} + {{statusMessage}} </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> </template> @@ -19,10 +30,11 @@ export default { }, data () { return { - message: '', progress: 0, status: 'is-primary', - stausMessage: '', + statusMessage: '', + subProgress: false, + subMessage: '', modelId: null } }, @@ -33,28 +45,31 @@ export default { setProgress (step) { switch (step) { case 0: - this.message = 'Sending description' + this.statusMessage = 'Sending description' this.progress = 25 break case 1: - this.message = 'Sending model file' + this.statusMessage = 'Sending model file' this.progress = 50 break case 2: - this.message = 'Sending custom layers model' + this.statusMessage = 'Sending custom layers model' this.progress = 75 break case 3: - this.message = 'Upload completed !' + this.statusMessage = 'Upload completed !' this.progress = 100 this.status = 'is-success' break } }, setError (message) { - this.message = message + this.statusMessage = message this.status = 'is-danger' }, + setSubMessage (message) { + this.subMessage = message + }, async saveModel () { this.setProgress(0) var response = await this.uploadModel() @@ -125,18 +140,22 @@ export default { }, body: data }) - return response !== 200 + if (response.status !== 200) return false + return true } catch (error) { - return null + return false } }, async uploadLayers () { + this.subProgress = true const token = await localStorage.getItem('token') for (var i = 0; i < this.model.customLayers.length; i++) { const layer = this.model.customLayers[i] const data = new FormData() const url = this.$serverurl + 'models?id=' + this.modelId + '/layer?id=' + i + this.subMessage = 'Uploading ' + layer.name + console.log('Upload layers ' + i + ' | ' + layer.file) if (layer.file === undefined) continue @@ -150,11 +169,12 @@ export default { }, body: data }) - if (response !== 200) return false + if (response.status !== 200) return false } catch (error) { return false } } + this.subProgress = false return true } } diff --git a/src/components/ModelValidator.vue b/src/components/ModelValidator.vue new file mode 100644 index 0000000000000000000000000000000000000000..d100af2e24a9f1b19fa8938fe07c76586b0a2552 --- /dev/null +++ b/src/components/ModelValidator.vue @@ -0,0 +1,38 @@ +<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> diff --git a/src/components/TagEditor.vue b/src/components/TagEditor.vue index 5de160a0cd6b2b4068e48484d2d61e217ad00be7..7a565b4d6505124e7024ffced9f484128f99bd05 100644 --- a/src/components/TagEditor.vue +++ b/src/components/TagEditor.vue @@ -57,11 +57,9 @@ export default { computed: { filteredTags () { if (this.selectedCategory === null) return [] - console.log('SELECT ' + this.selectedCategory) var category = this.tagList.filter((tag) => { return tag.name === this.selectedCategory }) - console.log('SELECT ' + category) return category[0].types.filter((type) => { return type .toString() @@ -127,12 +125,17 @@ export default { type: this.tagName }) this.tagName = '' + this.syncToParent() }, removeTagFromModel (tag) { const index = this.tags.indexOf(tag) if (index > -1) { this.tags.splice(index, 1) } + this.syncToParent() + }, + syncToParent () { + this.$emit('update-tags', this.tags) } } } diff --git a/src/views/Model.vue b/src/views/Model.vue index 17e0c51e448282799d9e0ad77c966d7a4380b7b7..faa6a63e7f0ec6ac917e752f8f0e4682a3af3091 100644 --- a/src/views/Model.vue +++ b/src/views/Model.vue @@ -1,8 +1,8 @@ <template> <div class="model container"> <div v-if="isError" class="error"> - <h1 class="title is-1">Erreur</h1> - <h2 class="subtitle">Modèle introuvable</h2> + <h1 class="title is-1">Error</h1> + <h2 class="subtitle">Cant find model</h2> </div> <div v-else> <div class="columns box"> diff --git a/src/views/ModelAdd.vue b/src/views/ModelAdd.vue index 46f7b29606042debd091c7c42fe85bf4728d544b..851b125e77c945292ff987162435967f6383c406 100644 --- a/src/views/ModelAdd.vue +++ b/src/views/ModelAdd.vue @@ -11,12 +11,12 @@ </b-field> <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-step-item> <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 step="3" label="Files" clickable> @@ -31,11 +31,12 @@ </div> </section> </b-upload> + <span v-if="model.file" class="file-name">{{ model.file.name }}</span> </b-field> </b-step-item> <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 step="5" label="Finish" clickable>