Improve: error handling and data fetching in PastePanel and useData hooks
This commit is contained in:
@@ -60,19 +60,35 @@ const PastePanel = ({ onSubmit, publicPastes }) => {
|
||||
? `https://api.miarma.net/v2/mpaste/pastes/${key}`
|
||||
: `http://localhost:8081/v2/mpaste/pastes/${key}`;
|
||||
|
||||
const data = await getData(url, { password: pwd }, false);
|
||||
const headers = pwd ? { "X-Paste-Password": pwd } : {};
|
||||
|
||||
if (!data) return;
|
||||
try {
|
||||
const response = await getData(url, null, false, headers);
|
||||
|
||||
setSelectedPaste(data);
|
||||
setFormData({
|
||||
title: data.title ?? "",
|
||||
content: data.content ?? "",
|
||||
syntax: data.syntax || "plaintext",
|
||||
burnAfter: data.burnAfter || false,
|
||||
isPrivate: data.isPrivate || false,
|
||||
password: ""
|
||||
});
|
||||
if (response) {
|
||||
setSelectedPaste(response);
|
||||
setShowPasswordModal(false);
|
||||
setFormData({
|
||||
title: response.title ?? "",
|
||||
content: response.content ?? "",
|
||||
syntax: response.syntax || "plaintext",
|
||||
burnAfter: response.burnAfter || false,
|
||||
isPrivate: response.isPrivate || false,
|
||||
password: ""
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
const status = error?.status ?? error?.response?.status;
|
||||
if (status === 403) {
|
||||
setShowPasswordModal(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (status === 404) {
|
||||
setShowPasswordModal(false);
|
||||
navigate("/", { replace: true });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => { if (pasteKey) fetchPaste(pasteKey); }, [pasteKey]);
|
||||
|
||||
@@ -92,10 +92,15 @@ export const useData = (config, onError) => {
|
||||
if (config?.baseUrl) fetchData();
|
||||
}, [config, fetchData]);
|
||||
|
||||
const requestWrapper = async (method, endpoint, payload = null, refresh = false) => {
|
||||
const requestWrapper = async (method, endpoint, payload = null, refresh = false, extraHeaders = {}) => {
|
||||
try {
|
||||
const isFormData = payload instanceof FormData;
|
||||
const headers = getAuthHeaders(isFormData);
|
||||
|
||||
const headers = {
|
||||
...getAuthHeaders(isFormData),
|
||||
...extraHeaders
|
||||
};
|
||||
|
||||
const cfg = { headers };
|
||||
let response;
|
||||
|
||||
@@ -115,11 +120,11 @@ export const useData = (config, onError) => {
|
||||
} catch (err) {
|
||||
const error = handleAxiosError(err);
|
||||
|
||||
if (error.status !== 422 && onError) {
|
||||
onError(error);
|
||||
if (error.status !== 403 && error.status !== 422) {
|
||||
if (onError) onError(error);
|
||||
setError(error);
|
||||
}
|
||||
|
||||
setError(error);
|
||||
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
@@ -131,7 +136,7 @@ export const useData = (config, onError) => {
|
||||
dataLoading,
|
||||
dataError,
|
||||
clearError,
|
||||
getData: (url, params, refresh = true) => requestWrapper("get", url, params, refresh),
|
||||
getData: (url, params, refresh = true, headers = {}) => requestWrapper("get", url, params, refresh, headers),
|
||||
postData: (url, body, refresh = true) => requestWrapper("post", url, body, refresh),
|
||||
putData: (url, body, refresh = true) => requestWrapper("put", url, body, refresh),
|
||||
deleteData: (url, refresh = true) => requestWrapper("delete", url, null, refresh),
|
||||
|
||||
@@ -34,12 +34,10 @@ const HomeContent = ({ reqConfig }) => {
|
||||
const { searchTerm } = useSearch();
|
||||
|
||||
if (dataLoading) return <p><LoadingIcon /></p>;
|
||||
if (dataError) return <p>Error loading data</p>;
|
||||
|
||||
const filtered = data.filter(paste =>
|
||||
paste.title.toLowerCase().includes((searchTerm ?? "").toLowerCase()) ||
|
||||
paste.content.toLowerCase().includes((searchTerm ?? "").toLowerCase())
|
||||
);
|
||||
const filtered = (data && Array.isArray(data)) ? data.filter(paste =>
|
||||
paste.title.toLowerCase().includes((searchTerm ?? "").toLowerCase())
|
||||
) : [];
|
||||
|
||||
const handleSubmit = async (paste) => {
|
||||
try {
|
||||
@@ -63,7 +61,7 @@ const HomeContent = ({ reqConfig }) => {
|
||||
<span>
|
||||
Tu paste privado ha sido creado. Puedes acceder a él mediante el siguiente enlace:
|
||||
<br /><br />
|
||||
<a href={`https://paste.miarma.net/${key}`}>https://paste.miarma.net/${key}</a>
|
||||
<a href={`https://paste.miarma.net/${key}`}>https://paste.miarma.net/{key}</a>
|
||||
<br /><br />
|
||||
Recuerda que este enlace es único y no se puede recuperar si se pierde.
|
||||
</span>
|
||||
|
||||
Reference in New Issue
Block a user