Skip to content

Commit 807c001

Browse files
return FormActionData directly from client actions
1 parent 2270298 commit 807c001

7 files changed

Lines changed: 86 additions & 78 deletions

File tree

apps/dashboard/app/lib/form/response.ts

Lines changed: 0 additions & 40 deletions
This file was deleted.

apps/dashboard/app/routes/_auth.request-password-reset/route.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,23 @@ import { SubmitButton } from "~/components/submit-button";
3232
import { requestPasswordReset } from "~/lib/auth";
3333
import { mapAuthErrorToFormActionError } from "~/lib/auth/error";
3434
import { parseFormData } from "~/lib/form/form-data";
35-
import { invalidFormDataResponse } from "~/lib/form/response";
3635

3736
const FormDataSchema = z.object({
3837
email: z.string(),
3938
});
4039

41-
export async function clientAction({ request }: ClientActionFunctionArgs) {
40+
export async function clientAction({
41+
request,
42+
}: ClientActionFunctionArgs): Promise<FormActionData> {
4243
const parsedFormData = await parseFormData(request, FormDataSchema);
4344
if (parsedFormData instanceof Error) {
44-
return invalidFormDataResponse(parsedFormData);
45+
return {
46+
status: "error",
47+
error: {
48+
type: "alert",
49+
title: parsedFormData.message,
50+
},
51+
};
4552
}
4653
const { email } = parsedFormData;
4754

@@ -57,15 +64,15 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
5764
return {
5865
status: "error",
5966
error: mapAuthErrorToFormActionError(error),
60-
} satisfies FormActionData;
67+
};
6168
}
6269
return {
6370
status: "success",
6471
success: {
6572
type: "alert",
6673
title: data.message,
6774
},
68-
} satisfies FormActionData;
75+
};
6976
}
7077

7178
export default function RequestPasswordReset() {

apps/dashboard/app/routes/_auth.reset-password/route.tsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,24 @@ import {
3535
mapAuthErrorToFormActionError,
3636
} from "~/lib/auth/error";
3737
import { parseFormData } from "~/lib/form/form-data";
38-
import {
39-
formValidationErrorResponse,
40-
invalidFormDataResponse,
41-
} from "~/lib/form/response";
4238

4339
const FormDataSchema = z.object({
4440
password: z.string(),
4541
confirmPassword: z.string(),
4642
});
4743

48-
export async function clientAction({ request }: ClientActionFunctionArgs) {
44+
export async function clientAction({
45+
request,
46+
}: ClientActionFunctionArgs): Promise<FormActionData> {
4947
const parsedFormData = await parseFormData(request, FormDataSchema);
5048
if (parsedFormData instanceof Error) {
51-
return invalidFormDataResponse(parsedFormData);
49+
return {
50+
status: "error",
51+
error: {
52+
type: "alert",
53+
title: parsedFormData.message,
54+
},
55+
};
5256
}
5357
const { password, confirmPassword } = parsedFormData;
5458
const token = new URL(request.url).searchParams.get("token");
@@ -58,9 +62,15 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
5862
confirmPassword,
5963
});
6064
if (passwordError instanceof Error) {
61-
return formValidationErrorResponse({
62-
confirmPassword: passwordError.message,
63-
});
65+
return {
66+
status: "error",
67+
error: {
68+
type: "form",
69+
validationErrors: {
70+
confirmPassword: passwordError.message,
71+
},
72+
},
73+
};
6474
}
6575

6676
const { error } = await withMinimumDelay(
@@ -75,7 +85,7 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
7585
return {
7686
status: "error",
7787
error: mapAuthErrorToFormActionError(error),
78-
} satisfies FormActionData;
88+
};
7989
}
8090
throw redirect(href("/signin"));
8191
}

apps/dashboard/app/routes/_auth.signin/route.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,24 @@ import { signIn } from "~/lib/auth";
3232
import { mapAuthErrorToFormActionError } from "~/lib/auth/error";
3333
import { getAuthenticatedRedirectHref } from "~/lib/auth/href";
3434
import { parseFormData } from "~/lib/form/form-data";
35-
import { invalidFormDataResponse } from "~/lib/form/response";
3635

3736
const FormDataSchema = z.object({
3837
email: z.string(),
3938
password: z.string(),
4039
});
4140

42-
export async function clientAction({ request }: ClientActionFunctionArgs) {
41+
export async function clientAction({
42+
request,
43+
}: ClientActionFunctionArgs): Promise<FormActionData> {
4344
const parsedFormData = await parseFormData(request, FormDataSchema);
4445
if (parsedFormData instanceof Error) {
45-
return invalidFormDataResponse(parsedFormData);
46+
return {
47+
status: "error",
48+
error: {
49+
type: "alert",
50+
title: parsedFormData.message,
51+
},
52+
};
4653
}
4754
const { email, password } = parsedFormData;
4855

@@ -58,7 +65,7 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
5865
return {
5966
status: "error",
6067
error: mapAuthErrorToFormActionError(error),
61-
} satisfies FormActionData;
68+
};
6269
}
6370
throw redirectDocument(await getAuthenticatedRedirectHref());
6471
}

