mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-05-07 14:36:07 +08:00
### Chat in Mobile view In order to reduce visual noise in mobile view, there is no need to show chat icon in header, once user has already chat open. |Before|After| |---|---| |<img width="456" height="199" alt="Screenshot 2025-10-01 at 17 16 29" src="https://github.com/user-attachments/assets/6d124a79-4a0a-4edd-913a-43a0cfa05623" />|<img width="442" height="198" alt="Screenshot 2025-10-01 at 17 16 06" src="https://github.com/user-attachments/assets/052a2f78-574e-4d35-aff4-264f54f2fb15" />|
109 lines
3.5 KiB
Text
109 lines
3.5 KiB
Text
import { tracked } from "@glimmer/tracking";
|
|
import { render, settled } from "@ember/test-helpers";
|
|
import { module, test } from "qunit";
|
|
import sinon from "sinon";
|
|
import { forceMobile } from "discourse/lib/mobile";
|
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
import { i18n } from "discourse-i18n";
|
|
import Icon from "discourse/plugins/chat/discourse/components/chat/header/icon";
|
|
import { HEADER_INDICATOR_PREFERENCE_ALL_NEW } from "discourse/plugins/chat/discourse/controllers/preferences/chat";
|
|
|
|
module("Discourse Chat | Component | chat-header-icon", function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("full page - never separated sidebar mode", async function (assert) {
|
|
this.currentUser.user_option.chat_separate_sidebar_mode = "never";
|
|
sinon
|
|
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
|
|
.value(true);
|
|
|
|
await render(<template><Icon /></template>);
|
|
|
|
assert
|
|
.dom(".icon.btn-flat")
|
|
.hasAttribute("title", i18n("chat.title_capitalized"))
|
|
.hasAttribute("href", "/chat");
|
|
|
|
assert.dom(".d-icon-d-chat").exists();
|
|
});
|
|
|
|
test("full page - always separated mode", async function (assert) {
|
|
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
|
|
sinon
|
|
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
|
|
.value(true);
|
|
|
|
await render(<template><Icon /></template>);
|
|
|
|
assert
|
|
.dom(".icon.btn-flat")
|
|
.hasAttribute("title", i18n("chat.exit"))
|
|
.hasAttribute("href", "/latest");
|
|
|
|
assert.dom(".d-icon-shuffle").exists();
|
|
});
|
|
|
|
test("mobile", async function (assert) {
|
|
const testState = new (class {
|
|
@tracked isActive = false;
|
|
})();
|
|
|
|
forceMobile();
|
|
|
|
await render(
|
|
<template><Icon @isActive={{testState.isActive}} /></template>
|
|
);
|
|
|
|
assert
|
|
.dom(".icon.btn-flat")
|
|
.hasAttribute("title", i18n("chat.title_capitalized"))
|
|
.hasAttribute("href", "/chat");
|
|
|
|
assert
|
|
.dom(".d-icon-d-chat")
|
|
.exists("chat icon is rendered if chat is inactive");
|
|
|
|
testState.isActive = true;
|
|
await settled();
|
|
assert
|
|
.dom(".d-icon-d-chat")
|
|
.doesNotExist("chat icon is not rendered if chat is active");
|
|
});
|
|
|
|
test("full page - with unread", async function (assert) {
|
|
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
|
|
this.currentUser.user_option.chat_header_indicator_preference =
|
|
HEADER_INDICATOR_PREFERENCE_ALL_NEW;
|
|
|
|
sinon
|
|
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
|
|
.value(true);
|
|
|
|
await render(<template><Icon @urgentCount={{1}} /></template>);
|
|
|
|
assert
|
|
.dom(".icon.btn-flat")
|
|
.hasAttribute("title", i18n("chat.exit"))
|
|
.hasAttribute("href", "/latest");
|
|
assert.dom(".d-icon-shuffle").exists();
|
|
assert.dom(".chat-channel-unread-indicator__number").doesNotExist();
|
|
});
|
|
|
|
test("drawer - with unread", async function (assert) {
|
|
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
|
|
this.currentUser.user_option.chat_header_indicator_preference =
|
|
HEADER_INDICATOR_PREFERENCE_ALL_NEW;
|
|
|
|
await render(<template><Icon @urgentCount={{1}} /></template>);
|
|
|
|
assert
|
|
.dom(".icon.btn-flat")
|
|
.hasAttribute("title", i18n("sidebar.panels.chat.label"))
|
|
.hasAttribute("href", "/chat");
|
|
assert.dom(".d-icon-d-chat").exists();
|
|
assert
|
|
.dom(".chat-channel-unread-indicator__number")
|
|
.exists()
|
|
.containsText("1");
|
|
});
|
|
});
|