FIX: Don't modify `FloatKitInstance`s arrays unless needed (#27462)

This commit is contained in:
Jarek Radosz 2024-06-13 12:44:38 +02:00 committed by GitHub
parent c790c57415
commit 5361c3704d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 96 additions and 6 deletions

View File

@ -117,9 +117,11 @@ export default class Menu extends Service {
await new Promise((resolve) => {
menu.expanded = false;
this.registeredMenus = this.registeredMenus.filter(
(registeredMenu) => menu.id !== registeredMenu.id
);
if (this.registeredMenus.includes(menu)) {
this.registeredMenus = this.registeredMenus.filter(
(registeredMenu) => registeredMenu !== menu
);
}
schedule("afterRender", () => {
resolve();

View File

@ -95,9 +95,11 @@ export default class Tooltip extends Service {
tooltip.expanded = false;
await new Promise((resolve) => {
this.registeredTooltips = this.registeredTooltips.filter(
(registeredTooltips) => tooltip.id !== registeredTooltips.id
);
if (this.registeredTooltips.includes(tooltip)) {
this.registeredTooltips = this.registeredTooltips.filter(
(registeredTooltip) => registeredTooltip !== tooltip
);
}
schedule("afterRender", () => {
resolve();

View File

@ -0,0 +1,86 @@
import { visit } from "@ember/test-helpers";
import { test } from "qunit";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
import {
acceptance,
publishToMessageBus,
} from "discourse/tests/helpers/qunit-helpers";
const category = { id: 1, color: "ff0000", name: "category1" };
const messageId = 1891;
const message = {
id: messageId,
message: "Lorem ipsum!",
cooked: `<p>Lorem ipsum!</p>`,
created_at: "2020-08-04T15:00:00.000Z",
user: {
id: 1,
username: "jesse",
},
};
acceptance("Discourse Chat - Channel Reactions", function (needs) {
needs.user({ has_chat_enabled: true });
needs.settings({ chat_enabled: true });
needs.hooks.beforeEach(function () {
pretender.get("/chat/api/me/channels", () =>
response({
direct_message_channels: [],
public_channels: [
{
id: 11,
title: "My channel",
chatable_id: 1,
chatable_type: "Category",
meta: { message_bus_last_ids: {} },
current_user_membership: {
following: true,
last_read_message_id: messageId,
},
chatable: category,
},
],
meta: { message_bus_last_ids: {} },
tracking: {
channel_tracking: {
11: { unread_count: 0, mention_count: 0 },
},
thread_tracking: {},
},
})
);
pretender.get(`/chat/api/channels/11/messages`, () =>
response({
messages: [message],
meta: { can_delete_self: true },
})
);
});
test("shows the reaction button with the count", async function (assert) {
await visit("/chat/c/another-category/11");
await Promise.all([
publishToMessageBus("/chat/11", {
type: "reaction",
emoji: "rocket",
chat_message_id: messageId,
action: "add",
user: { id: 5, username: "alice" },
}),
publishToMessageBus("/chat/11", {
type: "reaction",
emoji: "rocket",
chat_message_id: messageId,
action: "add",
user: { id: 6, username: "bob" },
}),
]);
assert
.dom(".chat-message-reaction[data-emoji-name='rocket'] .count")
.hasText("2");
});
});