From 14c9843abb3d48a6eec8da3be310d951de8c8921 Mon Sep 17 00:00:00 2001 From: adonis Date: Tue, 18 Aug 2026 17:57:20 +0330 Subject: [PATCH] fix(admin): merge SuperAdmin settings over local can_edit locks Co-authored-by: Cursor --- src/api/superadminSettings.ts | 8 ++++++-- src/utils/config.ts | 15 +++++++-------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/api/superadminSettings.ts b/src/api/superadminSettings.ts index efd23de..da87eb0 100644 --- a/src/api/superadminSettings.ts +++ b/src/api/superadminSettings.ts @@ -37,6 +37,11 @@ function parseSettingsPayload(data: unknown): SuperAdminSettingRow[] { return [] } +/** کلید قفل‌شده در get_settings محلی — باید از سوپرادمین بیاید */ +export function isLockedCanEdit(canEdit: unknown): boolean { + return canEdit === 0 || canEdit === false || canEdit === '0' +} + async function fetchFromUrl(url: string, timeout = 5000): Promise { const controller = new AbortController() const timer = window.setTimeout(() => controller.abort(), timeout) @@ -73,6 +78,5 @@ export async function fetchSuperAdminProgramSettings(): Promise { try { const { getConfiguration } = await import('@/api/configuration') - const { fetchSuperAdminProgramSettings } = await import('@/api/superadminSettings') + const { fetchSuperAdminProgramSettings, isLockedCanEdit } = await import('@/api/superadminSettings') const { parseMainWalletProductIds } = await import('@/components/mobile/utils/wallet') - const [localRows, saRows] = await Promise.all([ - getConfiguration().catch(() => []), - fetchSuperAdminProgramSettings(), - ]) + const localRows = await getConfiguration().catch(() => []) + const saRows = await fetchSuperAdminProgramSettings() const local = Array.isArray(localRows) ? localRows : [] - const merged = [...local] - for (const item of saRows) { + const editable = local.filter((row) => !isLockedCanEdit(row?.can_edit)) + const merged = [...saRows] as typeof local + for (const item of editable) { if (!item?.key) continue const index = merged.findIndex((row) => row.key === item.key) if (index >= 0) { merged[index] = { ...merged[index], ...item } } else { - merged.push(item as (typeof merged)[number]) + merged.push(item) } } const list = merged