We design a professional front-end for a messenger

WILD

Administrator
Staff member
ADMIN
SELLER
SUPREME
MEMBER
Joined
Jan 21, 2025
Messages
222
Reaction score
885
Deposit
0$
Демо

Демо
Ранее я написал статью "Создание высокопроизводительного окна просмотра для мессенджера" / Habr , в которой демонстрировалось создание простого окна просмотра для мессенджера, и оно не было основано на кроссплатформенном решении.

Выбор технологий​

Прежде чем создавать наш будущий мессенджер, нам необходимо определиться с технологией, которую мы будем использовать для его разработки. Среди инструментов веб-разработки для одностраничных приложений (SPA) явными фаворитами являются Angular и React . Я не буду подробно останавливаться на преимуществах каждого из этих инструментов, а сосредоточусь на Angular, поскольку ранее я проводил исследования неклассических виртуализированных списков и обнаружил, что он справляется с этой задачей лучше, чем React.

Решение для создания неклассических виртуализированных списков с использованием Angular ng-virtual-list и React rcx-virtual-list (пока не кроссплатформенное, так как Angular лучше справляется с этой задачей).

Технические требования​

  1. Мы создадим зону для группового просмотра, которая будет выходить прямо с причала.
  2. Область просмотра сообщений, отсортированных по дате создания.
  3. Процесс редактирования и удаления сообщений.
  4. Блок создания сообщения.
  5. Поиск сообщений по подстроке.
  6. Уникальный дизайн с тематической отделкой.
  7. Решение, поддерживающее различные браузеры и платформы.

Разработка решения​

Давайте создадим новый проект Angular; в этом примере мы будем использовать версию 20.x. Добавьте пакет ng-virtual-list и настройте его, как описано.

Я сразу же предоставлю исходный код проекта ng-virtual-list-chat-demo . Позже я выделю ключевые моменты в коде репозитория, чтобы объяснить их более подробно.

Проект полностью работает на основе моков, а транспортировка реализована с использованием мок-сервисов.

Услуги

  • Сервис для работы с группами сообщений ( groups-mock.service.ts ). Реализует методы getGroups, createGroup, updateGroup и deleteGroup.
  • Сервис для переключения между чатами ( message.service.ts )
  • Имитационный сервис для работы с сообщениями ( messages-mock.service.ts ). Этот сервис предоставляет функциональность getMessages, createMessage, updateMessage, patchMessages и deleteMessage для указанного chatId.
  • Сервис для работы с уведомлениями о новых сообщениях (имитация веб-сервиса) ( messages-notification-mock.service.ts ) реализует два Observable: $typing (сигнализирует о том, что пользователь с указанным userId набрал сообщение) и $messages (сигнализирует о добавлении сообщения, передавая в качестве значения версию изменений).
  • Сервис тем оформления ( theme.service.ts )
  • Сервис локализации ( localization.service.ts ). Важно отметить, что интерфейс может быть адаптирован для языков с письмом справа налево, таких как иврит. За это отвечает директива locale-sensitive.directive.ts .
Основные компоненты

  • Главная страница мессенджера: chat.component.ts
  • Компонент группы чата: groups.component.ts
  • Компонент области просмотра сообщений: messages.component.ts . Реализация коллекции основана на ProxyCollection. При получении необработанных данных они преобразуются в ProxyCollection<IMessageItemData>, который при изменении генерирует новый список элементов для <ng-virtual-list>.
    Важно отметить, что ng-virtual-list может кэшировать сообщения по типу. Для этого он вводит такие типы элементов, как typing-indicator, unmailed-separator, group, quote и message, которые отображаются как элементы определенного типа.
    <ng-template #itemRenderer let-index="index" let-data="data" let-prevData="prevData" let-nextData="nextData" let-measures="measures" let-config="config" let-reseted="reseted">
    <div staticClick [maxStaticClickDistance]="maxStaticClickDistance" class="message-template" (onStaticClick)="config.select(data.edited ? true : undefined)">
    @if (data?.data) {
    @switch (data.data.type) {
    @case ("typing-indicator") {
    <x-messages-typing-indicator ... />
    }
    @case ("unmailed-separator") {
    <x-message-unmailed-separator ... />
    }
    @case ("group") {
    <x-message-group ... />
    }
    @case ("quote") {
    <x-message-box [messageType]="'quote'"... />
    }
    @Default {
    <x-message-box ... />
    }
    }
    }
    </div>
    </ng-template>
 
𝐍𝐎𝐍 𝐕𝐁𝐕 𝐂𝐕𝐕 𝐂𝐀𝐑𝐃𝐒 & 𝐄𝐍𝐑𝐎𝐋𝐋𝐒

𝐃𝐔𝐌𝐏𝐒 𝐄𝐁𝐓+𝐏𝐈𝐍 𝐀𝐔𝐓𝐎 /
𝟏𝟎𝟏 𝟐𝟎𝟏 𝟐𝟐𝟏...𝐃𝐮𝐦𝐩𝐬 𝐰𝐢𝐭𝐡 𝐏𝐢𝐧𝐬 𝐓𝐫𝐚𝐜𝐤 𝟏/𝟐


