chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
import { type ActionFunctionArgs, json } from "@remix-run/server-runtime";
|
||||
import { z } from "zod";
|
||||
import {
|
||||
setTimezonePreference,
|
||||
uiPreferencesStorage,
|
||||
} from "~/services/preferences/uiPreferences.server";
|
||||
import { isValidTimeZone } from "~/utils/timezones.server";
|
||||
|
||||
const schema = z.object({
|
||||
timezone: z.string().min(1).max(100),
|
||||
});
|
||||
|
||||
export async function action({ request }: ActionFunctionArgs) {
|
||||
let data: unknown;
|
||||
try {
|
||||
data = await request.json();
|
||||
} catch {
|
||||
return json({ success: false, error: "Invalid JSON" }, { status: 400 });
|
||||
}
|
||||
|
||||
const result = schema.safeParse(data);
|
||||
|
||||
if (!result.success) {
|
||||
return json({ success: false, error: "Invalid timezone" }, { status: 400 });
|
||||
}
|
||||
|
||||
if (!isValidTimeZone(result.data.timezone)) {
|
||||
return json({ success: false, error: "Invalid timezone" }, { status: 400 });
|
||||
}
|
||||
|
||||
const session = await setTimezonePreference(result.data.timezone, request);
|
||||
|
||||
return json(
|
||||
{ success: true },
|
||||
{
|
||||
headers: {
|
||||
"Set-Cookie": await uiPreferencesStorage.commitSession(session),
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user