frontend: make "create channel" modal functional

This commit is contained in:
hippoz 2022-04-25 22:48:29 +03:00
parent b1ff452732
commit 131a270562
No known key found for this signature in database
GPG key ID: 7C52899193467641
2 changed files with 128 additions and 30 deletions

View file

@ -19,10 +19,24 @@
:root { :root {
--background-color-1: hsl(180, 11%, 7%); --background-color-1: hsl(180, 11%, 7%);
--background-color-2: hsl(180, 11%, 12%); --background-color-2: hsl(180, 11%, 12%);
--background-color-3: hsl(180, 11%, 17%);
--foreground-color-1: rgb(253, 254, 255); --foreground-color-1: rgb(253, 254, 255);
--foreground-color-2: rgb(218, 219, 220); --foreground-color-2: rgb(218, 219, 220);
--foreground-color-3: rgb(153, 154, 155); --foreground-color-3: rgb(153, 154, 155);
--purple-1: hsl(280, 88%, 50%);
--blue-1: hsl(200, 88%, 50%);
--green-1: hsl(140, 88%, 50%);
--yellow-1: hsl(50, 88%, 65%);
--red-1: hsl(2, 88%, 65%);
--purple-2: hsl(280, 88%, 40%);
--blue-2: hsl(200, 88%, 40%);
--green-2: hsl(140, 88%, 40%);
--yellow-2: hsl(50, 88%, 60%);
--red-2: hsl(2, 88%, 60%);
--space-unit: 1em; --space-unit: 1em;
--space-xxs: calc(0.25 * var(--space-unit)); --space-xxs: calc(0.25 * var(--space-unit));
--space-xs: calc(0.5 * var(--space-unit)); --space-xs: calc(0.5 * var(--space-unit));
@ -88,6 +102,89 @@ body {
margin-left: var(--space-xxs); margin-left: var(--space-xxs);
} }
.modal-backdrop {
position: absolute;
width: 100vw;
height: 100vh;
z-index: 0;
top: 50%;
left: 50%;
background-color: rgba(0, 0, 0, 0.4);
transform: translate(-50%, -50%);
}
.modal {
display: flex;
flex-direction: column;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: var(--background-color-2);
border-radius: var(--radius-lg);
padding: var(--space-md);
}
.modal-header {
margin-bottom: var(--space-md);
text-align: center;
}
.modal-footer {
margin-top: auto;
padding-top: var(--space-norm);
}
.modal-primary-action {
float: right;
}
.modal-secondary-action {
float: left;
}
.input-label {
text-transform: uppercase;
color: var(--foreground-color-2);
}
.input {
background-color : var(--background-color-3);
border: none;
color: currentColor;
border-radius: var(--radius-md);
padding: var(--space-sm);
font-size: inherit;
line-height: inherit;
}
.button {
background-color: var(--background-color-2);
text-align: center;
border: none;
padding: var(--space-sm);
border-radius: var(--radius-md);
color: currentColor;
font: inherit;
max-height: 3em;
}
.button:hover {
background-color: var(--background-color-3)
}
.button-accent {
background-color: var(--purple-2);
}
.button-accent:hover {
background-color: var(--purple-1);
}
.button-accent:disabled {
background-color: var(--purple-2);
}
.h1 { .h1 {
font-size: 2.488rem; font-size: 2.488rem;
} }

View file

@ -2,41 +2,42 @@
import { fade, fly } from "svelte/transition"; import { fade, fly } from "svelte/transition";
import { quintInOut } from "svelte/easing"; import { quintInOut } from "svelte/easing";
import { overlayStore } from "../../stores"; import { overlayStore } from "../../stores";
import request from "../../request";
import { apiRoute } from "../../storage";
let channelName = "";
let createButtonEnabled = true;
const close = () => overlayStore.close('createChannel');
const create = async () => {
createButtonEnabled = false;
await request("POST", apiRoute("channels"), true, {
name: channelName
});
close();
};
</script> </script>
<style> <style>
.modal-backdrop { .full-width {
position: absolute; width: 100%;
width: 100vw;
height: 100vh;
z-index: 0;
top: 50%;
left: 50%;
background-color: rgba(0, 0, 0, 0.4);
transform: translate(-50%, -50%);
}
.modal-header {
display: block;
margin-bottom: var(--space-xxs);
}
.modal {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
min-width: 450px;
min-height: 370px;
background-color: var(--background-color-2);
padding: var(--space-md);
border-radius: var(--radius-lg);
} }
</style> </style>
<div class="modal-backdrop" transition:fade="{{ duration: 350, easing: quintInOut }}" on:click="{() => overlayStore.close('createChannel')}"> <div class="modal-backdrop" transition:fade="{{ duration: 300, easing: quintInOut }}" on:click="{ close }">
<div class="modal" transition:fly="{{ duration: 350, easing: quintInOut, y: 15 }}"> <div class="modal" transition:fly="{{ duration: 300, easing: quintInOut, y: 10 }}" on:click|stopPropagation>
<span class="h2 modal-header">Create Channel</span> <div class="modal-header">
Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatibus earum blanditiis, numquam debitis inventore, fugit quidem ipsa, cum quibusdam accusamus repudiandae aut vitae necessitatibus. Libero, sit! Ex placeat illum iure! <span class="h3">Create Channel</span>
</div>
<label class="input-label">
Channel Name
<input class="input full-width" bind:value={ channelName } />
</label>
<div class="modal-footer">
<button class="button modal-secondary-action" on:click="{ close }">Cancel</button>
<button class="button button-accent modal-primary-action" on:click="{ create }" disabled="{ !createButtonEnabled }">Create</button>
</div>
</div> </div>
</div> </div>