import { FC, useEffect, useState } from 'react'; import { createPortal } from 'react-dom'; import { FaSave, FaSpinner, FaTimes, FaTrash } from 'react-icons/fa'; import { LocalizeText } from '../../../../api'; import { useCatalogData } from '../../../../hooks'; import { IOfferEditData, useCatalogAdmin } from '../../CatalogAdminContext'; export const CatalogAdminOfferEditView: FC<{}> = () => { const { currentPage = null } = useCatalogData(); const catalogAdmin = useCatalogAdmin(); const editingOffer = catalogAdmin?.editingOffer ?? null; const setEditingOffer = catalogAdmin?.setEditingOffer; const saveOffer = catalogAdmin?.saveOffer; const deleteOffer = catalogAdmin?.deleteOffer; const createOffer = catalogAdmin?.createOffer; const loading = catalogAdmin?.loading ?? false; const [ itemIds, setItemIds ] = useState(''); const [ catalogName, setCatalogName ] = useState(''); const [ costCredits, setCostCredits ] = useState(0); const [ costPoints, setCostPoints ] = useState(0); const [ pointsType, setPointsType ] = useState(0); const [ amount, setAmount ] = useState(1); const [ clubOnly, setClubOnly ] = useState('0'); const [ extradata, setExtradata ] = useState(''); const [ haveOffer, setHaveOffer ] = useState('1'); const [ offerId, setOfferIdGroup ] = useState(-1); const [ limitedStack, setLimitedStack ] = useState(0); const [ orderNumber, setOrderNumber ] = useState(0); const [ isNew, setIsNew ] = useState(false); useEffect(() => { if(!editingOffer) return; if(editingOffer.offerId === -1) { setIsNew(true); setItemIds(''); setCatalogName(''); setCostCredits(0); setCostPoints(0); setPointsType(0); setAmount(1); setClubOnly('0'); setExtradata(''); setHaveOffer('1'); setOfferIdGroup(-1); setLimitedStack(0); setOrderNumber(0); } else { setIsNew(false); setItemIds(editingOffer.itemIds || ''); setCatalogName(editingOffer.localizationName || ''); setCostCredits(editingOffer.priceInCredits); setCostPoints(editingOffer.priceInActivityPoints); setPointsType(editingOffer.activityPointType); setAmount(editingOffer.product?.productCount || 1); setClubOnly(editingOffer.clubLevel > 0 ? '1' : '0'); setExtradata(editingOffer.product?.extraParam || ''); setHaveOffer(editingOffer.haveOffer ? '1' : '0'); setOfferIdGroup(editingOffer.offerId || -1); setLimitedStack(0); setOrderNumber(0); } }, [ editingOffer ]); if(!editingOffer) return null; const handleSave = async () => { if(!saveOffer || !createOffer) return; const data: IOfferEditData = { offerId: isNew ? undefined : editingOffer.offerId, pageId: currentPage?.pageId || 0, itemIds, catalogName, costCredits, costPoints, pointsType, amount, clubOnly, extradata, haveOffer, offerId_group: offerId, limitedStack, orderNumber }; if(isNew) createOffer(data); else saveOffer(data); if(setEditingOffer) setEditingOffer(null); }; const handleDelete = () => { if(isNew || !deleteOffer || !confirm(LocalizeText('catalog.admin.delete.offer.confirm'))) return; deleteOffer(editingOffer.offerId); if(setEditingOffer) setEditingOffer(null); }; const inputClass = 'text-[11px] border-2 border-card-grid-item-border rounded px-2 py-1 bg-white placeholder:text-[#4b5563] focus:outline-none focus:border-primary transition-colors'; return createPortal(