'use client' import { useEffect, useState } from 'react' import type { PaginationListColumnType } from '@/types' import PaginatedList from '@/components/PaginatedList' import PageNavbar from '@/components/layouts/PageNavbar' import AdminTableViewButton from '@/components/ui/AdminTableViewButton' import StatusChip from '@/components/ui/StatusChip' import { APP_ROUTES } from '@/constants/routes' import { EVENT_STATUS_FILTER_ITEMS, getEventStatus } from '@/constants/status' import { formatCurrency, formatPersonName, coerceToString } from '@/helpers' import { formatPersianDate } from '@/lib/formatters' import { API_ROUTES } from '@/services/config' interface EventOrganizer { id: string firstName: string | null lastName: string | null } interface EventRow { id: string title: string status: string isFree: boolean price: number endsAt: string organizer?: EventOrganizer [key: string]: unknown } /** * Admin entry point for per-event discount codes. Codes are always scoped to * one paid event — this page lists those events and deep-links into the * discounts tab on the event detail page (where create / report / delete live). */ const columns: PaginationListColumnType[] = [ { field: 'title', label: 'رویداد', filterable: true, sortable: true, type: 'text', }, { field: 'organizerId', label: 'میزبان', filterable: false, sortable: false, }, { field: 'status', label: 'وضعیت', filterable: true, sortable: true, type: 'select', filterItems: EVENT_STATUS_FILTER_ITEMS, }, { field: 'price', label: 'قیمت', filterable: false, sortable: true, }, { field: 'endsAt', label: 'پایان', filterable: false, sortable: true, }, { field: 'actions', label: 'عملیات', }, ] const DiscountCodesAdminPage = () => { const [currentTime, setCurrentTime] = useState(null) useEffect(() => { setCurrentTime(Date.now()) }, []) return (

کد تخفیف فقط برای رویدادهای پولی تعریف می‌شود. رویداد مورد نظر را انتخاب کنید و از تب «کد تخفیف» کد بسازید، غیرفعال کنید یا گزارش مصرف را ببینید. هنگام ساخت می‌توانید هزینه را از سهم پلتفرم یا میزبان کم کنید.

{{ organizerId: (row) => { const event = row as EventRow const organizer = event.organizer return formatPersonName(organizer?.firstName, organizer?.lastName) }, status: (_row, cellValue) => { const { label, chipColor } = getEventStatus(coerceToString(cellValue)) return ( ) }, price: (row, cellValue) => { const event = row as EventRow const amount = typeof cellValue === 'number' ? cellValue : Number(cellValue) if (event.isFree || !Number.isFinite(amount)) return '—' return formatCurrency(amount) }, endsAt: (row, cellValue) => { const event = row as EventRow const ended = currentTime !== null && new Date(event.endsAt).getTime() <= currentTime return ( {formatPersianDate(cellValue)} {ended ? ' (پایان‌یافته)' : ''} ) }, actions: (row) => { const event = row as EventRow return ( ) }, }}
) } export default DiscountCodesAdminPage