Corp/backend/static/js/config/reactionsConfig.js
igor_nadein da7bf54c6c feat: Реализация полной функциональности опросов в чатах
- Исправлен PollSerializer для создания опросов с опциями
- Добавлено поле read_only_fields для корректной валидации
- Реализована отправка WebSocket уведомлений при создании опроса
- Исправлен импорт serialize_message из communications.serialization
- Добавлен обработчик poll_update в UserConsumer для WebSocket событий
- Исправлен эндпоинт /results/ для возврата user_voted_option_ids
- Добавлено поле voters в PollOptionSerializer для списка проголосовавших
- Реализована инициализация poll виджетов после рендера сообщений
- Добавлено игнорирование poll_update в notification-manager
- Исправлены стили для request list badges (height, word-break, flex)
- Восстановлены стили team-wheel (.wheel-focus, .scroll-arc) из git истории
- Реализовано отображение forwarded message info в messageRendererV2
- Множественные улучшения UI и UX для опросов

Fixes: создание опросов, голосование, отображение результатов, список проголосовавших
2026-01-22 01:33:42 +03:00

73 lines
2.3 KiB
JavaScript

/**
* Reactions Config - загрузка доступных реакций из БД
*/
class ReactionsConfig {
constructor() {
this.reactions = [];
this.loaded = false;
// Дефолтные реакции
this.defaultReactions = [
{ emoji: '👍', name: 'Лайк' },
{ emoji: '❤️', name: 'Сердце' },
{ emoji: '😂', name: 'Смех' },
{ emoji: '😮', name: 'Удивление' },
{ emoji: '😢', name: 'Грусть' },
{ emoji: '🙏', name: 'Спасибо' },
{ emoji: '👏', name: 'Аплодисменты' },
{ emoji: '🔥', name: 'Огонь' }
];
}
/**
* Загружает доступные реакции (использует дефолтные)
* @returns {Promise<Array>} Массив объектов реакций
*/
async load() {
// Если уже загружено - возвращаем кэш
if (this.loaded) {
return Promise.resolve(this.reactions);
}
// Используем дефолтные реакции (API эндпоинт не реализован)
this.reactions = this.defaultReactions;
this.loaded = true;
console.log('[ReactionsConfig] ✓ Using default reactions:', this.reactions.length);
return Promise.resolve(this.reactions);
}
/**
* Получает массив эмодзи для использования в UI
* @returns {Array<string>} Массив эмодзи
*/
getEmojis() {
return this.reactions.map(r => r.emoji);
}
/**
* Получает название реакции по эмодзи
* @param {string} emoji
* @returns {string|null}
*/
getName(emoji) {
const reaction = this.reactions.find(r => r.emoji === emoji);
return reaction ? reaction.name : null;
}
/**
* Проверяет, доступна ли данная реакция
* @param {string} emoji
* @returns {boolean}
*/
isAvailable(emoji) {
return this.reactions.some(r => r.emoji === emoji);
}
}
// Создаём глобальный синглтон
const reactionsConfig = new ReactionsConfig();
export default reactionsConfig;