𝐌𝐚𝐤𝐢𝐧𝐠 𝐚𝐥𝐥 𝐭𝐲𝐩𝐞 𝐨𝐟 𝐃𝐨𝐜𝐮𝐦𝐞𝐧𝐭𝐬 𝐚𝐧𝐝 𝐈𝐃𝐬 𝐟𝐫𝐨𝐧𝐭 𝐚𝐧𝐝 𝐛𝐚𝐜𝐤,𝐅𝐮𝐥𝐥𝐳 𝐚𝐜𝐜𝐞𝐬𝐬 𝐛𝐢𝐧𝐬 𝐚𝐧𝐝 𝐚𝐥𝐥 𝐬𝐨𝐫𝐭 𝐨𝐟 𝐝𝐨𝐜𝐮𝐦𝐞𝐧𝐭𝐬 𝐟𝐨𝐫 𝐚𝐧𝐲 𝐯𝐞𝐫𝐢𝐟𝐢𝐜𝐚𝐭𝐢𝐨𝐧𝐬, 𝐚𝐥𝐬𝐨 𝐝𝐨𝐢𝐧𝐠 𝐚𝐥𝐥 𝐊𝐘𝐂 𝐯𝐞𝐫𝐢𝐟𝐢𝐜𝐚𝐭𝐢𝐨𝐧𝐬… 𝐡𝐢𝐭 𝐦𝐞 𝐟𝐨𝐫 𝐚𝐥𝐥 𝐲𝐨𝐮𝐫 𝐝𝐨𝐜𝐬


𝐀𝐮𝐭𝐨 𝐀𝐝𝐝 𝐂𝐂 = 𝐒𝐤𝐢𝐩𝐬 𝐎𝐓𝐏 𝐯𝐞𝐫𝐢𝐟𝐢𝐜𝐚𝐭𝐢𝐨𝐧 𝟏𝟎𝟎% 𝐜𝐞𝐫𝐭𝐢 𝐈’𝐥𝐥 𝐛𝐞 𝐰𝐨𝐫𝐤𝐢𝐧𝐠 𝐲𝐨𝐮 𝐭𝐡𝐫𝐨𝐮𝐠𝐡 𝐬𝐭𝐞𝐩 𝐛𝐲 𝐬𝐭𝐞𝐩 𝐫𝐞𝐟𝐮𝐧𝐝 𝐨𝐫 𝐫𝐞𝐩𝐥𝐚𝐜𝐞𝐦𝐞𝐧𝐭 𝐢𝐟 𝐜𝐚𝐫𝐝 𝐢𝐬 𝐧𝐨𝐭 𝐚𝐝𝐝𝐞𝐝 𝐛𝐮𝐭 𝐚𝐥𝐰𝐚𝐲𝐬 𝐜𝐨𝐦𝐞𝐬 𝐠𝐨𝐨𝐝 𝟏𝟎𝟎% 𝐜𝐞𝐫𝐭𝐢 𝐂𝐚𝐫𝐝 𝐚𝐥𝐬𝐨 𝐡𝐚𝐬 𝐡𝐢𝐠𝐡 𝐛𝐚𝐥𝐚𝐧𝐜𝐞 𝐇𝐢𝐭 𝐦𝐞 𝐮𝐩 𝐟𝐨𝐫 𝐭𝐡𝐞 𝐩𝐫𝐢𝐜𝐞


𝐂𝐚𝐧 𝐛𝐞 𝐮𝐬𝐞𝐝 𝐟𝐨𝐫 𝐏𝐚𝐲𝐢𝐧𝐠 𝐛𝐢𝐥𝐥𝐬
𝐎𝐧𝐥𝐢𝐧𝐞 𝐩𝐮𝐫𝐜𝐡𝐚𝐬𝐞𝐬
𝐒𝐡𝐨𝐩𝐩𝐢𝐧𝐠
𝐋𝐢𝐧𝐤𝐚𝐛𝐥𝐞 𝐭𝐨 𝐂𝐚𝐬𝐡𝐚𝐩𝐩,𝐏𝐚𝐲𝐏𝐚𝐥,𝐀𝐩𝐩𝐥𝐞 𝐏𝐚𝐲 , 𝐙𝐞𝐥𝐥𝐞 , 𝐕𝐞𝐧𝐦𝐨 & 𝐌𝐚𝐧𝐲 𝐌𝐨𝐫𝐞




𝐓𝐞𝐥𝐞𝐆𝐫𝐚𝐦: @𝐩𝐚𝐩𝐞𝐫𝐭𝐫𝐚𝐧𝐬𝟏
𝐖𝐡𝐚𝐭𝐬𝐀𝐩𝐩 : +𝟏 (𝟒𝟕𝟎) 𝟔𝟐𝟏-𝟕𝟔𝟓𝟓


 
Top Bottom