about summary refs log tree commit diff
path: root/assets/src/components
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-07-08 23:29:20 +0200
committerMelonai <einebeere@gmail.com>2021-07-08 23:29:20 +0200
commitc3b05a72b7185112ece6e42c99e9a828c8298f04 (patch)
tree317da6fbe640ffa57cf771b4b9e3b0beb80e836c /assets/src/components
parent9d8ca2a653661560f471d717d188e92a79edb250 (diff)
downloadrook-c3b05a72b7185112ece6e42c99e9a828c8298f04.tar.zst
rook-c3b05a72b7185112ece6e42c99e9a828c8298f04.zip
State display for incoming and own requests
Diffstat (limited to 'assets/src/components')
-rw-r--r--assets/src/components/RequestPage.svelte12
-rw-r--r--assets/src/components/SharePage.svelte8
-rw-r--r--assets/src/components/request/RequestStatus.svelte51
-rw-r--r--assets/src/components/share/DataSelector.svelte40
-rw-r--r--assets/src/components/share/Request.svelte43
-rw-r--r--assets/src/components/share/RequestList.svelte (renamed from assets/src/components/share/Requests.svelte)6
-rw-r--r--assets/src/components/share/Selector.svelte20
-rw-r--r--assets/src/components/share/ShareStatus.svelte (renamed from assets/src/components/share/Info.svelte)4
8 files changed, 133 insertions, 51 deletions
diff --git a/assets/src/components/RequestPage.svelte b/assets/src/components/RequestPage.svelte
index eb6b559..d8cf31d 100644
--- a/assets/src/components/RequestPage.svelte
+++ b/assets/src/components/RequestPage.svelte
@@ -1,21 +1,13 @@
 <script lang="ts">
-    import { start } from "../network/channel/connection";
-    import { startRequest } from "../network/channel/request";
-
     import Header from "./Header.svelte";
-
-    start().then(startRequest);
+    import RequestStatus from "./request/RequestStatus.svelte";
 </script>
 
 <Header color="white" />
 
 <main>
     <div class="left-segment">
-        <h1>Waiting for a response...</h1>
-        <p>
-            The share’s content will become available to you once the sharer
-            decides to accept your request.
-        </p>
+        <RequestStatus />
     </div>
     <div class="right-segment" />
 </main>
diff --git a/assets/src/components/SharePage.svelte b/assets/src/components/SharePage.svelte
index 9be9466..19138ef 100644
--- a/assets/src/components/SharePage.svelte
+++ b/assets/src/components/SharePage.svelte
@@ -1,20 +1,20 @@
 <script lang="ts">
     import data from "../stores/data";
     import Header from "./Header.svelte";
-    import Info from "./share/Info.svelte";
-    import Requests from "./share/Requests.svelte";
+    import ShareStatus from "./share/ShareStatus.svelte";
+    import RequestList from "./share/RequestList.svelte";
 </script>
 
 <Header color="black" />
 
 <main>
     <div class="left-segment">
