From 4b8504df9182b4c095b28399f4556faf8b0d568f Mon Sep 17 00:00:00 2001 From: hamed <15238-genius.ha@users.noreply.drupalcode.org> Date: Wed, 10 Jun 2026 13:20:21 +0330 Subject: [PATCH] feat: enhance various pages with improved UI elements and search functionality --- assets/admin/components/ui/DataTable.tsx | 2 +- assets/admin/pages/AppointmentsPage.tsx | 4 +-- assets/admin/pages/BlogFormPage.tsx | 4 +-- assets/admin/pages/CommentsPage.tsx | 23 +++++++++++--- assets/admin/pages/RatingsPage.tsx | 22 ++++++++++--- assets/admin/pages/SettlementsPage.tsx | 18 ++++++++--- assets/admin/pages/SmsPage.tsx | 40 +++++++++++++++++------- assets/admin/styles.css | 7 +++-- 8 files changed, 86 insertions(+), 34 deletions(-) diff --git a/assets/admin/components/ui/DataTable.tsx b/assets/admin/components/ui/DataTable.tsx index b326e122..3cc91153 100644 --- a/assets/admin/components/ui/DataTable.tsx +++ b/assets/admin/components/ui/DataTable.tsx @@ -56,7 +56,7 @@ export default function DataTable({ {(onSearchChange !== undefined || headerExtra) && (
{onSearchChange !== undefined && ( -
+
(

{a.patient_name || '—'}

-

{maskMobile(a.patient_mobile)}

+

{maskMobile(a.patient_mobile)}

), }, @@ -88,7 +88,7 @@ export default function AppointmentsPage() { />
-
+
{STATUS_FILTERS.map((f) => (
diff --git a/assets/admin/pages/CommentsPage.tsx b/assets/admin/pages/CommentsPage.tsx index 375c7e66..d93064bb 100644 --- a/assets/admin/pages/CommentsPage.tsx +++ b/assets/admin/pages/CommentsPage.tsx @@ -23,6 +23,7 @@ export default function CommentsPage() { const [page, setPage] = useState(1); const [search, setSearch] = useState(''); const [approvedFilter, setApprovedFilter] = useState('pending'); + const [approveTarget, setApproveTarget] = useState(null); const [deleteTarget, setDeleteTarget] = useState(null); const limit = 15; @@ -40,6 +41,7 @@ export default function CommentsPage() { mutationFn: (c: Comment) => api.post>(`/api/v1/admin/comment/${c.uuid}/approve`, {}), onSuccess: () => { toast.success('نظر تأیید شد'); + setApproveTarget(null); qc.invalidateQueries({ queryKey: ['comments'] }); }, onError: (err: Error) => toast.error(err.message), @@ -67,7 +69,7 @@ export default function CommentsPage() { key: 'body', header: 'متن', render: (c) => ( - {c.body} + {c.body} ), }, { @@ -111,8 +113,11 @@ export default function CommentsPage() { actions={(comment) => ( <> {!comment.is_approved && ( - )} @@ -126,10 +131,20 @@ export default function CommentsPage() {
+ approveTarget && approveMutation.mutate(approveTarget)} + onCancel={() => setApproveTarget(null)} + /> + [] = [ { key: 'patient_name', header: 'بیمار', render: (r) => {r.patient_name} }, { key: 'doctor_name', header: 'پزشک', render: (r) => `دکتر ${r.doctor_name}` }, - { key: 'overall', header: 'کلی', render: (r) => }, - { key: 'diagnosis_accuracy', header: 'صحت تشخیص', render: (r) => }, - { key: 'skill', header: 'مهارت', render: (r) => }, - { key: 'behavior', header: 'رفتار', render: (r) => }, + { + key: 'overall', + header: 'کلی', + render: (r) => , + }, + { + key: 'ratings_detail', + header: 'جزئیات امتیاز', + render: (r) => ( +
+ تشخیص: + مهارت: + رفتار: +
+ ), + }, { key: 'created_at', header: 'تاریخ', render: (r) => formatDate(r.created_at) }, ]; @@ -93,7 +105,7 @@ export default function RatingsPage() { (null); const [rejectTarget, setRejectTarget] = useState(null); @@ -32,10 +33,11 @@ export default function SettlementsPage() { const limit = 15; const { data, isLoading } = useQuery({ - queryKey: ['settlements', page, statusFilter], + queryKey: ['settlements', page, search, statusFilter], queryFn: () => { const params = new URLSearchParams({ page: String(page), limit: String(limit) }); if (statusFilter) params.set('status', statusFilter); + if (search) params.set('search', search); return api.get>(`/api/v1/admin/settlements?${params}`); }, }); @@ -83,7 +85,7 @@ export default function SettlementsPage() { />
-
+
{STATUS_FILTERS.map((f) => ( {s.status === 'pending' && ( <> - ))}
@@ -219,8 +225,8 @@ export default function SmsPage() { emptyMessage="هیچ قالبی در انتظار تأیید نیست" actions={(t) => ( <> -