diff --git a/public/images/gamification/badges/comments-1.png b/public/images/gamification/badges/comments-1.png new file mode 100644 index 0000000..78dcbd6 Binary files /dev/null and b/public/images/gamification/badges/comments-1.png differ diff --git a/public/images/gamification/badges/likes-1.png b/public/images/gamification/badges/likes-1.png new file mode 100644 index 0000000..7a32107 Binary files /dev/null and b/public/images/gamification/badges/likes-1.png differ diff --git a/public/images/gamification/badges/post-25.png b/public/images/gamification/badges/post-25.png new file mode 100644 index 0000000..89030db Binary files /dev/null and b/public/images/gamification/badges/post-25.png differ diff --git a/src/components/profile/ActivityBadgePaths.tsx b/src/components/profile/ActivityBadgePaths.tsx index 1ebd11f..5f42976 100644 --- a/src/components/profile/ActivityBadgePaths.tsx +++ b/src/components/profile/ActivityBadgePaths.tsx @@ -11,12 +11,8 @@ import type { PublicGamificationBadgeSchema } from "@/lib/types"; const badgeProgressionRows = activityLadders.map((ladder) => ({ id: ladder.category, - label: ladder.category === "likes" ? "لایک‌های انجمن" : ladder.title, - badges: ladder.badges.map((badge) => ({ - id: badge.id, - label: badge.label, - description: ladder.category === "likes" ? badge.description.replace(/پسند/g, "لایک") : badge.description, - })), + label: ladder.title, + badges: ladder.badges, })); export function ActivityBadgePaths({ diff --git a/src/components/profile/GamificationBadges.tsx b/src/components/profile/GamificationBadges.tsx index 769e10f..d11f54b 100644 --- a/src/components/profile/GamificationBadges.tsx +++ b/src/components/profile/GamificationBadges.tsx @@ -8,7 +8,7 @@ const categoryLabels: Record attendance: "رویداد", posts: "نویسندگی", comments: "گفت‌وگو", - likes: "پسندها", + likes: "لایک‌ها", }; export function GamificationBadges({ diff --git a/src/lib/gamification-badges.ts b/src/lib/gamification-badges.ts index 0b95288..73ce648 100644 --- a/src/lib/gamification-badges.ts +++ b/src/lib/gamification-badges.ts @@ -41,22 +41,23 @@ export const activityLadders: ActivityLadderDefinition[] = [ unitLabel: "حضور تأییدشده", pointsPerAction: 30, badges: [ - { id: "attendance-1", label: "حضور اول", threshold: 1, description: "حضور تأییدشده در یک رویداد" }, - { id: "attendance-5", label: "همراه رویدادها", threshold: 5, description: "حضور تأییدشده در پنج رویداد" }, - { id: "attendance-10", label: "همیار رویدادها", threshold: 10, description: "حضور تأییدشده در ده رویداد" }, - { id: "attendance-25", label: "چهره آشنای رویدادها", threshold: 25, description: "حضور تأییدشده در بیست‌وپنج رویداد" }, + { id: "attendance-1", label: "حضور اول", threshold: 1, description: "حضور تأییدشده در ۱ رویداد" }, + { id: "attendance-5", label: "همراه رویدادها", threshold: 5, description: "حضور تأییدشده در ۵ رویداد" }, + { id: "attendance-10", label: "همیار رویدادها", threshold: 10, description: "حضور تأییدشده در ۱۰ رویداد" }, + { id: "attendance-25", label: "چهره آشنای رویدادها", threshold: 25, description: "حضور تأییدشده در ۲۵ رویداد" }, ], }, { category: "posts", title: "نوشته‌های منتشرشده", - description: "نوشته‌های منتشرشده و هم‌نویسندگی‌هایی که در انجمن ثبت شده‌اند حساب می‌شوند.", - unitLabel: "نوشته منتشرشده یا هم‌نویسندگی", + description: "نوشته‌های منتشرشده در انجمن به این مسیر کمک می‌کنند.", + unitLabel: "نوشته منتشرشده", pointsPerAction: 20, badges: [ - { id: "post-1", label: "نویسنده انجمن", threshold: 1, description: "انتشار یا هم‌نویسندگی یک نوشته" }, - { id: "post-5", label: "نویسنده فعال", threshold: 5, description: "انتشار یا هم‌نویسندگی پنج نوشته" }, - { id: "post-10", label: "نویسنده برجسته", threshold: 10, description: "انتشار یا هم‌نویسندگی ده نوشته" }, + { id: "post-1", label: "نویسنده انجمن", threshold: 1, description: "۱ نوشته منتشرشده" }, + { id: "post-5", label: "نویسنده فعال", threshold: 5, description: "۵ نوشته منتشرشده" }, + { id: "post-10", label: "نویسنده برجسته", threshold: 10, description: "۱۰ نوشته منتشرشده" }, + { id: "post-25", label: "نویسنده پیشرو", threshold: 25, description: "۲۵ نوشته منتشرشده" }, ], }, { @@ -66,21 +67,23 @@ export const activityLadders: ActivityLadderDefinition[] = [ unitLabel: "دیدگاه یا پاسخ تأییدشده", pointsPerAction: 5, badges: [ - { id: "comment-5", label: "اهل گفت‌وگو", threshold: 5, description: "پنج دیدگاه یا پاسخ تأییدشده" }, - { id: "comment-20", label: "همراه گفت‌وگو", threshold: 20, description: "بیست دیدگاه یا پاسخ تأییدشده" }, - { id: "comment-50", label: "صدای اثرگذار", threshold: 50, description: "پنجاه دیدگاه یا پاسخ تأییدشده" }, + { id: "comment-1", label: "آغاز گفت‌وگو", threshold: 1, description: "۱ دیدگاه یا پاسخ تأییدشده" }, + { id: "comment-5", label: "اهل گفت‌وگو", threshold: 5, description: "۵ دیدگاه یا پاسخ تأییدشده" }, + { id: "comment-20", label: "همراه گفت‌وگو", threshold: 20, description: "۲۰ دیدگاه یا پاسخ تأییدشده" }, + { id: "comment-50", label: "صدای اثرگذار", threshold: 50, description: "۵۰ دیدگاه یا پاسخ تأییدشده" }, ], }, { category: "likes", - title: "پسندهای انجمن", - description: "پسندهایی که داده‌اید و پسندهایی که نوشته‌های شما گرفته‌اند با هم شمرده می‌شوند.", - unitLabel: "پسند داده‌شده یا دریافت‌شده", + title: "لایک‌های انجمن", + description: "این مسیر با لایک‌کردن نوشته‌ها پیش می‌رود؛ لایک‌های دریافتی برای امتیاز کلی حساب می‌شوند، اما در نشان‌های این مسیر شمرده نمی‌شوند.", + unitLabel: "لایک روی نوشته", pointsPerAction: 1, badges: [ - { id: "likes-10", label: "دست‌گرم", threshold: 10, description: "ده پسند داده‌شده یا دریافت‌شده" }, - { id: "likes-50", label: "محبوب انجمن", threshold: 50, description: "پنجاه پسند داده‌شده یا دریافت‌شده" }, - { id: "likes-100", label: "الهام‌بخش", threshold: 100, description: "صد پسند داده‌شده یا دریافت‌شده" }, + { id: "likes-1", label: "نخستین لایک", threshold: 1, description: "۱ لایک روی یک نوشته" }, + { id: "likes-10", label: "دست‌گرم", threshold: 10, description: "۱۰ لایک روی نوشته‌ها" }, + { id: "likes-50", label: "محبوب انجمن", threshold: 50, description: "۵۰ لایک روی نوشته‌ها" }, + { id: "likes-100", label: "الهام‌بخش", threshold: 100, description: "۱۰۰ لایک روی نوشته‌ها" }, ], }, ]; @@ -88,7 +91,7 @@ export const activityLadders: ActivityLadderDefinition[] = [ export const activityPoints = { save: 1, saveLabel: "ذخیره نوشته امتیاز دارد، اما نشان جداگانه ندارد.", - selfLikeLabel: "پسند نوشته خودتان هم برای شما حساب می‌شود.", + likeScoringLabel: "لایک‌کردن نوشته‌ها، حتی نوشته خودتان، در امتیاز کلی حساب می‌شود؛ لایک‌های دریافتی هم امتیاز کلی دارند، اما در نشان‌های لایک شمرده نمی‌شوند.", reversalLabel: "اگر فعالیتی حذف یا نامعتبر شود، امتیاز و نشان وابسته به آن هم بازبینی می‌شود.", }; diff --git a/src/views/Profile.tsx b/src/views/Profile.tsx index c307e46..6f1eaf5 100644 --- a/src/views/Profile.tsx +++ b/src/views/Profile.tsx @@ -535,7 +535,7 @@ export default function Profile({ initialTab }: { initialTab?: string }) {