mirror of
https://github.com/discourse/discourse.git
synced 2024-11-28 08:23:43 +08:00
bf886662df
This pull request is a full overhaul of the chat-composer and contains various improvements to the thread panel. They have been grouped in the same PR as lots of improvements/fixes to the thread panel needed an improved composer. This is meant as a first step. ### New features included in this PR - A resizable side panel - A clear dropzone area for uploads - A simplified design for image uploads, this is only a first step towards more redesign of this area in the future ### Notable fixes in this PR - Correct placeholder in thread panel - Allows to edit the last message of a thread with arrow up - Correctly focus composer when replying to a message - The reply indicator is added instantly in the channel when starting a thread - Prevents a large variety of bug where the composer could bug and prevent sending message or would clear your input while it has content ### Technical notes To achieve this PR, three important changes have been made: - `<ChatComposer>` has been fully rewritten and is now a glimmer component - The chat composer now takes a `ChatMessage` as input which can directly be used in other operations, it simplifies a lot of logic as we are always working a with a `ChatMessage` - `TextareaInteractor` has been created to wrap the existing `TextareaTextManipulation` mixin, it will make future migrations easier and allow us to have a less polluted `<ChatComposer>` Note ".chat-live-pane" has been renamed ".chat-channel" Design for upload dropzone is from @chapoi
72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
import { query } from "discourse/tests/helpers/qunit-helpers";
|
|
import hbs from "htmlbars-inline-precompile";
|
|
import ChatChannel from "discourse/plugins/chat/discourse/models/chat-channel";
|
|
import { module, test } from "qunit";
|
|
import { render } from "@ember/test-helpers";
|
|
import pretender from "discourse/tests/helpers/create-pretender";
|
|
|
|
module(
|
|
"Discourse Chat | Component | chat-composer placeholder",
|
|
function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("direct message to self shows Jot something down", async function (assert) {
|
|
pretender.get("/chat/emojis.json", () => [200, [], {}]);
|
|
|
|
this.currentUser.set("id", 1);
|
|
this.channel = ChatChannel.create({
|
|
chatable_type: "DirectMessage",
|
|
chatable: {
|
|
users: [{ id: 1 }],
|
|
},
|
|
});
|
|
|
|
await render(hbs`<Chat::Composer::Channel @channel={{this.channel}} />`);
|
|
|
|
assert.strictEqual(
|
|
query(".chat-composer__input").placeholder,
|
|
"Jot something down"
|
|
);
|
|
});
|
|
|
|
test("direct message to multiple folks shows their names", async function (assert) {
|
|
pretender.get("/chat/emojis.json", () => [200, [], {}]);
|
|
|
|
this.channel = ChatChannel.create({
|
|
chatable_type: "DirectMessage",
|
|
chatable: {
|
|
users: [
|
|
{ name: "Tomtom" },
|
|
{ name: "Steaky" },
|
|
{ username: "zorro" },
|
|
],
|
|
},
|
|
});
|
|
|
|
await render(hbs`<Chat::Composer::Channel @channel={{this.channel}} />`);
|
|
|
|
assert.strictEqual(
|
|
query(".chat-composer__input").placeholder,
|
|
"Chat with Tomtom, Steaky, @zorro"
|
|
);
|
|
});
|
|
|
|
test("message to channel shows send message to channel name", async function (assert) {
|
|
pretender.get("/chat/emojis.json", () => [200, [], {}]);
|
|
|
|
this.channel = ChatChannel.create({
|
|
chatable_type: "Category",
|
|
title: "just-cats",
|
|
});
|
|
|
|
await render(hbs`<Chat::Composer::Channel @channel={{this.channel}} />`);
|
|
|
|
assert.strictEqual(
|
|
query(".chat-composer__input").placeholder,
|
|
"Chat in #just-cats"
|
|
);
|
|
});
|
|
}
|
|
);
|