apps/dashboard/app/routes/_auth.signup/route.tsx

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,6 @@ import {
3535
} from "~/lib/auth/error";
3636
import { hasUsers } from "~/lib/db/user.server";
3737
import { parseFormData } from "~/lib/form/form-data";
38-
import {
39-
formValidationErrorResponse,
40-
invalidFormDataResponse,
41-
} from "~/lib/form/response";
4238
import { pickAvatar } from "~/lib/user/avatar";
4339

4440
import type { Route } from "./+types/route";
@@ -69,10 +65,18 @@ export async function loader({ url }: Route.LoaderArgs) {
6965
};
7066
}
7167

72-
export async function clientAction({ request }: ClientActionFunctionArgs) {
68+
export async function clientAction({
69+
request,
70+
}: ClientActionFunctionArgs): Promise<FormActionData> {
7371
const parsedFormData = await parseFormData(request, FormDataSchema);
7472
if (parsedFormData instanceof Error) {
75-
return invalidFormDataResponse(parsedFormData);
73+
return {
74+
status: "error",
75+
error: {
76+
type: "alert",
77+
title: parsedFormData.message,
78+
},
79+
};
7680
}
7781
const { name, email, password, confirmPassword } = parsedFormData;
7882

@@ -81,9 +85,15 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
8185
confirmPassword,
8286
});
8387
if (passwordError instanceof Error) {
84-
return formValidationErrorResponse({
85-
confirmPassword: passwordError.message,
86-
});
88+
return {
89+
status: "error",
90+
error: {
91+
type: "form",
92+
validationErrors: {
93+
confirmPassword: passwordError.message,
94+
},
95+
},
96+
};
8797
}
8898

8999
const { error } = await withMinimumDelay(
@@ -100,7 +110,7 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
100110
return {
101111
status: "error",
102112
error: mapAuthErrorToFormActionError(error),
103-
} satisfies FormActionData;
113+
};
104114
}
105115
throw redirect(href("/organization/create"));
106116
}

apps/dashboard/app/routes/organization.$slug.invite/invite.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ import { FormFields } from "~/components/form-fields";
4444
import { SubmitButton } from "~/components/submit-button";
4545
import { organization } from "~/lib/auth";
4646
import { parseFormData } from "~/lib/form/form-data";
47-
import { invalidFormDataResponse } from "~/lib/form/response";
4847
import { mapOrganizationErrorToFormActionError } from "~/lib/organization/error";
4948
import {
5049
ADMIN_ROLE,
@@ -58,10 +57,18 @@ const FormDataSchema = z.object({
5857
role: z.enum([MEMBER_ROLE, ADMIN_ROLE]),
5958
});
6059

61-
export async function clientAction({ request }: ClientActionFunctionArgs) {
60+
export async function clientAction({
61+
request,
62+
}: ClientActionFunctionArgs): Promise<FormActionData> {
6263
const parsedFormData = await parseFormData(request, FormDataSchema);
6364
if (parsedFormData instanceof Error) {
64-
return invalidFormDataResponse(parsedFormData);
65+
return {
66+
status: "error",
67+
error: {
68+
type: "alert",
69+
title: parsedFormData.message,
70+
},
71+
};
6572
}
6673
const { email, role } = parsedFormData;
6774

@@ -77,14 +84,14 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
7784
return {
7885
status: "error",
7986
error: mapOrganizationErrorToFormActionError(error),
80-
} satisfies FormActionData;
87+
};
8188
}
8289
return {
8390
status: "success",
8491
success: {
8592
type: "dismiss",
8693
},
87-
} satisfies FormActionData;
94+
};
8895
}
8996

9097
export function InviteModal() {

apps/dashboard/app/routes/organization.create._index/route.tsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import { SubmitButton } from "~/components/submit-button";
3131
import { organization } from "~/lib/auth";
3232
import { requireAuthenticated } from "~/lib/auth/guards.server";
3333
import { parseFormData } from "~/lib/form/form-data";
34-
import { invalidFormDataResponse } from "~/lib/form/response";
3534
import { mapOrganizationErrorToFormActionError } from "~/lib/organization/error";
3635
import { requireAdminWithoutOrganization } from "~/lib/organization/guards.server";
3736

@@ -46,10 +45,18 @@ export const middleware: Route.MiddlewareFunction[] = [
4645
requireAdminWithoutOrganization,
4746
];
4847

49-
export async function clientAction({ request }: ClientActionFunctionArgs) {
48+
export async function clientAction({
49+
request,
50+
}: ClientActionFunctionArgs): Promise<FormActionData> {
5051
const parsedFormData = await parseFormData(request, FormDataSchema);
5152
if (parsedFormData instanceof Error) {
52-
return invalidFormDataResponse(parsedFormData);
53+
return {
54+
status: "error",
55+
error: {
56+
type: "alert",
57+
title: parsedFormData.message,
58+
},
59+
};
5360
}
5461
const { name } = parsedFormData;
5562

@@ -65,7 +72,7 @@ export async function clientAction({ request }: ClientActionFunctionArgs) {
6572
return {
6673
status: "error",
6774
error: mapOrganizationErrorToFormActionError(error),
68-
} satisfies FormActionData;
75+
};
6976
}
7077
throw redirectDocument(
7178
href("/organization/:slug", {

0 commit comments

Comments
 (0)