feat(i18n): update analytics and calendar views for dynamic locales
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
import { revalidatePath } from "next/cache";
|
||||
import { cleanText, optionalDate, requiredText } from "@/server/web/form-data";
|
||||
import { requireFreelancerBackend } from "@/server/web/freelancer";
|
||||
import { parseContentTranslationsFromFormData } from "@/server/i18n/content";
|
||||
|
||||
const EVENT_TYPES = ["meeting", "focus", "deadline", "personal", "finance"] as const;
|
||||
|
||||
@@ -12,16 +13,26 @@ function eventType(value: FormDataEntryValue | null) {
|
||||
: "focus";
|
||||
}
|
||||
|
||||
function payload(formData: FormData) {
|
||||
function payload(
|
||||
formData: FormData,
|
||||
service: Awaited<ReturnType<typeof requireFreelancerBackend>>["service"],
|
||||
actor: Awaited<ReturnType<typeof requireFreelancerBackend>>["actor"]
|
||||
) {
|
||||
const context = service.contentTranslations.getLocalizationContext(actor);
|
||||
const translations = parseContentTranslationsFromFormData(formData, "calendar_event", context);
|
||||
const defaultTitle = translations?.[context.defaultLocale]?.title ?? "";
|
||||
const defaultDesc = translations?.[context.defaultLocale]?.description ?? "";
|
||||
|
||||
return {
|
||||
title: requiredText(formData.get("title"), "Etkinlik başlığı zorunludur."),
|
||||
description: cleanText(formData.get("description")),
|
||||
title: defaultTitle || requiredText(formData.get("title"), "Etkinlik başlığı zorunludur."),
|
||||
description: defaultDesc || cleanText(formData.get("description")),
|
||||
type: eventType(formData.get("type")),
|
||||
startsAt: optionalDate(formData.get("starts_at")),
|
||||
endsAt: optionalDate(formData.get("ends_at")),
|
||||
clientId: cleanText(formData.get("client_id")),
|
||||
projectId: cleanText(formData.get("project_id")),
|
||||
taskId: cleanText(formData.get("task_id")),
|
||||
translations,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -42,7 +53,7 @@ function completeRelations(
|
||||
|
||||
export async function createCalendarEventRecord(formData: FormData) {
|
||||
const backend = await requireFreelancerBackend();
|
||||
const value = completeRelations(payload(formData), backend.service, backend.actor);
|
||||
const value = completeRelations(payload(formData, backend.service, backend.actor), backend.service, backend.actor);
|
||||
if (!value.startsAt) throw new Error("Etkinlik başlangıç zamanı zorunludur.");
|
||||
backend.service.createCalendarEvent(backend.actor, value);
|
||||
revalidatePath("/calendar");
|
||||
@@ -51,7 +62,7 @@ export async function createCalendarEventRecord(formData: FormData) {
|
||||
export async function updateCalendarEventRecord(formData: FormData) {
|
||||
const backend = await requireFreelancerBackend();
|
||||
const id = requiredText(formData.get("id"), "Etkinlik kaydı bulunamadı.");
|
||||
const value = completeRelations(payload(formData), backend.service, backend.actor);
|
||||
const value = completeRelations(payload(formData, backend.service, backend.actor), backend.service, backend.actor);
|
||||
if (!value.startsAt) throw new Error("Etkinlik başlangıç zamanı zorunludur.");
|
||||
backend.service.updateCalendarEvent(backend.actor, id, value);
|
||||
revalidatePath("/calendar");
|
||||
|
||||
Reference in New Issue
Block a user