Skip to content

Sprint 2. Доработка приложения в соответствии с требованиями#2

Merged
maximste merged 83 commits into
mainfrom
sprint_2
Apr 2, 2026
Merged

Sprint 2. Доработка приложения в соответствии с требованиями#2
maximste merged 83 commits into
mainfrom
sprint_2

Conversation

@maximste
Copy link
Copy Markdown
Owner

Что сделано

  • Архитектура: структура FSD (shared / features / widgets / pages / app), документация в docs/FSD.md, обновлён README.md.
  • UI-ядро: Block, регистрация компонентов в Handlebars, общие блоки (Button, Input, FormField, IconButton, Textarea, Search, атомы сайдбара и др.).
  • Мессенджер: MessengerLayout, виджет Sidebar (секции, список чатов, событие выбора чата), ChatPage с декомпозицией (ChatHeader, ChatThread, ChatTimelineRow, ChatFooter), MessageComposer.
  • Формы: валидация auth / register / edit profile, линтинг (ESLint, Stylelint, Prettier, husky).

Актуальная версия проекта раздаётся с GitHub Pages ссылка . Конфигурация для Netlify в репозитории сохранена, но из-за проблем с работой сервиса Netlify проект там не деплоится; ссылка gilgachat.netlify.app может вести на неактуальную версию.

maximste added 30 commits March 9, 2026 19:58
…SLint и Stylelint, изменены файлы игнорирования.
…я импортов и исправлен формат расширений.
… Stylelint, обновлен скрипт "lint:fix" для более эффективного выполнения.
…Handlebars с поддержкой уникальных идентификаторов и управления ссылками на компоненты.
maximste added 20 commits March 22, 2026 22:49
…ы функции для выбора чата и обновления активного элемента в боковой панели.
…если задан атрибут href, с соответствующими стилями.
…aryLine, SidebarSecondaryLine, SidebarUserStatus и обновлена регистрация компонентов в index.ts и registerBlocks.ts.
…события CHAT_MESSAGE_SENT_EVENT и обновлен интерфейс компонента MessageComposer для поддержки отправки сообщений.
@maximste maximste changed the title Sprint 2. Доработка приложения в соответствии с требованиями Sprint 2. Доработка приложения в соответствии с требованиями Mar 22, 2026
Copy link
Copy Markdown

@mikebars1995 mikebars1995 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здравствуйте. (Нужно развернуть общий комментарий ↓)

Работа проделана огромная

Что сделано отлично:

  • Readme хорошо оформлен
  • Проект задеплоен и отлично работает
  • Отлично, что не забыли про .gitignore
  • Отлично, что ограничиваете версию node
  • Отлично, что нет EOF ошибок в гите
  • Хорошая структура папок и файлов
  • Добавлен ESLint и Stylelint
  • Отлично, что тип пропсов получаете из дженерика в классе Block
  • Отлично, что не забываете про удаление обработчиков
  • Отлично, что указываете понятный текст ошибки под инпутом

Что нужно исправить:

  • Любой обработчик события должен навешиваться только через пропсы экземпляра класса, который наследуется от Block. В теории показано было, что в пропсах передается объект events со всеми нужными событиями, а в родительском классе Block они навешиваются через _addEvents и удаляются через _removeEvents. Посмотрите реализацию Block в теории

Исправьте, пожалуйста, недочеты и работа будет принята. Пожалуйста, проверьте работоспособность проекта и наличие возможных ошибок в консоли браузера (кнопка F12) перед отправкой на ревью.

Напоминаю, что работа может быть принята только после исправления всех критических замечаний Нужно исправить.

Комментарии Можно лучше не обязательны к исправлению прямо сейчас, это рекомендации

Удачного рефакторинга кода.

}
}

private removeListeners() {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отлично

Отлично, что не забываете про удаление обработчиков

'textarea[name="message"]',
);

ta?.addEventListener("keydown", (e) => {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно исправить

Любой обработчик события должен навешиваться только через пропсы экземпляра класса, который наследуется от Block. В теории показано было, что в пропсах передается объект events со всеми нужными событиями, а в родительском классе Block они навешиваются через _addEvents и удаляются через _removeEvents. Посмотрите реализацию Block в теории

В таком варианте невозможно удалить обработчик, так как Вы его ссылку не передаете. Там Вы передаете анонимную стрелочную функцию (у неё нет постоянной ссылки). Движок браузера не сможет найти по ссылке ее и удалить. Ошибки никакой браузер не выдаст, так как ему без разницы, что он не нашел функцию.

addEventListener навешивает на элемент обработчик и, если его потом не удалить, он останется на элементе навсегда. Если Вы еще раз навешиваете обработчик, то на элементе будет уже 2 обработчика срабатывать друг за другом. И так далее. На 10й раз Ваше приложение начнет глючить и пойдут ошибки в консоли, так как обработчики делают одно и тоже, а данных уже может и не быть давно. Это называется утечка памяти. Поэтому либо нужно удалять обработчик правильно, либо навешивать его только 1 раз, а не при каждом открытии, закрытии или еще какой-нибудь операции.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Упустил этот момент. спасибо, поправил

@maximste maximste requested a review from mikebars1995 March 23, 2026 18:39
Copy link
Copy Markdown

@mikebars1995 mikebars1995 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поздравляю! Ваша работа принята.

Вы отлично потрудились.

Удачного дальнейшего обучения.

@maximste maximste merged commit a1263ab into main Apr 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants