fix: reset state on dialog close and improve dialog open handling

pull/5108/head
Steven 4 weeks ago
parent 5ad2038b1a
commit 6d1485d168

@ -129,8 +129,36 @@ function CreateIdentityProviderDialog({ open, onOpenChange, identityProvider, on
const [selectedTemplate, setSelectedTemplate] = useState<string>("GitHub");
const isCreating = identityProvider === undefined;
// Reset state when dialog is closed
useEffect(() => {
if (identityProvider) {
if (!open) {
// Reset to default state when dialog is closed
setBasicInfo({
title: "",
identifierFilter: "",
});
setType(IdentityProvider_Type.OAUTH2);
setOAuth2Config({
clientId: "",
clientSecret: "",
authUrl: "",
tokenUrl: "",
userInfoUrl: "",
scopes: [],
fieldMapping: FieldMapping.fromPartial({
identifier: "",
displayName: "",
email: "",
}),
});
setOAuth2Scopes("");
setSelectedTemplate("GitHub");
}
}, [open]);
// Load existing identity provider data when editing
useEffect(() => {
if (open && identityProvider) {
setBasicInfo({
title: identityProvider.title,
identifierFilter: identityProvider.identifierFilter,
@ -142,10 +170,11 @@ function CreateIdentityProviderDialog({ open, onOpenChange, identityProvider, on
setOAuth2Scopes(oauth2Config.scopes.join(" "));
}
}
}, [identityProvider]);
}, [open, identityProvider]);
// Load template data when creating new IDP
useEffect(() => {
if (!isCreating) {
if (!isCreating || !open) {
return;
}
@ -162,7 +191,7 @@ function CreateIdentityProviderDialog({ open, onOpenChange, identityProvider, on
setOAuth2Scopes(oauth2Config.scopes.join(" "));
}
}
}, [selectedTemplate]);
}, [selectedTemplate, isCreating, open]);
const handleCloseBtnClick = () => {
onOpenChange(false);

@ -54,6 +54,14 @@ const SSOSection = () => {
setEditingIdentityProvider(undefined);
};
const handleDialogOpenChange = (open: boolean) => {
setIsCreateDialogOpen(open);
// Clear editing state when dialog is closed
if (!open) {
setEditingIdentityProvider(undefined);
}
};
return (
<div className="w-full flex flex-col gap-2 pt-2 pb-4">
<div className="w-full flex flex-row justify-between items-center gap-1">
@ -100,7 +108,7 @@ const SSOSection = () => {
<CreateIdentityProviderDialog
open={isCreateDialogOpen}
onOpenChange={setIsCreateDialogOpen}
onOpenChange={handleDialogOpenChange}
identityProvider={editingIdentityProvider}
onSuccess={handleDialogSuccess}
/>

@ -74,7 +74,18 @@ const DialogContent = React.forwardRef<
>(({ className, children, showCloseButton = true, size, ...props }, ref) => (
<DialogPortal>
<DialogOverlay />
<DialogPrimitive.Content ref={ref} className={cn(dialogContentVariants({ size }), className)} {...props}>
<DialogPrimitive.Content
ref={ref}
className={cn(dialogContentVariants({ size }), className)}
onOpenAutoFocus={(e) => {
e.preventDefault();
}}
onCloseAutoFocus={(e) => {
e.preventDefault();
document.body.style.pointerEvents = "auto";
}}
{...props}
>
<div className="overflow-y-auto overflow-x-hidden flex-1 flex flex-col gap-4">{children}</div>
{showCloseButton && (
<DialogPrimitive.Close className="ring-offset-background data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4">

Loading…
Cancel
Save