fix(admin): صفحهٔ ویرایش پروژه با body/body_en غیرآرایه سفید می‌شد — asLines همهٔ مقادیر را امن می‌کند (رفع پروژه‌های تازه‌ساخته)

This commit is contained in:
aramesh-site deploy
2026-10-09 17:00:20 +00:00
parent b801867611
commit 40ec3d406b
+10 -3
View File
@@ -56,6 +56,13 @@ const EMPTY: ProjectDraft = {
image: '', gallery: [], image: '', gallery: [],
} }
/** body ممکن است از ردیف‌های قدیمی/ناقص غیرآرایه باشد (مثلاً {} یا رشته) — همیشه آرایهٔ رشته */
function asLines(value: unknown): string[] {
if (Array.isArray(value)) return value.map((line) => String(line))
if (typeof value === 'string') return value.split('\n')
return []
}
const INPUT = const INPUT =
'w-full border border-ivory/15 bg-char px-3 py-2 text-sm font-light text-ivory placeholder:text-ivory/30 focus:border-copper focus:outline-none' 'w-full border border-ivory/15 bg-char px-3 py-2 text-sm font-light text-ivory placeholder:text-ivory/30 focus:border-copper focus:outline-none'
@@ -313,11 +320,11 @@ export function ProjectWritePage() {
<Pair <Pair
label="متن پروژه — هر پاراگراف یک خط" label="متن پروژه — هر پاراگراف یک خط"
fa={{ fa={{
value: draft.body.join('\n'), value: asLines(draft.body).join('\n'),
onChange: (v) => set('body', v.split('\n')), onChange: (v) => set('body', v.split('\n')),
}} }}
en={{ en={{
value: draft.body_en.join('\n'), value: asLines(draft.body_en).join('\n'),
onChange: (v) => set('body_en', v.split('\n')), onChange: (v) => set('body_en', v.split('\n')),
}} }}
textarea textarea
@@ -335,7 +342,7 @@ export function ProjectWritePage() {
<div className="border-t border-ivory/10 pt-8"> <div className="border-t border-ivory/10 pt-8">
<GalleryField <GalleryField
label="گالری تصاویر پروژه — فقط آپلود به MinIO" label="گالری تصاویر پروژه — فقط آپلود به MinIO"
value={draft.gallery} value={asLines(draft.gallery)}
onSave={persistGallery} onSave={persistGallery}
namePrefix={draft.slug || 'project'} namePrefix={draft.slug || 'project'}
/> />