diff --git a/frontend/src/admin/ArticleWritePage.tsx b/frontend/src/admin/ArticleWritePage.tsx index b6874d4..df6696c 100644 --- a/frontend/src/admin/ArticleWritePage.tsx +++ b/frontend/src/admin/ArticleWritePage.tsx @@ -134,7 +134,7 @@ const STATUS_TEXT: Record = { * مسیرها: /admin/write (مقاله جدید) و /admin/write/:id (ویرایش). */ export function ArticleWritePage() { - const { isAuthenticated, saveStatus, runSave, editLang, toggleEditLang, role } = useAdmin() + const { isAuthenticated, saveStatus, runSave, editLang, toggleEditLang, syncEditLang, role } = useAdmin() const { id } = useParams<{ id: string }>() const navigate = useNavigate() const { data, updateSite } = useSiteData() @@ -219,6 +219,23 @@ export function ArticleWritePage() { const article = existing ?? fetched + // زبان ویرایش این مقاله به‌ازای خودش به‌خاطر سپرده می‌شود — رفرش تب را عوض نکند + useEffect(() => { + if (!id) return + const saved = localStorage.getItem(`aramesh_write_lang_${id}`) + if (saved === 'en' || saved === 'fa') { + syncEditLang(saved) + return + } + const art = existing ?? null + if (art) { + const hasEn = Boolean((art as Draft).title_en?.trim()) || Boolean((art as Draft).body_en as unknown) + const hasFa = Boolean((art as Draft).title?.trim()) + if (hasEn && !hasFa) syncEditLang('en') + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [id, Boolean(article)]) + // وقتی مقاله موجود شناخته شد، فرم و شناسه ساخته‌شده یک‌بار مقداردهی می‌شود useEffect(() => { if (!article || createdRef.current) return @@ -338,7 +355,6 @@ export function ArticleWritePage() { queueSave({ [name]: e.target.value }), }) - const metaLength = (draft.meta_description ?? '').trim().length // در زبان انگلیسی، فیلدهای متنی به ستون‌های _en می‌روند؛ اسلاگ/تصویر/وضعیت مشترک‌اند const suf = (name: N) => `${name}${editLang === 'en' ? '_en' : ''}` as keyof Draft // مقدار فعال فیلد دوزبانه — برای value ورودی‌ها و چک‌لیست سئو @@ -353,6 +369,7 @@ export function ArticleWritePage() { const activeVal = (name: 'title' | 'slug' | 'author' | 'seo_keyphrase' | 'meta_description' | 'excerpt'): string => String((editLang === 'en' ? draft[`${name}_en` as keyof Draft] : draft[name]) ?? '') + const metaLength = activeVal('meta_description').trim().length // متن جایگزین تصویر شاخص — با watch('title') به‌صورت زنده ساخته می‌شود const imageAltFallback = [watchedTitle.trim(), FEATURED_IMAGE_ALT_SUFFIX] @@ -376,7 +393,11 @@ export function ArticleWritePage() {