🌐
50 React Coding Puzzles
  • 50 React Coding Puzzles
  • Contact
  • Reviews
  • Table of Contents
  • Introduction
  • 1 - Simple Counter App
  • 2 - Dynamic List of Items with Strikethrough
  • 3 - Color Picker with Hex Code Display
  • 4 - Password Strength Checker
  • 5 - Countdown Timer with Audio
  • 6 - Dynamic Movie List with Filtering and Sorting
  • 7 - Text Animation Component (Fade/Scroll)
  • 8 - Dynamically Generated Text Art
  • 9 - Meme Generator with Custom Text
  • 10 - "What Should I Eat?" Random Recipe Generator
  • 11 - Simple Quiz App with Multiple Choice
  • 12 - Unit Converter
  • 13 - Dynamic Image Gallery with Lightbox
  • 14 - Weather Widget with Temperature and Description
  • 15 - Contact Form with Email and Message Validation
  • 16 - Color Palette Generator
  • 17 - Drag-and-Drop Feature for Rearranging Items
  • 18 - Interactive Quiz with Dynamic Results and Feedback
  • 19 - To-Do List with Task Categorization
  • 20 - Note-Taking App with Markdown Support
  • 21 - Simple Calculator with Basic Operations
  • 22 - Word Scramble Game with Timer and Score
  • 23 - Number Guessing Game
  • 24 - Digital Clock with Time Zone Support
  • 25 - Interactive Time Zone Converter
  • 26 - Weather Forecast App with Location Detection
  • 27 - Real-Time Stock Ticker with Updates
  • 28 - Virtual Dice Roller with Multiple Dice
  • 29 - Responsive Navigation Menu with Dropdowns
  • 30 - Progress Bar for Loading or Task Completion
  • 31 - Modal Window for Alerts and Confirmations
  • 32 - Infinite Scroll for Loading More Content
  • 33 - Form Validation with Error Messages
  • 34 - Search Bar with Filtering and Suggestions
  • 35 - Drag-and-Drop File Upload
  • 36 - Interactive Color Picker with Sliders
  • 37 - Image Carousel with Autoplay
  • 38 - Rating System with Stars or Thumbs Up/Down
  • 39 - Comment Section with Nested Replies
  • 40 - Pagination for Long Lists of Data
  • 41 - Stopwatch app that tracks elapsed time
  • 42 - Responsive E-commerce Product Grid
  • 43 - Random Movie/Book Recommender
  • 44 - Kanban board for managing tasks with drag-and-drop
  • 45 - Chat application with real-time messaging using WebSockets
  • 46 - Calendar that displays events and allows scheduling
  • 47 - Tic-Tac-Toe Game
  • 48 - Hangman Game
  • 49 - Notes App
  • 50 - Expense Tracker
  • Afterword
  • Appendix
Powered by GitBook
On this page
  • Description
  • Algorithm
  • Classes
  • Code
  • Explanation
  • Possible Future Enhancements

20 - Note-Taking App with Markdown Support

Description

Create a React application that allows users to take notes with rich text editing and Markdown support, including a live preview of formatted text while typing. The application should also allow users to categorize notes using folders or tags, and include search functionality for finding notes by title or content.

Algorithm

  1. Create a state variable to store the notes and their content.

  2. Define a function to handle the creation of new notes.

  3. Define a function to handle the editing of existing notes.

  4. Define a function to handle the rendering of the note preview.

  5. Define a function to handle the categorization of notes using folders or tags.

  6. Define a function to handle the searching of notes by title or content.

Classes

  • Note: A component that represents a single note.

  • NoteEditor: A component that allows users to edit notes with rich text editing and Markdown support.

  • NotePreview: A component that renders the live preview of the formatted text.

  • NoteList: A component that renders the list of notes and allows users to categorize and search notes.

Code

Note.js

import React from 'react';

function Note({ note, onEditNote }) {
  return (
    <div>
      <h2>{note.title}</h2>
      <p>{note.content}</p>
      <button onClick={() => onEditNote(note)}>Edit</button>
    </div>
  );
}

export default Note;

NoteEditor.js

import React, { useState } from 'react';
import MarkdownEditor from 'markdown-editor';

function NoteEditor({ note, onEditNote }) {
  const [content, setContent] = useState(note.content);

  const handleEditNote = () => {
    onEditNote({ ...note, content });
  };

  return (
    <div>
      <MarkdownEditor
        value={content}
        onChange={(value) => setContent(value)}
      />
      <button onClick={handleEditNote}>Save</button>
    </div>
  );
}

export default NoteEditor;

NotePreview.js

import React from 'react';
import Markdown from 'markdown';

function NotePreview({ note }) {
  const content = Markdown.parse(note.content);

  return (
    <div>
      <h2>{note.title}</h2>
      <div dangerouslySetInnerHTML={{ __html: content }} />
    </div>
  );
}

export default NotePreview;

NoteList.js

import React, { useState } from 'react';
import Note from './Note';
import NoteEditor from './NoteEditor';
import NotePreview from './NotePreview';

function NoteList() {
  const [notes, setNotes] = useState([
    { id: 1, title: 'Note 1', content: 'This is note 1' },
    { id: 2, title: 'Note 2', content: 'This is note 2' },
  ]);
  const [searchTerm, setSearchTerm] = useState('');

  const handleSearchNotes = (searchTerm) => {
    const filteredNotes = notes.filter((note) =>
      note.title.includes(searchTerm) || note.content.includes(searchTerm)
    );
    setNotes(filteredNotes);
  };

  return (
    <div>
      <input
        type="search"
        value={searchTerm}
        onChange={(event) => setSearchTerm(event.target.value)}
      />
      <button onClick={() => handleSearchNotes(searchTerm)}>Search</button>
      <ul>
        {notes.map((note) => (
          <li key={note.id}>
            <Note note={note} onEditNote={(note) => handleEditNote(note)} />
          </li>
        ))}
      </ul>
    </div>
  );
}

export default NoteList;

Explanation

The Note component represents a single note, and the NoteEditor component allows users to edit notes with rich text editing and Markdown support. The NotePreview component renders the live preview of the formatted text. The NoteList component renders the list of notes and allows users to categorize and search notes.

Possible Future Enhancements

  • Add more features to the note-taking app (e.g., due dates, reminders).

  • Improve the user interface and user experience.

  • Add authentication and authorization.

  • Allow users to create and manage their own folders and tags.

  • Display the number of notes in each folder or tag.

  • Add a feature to export notes to a file or print them.

Previous19 - To-Do List with Task CategorizationNext21 - Simple Calculator with Basic Operations

Last updated 10 months ago