This is an automated email from the ASF dual-hosted git repository. machristie pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git
commit 6b5ade60684c2cc72873a28c786cfc279fd8462b Author: Marcus Christie <[email protected]> AuthorDate: Fri Nov 17 13:54:54 2017 -0500 AIRAVATA-2538 client side validation (WIP) --- .../api/static/django_airavata_api/js/models/Project.js | 10 ++++++++++ .../js/views/ProjectListContainer.vue | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/Project.js b/django_airavata/apps/api/static/django_airavata_api/js/models/Project.js index f5d1608..2180806 100644 --- a/django_airavata/apps/api/static/django_airavata_api/js/models/Project.js +++ b/django_airavata/apps/api/static/django_airavata_api/js/models/Project.js @@ -13,6 +13,16 @@ export default class Project extends BaseModel { this.copyData(data); } + validateForCreate() { + console.log("validateForCreate", this.name); + if (this.name === null || this.name.trim() === "") { + return { + name: ["Please provide a name."] + } + } + return null; + } + toJSONForCreate() { // Remaining fields just get defaulted return JSON.stringify(this, ["name", "description"]); diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue index 1684f98..d1347b2 100644 --- a/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue +++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/views/ProjectListContainer.vue @@ -10,16 +10,16 @@ <!-- TODO: factor modal out into separate, reusable component --> <b-modal id="modal-new-project" ref="modalNewProject" title="Create New Project" v-on:ok="onCreateProject"> <b-form @submit="onCreateProject" novalidate> - <b-form-group label="Project Name" label-for="new-project-name" v-bind:feedback="newProjectFields.name.feedback" v-bind:state="newProjectFields.name.state"> + <b-form-group label="Project Name" label-for="new-project-name" v-bind:feedback="newProjectNameFeedback" v-bind:state="newProjectNameState"> <b-form-input id="new-project-name" type="text" v-model="newProject.name" required placeholder="Project name" - v-bind:state="newProjectFields.name.state"></b-form-input> + v-bind:state="newProjectNameState"></b-form-input> </b-form-group> <b-form-group label="Project Description" label-for="new-project-description"> <b-form-textarea id="new-project-description" type="text" v-model="newProject.description" - placeholder="Project description" + placeholder="(Optional) Project description" :rows="3"></b-form-textarea> </b-form-group> </b-form> @@ -99,6 +99,15 @@ export default { projects: function() { return this.projectsPaginator ? this.projectsPaginator.results : null; }, + newProjectValidationData: function() { + return this.newProject.validateForCreate(); + }, + newProjectNameState: function() { + return (this.newProjectValidationData && 'name' in this.newProjectValidationData) ? 'invalid' : null; + }, + newProjectNameFeedback: function() { + return (this.newProjectValidationData && 'name' in this.newProjectValidationData) ? this.newProjectValidationData.name.join('; ') : null; + }, }, beforeMount: function () { services.ProjectService.list(this.initialProjectsData) -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
