TorbatYar/frontend/modules/loyalty/design-system/LoyaltyStatusChip.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

104 lines
2.4 KiB
TypeScript

"use client";
import { Badge } from "@/components/ds";
import {
campaignApplicationStatusLabels,
campaignStatusLabels,
ledgerEntryTypeLabels,
memberStatusLabels,
pointAccountStatusLabels,
programStatusLabels,
redemptionStatusLabels,
referralAttributionStatusLabels,
referralCodeStatusLabels,
referralProgramStatusLabels,
rewardStatusLabels,
rewardTypeLabels,
tierStatusLabels,
walletAccountStatusLabels,
walletLedgerEntryTypeLabels,
} from "./tokens";
type Tone = "default" | "primary" | "success" | "warning" | "danger" | "info";
const toneMap: Record<string, Tone> = {
draft: "default",
active: "success",
suspended: "warning",
archived: "default",
pending: "info",
frozen: "warning",
expired: "danger",
cancelled: "danger",
transferred: "info",
closed: "default",
inactive: "default",
open: "success",
scheduled: "info",
paused: "warning",
applied: "success",
reversed: "danger",
fulfilled: "success",
revoked: "danger",
converted: "primary",
rewarded: "success",
earn: "success",
redeem: "primary",
adjust: "warning",
credit: "success",
debit: "warning",
transfer_in: "info",
transfer_out: "info",
};
export function LoyaltyStatusChip({
status,
domain = "generic",
}: {
status: string;
domain?:
| "program"
| "member"
| "tier"
| "point-account"
| "point_account"
| "ledger"
| "reward"
| "reward-type"
| "reward_type"
| "redemption"
| "campaign"
| "campaign-application"
| "referral-program"
| "referral_program"
| "referral-code"
| "referral_code"
| "referral-attribution"
| "referral_attribution"
| "wallet"
| "wallet-ledger"
| "generic";
}) {
void domain;
const labels: Record<string, string> = {
...programStatusLabels,
...memberStatusLabels,
...tierStatusLabels,
...pointAccountStatusLabels,
...ledgerEntryTypeLabels,
...rewardStatusLabels,
...rewardTypeLabels,
...redemptionStatusLabels,
...campaignStatusLabels,
...campaignApplicationStatusLabels,
...referralProgramStatusLabels,
...referralCodeStatusLabels,
...referralAttributionStatusLabels,
...walletAccountStatusLabels,
...walletLedgerEntryTypeLabels,
};
const label = labels[status] ?? status;
const tone = toneMap[status] ?? "default";
return <Badge tone={tone}>{label}</Badge>;
}