mirror of
https://github.com/wgh136/nysoure.git
synced 2025-09-27 12:17:24 +00:00
Add pre-fetch data handling for resources, users, and comments
This commit is contained in:
@@ -63,6 +63,21 @@ class App {
|
||||
canUpload() {
|
||||
return this.isLoggedIn() && (this.user?.can_upload || this.isAdmin());
|
||||
}
|
||||
|
||||
getPreFetchData() {
|
||||
const preFetchDataElement = document.getElementById("pre_fetch_data");
|
||||
if (preFetchDataElement) {
|
||||
let content = preFetchDataElement.textContent
|
||||
if (!content) {
|
||||
return null;
|
||||
}
|
||||
content = decodeURIComponent(content);
|
||||
const res = JSON.parse(content);
|
||||
preFetchDataElement.remove();
|
||||
return res;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export const app = new App();
|
||||
|
@@ -54,6 +54,11 @@ export default function CommentPage() {
|
||||
});
|
||||
return;
|
||||
}
|
||||
const preFetchData = app.getPreFetchData();
|
||||
if (preFetchData?.comment?.id === id) {
|
||||
setComment(preFetchData.comment);
|
||||
return;
|
||||
}
|
||||
network.getComment(id).then((res) => {
|
||||
if (res.success) {
|
||||
setComment(res.data!);
|
||||
|
@@ -90,14 +90,19 @@ export default function ResourcePage() {
|
||||
if (location.state) {
|
||||
setResource(location.state.resource);
|
||||
} else {
|
||||
network.getResourceDetails(id).then((res) => {
|
||||
if (res.success) {
|
||||
setResource(res.data!);
|
||||
document.title = res.data!.title;
|
||||
} else {
|
||||
showToast({ message: res.message, type: "error" });
|
||||
}
|
||||
});
|
||||
const preFetchData = app.getPreFetchData();
|
||||
if (preFetchData?.resource?.id === id) {
|
||||
setResource(preFetchData.resource);
|
||||
} else {
|
||||
network.getResourceDetails(id).then((res) => {
|
||||
if (res.success) {
|
||||
setResource(res.data!);
|
||||
document.title = res.data!.title;
|
||||
} else {
|
||||
showToast({ message: res.message, type: "error" });
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}, [id, location.state]);
|
||||
|
@@ -14,6 +14,7 @@ import {
|
||||
MdOutlinePhotoAlbum,
|
||||
} from "react-icons/md";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { app } from "../app.ts";
|
||||
|
||||
export default function UserPage() {
|
||||
const [user, setUser] = useState<User | null>(null);
|
||||
@@ -50,6 +51,11 @@ export default function UserPage() {
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
const preFetchData = app.getPreFetchData();
|
||||
if (preFetchData?.user?.username === username) {
|
||||
setUser(preFetchData.user);
|
||||
return;
|
||||
}
|
||||
network.getUserInfo(username || "").then((res) => {
|
||||
if (res.success) {
|
||||
setUser(res.data!);
|
||||
|
Reference in New Issue
Block a user