From e596d5523745c5f45c28d3a3733d10c7565f0258 Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:24:08 +0330 Subject: [PATCH] Import source: app/src/admin/ReviewPanel Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- app/src/admin/ReviewPanel.jsx | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 app/src/admin/ReviewPanel.jsx diff --git a/app/src/admin/ReviewPanel.jsx b/app/src/admin/ReviewPanel.jsx new file mode 100644 index 0000000..aa94a56 --- /dev/null +++ b/app/src/admin/ReviewPanel.jsx @@ -0,0 +1,27 @@ +import { useState, useEffect } from 'react'; +import { useToast, pillBtn } from '../../teknav-ui.jsx'; +import { adminApi } from '../lib/admin-api.js'; +import { BRAND, PanelState } from './Shared.jsx'; + +function ReviewsPanel() { + const [items, setItems] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(false); + const load = () => adminApi.listReviews().then(setItems).catch(() => setError(true)).finally(() => setLoading(false)); + useEffect(() => { load(); }, []); + const update = async (articleId, status) => { await adminApi.updateReview(articleId, { status }); load(); }; + if (loading || error || items.length === 0) return ; + return items.map(item => ( +
+
{item.article?.title}
+
{item.status} · {item.reviewer?.name ?? 'بدون بازبین'}
+
+ + + +
+
+ )); +} + +export { ReviewsPanel };