Add customer/manager access UI and tighten customers filters.

Business and super-admin can set Customer vs Manager roles (Admin only for super-admin), and the customers page drops clutter while filtering by all/customers/managers.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-10 21:31:28 +03:30
co-authored by Cursor
parent 404c008ced
commit f622e6d605
28 changed files with 1280 additions and 241 deletions
+16 -2
View File
@@ -1,6 +1,6 @@
import { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { Plus } from 'lucide-react'
import { FileText, Plus } from 'lucide-react'
import { Breadcrumbs } from '../components/Breadcrumbs'
import { BlogCard } from '../components/BlogCard'
import { BlogCommentsModal } from '../components/BlogCommentsModal'
@@ -180,7 +180,21 @@ export function BlogListPage() {
{isLoading ? (
<p className={styles.empty}>{t('blog.list.loading')}</p>
) : blogs.length === 0 ? (
<p className={styles.empty}>{t('blog.list.empty')}</p>
<div className={styles.emptyState}>
<div className={styles.emptyIcon} aria-hidden="true">
<FileText size={28} strokeWidth={1.75} />
</div>
<h3 className={styles.emptyTitle}>{t('blog.list.empty')}</h3>
<p className={styles.emptyHint}>{t('blog.list.emptyHint')}</p>
<button
type="button"
className={styles.emptyCta}
onClick={() => navigate('/blog/new')}
>
<Plus size={18} strokeWidth={2.25} />
{t('blog.list.emptyCta')}
</button>
</div>
) : (
<>
<div className={pageStyles.grid}>