dashboard-v2/frontend/src/views/TranscriptView.svelte
Ryan aed0f28f13
Migrate to svelte for frontend (#9)
* Svelte: WIP

* WIP

* WIP

* WIP

* WIP

* WIP

* Finished

* Remove redundant code

* Fix typo

* Re-add routes

* Form margin

* Mobile nicities

* Mobile changed

* Increase keepalvie

* Update Guild.svelte

* Update Whitelabel.svelte

* Whitelabel changes
2021-06-30 15:40:55 +01:00

139 lines
3.5 KiB
Svelte

<div class="discord-container">
<div>
<div class="channel-header">
<span class="channel-name">#ticket-{ticketId}</span>
</div>
</div>
<div id="message-container">
{#each messages as message}
<div class="message">
{#if message.timestamp > epoch}
<span class="timestamp">
[{message.timestamp.toLocaleTimeString([], dateFormatSettings)} {message.timestamp.toLocaleDateString()}]
</span>
{/if}
<img src="https://cdn.discordapp.com/avatars/{message.author.id}/{message.author.avatar}.webp?size=256"
class="avatar">
<b class="username">{message.author.username}</b>
<span class="content">{message.content}</span>
{#if message.attachments !== undefined && message.attachments.length > 0}
{#each message.attachments as attachment}
<a href="{attachment.url}" target="_blank" title="{attachment.filename}" class="attachment"><i
class="far fa-file-alt fa-2x"></i></a>
{/each}
{/if}
</div>
{/each}
</div>
</div>
<script>
import axios from "axios";
import {setDefaultHeaders} from '../includes/Auth.svelte'
import {errorPage, withLoadingScreen} from '../js/util'
import {API_URL} from "../js/constants";
export let currentRoute;
export let params = {};
let guildId = currentRoute.namedParams.id;
let ticketId = currentRoute.namedParams.ticketid;
setDefaultHeaders()
let messages = [];
let epoch = new Date('2015');
let dateFormatSettings = {
hour: '2-digit',
minute: '2-digit'
};
async function loadData() {
const res = await axios.get(`${API_URL}/api/${guildId}/transcripts/${ticketId}`);
if (res.status !== 200) {
errorPage(res.data.error);
return;
}
messages = res.data.map(message => Object.assign({}, message, {timestamp: new Date(message.timestamp)}));
}
withLoadingScreen(loadData);
</script>
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans&display=swap');
body {
margin: 0;
display: flex;
width: 100%;
height: 100%;
background-color: #2e3136;
}
.discord-container {
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
overflow-y: scroll;
background-color: #2e3136;
font-family: 'Noto Sans', sans-serif !important;
font-size: 16px;
}
.channel-header {
background-color: #1e2124;
height: 50px;
width: 100%;
text-align: center;
display: flex;
align-items: center;
}
.channel-name {
color: white;
padding-left: 20px;
}
#message-container {
display: flex;
flex-direction: column;
flex: 1;
height: 100%;
}
.message {
display: flex;
align-items: center;
color: white !important;
word-wrap: break-word;
margin: 4px 0 4px 12px;
}
.username, .content, .avatar {
margin-left: 4px;
}
.avatar {
height: 32px;
width: 32px;
border-radius: 50%;
}
.attachment {
margin-left: 12px;
color: white;
}
@media only screen and (max-width: 576px) {
.timestamp {
display: none;
}
}
</style>