Improve product cards/pagination, Farsi locale fonts, and super-admin migrate UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-07-29 16:10:43 +03:30
co-authored by Cursor
parent 2e40d5eb4c
commit f5b2193ba1
108 changed files with 2421 additions and 812 deletions
+32 -4
View File
@@ -11,6 +11,7 @@ import {
} from '../services/blogService'
import type { BlogDetail } from '../types/blog'
import { BLOG_TYPE_OPTIONS } from '../types/blog'
import { textLocaleAttrs } from '../utils/textLocale'
import pageStyles from '../components/PageContent.module.css'
import styles from './BlogDetailsPage.module.css'
@@ -71,6 +72,11 @@ export function BlogDetailsPage() {
const displayDate = formatBlogDate(blog.publishedAt ?? blog.createdAt)
const typeLabel =
BLOG_TYPE_OPTIONS.find((option) => option.value === blog.type)?.label ?? blog.type
const titleLocale = textLocaleAttrs(blog.title)
const abstractLocale = textLocaleAttrs(blog.abstract)
const contentLocale = textLocaleAttrs(
blog.mainTextHtml?.replace(/<[^>]+>/g, ' ') ?? '',
)
return (
<main className={pageStyles.content}>
@@ -85,8 +91,26 @@ export function BlogDetailsPage() {
<div className={pageStyles.pageHeader}>
<div>
<h2 className={pageStyles.pageTitle}>{blog.title}</h2>
{blog.abstract && <p className={pageStyles.pageSubtitle}>{blog.abstract}</p>}
<h2
className={[pageStyles.pageTitle, titleLocale.className]
.filter(Boolean)
.join(' ')}
lang={titleLocale.lang}
dir={titleLocale.dir}
>
{blog.title}
</h2>
{blog.abstract ? (
<p
className={[pageStyles.pageSubtitle, abstractLocale.className]
.filter(Boolean)
.join(' ')}
lang={abstractLocale.lang}
dir={abstractLocale.dir}
>
{blog.abstract}
</p>
) : null}
</div>
</div>
@@ -124,11 +148,15 @@ export function BlogDetailsPage() {
<div className={styles.contentPanel}>
{blog.mainTextHtml ? (
<div
className={styles.content}
className={[styles.content, contentLocale.className].filter(Boolean).join(' ')}
lang={contentLocale.lang}
dir={contentLocale.dir}
dangerouslySetInnerHTML={{ __html: blog.mainTextHtml }}
/>
) : (
<p className={styles.content}>No content yet.</p>
<p className={styles.content} lang="en" dir="ltr">
No content yet.
</p>
)}
<div className={styles.authorRow}>