mirror of
https://github.com/usememos/memos.git
synced 2026-01-06 08:24:32 +08:00
fix: reset state on dialog close and improve dialog open handling
This commit is contained in:
parent
5ad2038b1a
commit
6d1485d168
3 changed files with 54 additions and 6 deletions
|
|
@ -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…
Add table
Reference in a new issue