feat: save text of note

This commit is contained in:
Artemy 2022-10-18 18:32:25 +03:00
parent b6b7de4773
commit dfd29afdc5
5 changed files with 49 additions and 36 deletions

View file

@ -4,6 +4,12 @@ import Menu from "./components/menu";
import CreateNote from "./pages/create"; import CreateNote from "./pages/create";
function App() { function App() {
Storage.prototype.setObj = function (key, obj) {
return this.setItem(key, JSON.stringify(obj));
};
Storage.prototype.getObj = function (key) {
return JSON.parse(this.getItem(key));
};
return ( return (
<div className="grid grid-cols-4 lg:grid-cols-5 gap-10 text-black dark:text-white"> <div className="grid grid-cols-4 lg:grid-cols-5 gap-10 text-black dark:text-white">
<Menu /> <Menu />

View file

@ -14,12 +14,14 @@ function Button(props) {
function ButtonWithAction(props) { function ButtonWithAction(props) {
return ( return (
<Link to="#">
<div <div
onClick={props.onClick} onClick={props.onClick}
className={`transition-transform w-48 ease-[cubic-bezier(.69,.58,.32,1.69)] hover:scale-105 p-2 pl-6 text-lg bg-zinc-100 hover:bg-zinc-300 dark:bg-zinc-600 dark:hover:bg-zinc-800 rounded-2xl ${props.className}`} className={`transition-transform w-48 ease-[cubic-bezier(.69,.58,.32,1.69)] hover:scale-105 p-2 pl-6 text-lg bg-zinc-100 hover:bg-zinc-300 dark:bg-zinc-600 dark:hover:bg-zinc-800 rounded-2xl ${props.className}`}
> >
{props.children} {props.children}
</div> </div>
</Link>
); );
} }

View file

@ -2,7 +2,7 @@ function CheckBox(props) {
return ( return (
<div className={`form-check m-5 ${props.className}`}> <div className={`form-check m-5 ${props.className}`}>
<input <input
className="form-check-input appearance-none h-3 w-6 checked:bg-blue-600 checked:border-blue-600 pr-3 border border-gray-300 rounded-lg mr-1 checked:shadow-lg checked:shadow-blue-600 transition ease-out" className="form-check-input appearance-none h-3 w-6 duration-500 checked:bg-blue-600 checked:border-blue-600 pr-3 border border-gray-300 rounded-lg mr-1 checked:shadow-lg checked:shadow-blue-600 transition ease-out"
type="checkbox" type="checkbox"
id={props.id} id={props.id}
defaultChecked={props.checked} defaultChecked={props.checked}

View file

@ -3,6 +3,7 @@ import {
MagnifyingGlassCircleIcon, MagnifyingGlassCircleIcon,
PencilIcon, PencilIcon,
ExclamationCircleIcon, ExclamationCircleIcon,
Cog6ToothIcon,
} from "@heroicons/react/24/outline"; } from "@heroicons/react/24/outline";
function Menu() { function Menu() {
@ -33,6 +34,13 @@ function Menu() {
Подробнее Подробнее
</IconWithButton> </IconWithButton>
</Button> </Button>
<Button href="/options">
<IconWithButton
icon={<Cog6ToothIcon className="transform translate-z-0 h-7 w-7" />}
>
Настройки
</IconWithButton>
</Button>
</div> </div>
); );
} }

View file

@ -7,8 +7,10 @@ import ReactMarkdown from "react-markdown";
function CreateNote() { function CreateNote() {
const [preview, setPreview] = useState(false); const [preview, setPreview] = useState(false);
const [publicState, setPublicState] = useState(true); const [publicState, setPublicState] = useState(true);
const [text, setText] = useState(""); const [text, setText] = useState(localStorage.getItem("NoteText"));
const [name, setName] = useState(localStorage.getItem("NoteName"));
let inputStyle = `form-control block px-3 py-1.5 text-base font-normal text-gray-700 dark:text-white bg-white dark:bg-zinc-900 bg-clip-padding border border-solid border-gray-300 rounded-lg transition ease-in-out focus:border-blue-600 focus:outline-none`;
return ( return (
<div> <div>
<div className="grid grid-cols-1 lg:grid-cols-2"> <div className="grid grid-cols-1 lg:grid-cols-2">
@ -23,44 +25,39 @@ function CreateNote() {
/> />
</div> </div>
{preview && ( <input
<div className="w-full md"> type="text"
<ReactMarkdown>{text}</ReactMarkdown> className={`mb-2 md:w-1/6 w-full ${inputStyle}`}
</div> placeholder="Название заметки..."
)} value={localStorage.getItem("NoteName")}
onChange={(e) => {
localStorage.setItem("NoteName", e.target.value);
setName(e.target.value);
}}
/>
<textarea <textarea
className={` className={`
form-control ${inputStyle}
block
w-full w-full
px-3
py-1.5
text-base
font-normal
text-gray-700
dark:text-white
bg-white
dark:bg-zinc-900
bg-clip-padding
border
border-solid
border-gray-300
rounded-lg
transition
ease-in-out
m-0
focus:border-blue-600
focus:outline-none
${preview ? "hidden" : ""} ${preview ? "hidden" : ""}
`} `}
rows="10" rows="10"
placeholder="Ваша заметка начинается здесь. Можно использовать markdown..." placeholder="Ваша заметка начинается здесь. Можно использовать markdown..."
maxLength={5000} maxLength={5000}
onChange={(e) => { onChange={(e) => {
localStorage.setItem("NoteText", e.target.value);
setText(e.target.value); setText(e.target.value);
}} }}
></textarea> >
{localStorage.getItem("NoteText")}
</textarea>
{preview && (
<div className="w-full md">
<ReactMarkdown>{text}</ReactMarkdown>
</div>
)}
<div className="grid grid-cols-1 lg:grid-cols-2 justify-items-center w-full"> <div className="grid grid-cols-1 lg:grid-cols-2 justify-items-center w-full">
<CheckBox <CheckBox
className="justify-self-center lg:justify-self-start" className="justify-self-center lg:justify-self-start"
@ -69,7 +66,7 @@ function CreateNote() {
onClick={() => { onClick={() => {
setPublicState(!publicState); setPublicState(!publicState);
}} }}
checked checked={localStorage.getItem("private")}
/> />
<div className="justify-self-center lg:justify-self-end"> <div className="justify-self-center lg:justify-self-end">
<ButtonWithAction className="m-5" onClick={""}> <ButtonWithAction className="m-5" onClick={""}>