scrimba
Frontend Career Path
React basics
Notes & Tenzies
Delete Note
Go Pro!Bootcamp

Bootcamp

Study group

Collaborate with peers in your dedicated #study-group channel.

Code reviews

Submit projects for review using the /review command in your #code-reviews channel

AboutCommentsNotes
Delete Note
Expand for more info
App.jsx
run
preview
console
import React from "react"
import Sidebar from "./components/Sidebar"
import Editor from "./components/Editor"
import Split from "react-split"
import { nanoid } from "nanoid"
import { onSnapshot, addDoc } from "firebase/firestore"
import { notesCollection } from "./firebase"
export default function App() {
const [notes, setNotes] = React.useState([])

const [currentNoteId, setCurrentNoteId] = React.useState(
(notes[0]?.id) || ""
)

const currentNote =
notes.find(note => note.id === currentNoteId)
|| notes[0]

React.useEffect(() => {
const unsubscribe = onSnapshot(notesCollection, function(snapshot) {
// Sync up our local notes array with the snapshot data
const notesArr = snapshot.docs.map(doc => ({
...doc.data(),
id: doc.id
}))
setNotes(notesArr)
})
return unsubscribe
}, [])

async function createNewNote() {
const newNote = {
body: "# Type your markdown note's title here"
}
const newNoteRef = await addDoc(notesCollection, newNote)
setCurrentNoteId(newNoteRef.id)
}

function updateNote(text) {
setNotes(oldNotes => {
const newArray = []
for (let i = 0; i < oldNotes.length; i++) {
const oldNote = oldNotes[i]
if (oldNote.id === currentNoteId) {
// Put the most recently-modified note at the top
newArray.unshift({ ...oldNote, body: text })
} else {
newArray.push(oldNote)
}
}
return newArray
})
}

function deleteNote(event, noteId) {
event.stopPropagation()
setNotes(oldNotes => oldNotes.filter(note => note.id !== noteId))
}

return (
<main>
{
notes.length > 0
?
<Split
sizes={[30, 70]}
direction="horizontal"
className="split"
>
<Sidebar
notes={notes}
currentNote={currentNote}
setCurrentNoteId={setCurrentNoteId}
newNote={createNewNote}
deleteNote={deleteNote}
/>
{
currentNoteId &&
notes.length > 0 &&
<Editor
currentNote={currentNote}
updateNote={updateNote}
/>
}
</Split>
:
<div className="no-notes">
<h1>You have no notes</h1>
<button
className="first-note"
onClick={createNewNote}
>
Create one now
</button>
</div>

}
</main>
)
}
Console
!
"Warning: Failed prop type: Invalid prop `children[1]` of type `string` supplied to `SplitWrapper`, expected a single ReactElement. at SplitWrapper (https://ga.jspm.io/npm:react-split@2.0.13/dist/react-split.es.js:1:474) at App (https://cw0.scrimba.com/App:10:35)"
,
/index.html
-2:54