الميزات: إضافة صفحات الأسعار والمدونة، وتفعيل ميزة تقييم الأدوات
- إضافة روابط جديدة في تذييل صفحات الأسعار والمدونة. - إنشاء مكون صفحة الأسعار لعرض تفاصيل الخطط ومقارنة الميزات. - تطوير مكون صفحة المدونة لعرض منشورات المدونة مع روابط للمقالات الفردية. - تقديم مكون تقييم الأدوات لتلقي ملاحظات المستخدمين حول الأدوات، بما في ذلك التقييم بالنجوم والتعليقات الاختيارية. - تفعيل وظيفة useToolRating لجلب وعرض تقييمات الأدوات. - تحديث أدوات تحسين محركات البحث لتضمين بيانات التقييم في البيانات المنظمة للأدوات. - تحسين ملفات i18n بترجمات للميزات والصفحات الجديدة. - دمج إدارة الموافقة على ملفات تعريف الارتباط لتتبع التحليلات.
This commit is contained in:
35
frontend/src/hooks/useToolRating.ts
Normal file
35
frontend/src/hooks/useToolRating.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { useState, useEffect } from 'react';
|
||||
import api from '@/services/api';
|
||||
|
||||
interface RatingSummary {
|
||||
tool: string;
|
||||
count: number;
|
||||
average: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch the aggregate rating for a tool slug.
|
||||
* Returns { average, count } or defaults if the fetch fails.
|
||||
*/
|
||||
export function useToolRating(toolSlug: string) {
|
||||
const [data, setData] = useState<RatingSummary>({ tool: toolSlug, count: 0, average: 0 });
|
||||
|
||||
useEffect(() => {
|
||||
let cancelled = false;
|
||||
|
||||
api
|
||||
.get<RatingSummary>(`/ratings/tool/${toolSlug}`)
|
||||
.then((res) => {
|
||||
if (!cancelled) setData(res.data);
|
||||
})
|
||||
.catch(() => {
|
||||
// silently fail — rating is optional
|
||||
});
|
||||
|
||||
return () => {
|
||||
cancelled = true;
|
||||
};
|
||||
}, [toolSlug]);
|
||||
|
||||
return data;
|
||||
}
|
||||
Reference in New Issue
Block a user