From 7eeba235b292b40b94d6518c0ef69271ec2b5377 Mon Sep 17 00:00:00 2001 From: Oleg Zharkov Date: Fri, 12 Feb 2021 17:20:59 +0100 Subject: [PATCH] implement permissions toggle --- .../LibraryFolderDatasetPermissions.vue | 49 ++++++++++++------- .../PermissionsInputField.vue | 5 +- .../LibraryFolderPermissions/services.js | 11 +++-- 3 files changed, 43 insertions(+), 22 deletions(-) diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue index ebe78365d38..c7f5b2050d8 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue @@ -60,20 +60,21 @@

You can - - remove all access restrictions - on this dataset. + + make this dataset private + + to you.

You can - - make this dataset private - to you. + + remove all access restrictions + + on this dataset.

{ - this.access_dataset_roles = extractRoles(fetched_permissions.access_dataset_roles); - this.modify_item_roles = extractRoles(fetched_permissions.modify_item_roles); - this.manage_dataset_roles = extractRoles(fetched_permissions.manage_dataset_roles); - }); + this.services + .getDatasetPermissions(this.dataset_id) + .then((fetched_permissions) => this.assignFetchedPermissions(fetched_permissions)); this.services.getDataset(this.dataset_id).then((response) => { this.dataset = response; }); @@ -181,12 +180,26 @@ export default { }, }, methods: { - makeDatasetPrivate() { - this.services.makeDatasetPrivate( + assignFetchedPermissions(fetched_permissions) { + this.access_dataset_roles = extractRoles(fetched_permissions.access_dataset_roles); + this.modify_item_roles = extractRoles(fetched_permissions.modify_item_roles); + this.manage_dataset_roles = extractRoles(fetched_permissions.manage_dataset_roles); + console.log(this.access_dataset_roles); + }, + toggleDatasetPrivacy(isMakePrivate) { + this.services.toggleDatasetPrivacy( this.dataset_id, + isMakePrivate, (fetched_permissions) => { - Toast.success("Permissions saved."); - this.permissions = fetched_permissions; + Toast.success( + `${ + isMakePrivate + ? "The dataset is now private to you." + : "Access to this dataset is now unrestricted." + }` + ); + this.assignFetchedPermissions(fetched_permissions); + this.$refs.access_field.assignValue(this.access_dataset_roles); }, (error) => { Toast.error("An error occurred while attempting to set folder permissions."); @@ -211,7 +224,7 @@ export default { ], (fetched_permissions) => { Toast.success("Permissions saved."); - this.permissions = fetched_permissions; + this.assignFetchedPermissions(fetched_permissions); }, (error) => { Toast.error("An error occurred while attempting to set folder permissions."); diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue index f2dcfa8a9ff..c5125c8061d 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue @@ -90,7 +90,7 @@ export default { created() { this.services = new Services({ root: this.root }); // Avoid mutating a prop directly - this.value = this.initial_value; + this.assignValue(this.initial_value); this.getSelectOptions(); }, computed: { @@ -122,6 +122,9 @@ export default { this.searchValue = searchValue; this.getSelectOptions(true); }, + assignValue(value) { + this.value = value; + }, }, }; diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js index a173b3fc4a4..98659dd7935 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js @@ -1,6 +1,7 @@ import axios from "axios"; import { rethrowSimple } from "utils/simple-error"; import { getAppRoot } from "onload/loadConfig"; +import $ from "jquery"; export class Services { constructor(options = {}) { @@ -76,11 +77,15 @@ export class Services { onError(response); }); } - async makeDatasetPrivate(id, onSuccess, onError) { + async toggleDatasetPrivacy(id, isMakePrivate, onSuccess, onError) { await axios - .get(`${getAppRoot()}api/libraries/datasets/${id}/permissions?action=make_private`) + .post( + `${getAppRoot()}api/libraries/datasets/${id}/permissions?action=${ + isMakePrivate ? "make_private" : "remove_restrictions" + }` + ) .then((fetched_permissions) => { - onSuccess(fetched_permissions); + onSuccess(fetched_permissions.data); }) .catch((response) => { onError(response);