-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Добавил поддержку параметров для эмоджи #24
Conversation
src/editor/index.ts
Outdated
* Заменяет текст в указанном диапазоне `from:to` на один эмоджи, и записывает ему указанные параметры | ||
* Если передать более одного эмоджи, указанные параметры будут записаны всем переданным эмоджи | ||
*/ | ||
replaceOnEmoji(from: number, to: number, emoji: string, params?: EmojiParams): Model { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@sergeche нужно ли тут проверить, что в emoji: string
содержится только эмоджи без других символов?
Я тестировал, и этот метод отрабатывает нормально, когда передаем просто текст (например "123"
), текст + эмоджи ("123😀"
), несколько эмоджи ("😀😀"
, тогда параметры применятся ко всем переданным эмоджи)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В целом получилось несколько разных методов, которые делают одни и те же изменения, но в разных местах и с разным контрактом. Хотя по сути всё сводится к одной простой задаче: для эмоджи, который находится в позиции pos
, нужно указать объект с параметрами. Я бы сделал одну функцию на решение этой задачи. Что-то типа такого:
interface EmojiUpdatePayload {
/** Позиция эмоджи относительно всей строки */
pos: number;
/** Данные, которые нужно добавить. Если `null` — удалить данные */
data: EmojiData | null;
/**
* Эмоджи-подсказка. Если указано, то сначала проверим, что эмоджи в модели
* совпадает с переданным. Если не совпадает — ничего не меняем
*/
hint?: string;
}
function updateEmojiData(tokens: Token[], payload: EmojiUpdatePayload[]): Token[] {
// 1. Убедимся, что payloads отсортирован
// 2. Для каждого элемент из payload находим токен и эмоджи в нём
// 3. Если есть hint, убедимся, что эмоджи совпадают
// 4. Если всё нашли и надо менять — обновляем токен
}
И в API редактора не делать отдельный метод для вставки эмоджи, а делать метод именно для изменения данных в эмоджи. И ты на стороне UI будешь выполнять две операции: вставлять/заменять текст и добавлять кастомные данные для эмоджи
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, теперь похоже на правду. Вроде всё хорошо
@tamtam-chat/message-editor@0.10.0 |
No description provided.