diff --git a/src/routes/admin/pricing.tsx b/src/routes/admin/pricing.tsx index d77a42a..c67b401 100644 --- a/src/routes/admin/pricing.tsx +++ b/src/routes/admin/pricing.tsx @@ -17,6 +17,7 @@ type AiCreditPackage = { credits: number; price_inr: number; is_active: boolean; + applicable_roles: string[]; created_at: string; updated_at: string; }; @@ -127,6 +128,7 @@ export default function PricingPage() { const [aiEditDescription, setAiEditDescription] = createSignal(""); const [aiEditCredits, setAiEditCredits] = createSignal(""); const [aiEditPrice, setAiEditPrice] = createSignal(""); + const [aiEditRoles, setAiEditRoles] = createSignal([]); const [aiEditSaving, setAiEditSaving] = createSignal(false); const [aiEditError, setAiEditError] = createSignal(""); const [aiTogglingId, setAiTogglingId] = createSignal(""); @@ -135,10 +137,20 @@ export default function PricingPage() { const [aiCDescription, setAiCDescription] = createSignal(""); const [aiCCredits, setAiCCredits] = createSignal(""); const [aiCPrice, setAiCPrice] = createSignal(""); + const [aiCRoles, setAiCRoles] = createSignal([]); const [aiCSaving, setAiCSaving] = createSignal(false); const [aiCError, setAiCError] = createSignal(""); const [aiCreateView, setAiCreateView] = createSignal(false); + const toggleAiCRole = (role: string) => { + const current = aiCRoles(); + setAiCRoles(current.includes(role) ? current.filter((r) => r !== role) : [...current, role]); + }; + const toggleAiEditRole = (role: string) => { + const current = aiEditRoles(); + setAiEditRoles(current.includes(role) ? current.filter((r) => r !== role) : [...current, role]); + }; + const load = async () => { setLoading(true); setLoadError(""); @@ -184,11 +196,13 @@ export default function PricingPage() { setAiEditDescription(pkg.description || ""); setAiEditCredits(String(pkg.credits)); setAiEditPrice(String(pkg.price_inr / 100)); // Convert paise to rupees for display + setAiEditRoles(pkg.applicable_roles ?? []); setAiEditError(""); }; const cancelAiEdit = () => { setAiEditingId(""); + setAiEditRoles([]); setAiEditError(""); }; @@ -206,6 +220,7 @@ export default function PricingPage() { description: aiEditDescription() || undefined, credits: Number(aiEditCredits()), price_inr: priceInPaise, + applicable_roles: aiEditRoles(), }), }); if (!res.ok) throw new Error("Failed to save"); @@ -250,6 +265,7 @@ export default function PricingPage() { description: aiCDescription() || undefined, credits: Number(aiCCredits()), price_inr: priceInPaise, + applicable_roles: aiCRoles(), }), }); if (!res.ok) throw new Error("Failed to create package"); @@ -257,6 +273,7 @@ export default function PricingPage() { setAiCDescription(""); setAiCCredits(""); setAiCPrice(""); + setAiCRoles([]); setAiCreateView(false); await loadAiPackages(); } catch (err: any) { @@ -1006,6 +1023,24 @@ export default function PricingPage() { style="padding:7px 10px;border:1px solid #e2e8f0;border-radius:6px;font-size:13px;width:110px" /> +
+ +
+ + {(role) => ( + + )} + +
+
+ )} + +
+