Conversation
…влены цвета фона в нескольких компонентах
…нные значения на переменные
…ы импорты стилей в компонентах
…ние модуля '@fontsource/inter'
…oImplicitAny, sourceMap и strictNullChecks
…SLint и Stylelint, изменены файлы игнорирования.
…форматирования и линтинга
…я импортов и исправлен формат расширений.
… Stylelint, обновлен скрипт "lint:fix" для более эффективного выполнения.
…Handlebars с поддержкой уникальных идентификаторов и управления ссылками на компоненты.
…ы функции для выбора чата и обновления активного элемента в боковой панели.
…ей и иконок в боковой панели
…ацией о пользователе в боковой панели
…й информации в боковой панели
…ка чатов в боковой панели
…щем пользователе в боковой панели
…теля в боковой панели
…если задан атрибут href, с соответствующими стилями.
…aryLine, SidebarSecondaryLine, SidebarUserStatus и обновлена регистрация компонентов в index.ts и registerBlocks.ts.
…события CHAT_MESSAGE_SENT_EVENT и обновлен интерфейс компонента MessageComposer для поддержки отправки сообщений.
…ми управления и стилями.
…ажения интерфейса чата
mikebars1995
left a comment
There was a problem hiding this comment.
Здравствуйте. (Нужно развернуть общий комментарий ↓)
Работа проделана огромная
Что сделано отлично:
Readmeхорошо оформлен- Проект задеплоен и отлично работает
- Отлично, что не забыли про
.gitignore - Отлично, что ограничиваете версию
node - Отлично, что нет
EOFошибок в гите - Хорошая структура папок и файлов
- Добавлен
ESLintиStylelint - Отлично, что тип пропсов получаете из дженерика в классе
Block - Отлично, что не забываете про удаление обработчиков
- Отлично, что указываете понятный текст ошибки под инпутом
Что нужно исправить:
- Любой обработчик события должен навешиваться только через пропсы экземпляра класса, который наследуется от
Block. В теории показано было, что в пропсах передается объектeventsсо всеми нужными событиями, а в родительском классеBlockони навешиваются через_addEventsи удаляются через_removeEvents. Посмотрите реализациюBlockв теории
Исправьте, пожалуйста, недочеты и работа будет принята. Пожалуйста, проверьте работоспособность проекта и наличие возможных ошибок в консоли браузера (кнопка F12) перед отправкой на ревью.
Напоминаю, что работа может быть принята только после исправления всех критических замечаний Нужно исправить.
Комментарии Можно лучше не обязательны к исправлению прямо сейчас, это рекомендации
Удачного рефакторинга кода.
| } | ||
| } | ||
|
|
||
| private removeListeners() { |
There was a problem hiding this comment.
Отлично
Отлично, что не забываете про удаление обработчиков
| 'textarea[name="message"]', | ||
| ); | ||
|
|
||
| ta?.addEventListener("keydown", (e) => { |
There was a problem hiding this comment.
Нужно исправить
Любой обработчик события должен навешиваться только через пропсы экземпляра класса, который наследуется от Block. В теории показано было, что в пропсах передается объект events со всеми нужными событиями, а в родительском классе Block они навешиваются через _addEvents и удаляются через _removeEvents. Посмотрите реализацию Block в теории
В таком варианте невозможно удалить обработчик, так как Вы его ссылку не передаете. Там Вы передаете анонимную стрелочную функцию (у неё нет постоянной ссылки). Движок браузера не сможет найти по ссылке ее и удалить. Ошибки никакой браузер не выдаст, так как ему без разницы, что он не нашел функцию.
addEventListener навешивает на элемент обработчик и, если его потом не удалить, он останется на элементе навсегда. Если Вы еще раз навешиваете обработчик, то на элементе будет уже 2 обработчика срабатывать друг за другом. И так далее. На 10й раз Ваше приложение начнет глючить и пойдут ошибки в консоли, так как обработчики делают одно и тоже, а данных уже может и не быть давно. Это называется утечка памяти. Поэтому либо нужно удалять обработчик правильно, либо навешивать его только 1 раз, а не при каждом открытии, закрытии или еще какой-нибудь операции.
There was a problem hiding this comment.
Упустил этот момент. спасибо, поправил
mikebars1995
left a comment
There was a problem hiding this comment.
Поздравляю! Ваша работа принята.
Вы отлично потрудились.
Удачного дальнейшего обучения.
Что сделано
shared/features/widgets/pages/app), документация вdocs/FSD.md, обновлёнREADME.md.Block, регистрация компонентов в Handlebars, общие блоки (Button,Input,FormField,IconButton,Textarea,Search, атомы сайдбара и др.).MessengerLayout, виджетSidebar(секции, список чатов, событие выбора чата),ChatPageс декомпозицией (ChatHeader,ChatThread,ChatTimelineRow,ChatFooter),MessageComposer.Актуальная версия проекта раздаётся с GitHub Pages ссылка . Конфигурация для Netlify в репозитории сохранена, но из-за проблем с работой сервиса Netlify проект там не деплоится; ссылка gilgachat.netlify.app может вести на неактуальную версию.