You've already forked matrix-react-sdk
mirror of
https://github.com/matrix-org/matrix-react-sdk.git
synced 2025-07-30 02:21:17 +03:00
Fix emoting with emoji or pills (#8105)
* Fix emoting with emoji or pills * Fix some slash command errors not being shown * Re-enable mistakenly skipped SendMessageComposer tests * Test emoting with non-text parts
This commit is contained in:
@ -153,13 +153,11 @@ export class Command {
|
|||||||
public run(roomId: string, threadId: string, args: string): RunResult {
|
public run(roomId: string, threadId: string, args: string): RunResult {
|
||||||
// if it has no runFn then its an ignored/nop command (autocomplete only) e.g `/me`
|
// if it has no runFn then its an ignored/nop command (autocomplete only) e.g `/me`
|
||||||
if (!this.runFn) {
|
if (!this.runFn) {
|
||||||
reject(
|
return reject(
|
||||||
newTranslatableError(
|
newTranslatableError(
|
||||||
"Command error: Unable to handle slash command.",
|
"Command error: Unable to handle slash command.",
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderingType = threadId
|
const renderingType = threadId
|
||||||
|
@ -181,7 +181,9 @@ export function textSerialize(model: EditorModel): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function containsEmote(model: EditorModel): boolean {
|
export function containsEmote(model: EditorModel): boolean {
|
||||||
return startsWith(model, "/me ", false) && model.parts[0]?.text?.length > 4;
|
const hasCommand = startsWith(model, "/me ", false);
|
||||||
|
const hasArgument = model.parts[0]?.text?.length > 4 || model.parts.length > 1;
|
||||||
|
return hasCommand && hasArgument;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function startsWith(model: EditorModel, prefix: string, caseSensitive = true): boolean {
|
export function startsWith(model: EditorModel, prefix: string, caseSensitive = true): boolean {
|
||||||
|
@ -131,6 +131,20 @@ describe('<SendMessageComposer/>', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("allows emoting with non-text parts", () => {
|
||||||
|
const model = new EditorModel([], createPartCreator(), createRenderer());
|
||||||
|
const documentOffset = new DocumentOffset(16, true);
|
||||||
|
model.update("/me ✨sparkles✨", "insertText", documentOffset);
|
||||||
|
expect(model.parts.length).toEqual(4); // Emoji count as non-text
|
||||||
|
|
||||||
|
const content = createMessageContent(model, null, undefined, permalinkCreator);
|
||||||
|
|
||||||
|
expect(content).toEqual({
|
||||||
|
body: "✨sparkles✨",
|
||||||
|
msgtype: "m.emote",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("allows sending double-slash escaped slash commands correctly", () => {
|
it("allows sending double-slash escaped slash commands correctly", () => {
|
||||||
const model = new EditorModel([], createPartCreator(), createRenderer());
|
const model = new EditorModel([], createPartCreator(), createRenderer());
|
||||||
const documentOffset = new DocumentOffset(32, true);
|
const documentOffset = new DocumentOffset(32, true);
|
||||||
@ -194,7 +208,7 @@ describe('<SendMessageComposer/>', () => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
fit("renders text and placeholder correctly", () => {
|
it("renders text and placeholder correctly", () => {
|
||||||
const wrapper = getComponent({ placeholder: "placeholder string" });
|
const wrapper = getComponent({ placeholder: "placeholder string" });
|
||||||
|
|
||||||
expect(wrapper.find('[aria-label="placeholder string"]')).toHaveLength(1);
|
expect(wrapper.find('[aria-label="placeholder string"]')).toHaveLength(1);
|
||||||
|
Reference in New Issue
Block a user