thelounge/client/components/JoinChannel.vue

94 lines
2.1 KiB
Vue
Raw Normal View History

<template>
<form
:id="'join-channel-' + channel.id"
class="join-form"
method="post"
action=""
autocomplete="off"
@keydown.esc.prevent="$emit('toggle-join-channel')"
@submit.prevent="onSubmit"
>
<input
2018-07-12 19:06:17 +00:00
v-model="inputChannel"
2018-07-29 17:57:14 +00:00
v-focus
type="text"
class="input"
name="channel"
placeholder="Channel"
pattern="[^\s]+"
maxlength="200"
title="The channel name may not contain spaces"
required
2019-07-17 09:33:59 +00:00
/>
<input
2018-07-12 19:06:17 +00:00
v-model="inputPassword"
type="password"
class="input"
name="key"
placeholder="Password (optional)"
pattern="[^\s]+"
maxlength="200"
title="The channel password may not contain spaces"
autocomplete="new-password"
2019-07-17 09:33:59 +00:00
/>
<button type="submit" class="btn btn-small">Join</button>
</form>
</template>
<script lang="ts">
import {defineComponent, PropType, ref} from "vue";
import {switchToChannel} from "../js/router";
2018-07-12 19:06:17 +00:00
import socket from "../js/socket";
import {useStore} from "../js/store";
import {ClientNetwork, ClientChan} from "../js/types";
2018-07-12 19:06:17 +00:00
export default defineComponent({
name: "JoinChannel",
2018-07-12 19:06:17 +00:00
directives: {
focus: {
mounted: (el: HTMLFormElement) => el.focus(),
2018-07-12 19:06:17 +00:00
},
},
props: {
network: {type: Object as PropType<ClientNetwork>, required: true},
channel: {type: Object as PropType<ClientChan>, required: true},
},
emits: ["toggle-join-channel"],
setup(props, {emit}) {
const store = useStore();
const inputChannel = ref("");
const inputPassword = ref("");
const onSubmit = () => {
const existingChannel = store.getters.findChannelOnCurrentNetwork(inputChannel.value);
2018-07-12 19:06:17 +00:00
if (existingChannel) {
switchToChannel(existingChannel);
2018-07-12 19:06:17 +00:00
} else {
const chanTypes = props.network.serverOptions.CHANTYPES;
let channel = inputChannel.value;
2019-10-04 16:56:18 +00:00
if (chanTypes && chanTypes.length > 0 && !chanTypes.includes(channel[0])) {
channel = chanTypes[0] + channel;
}
2018-07-12 19:06:17 +00:00
socket.emit("input", {
text: `/join ${channel} ${inputPassword.value}`,
target: props.channel.id,
2018-07-12 19:06:17 +00:00
});
}
inputChannel.value = "";
inputPassword.value = "";
emit("toggle-join-channel");
};
return {
inputChannel,
inputPassword,
onSubmit,
};
2018-07-12 19:06:17 +00:00
},
});
</script>