This commit is contained in:
Your Name committed 2026-09-25 07:28:27 +07:00
1 parent 3ac0cb4f53
commit 5e724fae20
17 files changed
+2404 -278

No files matched your search

+11 -2
View File
@@ -12,6 +12,7 @@ import {
EditorialTileSectionPayloadSchema,
FeaturedTilesSectionPayloadSchema,
EditorialCarouselSectionPayloadSchema,
HeroCarouselSectionPayloadSchema,
HeroArticleSectionPayloadSchema,
RichTextSectionPayloadSchema,
ArticleHeaderSectionPayloadSchema,
@@ -248,8 +249,13 @@ export const pagesRoute = new Elysia({ prefix: "/pages" })
const includeInactive =
String((query as any)?.includeInactive || "").toLowerCase() === "true";
const lang = (query as any)?.lang || "th";
const page = await prisma.page.findUnique({
where: { slug },
const numId = Number(slug);
const isNumericId = Number.isInteger(numId) && numId > 0;
const page = await prisma.page.findFirst({
where: isNumericId
? { OR: [{ id: numId }, { slug }] }
: { slug },
include: {
sections: {
where: includeInactive ? undefined : { isActive: true },
@@ -1112,6 +1118,9 @@ export function validateSectionPayload(
case "EDITORIAL_CAROUSEL":
schema = EditorialCarouselSectionPayloadSchema;
break;
case "HERO_CAROUSEL":
schema = HeroCarouselSectionPayloadSchema;
break;
case "HERO_ARTICLE":
schema = HeroArticleSectionPayloadSchema;
break;
+36 -3
View File
@@ -17,7 +17,16 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
const localizedDescription = requestedLang
? translations.find((translation) => translation.langCode === requestedLang)?.footerDescription
: undefined;
return localizedDescription ? { ...settingsData, footerDescription: localizedDescription } : settingsData;
const headerBehavior = (settings.themeTokens as any)?.headerBehavior ?? 'hide_on_scroll';
const mobileHeaderBehavior = (settings.themeTokens as any)?.mobileHeaderBehavior ?? headerBehavior;
const mobileHeaderStyle = (settings.themeTokens as any)?.mobileHeaderStyle ?? 'logo_center';
return {
...settingsData,
headerBehavior,
mobileHeaderBehavior,
mobileHeaderStyle,
footerDescription: localizedDescription ?? settingsData.footerDescription,
};
} catch (err) {
console.error("[Settings] Error:", err);
set.status = 500;
@@ -111,7 +120,22 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
}, { body: t.Any() })
.put("/", async ({ body, set }) => {
try {
const data = body as any;
const { headerBehavior, mobileHeaderBehavior, mobileHeaderStyle, ...data } = body as any;
const currentTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
? data.themeTokens
: {};
const updatedTokens = { ...currentTokens };
if (headerBehavior !== undefined) {
updatedTokens.headerBehavior = headerBehavior;
}
if (mobileHeaderBehavior !== undefined) {
updatedTokens.mobileHeaderBehavior = mobileHeaderBehavior;
}
if (mobileHeaderStyle !== undefined) {
updatedTokens.mobileHeaderStyle = mobileHeaderStyle;
}
data.themeTokens = updatedTokens;
let settings = await prisma.storeSettings.findFirst();
if (!settings) {
settings = await prisma.storeSettings.create({ data });
@@ -121,7 +145,15 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
data
});
}
return settings;
const returnedBehavior = (settings.themeTokens as any)?.headerBehavior ?? 'hide_on_scroll';
const returnedMobileBehavior = (settings.themeTokens as any)?.mobileHeaderBehavior ?? returnedBehavior;
const returnedMobileStyle = (settings.themeTokens as any)?.mobileHeaderStyle ?? 'logo_center';
return {
...settings,
headerBehavior: returnedBehavior,
mobileHeaderBehavior: returnedMobileBehavior,
mobileHeaderStyle: returnedMobileStyle,
};
} catch (err) {
console.error("[Settings] Error:", err);
set.status = 500;
@@ -152,6 +184,7 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
scrollRevealStyle: t.Optional(t.String()),
scrollRevealDuration: t.Optional(t.Number()),
headerStyle: t.Optional(t.String()),
headerBehavior: t.Optional(t.String()),
})
})
.patch("/translations", async ({ body, set }) => {