factored out settings from messageView
This commit is contained in:
parent
88d7029a5c
commit
fe47395f52
3 changed files with 158 additions and 132 deletions
|
|
@ -80,7 +80,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
setup(props) {
|
setup(props) {
|
||||||
let isPlaying = ref(false);
|
const isPlaying = ref(false);
|
||||||
|
|
||||||
const onStopPlayback = (e: any) => {
|
const onStopPlayback = (e: any) => {
|
||||||
window.ipcRenderer.removeAllListeners("stop-playback-anim");
|
window.ipcRenderer.removeAllListeners("stop-playback-anim");
|
||||||
|
|
|
||||||
151
src/components/settings.vue
Normal file
151
src/components/settings.vue
Normal file
|
|
@ -0,0 +1,151 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<!-- Settings icon. -->
|
||||||
|
<button
|
||||||
|
class="settingsIcon"
|
||||||
|
v-if="toggleSettings == false"
|
||||||
|
@click="onActive"
|
||||||
|
>
|
||||||
|
<div class="settingsButtonDot"></div>
|
||||||
|
<div class="settingsButtonDot"></div>
|
||||||
|
<div class="settingsButtonDot"></div>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<!-- Settings div. -->
|
||||||
|
<div id="settings" v-show="toggleSettings">
|
||||||
|
<button
|
||||||
|
class="settingsOption"
|
||||||
|
@click="onLogout"
|
||||||
|
>
|
||||||
|
Logout
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
import { defineComponent, ref } from "vue";
|
||||||
|
import { useAuth } from "@/modules/auth";
|
||||||
|
import { useIpc } from "@/modules/ipc";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "Settings",
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
let toggleSettings = ref(false);
|
||||||
|
|
||||||
|
const { post } = useIpc();
|
||||||
|
const { logout } = useAuth();
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
|
||||||
|
// When settings is showing.
|
||||||
|
const onActive = () => {
|
||||||
|
toggleSettings.value = true;
|
||||||
|
window.addEventListener("keydown", onEscape);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Listen for escape key to close settings.
|
||||||
|
const onEscape = (e: any) => {
|
||||||
|
if(e.key === "Escape") {
|
||||||
|
toggleSettings.value = false;
|
||||||
|
}
|
||||||
|
window.removeEventListener("keydown", onEscape);
|
||||||
|
}
|
||||||
|
|
||||||
|
// When user clicks logout button in settings.
|
||||||
|
const onLogout = () => {
|
||||||
|
logout();
|
||||||
|
router.push({ name: "login" });
|
||||||
|
post("logout", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
onActive,
|
||||||
|
toggleSettings,
|
||||||
|
onLogout
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
|
||||||
|
#settings {
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
background-color: #EBEBEB;
|
||||||
|
|
||||||
|
opacity: 0.75;
|
||||||
|
|
||||||
|
z-index: 4;
|
||||||
|
|
||||||
|
animation-name: appear;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes appear {
|
||||||
|
from {
|
||||||
|
opacity: 0
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0.75
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.settingsIcon {
|
||||||
|
position: fixed;
|
||||||
|
right: 0;
|
||||||
|
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
margin-right: 20px;
|
||||||
|
margin-top: 24px;
|
||||||
|
|
||||||
|
z-index: 2;
|
||||||
|
background-color: #EBEBEB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settingsButtonDot {
|
||||||
|
width: 5px;
|
||||||
|
height: 5px;
|
||||||
|
|
||||||
|
margin: 2px;
|
||||||
|
border-radius: 2.5px;
|
||||||
|
background-color: #9B9B9B;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settingsOption {
|
||||||
|
font-family: "SF Compact Display";
|
||||||
|
background-color: #B7B7B7;
|
||||||
|
padding: 10px 30px;
|
||||||
|
border-radius: 20px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.settingsOption:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
|
@ -1,26 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<InputItem />
|
<InputItem />
|
||||||
|
<Settings />
|
||||||
<!-- Settings open button. -->
|
|
||||||
<button
|
|
||||||
class="settingsIcon"
|
|
||||||
v-if="toggleSettings == false"
|
|
||||||
@click="onSettings"
|
|
||||||
>
|
|
||||||
<div class="settingsButtonDot"></div>
|
|
||||||
<div class="settingsButtonDot"></div>
|
|
||||||
<div class="settingsButtonDot"></div>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!-- Settings "page." -->
|
|
||||||
<div id="settings" v-show="toggleSettings">
|
|
||||||
<button
|
|
||||||
class="settingsOption"
|
|
||||||
@click="onLogout"
|
|
||||||
>
|
|
||||||
Logout
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- List of message bubbles. -->
|
<!-- List of message bubbles. -->
|
||||||
<div id="messenger">
|
<div id="messenger">
|
||||||
|
|
@ -32,12 +12,12 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, reactive, ref, onMounted, onUnmounted } from "vue";
|
import { defineComponent, reactive, ref, onMounted, onUnmounted } from "vue";
|
||||||
import { RenderMessage , Annotation } from "@/types/message/index";
|
import { RenderMessage , Annotation } from "@/types/message/index";
|
||||||
|
|
||||||
import MessageItem from "@/components/messageItem.vue";
|
import MessageItem from "@/components/messageItem.vue";
|
||||||
import InputItem from "@/components/inputItem/inputItem.vue";
|
import InputItem from "@/components/inputItem/inputItem.vue";
|
||||||
|
import Settings from "@/components/settings.vue";
|
||||||
|
|
||||||
import useMitt from "@/modules/mitt";
|
import useMitt from "@/modules/mitt";
|
||||||
import { useRouter } from "vue-router";
|
|
||||||
import { useAuth } from "@/modules/auth";
|
|
||||||
import { useIpc } from "@/modules/ipc";
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "Messenger",
|
name: "Messenger",
|
||||||
|
|
@ -45,38 +25,10 @@ export default defineComponent({
|
||||||
components: {
|
components: {
|
||||||
MessageItem,
|
MessageItem,
|
||||||
InputItem,
|
InputItem,
|
||||||
|
Settings
|
||||||
},
|
},
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
|
|
||||||
const { post } = useIpc();
|
|
||||||
const { logout } = useAuth();
|
|
||||||
const router = useRouter();
|
|
||||||
|
|
||||||
// Whether or not to show the settings.
|
|
||||||
const toggleSettings = ref(false);
|
|
||||||
|
|
||||||
// Listen for escape key to close settings.
|
|
||||||
const onEscape = (e: any) => {
|
|
||||||
if(e.key === "Escape") {
|
|
||||||
toggleSettings.value = false;
|
|
||||||
}
|
|
||||||
window.removeEventListener("keydown", onEscape);
|
|
||||||
}
|
|
||||||
|
|
||||||
// When user clicks settings button.
|
|
||||||
const onSettings = () => {
|
|
||||||
toggleSettings.value = true;
|
|
||||||
window.addEventListener("keydown", onEscape);
|
|
||||||
}
|
|
||||||
|
|
||||||
// When user clicks logout button in settings.
|
|
||||||
const onLogout = () => {
|
|
||||||
logout();
|
|
||||||
router.push({ name: "login" });
|
|
||||||
post("logout", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
const { emitter } = useMitt();
|
const { emitter } = useMitt();
|
||||||
|
|
||||||
// List of messages in the view.
|
// List of messages in the view.
|
||||||
|
|
@ -105,8 +57,6 @@ export default defineComponent({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toggleSettings.value = false;
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
emitter.on('self-message', (message) => messages.set(message.uid, message));
|
emitter.on('self-message', (message) => messages.set(message.uid, message));
|
||||||
// Listen for new messages to render.
|
// Listen for new messages to render.
|
||||||
|
|
@ -119,10 +69,7 @@ export default defineComponent({
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
toggleSettings,
|
messages
|
||||||
messages,
|
|
||||||
onSettings,
|
|
||||||
onLogout
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
@ -146,76 +93,4 @@ export default defineComponent({
|
||||||
#messenger::-webkit-scrollbar {
|
#messenger::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#settings {
|
|
||||||
position: fixed;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
width: 100vw;
|
|
||||||
height: 100vh;
|
|
||||||
|
|
||||||
background-color: #EBEBEB;
|
|
||||||
|
|
||||||
opacity: 0.75;
|
|
||||||
|
|
||||||
z-index: 4;
|
|
||||||
|
|
||||||
animation-name: appear;
|
|
||||||
animation-duration: 0.5s;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes appear {
|
|
||||||
from {
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
to {
|
|
||||||
opacity: 0.75
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.settingsIcon {
|
|
||||||
position: fixed;
|
|
||||||
right: 0;
|
|
||||||
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
|
|
||||||
margin-right: 20px;
|
|
||||||
margin-top: 24px;
|
|
||||||
|
|
||||||
z-index: 2;
|
|
||||||
background-color: #EBEBEB;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settingsButtonDot {
|
|
||||||
width: 5px;
|
|
||||||
height: 5px;
|
|
||||||
|
|
||||||
margin: 2px;
|
|
||||||
border-radius: 2.5px;
|
|
||||||
background-color: #9B9B9B;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settingsOption {
|
|
||||||
font-family: "SF Compact Display";
|
|
||||||
background-color: #B7B7B7;
|
|
||||||
padding: 10px 30px;
|
|
||||||
border-radius: 20px;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
border: none;
|
|
||||||
outline: none;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.settingsOption:hover {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue