From c1c7015c62d7041c775efe015864b02958dda1f0 Mon Sep 17 00:00:00 2001 From: Jacob Nesbitt Date: Mon, 25 Jul 2022 14:08:53 -0400 Subject: [PATCH 1/3] Add dialog if removing self from dandiset --- .../components/DLP/DandisetOwnersDialog.vue | 64 ++++++++++++++++--- 1 file changed, 54 insertions(+), 10 deletions(-) diff --git a/web/src/components/DLP/DandisetOwnersDialog.vue b/web/src/components/DLP/DandisetOwnersDialog.vue index 7a97c907a..34b7d8324 100644 --- a/web/src/components/DLP/DandisetOwnersDialog.vue +++ b/web/src/components/DLP/DandisetOwnersDialog.vue @@ -100,6 +100,35 @@
+ + + + Remove yourself from this Dandiset? + + + To regain ownership of this dandiset, you will + need another owner or an admin to add you. + + + + + Cancel + + + Confirm + + + + dandiRest.user); + function ownerIsCurrentUser(owner: User) { + return user.value && user.value.username === owner.username; + } + + const selfRemovalWarningDialog = ref(false); function removeOwner(owner: User) { - newOwners.value.splice(newOwners.value.map( - (u: User) => u.username, - ).indexOf(owner.username), 1); + // If current user, open dialog and wait for second call to this function + if (ownerIsCurrentUser(owner) && selfRemovalWarningDialog.value === false) { + selfRemovalWarningDialog.value = true; + return; + } + + // Remove at index + const index = newOwners.value.findIndex((u) => u.username === owner.username); + newOwners.value.splice(index, 1); + + // Set dialog to false in any case + selfRemovalWarningDialog.value = false; } - function checkBoxHandler(user: User) { + function checkBoxHandler(_user: User) { const selectedUsersUsernames = selectedUsers.value.map((u: User) => u.username); - if (selectedUsersUsernames.includes(user.username)) { + if (selectedUsersUsernames.includes(_user.username)) { selectedUsers.value = selectedUsers.value.splice( - selectedUsersUsernames.indexOf(user.username), 1, + selectedUsersUsernames.indexOf(_user.username), 1, ); } else { - selectedUsers.value.push(user); + selectedUsers.value.push(_user); } } @@ -294,14 +338,15 @@ export default defineComponent({ } } - const user = computed(() => dandiRest.user); - return { searchQuery, searchResults, newOwners, throttledUpdate, addOwner, + user, + ownerIsCurrentUser, + selfRemovalWarningDialog, removeOwner, isSelected, save, @@ -309,7 +354,6 @@ export default defineComponent({ addSelected, checkBoxHandler, selectedUsers, - user, adminWarningDisplay, }; }, From 876f73f2d6499b3dccb692bf947814751bea44ba Mon Sep 17 00:00:00 2001 From: Jacob Nesbitt Date: Mon, 25 Jul 2022 14:16:04 -0400 Subject: [PATCH 2/3] Update type of removeOwner --- web/src/components/DLP/DandisetOwnersDialog.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/src/components/DLP/DandisetOwnersDialog.vue b/web/src/components/DLP/DandisetOwnersDialog.vue index 34b7d8324..5570b6a0c 100644 --- a/web/src/components/DLP/DandisetOwnersDialog.vue +++ b/web/src/components/DLP/DandisetOwnersDialog.vue @@ -284,7 +284,11 @@ export default defineComponent({ } const selfRemovalWarningDialog = ref(false); - function removeOwner(owner: User) { + function removeOwner(owner: User | null) { + if (owner === null) { + throw new Error('Cannot remove null owner from dandiset!'); + } + // If current user, open dialog and wait for second call to this function if (ownerIsCurrentUser(owner) && selfRemovalWarningDialog.value === false) { selfRemovalWarningDialog.value = true; From 84a0c97d31b1981b8046788707fe05fb2fef4645 Mon Sep 17 00:00:00 2001 From: Jacob Nesbitt Date: Mon, 25 Jul 2022 15:27:47 -0400 Subject: [PATCH 3/3] Remove button elevations Co-authored-by: Mike VanDenburgh <37340715+mvandenburgh@users.noreply.github.com> --- web/src/components/DLP/DandisetOwnersDialog.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/src/components/DLP/DandisetOwnersDialog.vue b/web/src/components/DLP/DandisetOwnersDialog.vue index 5570b6a0c..02592e21c 100644 --- a/web/src/components/DLP/DandisetOwnersDialog.vue +++ b/web/src/components/DLP/DandisetOwnersDialog.vue @@ -116,12 +116,14 @@ Cancel Confirm