diff --git a/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx b/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx new file mode 100644 index 0000000000..22d884a866 --- /dev/null +++ b/packages/kitchen-sink/src/examples/DigitalPersonalJournal.jsx @@ -0,0 +1,110 @@ +import React, { useState, useRef } from 'react'; +import { block } from "million/react"; + +const JournalComponent = ({ entry, onDelete }) => ( +
+

{entry.id}. {entry.title}

+

{entry.text}

+ {entry.media && ( +
+ {entry.media.type.startsWith('image') && ( + Multimedia Entry + )} + {entry.media.type.startsWith('video') && ( + + )} +
+ )} +
+ + +
+
+); + +const DigitalPersonalJournal = block(function Journal() { + const [entries, setEntries] = useState([]); + const [title, setTitle] = useState(''); + const [text, setText] = useState(''); + const [mediaFile, setMediaFile] = useState(null); + const [nextId, setNextId] = useState(1); + const fileInputRef = useRef(null); + + const handleAddEntry = () => { + if (title || text || mediaFile) { + const newEntry = { + id: nextId, + title, + text, + media: mediaFile + ? { url: URL.createObjectURL(mediaFile), type: mediaFile.type } + : null, + }; + setEntries([...entries, newEntry]); + setNextId(nextId + 1); + setTitle(''); + setText(''); + setMediaFile(null); + + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + } + }; + + const handleDeleteEntry = (id) => { + const updatedEntries = entries.filter((entry) => entry.id !== id); + setEntries(updatedEntries); + }; + + return ( +
+

My Digital Personal Journal

+
+ setTitle(e.target.value)} + style={{display:'block', marginBottom:'15px'}} + /> + setText(e.target.value)} + style={{display:'block', marginBottom:'15px'}} + /> + setMediaFile(e.target.files[0])} + style={{display:'block', marginBottom:'15px'}} + ref={fileInputRef} + /> + + Total Entries: {entries.length} + + +
+ +
+ {entries.map((entry) => ( + + ))} +
+
+ ); +} +) + +export default DigitalPersonalJournal;