diff --git a/.eslintrc.yml b/.eslintrc.yml index b67991b5..37b30d86 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -71,6 +71,6 @@ plugins: extends: - eslint:recommended - - plugin:vue/recommended + - plugin:vue/vue3-recommended - prettier - prettier/vue diff --git a/client/components/App.vue b/client/components/App.vue index b136874f..6ead6ec2 100644 --- a/client/components/App.vue +++ b/client/components/App.vue @@ -18,6 +18,9 @@ import Mousetrap from "mousetrap"; import throttle from "lodash/throttle"; import storage from "../js/localStorage"; import isIgnoredKeybind from "../js/helpers/isIgnoredKeybind"; +import socket from "../js/socket"; + +import {navigate} from "../js/router"; import Sidebar from "./Sidebar.vue"; import ImageViewer from "./ImageViewer.vue"; @@ -67,8 +70,10 @@ export default { }; this.dayChangeTimeout = setTimeout(emitDayChange, this.msUntilNextDay()); + + socket.open(); }, - beforeDestroy() { + beforeUnmount() { Mousetrap.unbind("esc", this.escapeKey); Mousetrap.unbind("alt+u", this.toggleUserList); Mousetrap.unbind("alt+s", this.toggleSidebar); @@ -124,6 +129,41 @@ export default { this.$store.commit("userlistOpen", isUserlistOpen === "true"); }, + switchToChannel(channel) { + navigate("RoutedChat", {id: channel.id}); + }, + closeChannel(channel) { + if (channel.type === "lobby") { + eventbus.emit( + "confirm-dialog", + { + title: "Remove network", + text: `Are you sure you want to quit and remove ${channel.name}? This cannot be undone.`, + button: "Remove network", + }, + (result) => { + if (!result) { + return; + } + + channel.closed = true; + socket.emit("input", { + target: Number(channel.id), + text: "/quit", + }); + } + ); + + return; + } + + channel.closed = true; + + socket.emit("input", { + target: Number(channel.id), + text: "/close", + }); + }, }, }; diff --git a/client/components/ChatInput.vue b/client/components/ChatInput.vue index d12b9405..4481116d 100644 --- a/client/components/ChatInput.vue +++ b/client/components/ChatInput.vue @@ -103,7 +103,7 @@ export default { this.setInputSize(); }, }, - mounted() { + beforeUnmount() { eventbus.on("escapekey", this.blurInput); if (this.$store.state.settings.autocomplete) { @@ -165,7 +165,7 @@ export default { upload.mounted(); } }, - destroyed() { + unmounted() { eventbus.off("escapekey", this.blurInput); if (autocompletionRef) { diff --git a/client/components/ConfirmDialog.vue b/client/components/ConfirmDialog.vue index af92e368..3ca97922 100644 --- a/client/components/ConfirmDialog.vue +++ b/client/components/ConfirmDialog.vue @@ -65,7 +65,7 @@ export default { eventbus.on("escapekey", this.close); eventbus.on("confirm-dialog", this.open); }, - destroyed() { + unmounted() { eventbus.off("escapekey", this.close); eventbus.off("confirm-dialog", this.open); }, diff --git a/client/components/ContextMenu.vue b/client/components/ContextMenu.vue index bab07a43..5d4161da 100644 --- a/client/components/ContextMenu.vue +++ b/client/components/ContextMenu.vue @@ -18,9 +18,8 @@ @mouseleave="activeItem = -1" @keydown.enter.prevent="clickActiveItem" > -