Refactor SSO Registration Dialogs: Remove onSuccess prop from RegisterOidcDialog and RegisterSamlDialog components, replacing it with a call to invalidate the list of SSO providers after successful registration. Update SSOSettings to reflect these changes, enhancing the overall state management and consistency across the dialogs.

This commit is contained in:
Mauricio Siu
2026-01-29 22:56:25 -06:00
parent f72bc28d70
commit 30c3e44422
3 changed files with 12 additions and 18 deletions

View File

@@ -7,6 +7,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
import { authClient } from "@/lib/auth-client";
import { api } from "@/utils/api";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -43,7 +44,6 @@ type OidcProviderForm = z.infer<typeof oidcProviderSchema>;
interface RegisterOidcDialogProps {
children: React.ReactNode;
onSuccess?: () => void;
}
const formDefaultValues: OidcProviderForm = {
@@ -55,7 +55,8 @@ const formDefaultValues: OidcProviderForm = {
scopes: DEFAULT_SCOPES.join(" "),
};
export function RegisterOidcDialog({ children, onSuccess }: RegisterOidcDialogProps) {
export function RegisterOidcDialog({ children }: RegisterOidcDialogProps) {
const utils = api.useUtils();
const [open, setOpen] = useState(false);
const form = useForm<OidcProviderForm>({
@@ -90,7 +91,7 @@ export function RegisterOidcDialog({ children, onSuccess }: RegisterOidcDialogPr
toast.success("OIDC provider registered successfully");
form.reset(formDefaultValues);
setOpen(false);
onSuccess?.();
await utils.sso.listProviders.invalidate();
} catch (err) {
toast.error(
err instanceof Error ? err.message : "Failed to register SSO provider",

View File

@@ -7,6 +7,7 @@ import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
import { authClient } from "@/lib/auth-client";
import { api } from "@/utils/api";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -51,7 +52,6 @@ type SamlProviderForm = z.infer<typeof samlProviderSchema>;
interface RegisterSamlDialogProps {
children: React.ReactNode;
onSuccess?: () => void;
}
const formDefaultValues: SamlProviderForm = {
@@ -64,7 +64,8 @@ const formDefaultValues: SamlProviderForm = {
audience: "",
};
export function RegisterSamlDialog({ children, onSuccess }: RegisterSamlDialogProps) {
export function RegisterSamlDialog({ children }: RegisterSamlDialogProps) {
const utils = api.useUtils();
const [open, setOpen] = useState(false);
const form = useForm<SamlProviderForm>({
@@ -99,7 +100,7 @@ export function RegisterSamlDialog({ children, onSuccess }: RegisterSamlDialogPr
toast.success("SAML provider registered successfully");
form.reset(formDefaultValues);
setOpen(false);
onSuccess?.();
await utils.sso.listProviders.invalidate();
} catch (err) {
toast.error(
err instanceof Error ? err.message : "Failed to register SAML provider",

View File

@@ -46,17 +46,13 @@ export function SSOSettings() {
<>
{providers && providers.length > 0 && (
<div className="flex flex-wrap items-center gap-2">
<RegisterOidcDialog
onSuccess={() => utils.sso.listProviders.invalidate()}
>
<RegisterOidcDialog>
<Button variant="secondary" size="sm">
<LogIn className="mr-2 size-4" />
Add OIDC provider
</Button>
</RegisterOidcDialog>
<RegisterSamlDialog
onSuccess={() => utils.sso.listProviders.invalidate()}
>
<RegisterSamlDialog>
<Button variant="secondary" size="sm">
<LogIn className="mr-2 size-4" />
Add SAML provider
@@ -154,17 +150,13 @@ export function SSOSettings() {
</div>
</div>
<div className="flex flex-wrap gap-2 justify-center">
<RegisterOidcDialog
onSuccess={() => utils.sso.listProviders.invalidate()}
>
<RegisterOidcDialog>
<Button variant="secondary">
<LogIn className="mr-2 size-4" />
Add OIDC provider
</Button>
</RegisterOidcDialog>
<RegisterSamlDialog
onSuccess={() => utils.sso.listProviders.invalidate()}
>
<RegisterSamlDialog>
<Button variant="outline">
<LogIn className="mr-2 size-4" />
Add SAML provider