TorbatYar/frontend/modules/loyalty/features/admin/capabilities.tsx
Mortezakoohjani d579d0b142 feat(loyalty): add Loyalty Platform Frontend module
Add frontend/modules/loyalty with types, API client, design system, feature pages and thin App Router routes under app/loyalty/. BFF proxy at app/api/loyalty/. Include loyalty frontend docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 10:50:55 +03:30

39 lines
1.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client";
import { PageHeader, Card, CardContent, Badge } from "@/components/ds";
import { LoyaltyBreadcrumbs } from "@/modules/loyalty/components/LoyaltyBreadcrumbs";
const CAPABILITIES = [
{ id: "programs", phase: "7.0", label: "برنامه‌های وفاداری", shipped: true },
{ id: "tiers", phase: "7.0", label: "سطوح عضویت", shipped: true },
{ id: "members", phase: "7.07.1", label: "اعضا و چرخه عمر", shipped: true },
{ id: "points", phase: "7.2", label: "دفترکل امتیاز", shipped: true },
{ id: "rewards", phase: "7.3", label: "پاداش و بازخرید", shipped: true },
{ id: "campaigns", phase: "7.4", label: "کمپین", shipped: true },
{ id: "referrals", phase: "7.5", label: "معرفی", shipped: true },
{ id: "wallets", phase: "7.6", label: "کیف پول", shipped: true },
{ id: "gift_cards", phase: "7.7", label: "کارت هدیه (آینده)", shipped: false },
];
export default function CapabilitiesPage() {
return (
<div>
<LoyaltyBreadcrumbs items={[{ label: "قابلیت‌ها" }]} />
<PageHeader
title="قابلیت‌های سرویس"
description="بر اساس docs/service-snapshots/loyalty.yaml و فازهای ۷.۰۷.۶."
/>
<div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
{CAPABILITIES.map((c) => (
<Card key={c.id}>
<CardContent className="flex items-center justify-between pt-5">
<span>{c.label}</span>
<Badge tone={c.shipped ? "success" : "warning"}>{c.phase}</Badge>
</CardContent>
</Card>
))}
</div>
</div>
);
}