You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2018/04/23 17:23:24 UTC

[airavata-django-portal] 03/03: AIRAVATA-2611 InputEditorMixin for common input editor functionality

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 af9df3c136d8f10f030f6d9f938d943aedd64895
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Mon Apr 23 13:22:45 2018 -0400

    AIRAVATA-2611 InputEditorMixin for common input editor functionality
---
 .../experiment/input-editors/InputEditorMixin.js   | 63 ++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/input-editors/InputEditorMixin.js b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/input-editors/InputEditorMixin.js
new file mode 100644
index 0000000..cd56b99
--- /dev/null
+++ b/django_airavata/apps/workspace/static/django_airavata_workspace/js/components/experiment/input-editors/InputEditorMixin.js
@@ -0,0 +1,63 @@
+// InputEditorMixin: mixin for experiment InputEditors, provides basic v-model
+// and validation functionality and defines the basic props interface
+// (experimentInput and experiment).
+import {models} from 'django-airavata-api'
+export default {
+    props: {
+        value: {
+            required: true,
+        },
+        experiment: {
+            type: models.Experiment,
+            required: true,
+        },
+        experimentInput: {
+            type: models.InputDataObjectType,
+            required: true,
+        },
+    },
+    data () {
+        return {
+            data: this.value,
+            inputHasBegun: false,
+        }
+    },
+    computed: {
+        validationResults: function() {
+            return this.experimentInput.validate(this.experiment, this.data);
+        },
+        valid: function() {
+            return Object.keys(this.validationResults).length === 0;
+        },
+        validationFeedback: function() {
+            // Only display validation feedback after the user has provided
+            // input so that missing required value errors are only displayed
+            // after interacting with the input editor
+            return this.inputHasBegun && 'value' in this.validationResults
+                ? this.validationResults['value']
+                : null;
+        },
+        validationState: function() {
+            return this.inputHasBegun && 'value' in this.validationResults
+                ? 'invalid'
+                : null;
+        },
+    },
+    methods: {
+        valueChanged: function() {
+            this.inputHasBegun = true;
+            this.$emit('input', this.data);
+            this.checkValidation();
+        },
+        checkValidation: function() {
+            if (this.valid) {
+                this.$emit('valid');
+            } else {
+                this.$emit('invalid');
+            }
+        }
+    },
+    mounted: function() {
+        this.checkValidation();
+    }
+}
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
machristie@apache.org.