From 11887bc5ed0d8e977b3549975e517b98cc549de7 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Wed, 14 Oct 2026 18:06:24 +0330 Subject: [PATCH] feat(get-user): expose Hamkar menu icon brand colors Emit menu_icon_color and menu_icon_active_color when brandManaged so apps can theme nav icons separately. Co-authored-by: Cursor --- prisma/backfill-appearance-from-registry.ts | 2 ++ prisma/lib/appearance-builders.ts | 8 ++++++++ prisma/seed-hamkar-default-snapshots.ts | 6 ++++++ src/get-user/get-user.service.ts | 9 +++++++++ 4 files changed, 25 insertions(+) diff --git a/prisma/backfill-appearance-from-registry.ts b/prisma/backfill-appearance-from-registry.ts index 2359073..25d68bd 100644 --- a/prisma/backfill-appearance-from-registry.ts +++ b/prisma/backfill-appearance-from-registry.ts @@ -212,6 +212,8 @@ async function main() { primaryColor: primary, secondaryColor: secondary, backgroundColor: background, + menuIconColor: existingUi?.brand?.menuIconColor ?? null, + menuIconActiveColor: existingUi?.brand?.menuIconActiveColor ?? null, settingsManaged: managed, brandManaged, registryMode: registryMode || existingUi?.registryMode || 'dynamicMode', diff --git a/prisma/lib/appearance-builders.ts b/prisma/lib/appearance-builders.ts index dd490ed..721ec52 100644 --- a/prisma/lib/appearance-builders.ts +++ b/prisma/lib/appearance-builders.ts @@ -33,6 +33,8 @@ export function buildHamkarUiFromBrand(input: { primaryColor?: string | null secondaryColor?: string | null backgroundColor?: string | null + menuIconColor?: string | null + menuIconActiveColor?: string | null settingsManaged?: boolean brandManaged?: boolean registryMode?: string | null @@ -47,6 +49,8 @@ export function buildHamkarUiFromBrand(input: { primaryColor?: string | null secondaryColor?: string | null backgroundColor?: string | null + menuIconColor?: string | null + menuIconActiveColor?: string | null } settings?: { pricing_box_theme?: string @@ -65,6 +69,8 @@ export function buildHamkarUiFromBrand(input: { primaryColor: input.primaryColor || null, secondaryColor: input.secondaryColor || null, backgroundColor: input.backgroundColor || null, + menuIconColor: input.menuIconColor || null, + menuIconActiveColor: input.menuIconActiveColor || null, }, settings: { pricing_box_theme: String(input.settings?.pricing_box_theme || '1'), @@ -83,6 +89,8 @@ export function buildHamkarUiFromBrand(input: { primaryColor: input.defaultSnapshot.brand?.primaryColor ?? null, secondaryColor: input.defaultSnapshot.brand?.secondaryColor ?? null, backgroundColor: input.defaultSnapshot.brand?.backgroundColor ?? null, + menuIconColor: input.defaultSnapshot.brand?.menuIconColor ?? null, + menuIconActiveColor: input.defaultSnapshot.brand?.menuIconActiveColor ?? null, }, settings: { pricing_box_theme: String( diff --git a/prisma/seed-hamkar-default-snapshots.ts b/prisma/seed-hamkar-default-snapshots.ts index 3165c97..930284f 100644 --- a/prisma/seed-hamkar-default-snapshots.ts +++ b/prisma/seed-hamkar-default-snapshots.ts @@ -170,6 +170,12 @@ async function main() { backgroundColor: restore ? keepSnapshot.brand?.backgroundColor : existing?.brand?.backgroundColor ?? brandBackground, + menuIconColor: restore + ? keepSnapshot.brand?.menuIconColor + : existing?.brand?.menuIconColor ?? null, + menuIconActiveColor: restore + ? keepSnapshot.brand?.menuIconActiveColor + : existing?.brand?.menuIconActiveColor ?? null, settingsManaged: Boolean(existing?.settingsManaged), brandManaged: Boolean(existing?.brandManaged), registryMode: restore diff --git a/src/get-user/get-user.service.ts b/src/get-user/get-user.service.ts index fd1d275..e29ba2b 100644 --- a/src/get-user/get-user.service.ts +++ b/src/get-user/get-user.service.ts @@ -128,6 +128,15 @@ export class GetUserService { */ brand_chrome: isHamkarUi && ui?.brandManaged === true ? true : undefined, + /** Hamkar brand_chrome: default / selected menu+header icon strokes */ + menu_icon_color: + isHamkarUi && ui?.brandManaged === true + ? hamkarBrand?.menuIconColor || undefined + : undefined, + menu_icon_active_color: + isHamkarUi && ui?.brandManaged === true + ? hamkarBrand?.menuIconActiveColor || undefined + : undefined, /** Admin expiry modals — near/expired server, plugin, support */ subscription_alerts, plugin_store_enabled: isKhanegi