fixed post create response

This commit is contained in:
SlimusMinus
2026-07-29 00:59:15 +03:00
parent eb1c444c94
commit 0b169633d2
4 changed files with 124 additions and 13 deletions

View File

@@ -54,6 +54,9 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
// Единый хук для создания и обновления
const { save, loading: saving, error: apiError } = usePostMutation();
// Состояние для модалки-результата (успех / блокировка контента)
const [resultModal, setResultModal] = useState(null); // null | "success" | "blocked"
// Внутри компонента, рядом с другими хуками
const initialCoords = isEdit && initialData.latitude && initialData.longitude
? { latitude: initialData.latitude, longitude: initialData.longitude }
@@ -124,14 +127,22 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
// save(id, data): id = null → POST (создание), id = string → PUT (обновление)
const result = await save(isEdit ? initialData.id : null, data);
if (result) {
onSuccess(result);
onClose();
if (!result) {
// Ошибка уже записана в apiError, либо null если неизвестная
return;
}
if (result.blocked) {
setResultModal("blocked");
return;
}
if (result.data) {
setResultModal("success");
}
};
return (
// Клик по фону (не по самой модалке) закрывает её
<>
{/* Клик по фону (не по самой модалке) закрывает её */}
<div className="f-modal-bg" onClick={e => e.target === e.currentTarget && onClose()}>
<div className="f-modal">
@@ -309,5 +320,45 @@ export default function CreateUpdatePost({ onClose, onSuccess, initialData }) {
</div>
</div>
{/* ── Модалка-результат после отправки ── */}
{resultModal && (
<div className="f-modal-bg" onClick={e => {
if (e.target === e.currentTarget) {
if (resultModal === "success") {
onSuccess?.();
}
onClose();
}
}}>
<div className="f-modal f-modal-result">
<div className={`f-result-icon ${resultModal === "blocked" ? "blocked" : "success"}`}>
{resultModal === "blocked" ? "✕" : "✓"}
</div>
<h3 className="f-result-title">
{resultModal === "blocked"
? t('post.blockedTitle')
: t('post.successTitle')}
</h3>
<p className="f-result-text">
{resultModal === "blocked"
? t('post.blockedText')
: t('post.successText')}
</p>
<button
className={`f-result-btn ${resultModal === "blocked" ? "err" : "ok"}`}
onClick={() => {
if (resultModal === "success") {
onSuccess?.();
}
onClose();
}}
>
{t('post.resultClose')}
</button>
</div>
</div>
)}
</>
);
}