From 6a7f2da95b104c1d7336b49e6aeb5e6ae7150b4e Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle Date: Fri, 23 May 2025 11:10:32 +0200 Subject: [PATCH] Radio>Switch --- .../security/ConfirmJoinPolicyDialog.vue | 2 +- .../settings/workspaces/[slug]/security.vue | 107 +++++++++++------- 2 files changed, 67 insertions(+), 42 deletions(-) diff --git a/packages/frontend-2/components/settings/workspaces/security/ConfirmJoinPolicyDialog.vue b/packages/frontend-2/components/settings/workspaces/security/ConfirmJoinPolicyDialog.vue index 8f17b0931..2659680bf 100644 --- a/packages/frontend-2/components/settings/workspaces/security/ConfirmJoinPolicyDialog.vue +++ b/packages/frontend-2/components/settings/workspaces/security/ConfirmJoinPolicyDialog.vue @@ -2,7 +2,7 @@

diff --git a/packages/frontend-2/pages/settings/workspaces/[slug]/security.vue b/packages/frontend-2/pages/settings/workspaces/[slug]/security.vue index 335725970..d6bf22ac9 100644 --- a/packages/frontend-2/pages/settings/workspaces/[slug]/security.vue +++ b/packages/frontend-2/pages/settings/workspaces/[slug]/security.vue @@ -113,20 +113,35 @@ :show-label="false" /> -

-

- How do people join? -

- +
+
+
+

+ Allow verified domain users to auto-join +

+

+ When enabled, users with an email address from your verified domain + list will be able to join without admin approval. +

+
+ +
@@ -142,7 +157,7 @@ v-if="showConfirmJoinPolicyDialog" v-model:open="showConfirmJoinPolicyDialog" @confirm="handleJoinPolicyConfirm" - @cancel="pendingJoinPolicy = joinPolicy" + @cancel="pendingJoinPolicy = undefined" /> @@ -223,7 +238,6 @@ const showRemoveDomainDialog = ref(false) const removeDialogDomain = ref() const blockedDomainItems: ShallowRef = shallowRef(blockedDomains) -const joinPolicy = ref(JoinPolicy.AdminApproval) const showConfirmJoinPolicyDialog = ref(false) const pendingJoinPolicy = ref() @@ -290,6 +304,28 @@ const isDomainDiscoverabilityEnabled = computed({ // eslint-disable-next-line camelcase workspace_id: workspace.value?.id }) + + // If turning off discoverability, also turn off auto-join + if (!newVal && workspace.value.discoverabilityAutoJoinEnabled) { + const autoJoinResult = await updateAutoJoin({ + input: { + id: workspace.value.id, + discoverabilityAutoJoinEnabled: false + } + }).catch(convertThrowIntoFetchResult) + + if (autoJoinResult?.data) { + workspace.value = { + ...workspace.value, + discoverabilityAutoJoinEnabled: false + } + mixpanel.track('Workspace Join Policy Updated', { + value: 'admin-approval', + // eslint-disable-next-line camelcase + workspace_id: workspace.value.id + }) + } + } } } }) @@ -310,10 +346,12 @@ const tooltipText = computed(() => { }) const getCheckedValue = computed(() => { - if (showConfirmJoinPolicyDialog.value) { + if (pendingJoinPolicy.value) { return pendingJoinPolicy.value } - return joinPolicy.value + return workspace.value?.discoverabilityAutoJoinEnabled + ? JoinPolicy.AutoJoin + : JoinPolicy.AdminApproval }) const addDomain = async () => { @@ -374,13 +412,12 @@ const handleJoinPolicyChange = async (newValue: JoinPolicy) => { // eslint-disable-next-line camelcase workspace_id: workspace.value.id }) - joinPolicy.value = newValue } } } const handleJoinPolicyConfirm = async () => { - if (!workspace.value?.id) return + if (!workspace.value?.id || !pendingJoinPolicy.value) return const result = await updateAutoJoin({ input: { @@ -389,7 +426,15 @@ const handleJoinPolicyConfirm = async () => { } }).catch(convertThrowIntoFetchResult) - if (result?.data && pendingJoinPolicy.value) { + if (result?.data) { + workspace.value = { + ...workspace.value, + discoverabilityAutoJoinEnabled: true + } + + showConfirmJoinPolicyDialog.value = false + pendingJoinPolicy.value = undefined + triggerNotification({ type: ToastNotificationType.Success, title: 'New user policy updated', @@ -400,26 +445,6 @@ const handleJoinPolicyConfirm = async () => { // eslint-disable-next-line camelcase workspace_id: workspace.value.id }) - joinPolicy.value = pendingJoinPolicy.value } } - -const radioOptions = [ - { - title: 'Admin has to accept the request', - value: JoinPolicy.AdminApproval - }, - { - title: 'Allow people to auto-join', - value: JoinPolicy.AutoJoin - } -] as const - -watch( - () => workspace.value?.discoverabilityAutoJoinEnabled, - (newVal) => { - joinPolicy.value = newVal ? JoinPolicy.AutoJoin : JoinPolicy.AdminApproval - }, - { immediate: true } -)