-        <Info />
+        <ShareStatus />
     </div>
     <div class="right-segment">
         {#if $data.locked}
             <h1>Requests</h1>
-            <Requests />
+            <RequestList />
         {/if}
     </div>
 </main>
diff --git a/assets/src/components/request/RequestStatus.svelte b/assets/src/components/request/RequestStatus.svelte
new file mode 100644
index 0000000..b4c9ef9
--- /dev/null
+++ b/assets/src/components/request/RequestStatus.svelte
@@ -0,0 +1,51 @@
+<script lang="ts">
+    import data from "../../stores/data";
+    import {
+        initializeRequest,
+        OwnRequestState,
+    } from "../../models/own_request";
+    import { startRequestConnection } from "../../network/channel/request_connection";
+
+    const request = initializeRequest();
+    const state = request.state;
+
+    startRequestConnection(request);
+</script>
+
+<!-- TODO: Bind states of same path together -->
+{#if $state === OwnRequestState.PENDING || $state === OwnRequestState.ACKNOWLEDGED}
+    <h1>Waiting for a response...</h1>
+    <p>
+        {#if $state === OwnRequestState.ACKNOWLEDGED}
+            Connecting to signaling server...
+        {:else}
+            The share’s content will become available to you once the sharer
+            decides to accept your request.
+        {/if}
+    </p>
+{:else if $state === OwnRequestState.IN_FLIGHT || $state === OwnRequestState.DONE}
+    <h1>Your request was <b>accepted!</b></h1>
+    {#if $state === OwnRequestState.IN_FLIGHT}
+        Transferring...
+    {:else}
+        <p>Congratulations! You can access the received data below:</p>
+        <div class="data">{$data.data}</div>
+    {/if}
+{:else if $state === OwnRequestState.DECLINED}
+    <h1>Your request was <b>declined!</b></h1>
+    <p>Sorry! I hope we can still be friends?</p>
+{:else}
+    <!-- TODO: Handle specific errors -->
+    <h1>Eek!</h1>
+    <p>An error occured during your request.</p>
+{/if}
+
+<style>
+    .data {
+        font-size: 14px;
+        width: 100%;
+        border: solid 1px #cccccc;
+        padding: 10px 20px;
+        box-sizing: border-box;
+    }
+</style>
diff --git a/assets/src/components/share/DataSelector.svelte b/assets/src/components/share/DataSelector.svelte
new file mode 100644
index 0000000..6838a05
--- /dev/null
+++ b/assets/src/components/share/DataSelector.svelte
@@ -0,0 +1,40 @@
+<script lang="ts">
+    import { startShareConnection } from "../../network/channel/share_connection";
+
+    import data from "../../stores/data";
+
+    let value = "";
+
+    const submit = () => {
+        data.set(value);
+        startShareConnection();
+    };
+
+    // TODO: Accept data other than text.
+</script>
+
+<form on:submit|preventDefault={submit}>
+    <!-- TODO: Prettier input field -->
+    <input type="text" bind:value />
+    <input class="set-data-button" type="submit" value="Share" />
+</form>
+
+<style>
+    form {
+        display: flex;
+        flex-wrap: nowrap;
+    }
+
+    input {
+        border: none;
+        font-size: 14px;
+        color: black;
+        background-color: white;
+        padding: 10px 20px;
+        box-sizing: border-box;
+    }
+
+    .set-data-button {
+        margin-left: 0.5rem;
+    }
+</style>
diff --git a/assets/src/components/share/Request.svelte b/assets/src/components/share/Request.svelte
index e34f633..5f9ca7a 100644
--- a/assets/src/components/share/Request.svelte
+++ b/assets/src/components/share/Request.svelte
@@ -1,31 +1,50 @@
 <script lang="ts">
-    import { offer } from "../../network/transfer/share";
+    import {
+        acceptIncomingRequest,
+        declineIncomingRequest,
+        IncomingRequestState,
+    } from "../../models/incoming_request";
+    import type { IncomingRequest } from "../../models/incoming_request";
     import CheckIcon from "../icons/CheckIcon.svelte";
     import CloseIcon from "../icons/CloseIcon.svelte";
 
-    export let token: string;
+    export let request: IncomingRequest;
+    const state = request.state;
 
     async function accept() {
-        const transfer = await offer(token);
+        acceptIncomingRequest(request);
     }
 
-    function decline() {}
+    function decline() {
+        declineIncomingRequest(request);
+    }
 </script>
 
 <!-- TODO: Replace placeholder values and show IP instead of token. -->
 <ul class="request">
-    <div class="buttons">
-        <div class="round-button" on:click={accept}>
-            <CheckIcon color="white" />
-        </div>
-        <div class="plain-button" on:click={decline}>
-            <CloseIcon color="black" />
+    {#if $state === IncomingRequestState.WAITING}
+        <div class="buttons">
+            <div class="round-button" on:click={accept}>
+                <CheckIcon color="white" />
+            </div>
+            <div class="plain-button" on:click={decline}>
+                <CloseIcon color="black" />
+            </div>
         </div>
-    </div>
+    {/if}
+
     <li>Requested at 14:38</li>
-    <li class="ip">{token}</li>
+    <li class="ip">{request.info.token}</li>
     <li>Trusowo, Russia</li>
     <li>Firefox 89</li>
+
+    {#if $state === IncomingRequestState.IN_FLIGHT}
+        Transferring...
+    {:else if $state === IncomingRequestState.DONE}
+        Done!
+    {:else if $state === IncomingRequestState.DECLINED}
+        Declined.
+    {/if}
 </ul>
 
 <style>
diff --git a/assets/src/components/share/Requests.svelte b/assets/src/components/share/RequestList.svelte
index 54eab57..423662e 100644
--- a/assets/src/components/share/Requests.svelte
+++ b/assets/src/components/share/RequestList.svelte
@@ -1,8 +1,8 @@
 <script lang="ts">
-    import requests from "../../stores/requests";
+    import requests from "../../stores/received_requests";
     import Request from "./Request.svelte";
 </script>
 
 {#each $requests as request}
-    <Request token={request} />
-{/each}
\ No newline at end of file
+    <Request {request} />
+{/each}
diff --git a/assets/src/components/share/Selector.svelte b/assets/src/components/share/Selector.svelte
deleted file mode 100644
index e4c7c07..0000000
--- a/assets/src/components/share/Selector.svelte
+++ /dev/null
@@ -1,20 +0,0 @@
-<script lang="ts">
-    import { start } from "../../network/channel/connection";
-    import { startShare } from "../../network/channel/share";
-
-    import data from "../../stores/data";
-
-    let value = "";
-
-    const submit = () => {
-        data.set(value);
-        start().then(startShare);
-    };
-
-    // TODO: Accept data other than text.
-</script>
-
-<form on:submit|preventDefault={submit}>
-    <input type="text" bind:value />
-    <input type="submit" value="Submit" />
-</form>
diff --git a/assets/src/components/share/Info.svelte b/assets/src/components/share/ShareStatus.svelte
index 79ef404..15d1ee9 100644
--- a/assets/src/components/share/Info.svelte
+++ b/assets/src/components/share/ShareStatus.svelte
@@ -5,14 +5,14 @@
         getStateStore,
     } from "../../network/channel/connection";
     import data from "../../stores/data";
-    import Selector from "./Selector.svelte";
+    import DataSelector from "./DataSelector.svelte";
 
     let connection = getStateStore();
 </script>
 
 {#if !$data.locked}
     <h1>What do you want to share?</h1>
-    <Selector />
+    <DataSelector />
 {:else}
     <h1>
         You are <br />