Implement localStorage management for publish data during component lifecycle

This commit is contained in:
2025-06-12 10:59:16 +08:00
parent c842af3855
commit f453ee46a1

View File

@@ -1,4 +1,4 @@
import { useEffect, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { import {
MdAdd, MdAdd,
MdClose, MdClose,
@@ -29,6 +29,37 @@ export default function PublishPage() {
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
const [isSubmitting, setSubmitting] = useState(false); const [isSubmitting, setSubmitting] = useState(false);
const isFirstLoad = useRef(true);
useEffect(() => {
if (isFirstLoad.current) {
const oldData = localStorage.getItem("publish_data");
if (oldData) {
try {
const data = JSON.parse(oldData);
setTitle(data.title || "");
setAltTitles(data.alternative_titles || []);
setTags(data.tags || []);
setArticle(data.article || "");
setImages(data.images || []);
} catch (e) {
console.error("Failed to parse publish_data from localStorage", e);
}
}
isFirstLoad.current = false;
} else {
const data = {
title: title,
alternative_titles: altTitles,
tags: tags,
article: article,
images: images,
};
const dataString = JSON.stringify(data);
localStorage.setItem("publish_data", dataString);
}
}, [altTitles, article, images, tags, title]);
const navigate = useNavigate(); const navigate = useNavigate();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -69,6 +100,7 @@ export default function PublishPage() {
images: images, images: images,
}); });
if (res.success) { if (res.success) {
localStorage.removeItem("publish_data");
setSubmitting(false); setSubmitting(false);
appContext.clear(); appContext.clear();
navigate("/resources/" + res.data!, { replace: true }); navigate("/resources/" + res.data!, { replace: true });