about summary refs log tree commit diff
path: root/client/src/components/Form.svelte
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-01-21 01:03:34 +0100
committerMelonai <einebeere@gmail.com>2021-01-21 01:03:34 +0100
commit72da387a292ac0e1934e72bbcc30042c82007bd0 (patch)
treeb32d9a75a2d2c09045909d8cd89865598e244853 /client/src/components/Form.svelte
parent826c7c47785ee01d2b9267919132ada696425344 (diff)
downloadshorest-72da387a292ac0e1934e72bbcc30042c82007bd0.tar.zst
shorest-72da387a292ac0e1934e72bbcc30042c82007bd0.zip
Change case of components directory
Diffstat (limited to 'client/src/components/Form.svelte')
-rw-r--r--client/src/components/Form.svelte64
1 files changed, 64 insertions, 0 deletions
diff --git a/client/src/components/Form.svelte b/client/src/components/Form.svelte
new file mode 100644
index 0000000..327d25d
--- /dev/null
+++ b/client/src/components/Form.svelte
@@ -0,0 +1,64 @@
+<script lang="ts">
+    import shorten from "$actions/shorten";
+    import { links } from "$data/links";
+    import checkUrl from "$utils/checkUrl";
+    import debounce from "$utils/debounce";
+    import ArrowIcon from "./icons/ArrowIcon.svelte";
+    import CrossIcon from "./icons/CrossIcon.svelte";
+
+    let value = "";
+    let valid = false;
+
+    function submit() {
+        const url = checkUrl(value);
+        if (url !== null) {
+            links.add(shorten(url));
+        }
+    }
+
+    const check = debounce(() => valid = !!checkUrl(value), 100);
+
+    // @ts-ignore: Value is a dependency
+    $: value, check();
+</script>
+
+<style>
+    form {
+        position: relative;
+        border: 1px solid #aaaabb;
+        box-shadow: 0 4px 6px #aaaabb30;
+        box-sizing: border-box;
+        border-radius: 5px;
+    }
+
+    .field {
+        box-sizing: border-box;
+        width: 100%;
+        border: none;
+        padding: 15px 50px 15px 20px;
+        background: transparent;
+        font-size: 1rem;
+    }
+
+    .button {
+        position: absolute;
+        right: 10px;
+        margin: auto;
+        top: 0;
+        bottom: 0;
+        background: transparent;
+        border: none;
+        cursor: pointer;
+    }
+</style>
+
+<form on:submit|preventDefault={submit}>
+    <input class="field" bind:value type="text"/>
+    <button class="button" type="submit">
+        {#if valid}
+            <ArrowIcon/>
+        {:else}
+            <CrossIcon/>
+        {/if}
+    </button>
+</form>