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 2022/04/26 20:08:56 UTC

[airavata-django-portal] 02/06: AIRAVATA-3565 Ext User Profile UI with load/saving multi_choice values

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch AIRAVATA-3562
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 308744c4002b09588c23fdd67ea220076f4404a7
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Tue Apr 26 13:26:37 2022 -0400

    AIRAVATA-3565 Ext User Profile UI with load/saving multi_choice values
---
 .../js/components/ExtendedUserProfileEditor.vue    |  2 +
 .../ExtendedUserProfileMultiChoiceFieldEditor.vue  | 49 ++++++++++++++++++++++
 .../js/store/modules/extendedUserProfile.js        | 25 +++++++++++
 3 files changed, 76 insertions(+)

diff --git a/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileEditor.vue b/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileEditor.vue
index 3b1cfea1..052d2893 100644
--- a/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileEditor.vue
+++ b/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileEditor.vue
@@ -12,6 +12,7 @@
 
 <script>
 import { mapGetters } from "vuex";
+import ExtendedUserProfileMultiChoiceFieldEditor from "./ExtendedUserProfileMultiChoiceFieldEditor.vue";
 import ExtendedUserProfileSingleChoiceFieldEditor from "./ExtendedUserProfileSingleChoiceFieldEditor.vue";
 import ExtendedUserProfileTextFieldEditor from "./ExtendedUserProfileTextFieldEditor.vue";
 export default {
@@ -23,6 +24,7 @@ export default {
       const fieldTypeEditors = {
         text: ExtendedUserProfileTextFieldEditor,
         single_choice: ExtendedUserProfileSingleChoiceFieldEditor,
+        multi_choice: ExtendedUserProfileMultiChoiceFieldEditor,
       };
 
       if (extendedUserProfileField.field_type in fieldTypeEditors) {
diff --git a/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileMultiChoiceFieldEditor.vue b/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileMultiChoiceFieldEditor.vue
new file mode 100644
index 00000000..2a17d614
--- /dev/null
+++ b/django_airavata/apps/auth/static/django_airavata_auth/js/components/ExtendedUserProfileMultiChoiceFieldEditor.vue
@@ -0,0 +1,49 @@
+<template>
+  <b-form-group
+    :label="extendedUserProfileField.name"
+    :description="extendedUserProfileField.help_text"
+  >
+    <b-form-checkbox-group
+      v-model="value"
+      :options="options"
+      stacked
+    ></b-form-checkbox-group>
+  </b-form-group>
+</template>
+
+<script>
+import { mapGetters, mapMutations } from "vuex";
+export default {
+  props: ["extendedUserProfileField"],
+  computed: {
+    ...mapGetters("extendedUserProfile", ["getMultiChoiceValue"]),
+    value: {
+      get() {
+        return this.getMultiChoiceValue(this.extendedUserProfileField.id);
+      },
+      set(value) {
+        this.setMultiChoiceValue({
+          value,
+          id: this.extendedUserProfileField.id,
+        });
+      },
+    },
+    options() {
+      return this.extendedUserProfileField &&
+        this.extendedUserProfileField.choices
+        ? this.extendedUserProfileField.choices.map((choice) => {
+            return {
+              value: choice.id,
+              text: choice.display_text,
+            };
+          })
+        : [];
+    },
+  },
+  methods: {
+    ...mapMutations("extendedUserProfile", ["setMultiChoiceValue"]),
+  },
+};
+</script>
+
+<style></style>
diff --git a/django_airavata/apps/auth/static/django_airavata_auth/js/store/modules/extendedUserProfile.js b/django_airavata/apps/auth/static/django_airavata_auth/js/store/modules/extendedUserProfile.js
index 85c085d7..e55c5353 100644
--- a/django_airavata/apps/auth/static/django_airavata_auth/js/store/modules/extendedUserProfile.js
+++ b/django_airavata/apps/auth/static/django_airavata_auth/js/store/modules/extendedUserProfile.js
@@ -24,6 +24,16 @@ const getters = {
       return null;
     }
   },
+  getMultiChoiceValue: (state) => (id) => {
+    const value = state.extendedUserProfileValues.find(
+      (v) => v.ext_user_profile_field === id
+    );
+    if (value && value.choices) {
+      return value.choices;
+    } else {
+      return null;
+    }
+  },
 };
 
 const actions = {
@@ -89,6 +99,21 @@ const mutations = {
       });
     }
   },
+  setMultiChoiceValue(state, { value, id }) {
+    const profileValue = state.extendedUserProfileValues.find(
+      (v) => v.ext_user_profile_field === id
+    );
+    if (profileValue) {
+      profileValue.choices = value;
+      profileValue.other_value = "";
+    } else {
+      state.extendedUserProfileValues.push({
+        value_type: "multi_choice",
+        ext_user_profile_field: id,
+        choices: value,
+      });
+    }
+  },
   updateExperimentInputValue(state, { extendedUserProfileValue }) {
     const index = state.extendedUserProfileValues.findIndex(
       (v) =>