Skip to content
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

Merged
merged 2 commits into from
Dec 6, 2023

Conversation

rvrhiv
Copy link
Contributor

@rvrhiv rvrhiv commented Nov 29, 2023

No description provided.

* Заменяет текст в указанном диапазоне `from:to` на один эмоджи, и записывает ему указанные параметры
* Если передать более одного эмоджи, указанные параметры будут записаны всем переданным эмоджи
*/
replaceOnEmoji(from: number, to: number, emoji: string, params?: EmojiParams): Model {
Copy link
Contributor Author

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😀"), несколько эмоджи ("😀😀", тогда параметры применятся ко всем переданным эмоджи)

@rvrhiv
Copy link
Contributor Author

rvrhiv commented Nov 29, 2023

  • Нужно ли добавить тесты для этой фичи?
  • Нужно ли дописать README.md?

Copy link
Collaborator

@sergeche sergeche left a 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 будешь выполнять две операции: вставлять/заменять текст и добавлять кастомные данные для эмоджи

src/editor/update.ts Outdated Show resolved Hide resolved
Copy link
Collaborator

@sergeche sergeche left a comment

Choose a reason for hiding this comment

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

Да, теперь похоже на правду. Вроде всё хорошо

@sergeche sergeche merged commit 3a3322a into tamtam-chat:main Dec 6, 2023
2 checks passed
@sergeche
Copy link
Collaborator

sergeche commented Dec 6, 2023

@tamtam-chat/message-editor@0.10.0

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