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]>.

Reply via email to