diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue
index c4fae4d6d27..e3dca804b09 100644
--- a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue
+++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue
@@ -33,18 +33,7 @@
User with
any of these roles can manage permissions on this folder.
@@ -52,14 +41,14 @@
Roles that can add items to this folder
-
+
User with any of these roles can add items to this folder (folders and datasets).
Roles that can modify this folder
-
+
User with any of these roles can modify this folder (name, etc.).
@@ -69,6 +58,7 @@
title="Save modifications"
class="btn btn-secondary toolbtn_save_permissions primary-button"
type="button"
+ @click="postPermissions"
>
Save
@@ -86,9 +76,12 @@ import Utils from "utils/utils";
import { Toast } from "ui/toast";
import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome";
import { getGalaxyInstance } from "app";
-import Multiselect from "vue-multiselect";
-import "vue-multiselect/dist/vue-multiselect.min.css";
+import PermissionsInputField from "./PermissionsInputField.vue";
+import "vue-multiselect/dist/vue-multiselect.min.css";
+import VueObserveVisibility from "vue-observe-visibility";
+
+Vue.use(VueObserveVisibility);
Vue.use(BootstrapVue);
export default {
@@ -99,15 +92,20 @@ export default {
},
},
components: {
- Multiselect,
+ PermissionsInputField,
},
data() {
return {
- permissisons: undefined,
+ permissions: undefined,
folder: undefined,
is_admin: undefined,
- options: { roles: [] },
value: null,
+ add_ids: [],
+ modify_ids: [],
+ manage_ids: [],
+ add_type: "add_type",
+ manage_type: "manage_type",
+ modify_type: "moddify_type",
};
},
created() {
@@ -117,27 +115,45 @@ export default {
this.is_admin = Galaxy.user.attributes.is_admin;
this.services.getFolderPermissions(this.folder_id).then((response) => {
- this.permissisons = response;
+ this.permissions = response;
});
this.services.getFolder(this.folder_id).then((response) => {
this.folder = response;
});
- this.getSelectOptions();
},
+
methods: {
- getSelectOptions() {
- this.services.getSelectOptions(this.folder_id, true, 1).then((response) => {
- console.log(response)
- if (this.options.page > 1) {
- this.options.roles.concat(response.roles);
- } else {
- this.options = response;
- }
- });
- },
getParentLink() {
return `${this.root}library/folders/${this.folder.parent_id}`;
},
+ setUserPermissionsPreferences(ids, type) {
+ switch (type) {
+ case "manage":
+ this.manage_ids = ids;
+ break;
+ case "add":
+ this.add_ids = ids;
+ break;
+ case "modify":
+ this.modify_ids = ids;
+ break;
+ }
+ },
+ postPermissions() {
+ this.services.setPermissions(
+ this.add_ids,
+ this.manage_ids,
+ this.modify_ids,
+ (fetched_permissions) => {
+ Toast.success("Permissions saved.");
+ this.permissions = fetched_permissions;
+ },
+ (error) => {
+ Toast.error("An error occurred while attempting to set folder permissions.");
+ console.error(error);
+ }
+ );
+ },
},
};
diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue
new file mode 100644
index 00000000000..5a3b5f4589c
--- /dev/null
+++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js
index 7ef7f581279..77ed6121a87 100644
--- a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js
+++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js
@@ -25,8 +25,7 @@ export class Services {
rethrowSimple(e);
}
}
- async getSelectOptions(id, is_library_access, page, query) {
- const page_limit = 10;
+ async getSelectOptions(id, is_library_access, page, page_limit, query) {
const url = `${this.root}api/folders/${id}/permissions?scope=available&is_library_access=${is_library_access}&page_limit=${page_limit}&page=${page}`;
try {
const response = await axios.get(url);
@@ -35,4 +34,23 @@ export class Services {
rethrowSimple(e);
}
}
+ async setPermisions(access_ids, add_ids, manage_ids, modify_ids, onSuccess, onError) {
+ var formData = new FormData();
+ formData.append("add_ids[]", access_ids);
+ formData.append("manage_ids[]", manage_ids);
+ formData.append("modify_ids[]", modify_ids);
+
+ axios({
+ method: "post",
+ url: "`${getAppRoot()}api/libraries/${self.id}/permissions?action=set_permissions`",
+ data: formData,
+ headers: { "Content-Type": "multipart/form-data" },
+ })
+ .then(function (response) {
+ onSuccess(response);
+ })
+ .catch((response) => {
+ onError(response);
+ });
+ }
}