diff --git a/frontend/src/lib/components/sessions/chatbox.svelte b/frontend/src/lib/components/sessions/chatbox.svelte index 423e97c9ba27fa92bd7a0b764c9ccb2196e58d7c..6c20524f4be2c351e7f201c1fbd7a32ef8bde5d5 100644 --- a/frontend/src/lib/components/sessions/chatbox.svelte +++ b/frontend/src/lib/components/sessions/chatbox.svelte @@ -3,7 +3,8 @@ import Message from '$lib/types/message'; import type Session from '$lib/types/session'; import { onMount } from 'svelte'; - import { get } from 'svelte/store'; + import MessageC from './message.svelte'; + import { Icon, PaperAirplane } from 'svelte-hero-icons'; let message = ''; export let session: Session; @@ -26,32 +27,36 @@ message = ''; messages = session.messages; } + + function scrollToBottom(node: HTMLElement) { + node.scrollTop = node.scrollHeight; + } </script> -<div id="mainbox"> - <div id="chatbox"> +<div class="flex flex-col md:my-8 min-w-fit w-full max-w-4xl border-2"> + <div class="flex-grow h-48 overflow-auto px-4 flex flex-col" use:scrollToBottom> {#each messages.sort((a, b) => a.created_at.getTime() - b.created_at.getTime()) as message (message.id)} - {#if message.user === JWTSession.user()} - <div>You: {message.content}</div> - {:else} - <div>{message.user.username}: {message.content}</div> - {/if} + <MessageC {message} /> {/each} </div> - <input - type="text" - id="chatinput" - placeholder="Send a message..." - bind:value={message} - on:keypress={async (e) => { - if (e.key === 'Enter') { - await sendMessage(); - } - }} - /> + <div class="flex flex-row h-20 mt-2"> + <textarea + class="flex-grow border-2 border-gray-300 rounded-md p-2 resize-none overflow-y-hidden" + placeholder="Send a message..." + bind:value={message} + on:keypress={async (e) => { + if (e.key === 'Enter' && !e.shiftKey) { + await sendMessage(); + } + }} + /> + <button class="w-12 button rounded-md" on:click={sendMessage}> + <Icon src={PaperAirplane} /> + </button> + </div> </div> -<style lang="less"> +<!-- <style lang="less"> #mainbox { display: flex; flex-direction: column; @@ -69,4 +74,4 @@ #chatinput { height: 50px; } -</style> +</style> --> diff --git a/frontend/src/lib/components/sessions/editParticipants.svelte b/frontend/src/lib/components/sessions/editParticipants.svelte index 71e2bf66a1a4be0db43c04d6c5491fe3d87e5bb4..e3656d01180cc7dcb7d687e5284f6d156bed3aa4 100644 --- a/frontend/src/lib/components/sessions/editParticipants.svelte +++ b/frontend/src/lib/components/sessions/editParticipants.svelte @@ -85,28 +85,3 @@ </table> </div> </div> -<!-- -<style lang="less"> - .menu { - position: fixed; - top: 50%; - left: 50%; - transform: translate(-50%, -75%); - background-color: white; - padding: 20px; - border-radius: 10px; - } - - #bg { - background-color: #000c; - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - } - - td { - min-width: 200px; - } -</style> --> diff --git a/frontend/src/lib/components/sessions/message.svelte b/frontend/src/lib/components/sessions/message.svelte new file mode 100644 index 0000000000000000000000000000000000000000..ce47fa032531e2d46580c6296d0e247a1a30e223 --- /dev/null +++ b/frontend/src/lib/components/sessions/message.svelte @@ -0,0 +1,22 @@ +<script lang="ts"> + import JWTSession from '$lib/stores/JWTSession'; + import type Message from '$lib/types/message'; + + export let message: Message; + + const isSender = message.user == JWTSession.user(); +</script> + +<div class="w-full flex" class:justify-end={isSender}> + <div + class="bg-gray-200 rounded-b-xl my-2 p-4 w-fit" + class:bg-blue-200={isSender} + class:rounded-tl-xl={isSender} + class:rounded-tr-xl={!isSender} + > + <div class="font-bold mb-1 capitalize"> + {message.user.username} + </div> + <div class="max-w-3xl">{message.content}</div> + </div> +</div> diff --git a/frontend/src/routes/session/+page.svelte b/frontend/src/routes/session/+page.svelte index f7400e745e116be186882a7105ab2d22c13cc1e6..f2b50f8bd625baf93d8142070143cd58aa6361ed 100644 --- a/frontend/src/routes/session/+page.svelte +++ b/frontend/src/routes/session/+page.svelte @@ -24,26 +24,11 @@ }); </script> -<div class="container"> +<div class="h-screen flex flex-col"> <Header /> {#if session} - <div class="vareas"> + <div class="flex flex-row flex-grow justify-evenly"> <Chatbox {session} /> </div> {/if} </div> - -<style lang="less"> - .container { - display: flex; - flex-direction: column; - height: 100vh; - } - - .vareas { - display: flex; - flex-direction: row; - flex-grow: 1; - justify-content: space-evenly; - } -</style>