This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/plugins/chat/assets/javascripts/discourse/routes/chat.js
Roman Rizzi 5c699e4384
DEV: Pass messageId as a dynamic segment instead of a query param (#20013)
* DEV: Rnemae channel path to just c

Also swap the channel id and channel slug params to be consistent with core.

* linting

* channel_path

* Drop slugify helper and channel route without slug

* Request slug and route models through the channel model if possible

* DEV: Pass messageId as a dynamic segment instead of a query param

* Ensure change is backwards-compatible

* drop query param from oneboxes

* Correctly extract channelId from routes

* Better route organization using siblings for regular and near-message

* Ensures sessions are unique even when using parallelism

* prevents didReceiveAttrs to clear input mid test

* we disable animations in capybara so sometimes the message was barely showing

* adds wait

* ensures finished loading

* is it causing more harm than good?

* this check is slowing things for no reason

* actually target the button

* more resilient select chat message

* apply similar fix to bookmark

* fix

---------

Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
2023-02-01 12:39:23 -03:00

87 lines
2.3 KiB
JavaScript

import DiscourseRoute from "discourse/routes/discourse";
import I18n from "I18n";
import { defaultHomepage } from "discourse/lib/utilities";
import { inject as service } from "@ember/service";
import { scrollTop } from "discourse/mixins/scroll-top";
import { schedule } from "@ember/runloop";
import { action } from "@ember/object";
export default class ChatRoute extends DiscourseRoute {
@service chat;
@service router;
@service chatStateManager;
titleToken() {
return I18n.t("chat.title_capitalized");
}
beforeModel(transition) {
if (!this.chat.userCanChat) {
return this.router.transitionTo(`discovery.${defaultHomepage()}`);
}
const INTERCEPTABLE_ROUTES = [
"chat.channel",
"chat.channel.from-params",
"chat.channel.near-message",
"chat.channel-legacy",
"chat",
"chat.index",
"chat.draft-channel",
];
if (
transition.from && // don't intercept when directly loading chat
this.chatStateManager.isDrawerPreferred &&
INTERCEPTABLE_ROUTES.includes(transition.targetName)
) {
transition.abort();
let URL = transition.intent.url;
if (transition.targetName.startsWith("chat.channel")) {
URL ??= this.router.urlFor(
transition.targetName,
...transition.intent.contexts
);
} else {
URL ??= this.router.urlFor(transition.targetName);
}
this.appEvents.trigger("chat:open-url", URL);
return;
}
this.appEvents.trigger("chat:toggle-close");
}
activate() {
this.chatStateManager.storeAppURL();
this.chat.updatePresence();
schedule("afterRender", () => {
document.body.classList.add("has-full-page-chat");
document.documentElement.classList.add("has-full-page-chat");
});
}
deactivate() {
schedule("afterRender", () => {
document.body.classList.remove("has-full-page-chat");
document.documentElement.classList.remove("has-full-page-chat");
scrollTop();
});
}
@action
willTransition(transition) {
if (!transition?.to?.name?.startsWith("chat.channel")) {
this.chat.setActiveChannel(null);
}
if (!transition?.to?.name?.startsWith("chat.")) {
this.chatStateManager.storeChatURL();
this.chat.updatePresence();
}
}
}