Skip to content

Commit 1dce6fe

Browse files
committed
Don’t abort the project creation step if the optional data has errors
1 parent c15dbc9 commit 1dce6fe

File tree

1 file changed

+29
-32
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new

1 file changed

+29
-32
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug_.projects.new/route.tsx

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -185,40 +185,37 @@ export const action: ActionFunction = async ({ request, params }) => {
185185
const configurationId = url.searchParams.get("configurationId");
186186
const next = url.searchParams.get("next");
187187

188-
try {
189-
const stringArraySchema = z.array(z.string());
188+
const stringArraySchema = z.array(z.string());
189+
190+
function safeParseStringArray(value: string | undefined): string[] | undefined {
191+
if (!value) return undefined;
192+
try {
193+
const result = stringArraySchema.safeParse(JSON.parse(value));
194+
return result.success && result.data.length > 0 ? result.data : undefined;
195+
} catch {
196+
return undefined;
197+
}
198+
}
190199

191-
const onboardingData: Record<string, Prisma.InputJsonValue> = {};
200+
const onboardingData: Record<string, Prisma.InputJsonValue> = {};
192201

193-
if (submission.value.workingOn) {
194-
const workingOn = stringArraySchema.parse(JSON.parse(submission.value.workingOn));
195-
if (workingOn.length > 0) {
196-
onboardingData.workingOn = workingOn;
197-
}
198-
}
199-
if (submission.value.workingOnOther) {
200-
onboardingData.workingOnOther = submission.value.workingOnOther;
201-
}
202-
if (submission.value.technologies) {
203-
const technologies = stringArraySchema.parse(JSON.parse(submission.value.technologies));
204-
if (technologies.length > 0) {
205-
onboardingData.technologies = technologies;
206-
}
207-
}
208-
if (submission.value.technologiesOther) {
209-
const technologiesOther = stringArraySchema.parse(
210-
JSON.parse(submission.value.technologiesOther)
211-
);
212-
if (technologiesOther.length > 0) {
213-
onboardingData.technologiesOther = technologiesOther;
214-
}
215-
}
216-
if (submission.value.goals) {
217-
const goals = stringArraySchema.parse(JSON.parse(submission.value.goals));
218-
if (goals.length > 0) {
219-
onboardingData.goals = goals;
220-
}
221-
}
202+
const workingOn = safeParseStringArray(submission.value.workingOn);
203+
if (workingOn) onboardingData.workingOn = workingOn;
204+
205+
if (submission.value.workingOnOther) {
206+
onboardingData.workingOnOther = submission.value.workingOnOther;
207+
}
208+
209+
const technologies = safeParseStringArray(submission.value.technologies);
210+
if (technologies) onboardingData.technologies = technologies;
211+
212+
const technologiesOther = safeParseStringArray(submission.value.technologiesOther);
213+
if (technologiesOther) onboardingData.technologiesOther = technologiesOther;
214+
215+
const goals = safeParseStringArray(submission.value.goals);
216+
if (goals) onboardingData.goals = goals;
217+
218+
try {
222219
const project = await createProject({
223220
organizationSlug: organizationSlug,
224221
name: submission.value.projectName,

0 commit comments

Comments
 (0)