From c31b35742902087f4580fa1c0c42fc923d7ca880 Mon Sep 17 00:00:00 2001 From: Jon Koops Date: Tue, 9 Nov 2021 15:28:03 +0100 Subject: [PATCH] Ask for confirmation before unlinking users (#1477) * Ask for confirmation before unlinking users * Refresh data after saving --- .../UserFederationLdapSettings.tsx | 28 +++++++++++++++++-- src/user-federation/messages.ts | 4 +++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/user-federation/UserFederationLdapSettings.tsx b/src/user-federation/UserFederationLdapSettings.tsx index d894b71bbe..62ed375fcd 100644 --- a/src/user-federation/UserFederationLdapSettings.tsx +++ b/src/user-federation/UserFederationLdapSettings.tsx @@ -1,4 +1,4 @@ -import React from "react"; +import React, { useState } from "react"; import { ActionGroup, AlertVariant, @@ -46,6 +46,7 @@ type ldapComponentRepresentation = ComponentRepresentation & { type LdapSettingsHeaderProps = { onChange: (value: string) => void; value: string; + editMode?: string | string[]; save: () => void; toggleDeleteDialog: () => void; toggleRemoveUsersDialog: () => void; @@ -54,6 +55,7 @@ type LdapSettingsHeaderProps = { const LdapSettingsHeader = ({ onChange, value, + editMode, save, toggleDeleteDialog, toggleRemoveUsersDialog, @@ -72,6 +74,13 @@ const LdapSettingsHeader = ({ }, }); + const [toggleUnlinkUsersDialog, UnlinkUsersDialog] = useConfirmDialog({ + titleKey: "user-federation:userFedUnlinkUsersConfirmTitle", + messageKey: "user-federation:userFedUnlinkUsersConfirm", + continueButtonLabel: "user-federation:unlinkUsers", + onConfirm: () => unlinkUsers(), + }); + const syncChangedUsers = async () => { try { if (id) { @@ -130,6 +139,7 @@ const LdapSettingsHeader = ({ return ( <> + {!id ? ( ) : ( @@ -142,7 +152,11 @@ const LdapSettingsHeader = ({ {t("syncAllUsers")} , - + {t("unlinkUsers")} , @@ -181,6 +195,11 @@ export default function UserFederationLdapSettings() { const { id } = useParams<{ id: string }>(); const { addAlert, addError } = useAlerts(); + const [component, setComponent] = useState(); + const [refreshCount, setRefreshCount] = useState(0); + + const editMode = component?.config?.editMode; + const refresh = () => setRefreshCount((count) => count + 1); useFetch( async () => { @@ -192,11 +211,12 @@ export default function UserFederationLdapSettings() { (fetchedComponent) => { if (fetchedComponent) { setupForm(fetchedComponent); + setComponent(fetchedComponent); } else if (id) { throw new Error(t("common:notFound")); } }, - [] + [refreshCount] ); const setupForm = (component: ComponentRepresentation) => { @@ -250,6 +270,7 @@ export default function UserFederationLdapSettings() { await adminClient.components.update({ id }, component); } addAlert(t(id ? "saveSuccess" : "createSuccess"), AlertVariant.success); + refresh(); } catch (error) { addError(`user-federation:${id ? "saveError" : "createError"}`, error); } @@ -340,6 +361,7 @@ export default function UserFederationLdapSettings() { control={form.control} render={({ onChange, value }) => ( save(form.getValues())} onChange={onChange} diff --git a/src/user-federation/messages.ts b/src/user-federation/messages.ts index 512b9a3606..904d445174 100644 --- a/src/user-federation/messages.ts +++ b/src/user-federation/messages.ts @@ -107,6 +107,10 @@ export default { userFedDisableConfirm: "If you disable this user federation provider, it will not be considered for queries and imported users will be disabled and read-only until the provider is enabled again.", + userFedUnlinkUsersConfirmTitle: "Unlink all users?", + userFedUnlinkUsersConfirm: + "Do you want to unlink all the users? Any users without a password in the database will not be able to authenticate anymore.", + removeImportedUsers: "Remove imported users?", removeImportedUsersMessage: "Do you really want to remove all imported users?",