Skip to content

mishkaleks/apple-notes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Apple Notes

Приложение Apple Notes — это простой блокнот для создания заметок. Приложение состоит из трех частей. Первая — это список каталогов. В каталоге можно хранить заметки определенной тематики. Тут пользователь может удалить, переименовать или выполнить сортировку каталогов на свое усмотрение. Вторая часть — это список заметок, выбранного каталога. С заметками можно выполнить все те же действия что и с каталогами. Третья часть — это описание/информация о выбранной заметке.

Основные этапы создания приложения

  • Инициализировать React приложение.

$ npx create-react-app

  • Инициализировать Material Design и Material Icons. Сверстать базову структуру страницы.

$ npm install @material-ui/core

$ npm install @material-ui/icons

  • Инициализировать Redux и реализовать функционал добавления каталогов.

$ npm install redux react-redux

  • Реализовать функционал удаления каталогов.

  • Реализовать функционал переименования каталогов.

  • Реализовать функционал добавления заметок. Исправить баг при удалении каталога.

При наступлении события удаление каталога обработчики сначала срабатывают на самом вложенном элементе, затем на его родителе — обработчик активной папки. Это приводило к невозможности прочитать свойство "edited", так как оно неопределенное. Решение — вызвать метод event.stopPropagation() для прекращения всплытия.

Fix #1.

  • Реализовать функционал удаления заметок.

  • Рефакторинг логики редьюсера. Организовать компонент для списка заметок.

  • Реализовать функционал переименования заметок. Исправить баг отрисовки элементов списка с заметками которые были изменены.

При редактировании имени заметки react обновлял названия заметок и в других каталогах. Так же не обновлялись записи активных меток. Решение — правильная организация ключей элементов списков. Повторяющиеся ключи в разных списках приводили к неправильному рендеру.

Fix #2.

  • Реализовать функционал для работы с содержанием заметки. Добавить дополнительный функционал в store — отображение информации в консоли о всех action которые срабатывают.

$ npm i redux-logger > store.js // Настройка store

  • Инициализация библиотеки react-beautiful-dnd для красивых перетаскиваний (drag and drop) элементов списка с каталогами.

$ npm install react-beautiful-dnd --save

Подключения пакетов:

import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';

  • Реализовать функционал для перетаскиваний (drag and drop) элементов списка с заметками.

  • Реализовать функционал для перемещения заметок с одного каталога в другой.

  • Создать модальные окна для получения от пользователя подтверждения на удаления каталогов/заметок.

  • Валидация данных Prop-types.

npm install --save prop-types

  • Отобразить дату/время создания заметок.

  • Правки кода (Code Edits #1).

  • Реализовать адаптивный дизайн. Редактировать генерацию id.

Хук useMediaQuery позволяет использовать медиа-запросы в функциональном компоненте и дифференцировать его рендеринг для разных окон просмотра. Для реализации useMediaQuery импортируем:

import useMediaQuery from '@material-ui/core/useMediaQuery';

и устанавливаем условие:

const isMobile = useMediaQuery('(max-width:667px)');

Символьный id генерируем от времени:

id${(+new Date()).toString(16)}

  • Правки кода (Code Edits #2). Переиспользование компонента ListItem.

  • Развернуть React Applications to Github Pages.

*Остальные этапы создания приложения будут добавляться по мере развития проекта.

Скетч проекта

Project Sketch