"use client"; import { FormEvent, useCallback, useEffect, useState } from "react"; import { api, ApiError, type Feature } from "@/lib/api"; import { AdminPageHeader, Banner, Button, EmptyState, Modal, StatusBadge, TextField, TextareaField, } from "@/components/admin/controls"; export default function AdminFeaturesPage() { const [features, setFeatures] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(""); const [open, setOpen] = useState(false); const load = useCallback(async () => { setLoading(true); setError(""); try { const page = await api.features.list(1, 100); setFeatures(page.items); } catch (e) { setError(e instanceof ApiError ? e.message : "خطا در بارگذاری قابلیت‌ها"); } finally { setLoading(false); } }, []); useEffect(() => { void load(); }, [load]); return (
setOpen(true)}>قابلیت جدید} /> {error && {error}}
{loading ? ( ) : features.length === 0 ? ( ) : (
{features.map((f) => ( ))}
نام کلید سرویس وضعیت
{f.name} {f.feature_key} {f.service_key}
)}
setOpen(false)} onCreated={() => { setOpen(false); void load(); }} />
); } function CreateFeatureModal({ open, onClose, onCreated, }: { open: boolean; onClose: () => void; onCreated: () => void; }) { const [featureKey, setFeatureKey] = useState(""); const [name, setName] = useState(""); const [serviceKey, setServiceKey] = useState(""); const [description, setDescription] = useState(""); const [saving, setSaving] = useState(false); const [error, setError] = useState(""); const handleSubmit = async (e: FormEvent) => { e.preventDefault(); setError(""); setSaving(true); try { await api.features.create({ feature_key: featureKey.trim(), name: name.trim(), service_key: serviceKey.trim(), description: description.trim() || null, }); setFeatureKey(""); setName(""); setServiceKey(""); setDescription(""); onCreated(); } catch (err) { setError(err instanceof ApiError ? err.message : "ایجاد قابلیت ناموفق بود"); } finally { setSaving(false); } }; return (
{error && {error}}
); }