From f4a087089e686ae332cf1fcd0aeeca22d1e8d210 Mon Sep 17 00:00:00 2001
From: Alireza Hassani
Date: Sat, 8 Aug 2026 14:18:31 +0330
Subject: [PATCH] Improve business edit: names/about, and git URL on domain
edit.
Replace color/locale in Edit business with EN/FA name and about; show git repo on Edit domain to provision storefront.
Co-authored-by: Cursor
---
apps/super-admin/src/pages/BusinessesPage.tsx | 164 ++++++++----------
.../src/services/businessService.ts | 4 +
apps/super-admin/src/types/business.ts | 4 +
3 files changed, 84 insertions(+), 88 deletions(-)
diff --git a/apps/super-admin/src/pages/BusinessesPage.tsx b/apps/super-admin/src/pages/BusinessesPage.tsx
index 5a41324..266e01b 100644
--- a/apps/super-admin/src/pages/BusinessesPage.tsx
+++ b/apps/super-admin/src/pages/BusinessesPage.tsx
@@ -43,17 +43,13 @@ import {
import { listBusinessCategories } from '../services/categoryService'
import { Modal } from '../components/Modal'
import { MultiSelectDropdown } from '../components/MultiSelectDropdown'
-import { PrimaryColorPicker } from '../components/PrimaryColorPicker'
import { PrimaryColorSwatchControl } from '../components/PrimaryColorSwatchControl'
import { useToast } from '../context/ToastContext'
import {
- DEFAULT_BUSINESS_PRIMARY_COLOR_ID,
normalizeBusinessPrimaryColorId,
type BusinessPrimaryColorId,
} from '../utils/businessPrimaryColors'
import {
- getBusinessSettings,
- updateBusinessBranding,
updateBusinessDefaultLocale,
updateBusinessModules,
updateBusinessPrimaryColor,
@@ -215,11 +211,8 @@ export function BusinessesPage() {
const [editOpen, setEditOpen] = useState(false)
const [editBusiness, setEditBusiness] = useState(null)
const [editName, setEditName] = useState('')
- const [editPrimaryColor, setEditPrimaryColor] = useState(
- DEFAULT_BUSINESS_PRIMARY_COLOR_ID,
- )
- const [editDefaultLocale, setEditDefaultLocale] = useState(DEFAULT_LOCALE)
- const [editLoadingSettings, setEditLoadingSettings] = useState(false)
+ const [editNameFa, setEditNameFa] = useState('')
+ const [editAbout, setEditAbout] = useState('')
const [editSubmitting, setEditSubmitting] = useState(false)
const [editError, setEditError] = useState('')
@@ -370,25 +363,10 @@ export function BusinessesPage() {
function openEdit(b: BusinessListItem) {
setEditBusiness(b)
setEditName(b.name)
- setEditPrimaryColor(normalizeBusinessPrimaryColorId(b.primaryColor))
- setEditDefaultLocale(normalizeDefaultLocale(b.defaultLocale))
+ setEditNameFa(b.nameFa ?? '')
+ setEditAbout(b.about ?? '')
setEditError('')
setEditOpen(true)
- setEditLoadingSettings(true)
-
- const controller = new AbortController()
- void getBusinessSettings(b.id, controller.signal)
- .then((data) => {
- setEditPrimaryColor(data.settings.branding.primaryColor)
- setEditDefaultLocale(normalizeDefaultLocale(data.settings.branding.defaultLocale))
- })
- .catch((err) => {
- if (isAbortError(err)) return
- setEditError(err instanceof ApiError ? err.message : 'Unable to load business theme.')
- })
- .finally(() => {
- if (!controller.signal.aborted) setEditLoadingSettings(false)
- })
}
function goToBusinessUsers(b: BusinessListItem, membership: 'staff' | 'all') {
@@ -557,13 +535,17 @@ export function BusinessesPage() {
async function submitEdit() {
if (!editBusiness) return
+ const name = editName.trim()
+ const nameFa = editNameFa.trim()
+ if (!name || !nameFa) return
+
setEditSubmitting(true)
setEditError('')
try {
- await updateBusiness(editBusiness.id, { name: editName })
- await updateBusinessBranding(editBusiness.id, {
- primaryColor: editPrimaryColor,
- defaultLocale: editDefaultLocale,
+ await updateBusiness(editBusiness.id, {
+ name,
+ nameFa,
+ about: editAbout.trim(),
})
setData((prev) => {
if (!prev) return prev
@@ -573,9 +555,9 @@ export function BusinessesPage() {
item.id === editBusiness.id
? {
...item,
- name: editName.trim(),
- primaryColor: editPrimaryColor,
- defaultLocale: editDefaultLocale,
+ name,
+ nameFa,
+ about: editAbout.trim() || null,
}
: item,
),
@@ -596,7 +578,7 @@ export function BusinessesPage() {
setDomainBusiness(b)
setDomainId(b.domainId)
setDomainHost(b.domain ?? '')
- setDomainGitRepoUrl('')
+ setDomainGitRepoUrl(b.gitRepoUrl ?? '')
setDomainError('')
setDomainOpen(true)
}
@@ -736,7 +718,15 @@ export function BusinessesPage() {
setDomainError('')
try {
if (domainId) {
- await updateBusinessDomain(domainBusiness.id, domainId, { host })
+ const updated = (await updateBusinessDomain(domainBusiness.id, domainId, {
+ host,
+ ...(gitRepoUrl ? { gitRepoUrl } : {}),
+ })) as {
+ id: number
+ host: string
+ deploySlug?: string | null
+ provisionError?: string | null
+ }
setData((prev) => {
if (!prev) return prev
return {
@@ -746,7 +736,17 @@ export function BusinessesPage() {
),
}
})
- showToast(`Domain updated to "${host}".`, 'success')
+ if (updated.provisionError) {
+ showToast(`Domain updated to "${host}", but storefront setup failed.`, 'error')
+ showToast(updated.provisionError, 'error')
+ } else if (gitRepoUrl && updated.deploySlug) {
+ showToast(
+ `Domain updated. Storefront deploy is ready on Websites.`,
+ 'success',
+ )
+ } else {
+ showToast(`Domain updated to "${host}".`, 'success')
+ }
} else {
const created = (await addBusinessDomain(domainBusiness.id, {
host,
@@ -1231,45 +1231,37 @@ export function BusinessesPage() {
) : null}
-
+
setEditName(e.target.value)}
+ placeholder="Business name"
disabled={editSubmitting}
/>
-
- {editLoadingSettings ? (
-
Loading theme...
- ) : (
-
- )}
+
+
setEditNameFa(e.target.value)}
+ placeholder="نام فارسی"
+ dir="rtl"
+ lang="fa"
+ disabled={editSubmitting}
+ />
-
- {editLoadingSettings ? (
-
Loading language...
- ) : (
-
- )}
-
- Business and customer dashboards open in this language.
-
+
+
@@ -1285,7 +1277,7 @@ export function BusinessesPage() {
type="button"
className={`${styles.btn} ${styles.btnPrimary}`}
onClick={() => void submitEdit()}
- disabled={editSubmitting || !editName.trim() || editLoadingSettings}
+ disabled={editSubmitting || !editName.trim() || !editNameFa.trim()}
>
Save
@@ -1318,27 +1310,23 @@ export function BusinessesPage() {
disabled={domainSubmitting}
/>
- {!domainId ? (
- <>
-
-
-
-
setDomainGitRepoUrl(e.target.value)}
- placeholder="git@git.meshkee.com:Meshkee-Websites/oaktasty.git"
- disabled={domainSubmitting}
- autoComplete="off"
- spellCheck={false}
- />
-
- Fill to enable storefront Deploy on Websites. Leave empty for domain-only
- (dashboards).
-
-
- >
- ) : null}
+
+
+
+
setDomainGitRepoUrl(e.target.value)}
+ placeholder="git@git.meshkee.com:Meshkee-Websites/oaktasty.git"
+ disabled={domainSubmitting}
+ autoComplete="off"
+ spellCheck={false}
+ />
+
+ Fill to enable storefront Deploy on Websites. Leave empty for domain-only
+ (dashboards).
+
+