This commit is expanding on previous work making everything chat working through an URL. Improves drawer templates to be all URLs Implements some kind of router for the drawer Removes few remaining actions for opening channels
80 lines
1.8 KiB
JavaScript
80 lines
1.8 KiB
JavaScript
import Component from "@ember/component";
|
|
import { bind } from "discourse-common/utils/decorators";
|
|
import { action } from "@ember/object";
|
|
import { inject as service } from "@ember/service";
|
|
|
|
export default Component.extend({
|
|
tagName: "",
|
|
router: service(),
|
|
chat: service(),
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
},
|
|
|
|
didInsertElement() {
|
|
this._super(...arguments);
|
|
|
|
this._scrollSidebarToBottom();
|
|
document.addEventListener("keydown", this._autoFocusChatComposer);
|
|
},
|
|
|
|
willDestroyElement() {
|
|
this._super(...arguments);
|
|
|
|
document.removeEventListener("keydown", this._autoFocusChatComposer);
|
|
},
|
|
|
|
@bind
|
|
_autoFocusChatComposer(event) {
|
|
if (
|
|
!event.key ||
|
|
// Handles things like Enter, Tab, Shift
|
|
event.key.length > 1 ||
|
|
// Don't need to focus if the user is beginning a shortcut.
|
|
event.metaKey ||
|
|
event.ctrlKey ||
|
|
// Space's key comes through as ' ' so it's not covered by event.key
|
|
event.code === "Space" ||
|
|
// ? is used for the keyboard shortcut modal
|
|
event.key === "?"
|
|
) {
|
|
return;
|
|
}
|
|
|
|
if (
|
|
!event.target ||
|
|
/^(INPUT|TEXTAREA|SELECT)$/.test(event.target.tagName)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
const composer = document.querySelector(".chat-composer-input");
|
|
if (composer && !this.chat.activeChannel.isDraft) {
|
|
this.appEvents.trigger("chat:insert-text", event.key);
|
|
composer.focus();
|
|
}
|
|
},
|
|
|
|
_scrollSidebarToBottom() {
|
|
if (!this.teamsSidebarOn) {
|
|
return;
|
|
}
|
|
|
|
const sidebarScroll = document.querySelector(
|
|
".sidebar-container .scroll-wrapper"
|
|
);
|
|
if (sidebarScroll) {
|
|
sidebarScroll.scrollTop = sidebarScroll.scrollHeight;
|
|
}
|
|
},
|
|
|
|
@action
|
|
navigateToIndex() {
|
|
this.router.transitionTo("chat.index");
|
|
},
|
|
});
|