"use client"; import React, { useEffect, useMemo, useState } from 'react'; import PageLayout from '../../../components/PageLayout'; import useCoffeeManagement from '../hooks/useCoffeeManagement'; import { PhotoIcon } from '@heroicons/react/24/solid'; import Link from 'next/link'; import { useRouter } from 'next/navigation'; export default function CreateSubscriptionPage() { const { createProduct } = useCoffeeManagement(); const router = useRouter(); const [error, setError] = useState(null); // form state const [title, setTitle] = useState(''); const [description, setDescription] = useState(''); const [price, setPrice] = useState(0); const [state, setState] = useState<'available'|'unavailable'>('available'); const [pictureFile, setPictureFile] = useState(undefined); const [previewUrl, setPreviewUrl] = useState(null); const [currency, setCurrency] = useState('EUR'); const [isFeatured, setIsFeatured] = useState(false); // Fixed billing defaults (locked: month / 1) const billingInterval: 'month' = 'month'; const intervalCount: number = 1; const onCreate = async (e: React.FormEvent) => { e.preventDefault(); setError(null); try { await createProduct({ title, description, price, currency, is_featured: isFeatured, state: state === 'available', pictureFile }); router.push('/admin/subscriptions'); } catch (e: any) { setError(e.message || 'Failed to create'); } }; // preview object URL management useEffect(() => { if (pictureFile) { const url = URL.createObjectURL(pictureFile); setPreviewUrl(url); return () => URL.revokeObjectURL(url); } else { setPreviewUrl(null); } }, [pictureFile]); function handleSelectFile(file?: File) { if (!file) return; const allowed = ['image/jpeg','image/png','image/webp']; if (!allowed.includes(file.type)) { setError('Invalid image type. Allowed: JPG, PNG, WebP'); return; } if (file.size > 10 * 1024 * 1024) { // 10MB setError('Image exceeds 10MB limit'); return; } setError(null); setPictureFile(file); } return (
{/* Header */}

Create Coffee

Add a new coffee.

Back to list
{/* Title */}
setTitle(e.target.value)} />
{/* Price */}
setPrice(Number(e.target.value))} />
{/* Currency */}
setCurrency(e.target.value.toUpperCase().slice(0,3))} />
{/* Featured */}
setIsFeatured(e.target.checked)} />
{/* Subscription Billing (Locked) + Availability */}

Fixed monthly subscription billing (interval count = 1). These settings are locked.

{/* Description */}