import { type FC } from 'react' import { useFormik } from 'formik' import { p as P, pInput as PInput } from 'web-components' import ProductsSelector from './ProductsSelector' import { trpc } from '@/lib/trpc-client' import { X } from 'lucide-react' import type { AdminProductGroup as SharedAdminProductGroup } from '@packages/shared' // Serialized product group (string date, loosely typed products) anchored to shared export type ProductGroup = Omit & { createdAt: string products: any[] } interface ProductGroupFormProps { group?: ProductGroup | null onClose: () => void onSuccess: () => void } const ProductGroupForm: FC = ({ group, onClose, onSuccess, }) => { // Fetch products const { data: productsData } = trpc.common.product.getAllProductsSummary.useQuery() const createGroup = trpc.admin.product.createGroup.useMutation() const updateGroup = trpc.admin.product.updateGroup.useMutation() const isEditing = !!group const products = productsData?.products || [] const formik = useFormik({ initialValues: { group_name: group?.groupName || '', description: group?.description || '', product_ids: group?.products?.map(p => p.id) || [], }, validate: (values) => { const errors: {[key: string]: string} = {} if (!values.group_name.trim()) { errors.group_name = 'Group name is required' } return errors }, onSubmit: async (values) => { try { if (isEditing) { await updateGroup.mutateAsync({ id: group.id, group_name: values.group_name, description: values.description, product_ids: values.product_ids, }) } else { await createGroup.mutateAsync({ group_name: values.group_name, description: values.description, product_ids: values.product_ids, }) } onSuccess() } catch (error: any) { window.alert(`Error: ${error.message || 'Failed to save group'}`) } }, }) return (
{/* Header */}

{isEditing ? 'Edit Product Group' : 'Create Product Group'}

{/* Group Name */} formik.setFieldValue('group_name', e.target.value)} style={{ marginBottom: 16 }} /> {formik.errors.group_name && (

{formik.errors.group_name}

)} {/* Description */} formik.setFieldValue('description', e.target.value)} style={{ marginBottom: 16 }} /> {/* Products Selection */} formik.setFieldValue('product_ids', value as number[])} multiple={true} label="Products" placeholder="Select products" labelFormat={(product) => product.label} /> {/* Actions */}
Cancel
formik.handleSubmit()} className="flex-1 bg-brand-600 rounded-lg py-4 items-center text-center text-white font-medium cursor-pointer" > {createGroup.isPending || updateGroup.isPending ? 'Saving...' : 'Save'}
) } export default ProductGroupForm