x
This commit is contained in:
1 parent
943fd8f1a3
commit
9237c0eded
7 files changed
+776
-377
No files matched your search
@@ -189,6 +189,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
const mobileHeaderBehavior = (settings.themeTokens as any)?.mobileHeaderBehavior ?? headerBehavior;
|
||||
const mobileHeaderStyle = (settings.themeTokens as any)?.mobileHeaderStyle ?? 'logo_center';
|
||||
const cardPreset = (settings.themeTokens as any)?.cardPreset ?? 'standard';
|
||||
const headerShowSearch = (settings.themeTokens as any)?.headerShowSearch ?? true;
|
||||
const headerShowWishlist = (settings.themeTokens as any)?.headerShowWishlist ?? true;
|
||||
const headerShowCart = (settings.themeTokens as any)?.headerShowCart ?? true;
|
||||
const headerShowTrackOrder = (settings.themeTokens as any)?.headerShowTrackOrder ?? true;
|
||||
const headerShowLanguage = (settings.themeTokens as any)?.headerShowLanguage ?? true;
|
||||
const headerShowAccount = (settings.themeTokens as any)?.headerShowAccount ?? true;
|
||||
return {
|
||||
...settingsData,
|
||||
footerLayout: normalizeFooterLayoutSettings((settingsData as any).footerLayout),
|
||||
@@ -197,6 +203,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
mobileHeaderBehavior,
|
||||
mobileHeaderStyle,
|
||||
cardPreset,
|
||||
headerShowSearch,
|
||||
headerShowWishlist,
|
||||
headerShowCart,
|
||||
headerShowTrackOrder,
|
||||
headerShowLanguage,
|
||||
headerShowAccount,
|
||||
footerDescription: localizedDescription ?? settingsData.footerDescription,
|
||||
defaultSeoTitle: localizedSeoTitle ?? settingsData.defaultSeoTitle,
|
||||
defaultSeoDescription: localizedSeoDescription ?? settingsData.defaultSeoDescription,
|
||||
@@ -371,15 +383,33 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
}, { beforeHandle: requireAdmin, body: t.Any() })
|
||||
.put("/", async ({ body, set }: { body: any; set: any }) => {
|
||||
try {
|
||||
const { footerLayout, headerBehavior, mobileHeaderBehavior, mobileHeaderStyle, cardPreset, translations, ...data } = body as any;
|
||||
const {
|
||||
footerLayout,
|
||||
headerBehavior,
|
||||
mobileHeaderBehavior,
|
||||
mobileHeaderStyle,
|
||||
headerShowSearch,
|
||||
headerShowWishlist,
|
||||
headerShowCart,
|
||||
headerShowTrackOrder,
|
||||
headerShowLanguage,
|
||||
headerShowAccount,
|
||||
cardPreset,
|
||||
translations,
|
||||
...data
|
||||
} = body as any;
|
||||
if (footerLayout !== undefined) {
|
||||
set.status = 400;
|
||||
return { error: "Use PATCH /settings/footer-layout to update footer layout" };
|
||||
}
|
||||
const currentTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
|
||||
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
|
||||
const existingTokens = (typeof (settings as any)?.themeTokens === 'object' && (settings as any)?.themeTokens !== null)
|
||||
? (settings as any).themeTokens
|
||||
: {};
|
||||
const passedTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
|
||||
? data.themeTokens
|
||||
: {};
|
||||
const updatedTokens = { ...currentTokens };
|
||||
const updatedTokens = { ...existingTokens, ...passedTokens };
|
||||
if (headerBehavior !== undefined) {
|
||||
updatedTokens.headerBehavior = headerBehavior;
|
||||
}
|
||||
@@ -389,12 +419,29 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
if (mobileHeaderStyle !== undefined) {
|
||||
updatedTokens.mobileHeaderStyle = mobileHeaderStyle;
|
||||
}
|
||||
if (headerShowSearch !== undefined) {
|
||||
updatedTokens.headerShowSearch = headerShowSearch;
|
||||
}
|
||||
if (headerShowWishlist !== undefined) {
|
||||
updatedTokens.headerShowWishlist = headerShowWishlist;
|
||||
}
|
||||
if (headerShowCart !== undefined) {
|
||||
updatedTokens.headerShowCart = headerShowCart;
|
||||
}
|
||||
if (headerShowTrackOrder !== undefined) {
|
||||
updatedTokens.headerShowTrackOrder = headerShowTrackOrder;
|
||||
}
|
||||
if (headerShowLanguage !== undefined) {
|
||||
updatedTokens.headerShowLanguage = headerShowLanguage;
|
||||
}
|
||||
if (headerShowAccount !== undefined) {
|
||||
updatedTokens.headerShowAccount = headerShowAccount;
|
||||
}
|
||||
if (cardPreset !== undefined) {
|
||||
updatedTokens.cardPreset = cardPreset;
|
||||
}
|
||||
data.themeTokens = updatedTokens;
|
||||
|
||||
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
|
||||
if (!settings) {
|
||||
settings = await prisma.storeSettings.create({ data, include: { translations: true } });
|
||||
} else {
|
||||
@@ -422,6 +469,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
mobileHeaderBehavior: returnedMobileBehavior,
|
||||
mobileHeaderStyle: returnedMobileStyle,
|
||||
cardPreset: returnedCardPreset,
|
||||
headerShowSearch: (settings?.themeTokens as any)?.headerShowSearch ?? true,
|
||||
headerShowWishlist: (settings?.themeTokens as any)?.headerShowWishlist ?? true,
|
||||
headerShowCart: (settings?.themeTokens as any)?.headerShowCart ?? true,
|
||||
headerShowTrackOrder: (settings?.themeTokens as any)?.headerShowTrackOrder ?? true,
|
||||
headerShowLanguage: (settings?.themeTokens as any)?.headerShowLanguage ?? true,
|
||||
headerShowAccount: (settings?.themeTokens as any)?.headerShowAccount ?? true,
|
||||
};
|
||||
} catch (err) {
|
||||
console.error("[Settings] Error:", err);
|
||||
@@ -456,6 +509,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
headerBehavior: t.Optional(t.String()),
|
||||
mobileHeaderBehavior: t.Optional(t.String()),
|
||||
mobileHeaderStyle: t.Optional(t.String()),
|
||||
headerShowSearch: t.Optional(t.Boolean()),
|
||||
headerShowWishlist: t.Optional(t.Boolean()),
|
||||
headerShowCart: t.Optional(t.Boolean()),
|
||||
headerShowTrackOrder: t.Optional(t.Boolean()),
|
||||
headerShowLanguage: t.Optional(t.Boolean()),
|
||||
headerShowAccount: t.Optional(t.Boolean()),
|
||||
cardPreset: t.Optional(t.String()),
|
||||
defaultSeoTitle: t.Optional(t.Nullable(t.String())),
|
||||
defaultSeoDescription: t.Optional(t.Nullable(t.String())),
|
||||
@@ -467,15 +526,33 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
})
|
||||
.post("/", async ({ body, set }: { body: any; set: any }) => {
|
||||
try {
|
||||
const { footerLayout, headerBehavior, mobileHeaderBehavior, mobileHeaderStyle, cardPreset, translations, ...data } = body as any;
|
||||
const {
|
||||
footerLayout,
|
||||
headerBehavior,
|
||||
mobileHeaderBehavior,
|
||||
mobileHeaderStyle,
|
||||
headerShowSearch,
|
||||
headerShowWishlist,
|
||||
headerShowCart,
|
||||
headerShowTrackOrder,
|
||||
headerShowLanguage,
|
||||
headerShowAccount,
|
||||
cardPreset,
|
||||
translations,
|
||||
...data
|
||||
} = body as any;
|
||||
if (footerLayout !== undefined) {
|
||||
set.status = 400;
|
||||
return { error: "Use PATCH /settings/footer-layout to update footer layout" };
|
||||
}
|
||||
const currentTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
|
||||
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
|
||||
const existingTokens = (typeof (settings as any)?.themeTokens === 'object' && (settings as any)?.themeTokens !== null)
|
||||
? (settings as any).themeTokens
|
||||
: {};
|
||||
const passedTokens = (typeof data.themeTokens === 'object' && data.themeTokens !== null)
|
||||
? data.themeTokens
|
||||
: {};
|
||||
const updatedTokens = { ...currentTokens };
|
||||
const updatedTokens = { ...existingTokens, ...passedTokens };
|
||||
if (headerBehavior !== undefined) {
|
||||
updatedTokens.headerBehavior = headerBehavior;
|
||||
}
|
||||
@@ -485,12 +562,29 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
if (mobileHeaderStyle !== undefined) {
|
||||
updatedTokens.mobileHeaderStyle = mobileHeaderStyle;
|
||||
}
|
||||
if (headerShowSearch !== undefined) {
|
||||
updatedTokens.headerShowSearch = headerShowSearch;
|
||||
}
|
||||
if (headerShowWishlist !== undefined) {
|
||||
updatedTokens.headerShowWishlist = headerShowWishlist;
|
||||
}
|
||||
if (headerShowCart !== undefined) {
|
||||
updatedTokens.headerShowCart = headerShowCart;
|
||||
}
|
||||
if (headerShowTrackOrder !== undefined) {
|
||||
updatedTokens.headerShowTrackOrder = headerShowTrackOrder;
|
||||
}
|
||||
if (headerShowLanguage !== undefined) {
|
||||
updatedTokens.headerShowLanguage = headerShowLanguage;
|
||||
}
|
||||
if (headerShowAccount !== undefined) {
|
||||
updatedTokens.headerShowAccount = headerShowAccount;
|
||||
}
|
||||
if (cardPreset !== undefined) {
|
||||
updatedTokens.cardPreset = cardPreset;
|
||||
}
|
||||
data.themeTokens = updatedTokens;
|
||||
|
||||
let settings = await prisma.storeSettings.findFirst({ include: { translations: true } });
|
||||
if (!settings) {
|
||||
settings = await prisma.storeSettings.create({ data, include: { translations: true } });
|
||||
} else {
|
||||
@@ -518,6 +612,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
mobileHeaderBehavior: returnedMobileBehavior,
|
||||
mobileHeaderStyle: returnedMobileStyle,
|
||||
cardPreset: returnedCardPreset,
|
||||
headerShowSearch: (settings?.themeTokens as any)?.headerShowSearch ?? true,
|
||||
headerShowWishlist: (settings?.themeTokens as any)?.headerShowWishlist ?? true,
|
||||
headerShowCart: (settings?.themeTokens as any)?.headerShowCart ?? true,
|
||||
headerShowTrackOrder: (settings?.themeTokens as any)?.headerShowTrackOrder ?? true,
|
||||
headerShowLanguage: (settings?.themeTokens as any)?.headerShowLanguage ?? true,
|
||||
headerShowAccount: (settings?.themeTokens as any)?.headerShowAccount ?? true,
|
||||
};
|
||||
} catch (err) {
|
||||
console.error("[Settings] Error:", err);
|
||||
@@ -552,6 +652,12 @@ export const settingsRoute = new Elysia({ prefix: "/settings" })
|
||||
headerBehavior: t.Optional(t.String()),
|
||||
mobileHeaderBehavior: t.Optional(t.String()),
|
||||
mobileHeaderStyle: t.Optional(t.String()),
|
||||
headerShowSearch: t.Optional(t.Boolean()),
|
||||
headerShowWishlist: t.Optional(t.Boolean()),
|
||||
headerShowCart: t.Optional(t.Boolean()),
|
||||
headerShowTrackOrder: t.Optional(t.Boolean()),
|
||||
headerShowLanguage: t.Optional(t.Boolean()),
|
||||
headerShowAccount: t.Optional(t.Boolean()),
|
||||
cardPreset: t.Optional(t.String()),
|
||||
defaultSeoTitle: t.Optional(t.Nullable(t.String())),
|
||||
defaultSeoDescription: t.Optional(t.Nullable(t.String())),
|
||||
|
||||
Reference in new issue
Block a user