add homepage management

This commit is contained in:
root
2026-05-07 00:34:29 -04:00
parent 750ae56a29
commit c4a45c8b21
33 changed files with 4228 additions and 418 deletions
+91
View File
@@ -37,6 +37,97 @@ const brandSchema = z.object({
paypalEmail: z.string().email().optional(),
paypalMerchantId: z.string().optional(),
isListedOnMarketplace: z.boolean().optional(),
homePageConfig: z.object({
heroTitle: z.union([z.string(), z.null()]).optional(),
heroDescription: z.union([z.string(), z.null()]).optional(),
viewOffersLabel: z.union([z.string(), z.null()]).optional(),
viewPricingLabel: z.union([z.string(), z.null()]).optional(),
contactCompanyLabel: z.union([z.string(), z.null()]).optional(),
activeOffersTitle: z.union([z.string(), z.null()]).optional(),
seeAllOffersLabel: z.union([z.string(), z.null()]).optional(),
noActiveOffersLabel: z.union([z.string(), z.null()]).optional(),
publishedVehiclesTitle: z.union([z.string(), z.null()]).optional(),
viewVehicleLabel: z.union([z.string(), z.null()]).optional(),
pricingEyebrow: z.union([z.string(), z.null()]).optional(),
pricingTitle: z.union([z.string(), z.null()]).optional(),
pricingDescription: z.union([z.string(), z.null()]).optional(),
showOffers: z.boolean().optional(),
showVehicles: z.boolean().optional(),
showPricing: z.boolean().optional(),
layout: z.object({
items: z.array(z.object({
id: z.string().min(1),
type: z.enum(['hero', 'offers', 'vehicles', 'pricing']),
x: z.number().int().min(1),
y: z.number().int().min(1),
w: z.number().int().min(1),
h: z.number().int().min(1),
})),
}).optional(),
}).optional(),
menuConfig: z.object({
aboutLabel: z.union([z.string(), z.null()]).optional(),
vehiclesLabel: z.union([z.string(), z.null()]).optional(),
offersLabel: z.union([z.string(), z.null()]).optional(),
pricingLabel: z.union([z.string(), z.null()]).optional(),
blogLabel: z.union([z.string(), z.null()]).optional(),
contactLabel: z.union([z.string(), z.null()]).optional(),
bookCarLabel: z.union([z.string(), z.null()]).optional(),
siteNavigationLabel: z.union([z.string(), z.null()]).optional(),
showAbout: z.boolean().optional(),
showVehicles: z.boolean().optional(),
showOffers: z.boolean().optional(),
showPricing: z.boolean().optional(),
showBlog: z.boolean().optional(),
showContact: z.boolean().optional(),
pageSections: z.object({
home: z.object({
hero: z.boolean().optional(),
offers: z.boolean().optional(),
vehicles: z.boolean().optional(),
pricing: z.boolean().optional(),
}).optional(),
about: z.object({
hero: z.boolean().optional(),
highlights: z.boolean().optional(),
details: z.boolean().optional(),
}).optional(),
offers: z.object({
header: z.boolean().optional(),
grid: z.boolean().optional(),
}).optional(),
pricing: z.object({
hero: z.boolean().optional(),
plans: z.boolean().optional(),
payments: z.boolean().optional(),
faq: z.boolean().optional(),
}).optional(),
vehicles: z.object({
header: z.boolean().optional(),
filters: z.boolean().optional(),
grid: z.boolean().optional(),
}).optional(),
vehicleDetail: z.object({
gallery: z.boolean().optional(),
summary: z.boolean().optional(),
}).optional(),
blog: z.object({
hero: z.boolean().optional(),
posts: z.boolean().optional(),
}).optional(),
contact: z.object({
content: z.boolean().optional(),
}).optional(),
booking: z.object({
content: z.boolean().optional(),
}).optional(),
bookingConfirmation: z.object({
hero: z.boolean().optional(),
summary: z.boolean().optional(),
actions: z.boolean().optional(),
}).optional(),
}).optional(),
}).optional(),
})
const contractSettingsSchema = z.object({