Files

29 lines
1.5 KiB
JavaScript

// models/advertisements/advertisements.placements.js
//
// Declarative registry of every ad placement in the client app. Each entry
// is a self-contained "slot" — a page + position pair — that determines the
// visual format (hero/banner/popup/sidebar) automatically. Adding a new
// placement should only ever require adding one entry here (and wiring the
// corresponding client page to fetch/render it) — nothing else in this file
// should need to change.
//
// `key` is what's stored on advertisements.placement. `format` is what gets
// denormalized onto advertisements.type on write (see applyAdvertisementFields
// in controllers/admin/advertisements.controller.js) — type is never accepted
// from the client once a placement is set.
const PLACEMENTS = [
{ key: "dashboard.hero", format: "hero", page: "dashboard", pageLabel: "Dashboard", slotLabel: "Hero (top of page)" },
{ key: "tier_plans.banner", format: "banner", page: "tier_plans", pageLabel: "Subscriptions", slotLabel: "Banner (above plan cards)" },
{ key: "course_details.banner", format: "banner", page: "course_details", pageLabel: "Course Details", slotLabel: "Banner (below hero)" },
];
const PLACEMENT_MAP = Object.fromEntries(PLACEMENTS.map((p) => [p.key, p]));
const PLACEMENT_KEYS = PLACEMENTS.map((p) => p.key);
function getFormatForPlacement(key) {
return PLACEMENT_MAP[key]?.format ?? null;
}
module.exports = { PLACEMENTS, PLACEMENT_MAP, PLACEMENT_KEYS, getFormatForPlacement };