import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useSelector } from 'react-redux'; import { useCreateSiteServicesMutation } from '/src/api/apiSiteServices'; import { selectRegions } from '../store/slice/regionSlice'; import { TextEditor } from '../components/Editors/TextEditor'; import { LoadingComponent } from '../components/Placeholders/LoadingComponent'; import { ErrorComponent } from '../components/Placeholders/ErrorComponent'; import { NotFindElement } from '../components/Placeholders/NotFindElement'; import { EditElementForm } from '../components/Forms/EditElementForm'; import Modal from '../components/Modals/Modal'; export function AddSiteServicesPage() { const navigate = useNavigate(); const navigateBack = () => navigate(`/site-services`); const regions = useSelector(selectRegions); const [createSiteServices] = useCreateSiteServicesMutation(); const [isModalSuccess, setModalSuccess] = useState(false); const [errors, setErrors] = useState({ name: '', alias: '', regionId: '' }); const [form, setForm] = useState({ name: '', active: false, regionId: '', alias: '', previewImg: '', partPrice: '', pokazaniya: '', preparation: '', protivopokazaniya: '', bannerImg: '', bannerImgM: '', bannerImgUrl: '', downloadFile: '', fullWidthBanner: '', kodUslug: '', linkPrice: '', photosTitle: '', contraindicationsList: '', customBlockText: '', customBlockText2: '', customBlockTitle: '', customBlockTitle2: '', indicationsList: '', plusList: '', plusText: '', plusTitle: '', prepareTitle: '', processText: '', processTitle: '', servicesList: '', servicesTitle: '', textUp: '', trainingText: '', whyText: '', whyTitle: '', hidePicture: '', linkVideoreviews: '', faq: '', hideSignBtn: '', quiz: '', tags: '', tagsImportant: '', clinics: '', staffUp: '', advantages: '', saleId: '', sortStaff: '', linkArticlesServices: '', servicesPhotos: '', linkFaq: '', linkServices: '', linkStaff: '', photos: '', }); const [anons, setAnons] = useState(''); const [content, setContent] = useState(''); const handleChange = (key) => (e) => { const value = e.target.type === 'checkbox' ? e.target.checked : e.target.value; setForm((f) => ({ ...f, [key]: value })); if (key === 'name' || key === 'alias' || key === 'regionId') setErrors((err) => ({ ...err, [key]: '' })); }; const handleSave = async () => { const newErrors = { name: '', alias: '', regionId: '' }; let hasError = false; if (!String(form.name ?? '').trim()) { newErrors.name = 'Название не может быть пустым'; hasError = true; } if (!String(form.alias ?? '').trim()) { newErrors.alias = 'Alias не может быть пустым'; hasError = true; } if (form.regionId === '' || form.regionId == null) { newErrors.regionId = 'Укажите регион'; hasError = true; } if (hasError) { setErrors(newErrors); window.alert('Пожалуйста исправьте ошибки в форме.'); return; } const data = { anons, content }; try { data.name = form.name === '' ? null : form.name; data.active = Boolean(form.active); data.regionId = form.regionId === '' ? null : Number(form.regionId); data.alias = form.alias === '' ? null : form.alias; data.previewImg = form.previewImg === '' ? null : form.previewImg; data.partPrice = form.partPrice === '' ? null : form.partPrice; data.pokazaniya = form.pokazaniya === '' ? null : form.pokazaniya; data.preparation = form.preparation === '' ? null : form.preparation; data.protivopokazaniya = form.protivopokazaniya === '' ? null : form.protivopokazaniya; data.bannerImg = form.bannerImg === '' ? null : form.bannerImg; data.bannerImgM = form.bannerImgM === '' ? null : form.bannerImgM; data.bannerImgUrl = form.bannerImgUrl === '' ? null : form.bannerImgUrl; data.downloadFile = form.downloadFile === '' ? null : form.downloadFile; data.fullWidthBanner = form.fullWidthBanner === '' ? null : form.fullWidthBanner; data.kodUslug = form.kodUslug === '' ? null : form.kodUslug; data.linkPrice = form.linkPrice === '' ? null : form.linkPrice; data.photosTitle = form.photosTitle === '' ? null : form.photosTitle; data.contraindicationsList = form.contraindicationsList === '' ? null : form.contraindicationsList; data.customBlockText = form.customBlockText === '' ? null : form.customBlockText; data.customBlockText2 = form.customBlockText2 === '' ? null : form.customBlockText2; data.customBlockTitle = form.customBlockTitle === '' ? null : form.customBlockTitle; data.customBlockTitle2 = form.customBlockTitle2 === '' ? null : form.customBlockTitle2; data.indicationsList = form.indicationsList === '' ? null : form.indicationsList; data.plusList = form.plusList === '' ? null : form.plusList; data.plusText = form.plusText === '' ? null : form.plusText; data.plusTitle = form.plusTitle === '' ? null : form.plusTitle; data.prepareTitle = form.prepareTitle === '' ? null : form.prepareTitle; data.processText = form.processText === '' ? null : form.processText; data.processTitle = form.processTitle === '' ? null : form.processTitle; data.servicesList = form.servicesList === '' ? null : form.servicesList; data.servicesTitle = form.servicesTitle === '' ? null : form.servicesTitle; data.textUp = form.textUp === '' ? null : form.textUp; data.trainingText = form.trainingText === '' ? null : form.trainingText; data.whyText = form.whyText === '' ? null : form.whyText; data.whyTitle = form.whyTitle === '' ? null : form.whyTitle; data.hidePicture = form.hidePicture === '' ? null : Number(form.hidePicture); data.linkVideoreviews = !form.linkVideoreviews || !String(form.linkVideoreviews).trim() ? null : JSON.parse(form.linkVideoreviews); data.faq = !form.faq || !String(form.faq).trim() ? null : JSON.parse(form.faq); data.hideSignBtn = !form.hideSignBtn || !String(form.hideSignBtn).trim() ? null : JSON.parse(form.hideSignBtn); data.quiz = !form.quiz || !String(form.quiz).trim() ? null : JSON.parse(form.quiz); data.tags = !form.tags || !String(form.tags).trim() ? null : JSON.parse(form.tags); data.tagsImportant = !form.tagsImportant || !String(form.tagsImportant).trim() ? null : JSON.parse(form.tagsImportant); data.clinics = !form.clinics || !String(form.clinics).trim() ? null : JSON.parse(form.clinics); data.staffUp = !form.staffUp || !String(form.staffUp).trim() ? null : JSON.parse(form.staffUp); data.advantages = !form.advantages || !String(form.advantages).trim() ? null : JSON.parse(form.advantages); data.saleId = !form.saleId || !String(form.saleId).trim() ? null : JSON.parse(form.saleId); data.sortStaff = !form.sortStaff || !String(form.sortStaff).trim() ? null : JSON.parse(form.sortStaff); data.linkArticlesServices = !form.linkArticlesServices || !String(form.linkArticlesServices).trim() ? null : JSON.parse(form.linkArticlesServices); data.servicesPhotos = !form.servicesPhotos || !String(form.servicesPhotos).trim() ? null : JSON.parse(form.servicesPhotos); data.linkFaq = !form.linkFaq || !String(form.linkFaq).trim() ? null : JSON.parse(form.linkFaq); data.linkServices = !form.linkServices || !String(form.linkServices).trim() ? null : JSON.parse(form.linkServices); data.linkStaff = !form.linkStaff || !String(form.linkStaff).trim() ? null : JSON.parse(form.linkStaff); data.photos = !form.photos || !String(form.photos).trim() ? null : JSON.parse(form.photos); } catch (e) { window.alert('Пожалуйста исправьте ошибки в форме.'); return; } try { const response = await createSiteServices({ data }).unwrap(); setModalSuccess(true); window.setTimeout(() => { navigate(`/site-services/edit/${response.id}`); window.location.reload(); }, 2000); } catch (err) { console.error('Ошибка сохранения:', err); } }; return ( {}} isAddSpecialist={true}>
{errors.name && {errors.name}}
{errors.regionId && {errors.regionId}}
{errors.alias && {errors.alias}}