feat: save pub notes locally

Notes are now also saved locally instead of just deleted
This commit is contained in:
Artemy 2023-04-02 10:15:52 +03:00
parent 20a09255a3
commit 8bdc53f45d
4 changed files with 43 additions and 32 deletions

View file

@ -48,7 +48,7 @@ function App() {
\r* Публичные заметки доступны только по ссылке. \r* Публичные заметки доступны только по ссылке.
\r* При переходе по ссылке заметка исчезает, прочесть ее можно только один раз. \r* При переходе по ссылке заметка сохраняется локально и удаляется с сервера.
\r* Не публичные заметки сохраняются локально и не отправляются на сервер.`} \r* Не публичные заметки сохраняются локально и не отправляются на сервер.`}
</RenderMarkdown> </RenderMarkdown>
</div> </div>

View file

@ -1,6 +1,6 @@
import RenderMarkdown from "../components/markdown"; import RenderMarkdown from "../components/markdown";
import { useState } from "react"; import { useState } from "react";
import { useParams } from "react-router-dom"; import { Navigate, useParams } from "react-router-dom";
import printDate from "../components/utils"; import printDate from "../components/utils";
import { ChevronDoubleLeftIcon } from "@heroicons/react/24/outline"; import { ChevronDoubleLeftIcon } from "@heroicons/react/24/outline";
import { Button, IconWithText } from "../components/button"; import { Button, IconWithText } from "../components/button";
@ -8,9 +8,9 @@ import { Button, IconWithText } from "../components/button";
function PubNote() { function PubNote() {
let params = useParams(); let params = useParams();
let [note, setNote] = useState(); let [note, setNote] = useState(false);
if (!note) if (note === false)
fetch(`/get-note/del/${params.id}`) fetch(`/get-note/del/${params.id}`)
.then((data) => { .then((data) => {
data data
@ -23,6 +23,7 @@ function PubNote() {
text: "Такой публичной заметки не сущуествует", text: "Такой публичной заметки не сущуествует",
name: "Меня не существует", name: "Меня не существует",
time: Date.now(), time: Date.now(),
save: false,
}); });
}); });
}) })
@ -31,35 +32,43 @@ function PubNote() {
text: "Такой публичной заметки не сущуествует", text: "Такой публичной заметки не сущуествует",
name: "Меня не существует", name: "Меня не существует",
time: Date.now(), time: Date.now(),
save: false,
}); });
}); });
else {
return ( if (note.save !== false) {
<div className=""> localStorage.setItem("NoteName", note.name);
<Button className="mb-4" href="/"> localStorage.setItem("NoteText", note.text);
<IconWithText return <Navigate to="/notes/save-local" replace={true} />;
icon={ } else {
<ChevronDoubleLeftIcon className="transform translate-z-0 h-7 w-7" /> return (
} <div className="">
> <Button className="mb-4" href="/">
Писать <IconWithText
</IconWithText> icon={
</Button> <ChevronDoubleLeftIcon className="transform translate-z-0 h-7 w-7" />
<div className="border border-blue-300 rounded-lg p-4"> }
<div className="grid grid-cols-1 lg:grid-cols-2"> >
<h2 className="font-medium text-center lg:text-left leading-tight text-4xl mt-0 mb-2"> Писать
{note?.name || "Загрузка..."} </IconWithText>
</h2> </Button>
<div className="justify-self-center lg:justify-self-end"> <div className="border border-blue-300 rounded-lg p-4">
{printDate(note?.time || Date.now())} <div className="grid grid-cols-1 lg:grid-cols-2">
<h2 className="font-medium text-center lg:text-left leading-tight text-4xl mt-0 mb-2">
{note.name || "Загрузка..."}
</h2>
<div className="justify-self-center lg:justify-self-end">
{printDate(note.time || Date.now())}
</div>
</div>
<div className="w-full md break-words">
<RenderMarkdown>{note.text || "Загрузка..."}</RenderMarkdown>
</div>
</div> </div>
</div> </div>
<div className="w-full md break-words"> );
<RenderMarkdown>{note?.text || "Загрузка..."}</RenderMarkdown> }
</div> }
</div>
</div>
);
} }
export default PubNote; export default PubNote;

View file

@ -9,9 +9,9 @@ import { CopyToClipboard } from "../components/copytocb";
function PubNoteSafe() { function PubNoteSafe() {
let params = useParams(); let params = useParams();
let [note, setNote] = useState(); let [note, setNote] = useState(false);
if (!note) if (note === false)
fetch(`/get-note/safe/${params.id}`) fetch(`/get-note/safe/${params.id}`)
.then((data) => { .then((data) => {
data data

View file

@ -38,7 +38,9 @@ function Publish() {
navigate(`/pubNotesSafe/${data.id}`, { replace: true }); navigate(`/pubNotesSafe/${data.id}`, { replace: true });
}) })
.catch(() => { .catch(() => {
navigate(`/pubError?err=${err}`, { replace: true }); if (err == false) {
navigate(`/pubError`, { replace: true });
} else navigate(`/pubError?err=${err}`, { replace: true });
}); });
}) })
.catch(() => { .catch(() => {