aboutsummaryrefslogtreecommitdiff
path: root/assets/src/components
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-02-19 20:00:38 +0100
committerMel <einebeere@gmail.com>2022-02-19 20:00:38 +0100
commitbf1450799df0deb424a9675be89e13c29e3620d7 (patch)
tree6a5f2f7559c5946058deadf8375f6609485a3d3f /assets/src/components
parent5384c34952b031995ecb8aa58d72954b0c685e18 (diff)
downloadrook-bf1450799df0deb424a9675be89e13c29e3620d7.tar.zst
rook-bf1450799df0deb424a9675be89e13c29e3620d7.zip
Split state into stages to handle messages
Diffstat (limited to 'assets/src/components')
-rw-r--r--assets/src/components/SharePage.svelte6
-rw-r--r--assets/src/components/request/RequestStatus.svelte21
-rw-r--r--assets/src/components/share/DataSelector.svelte8
-rw-r--r--assets/src/components/share/Request.svelte13
-rw-r--r--assets/src/components/share/RequestList.svelte16
-rw-r--r--assets/src/components/share/ShareStatus.svelte26
6 files changed, 48 insertions, 42 deletions
diff --git a/assets/src/components/SharePage.svelte b/assets/src/components/SharePage.svelte
index dff6ba0..c0c6f18 100644
--- a/assets/src/components/SharePage.svelte
+++ b/assets/src/components/SharePage.svelte
@@ -1,8 +1,10 @@
<script lang="ts">
- import data from "../stores/data";
import Header from "./Header.svelte";
import ShareStatus from "./share/ShareStatus.svelte";
import RequestList from "./share/RequestList.svelte";
+ import { getShareState, ShareStateType } from "../state/share";
+
+ const state = getShareState().type;
</script>
<Header color="black" />
@@ -12,7 +14,7 @@
<ShareStatus />
</div>
<div class="right-segment">
- {#if $data.locked}
+ {#if $state === ShareStateType.SHARING}
<h1>Requests</h1>
<RequestList />
{/if}
diff --git a/assets/src/components/request/RequestStatus.svelte b/assets/src/components/request/RequestStatus.svelte
index 49a0c31..7ba93d9 100644
--- a/assets/src/components/request/RequestStatus.svelte
+++ b/assets/src/components/request/RequestStatus.svelte
@@ -1,37 +1,30 @@
<script lang="ts">
- import {
- initializeRequest,
- OwnRequestState,
- } from "../../models/own_request";
- import { startRequestConnection } from "../../network/channel/request_connection";
+ import { getRequestState, RequestStateType } from "../../state/request";
import DataView from "../DataView.svelte";
- const request = initializeRequest();
- const state = request.state;
-
- startRequestConnection(request);
+ const state = getRequestState().type;
</script>
<!-- TODO: Bind states of same path together -->
-{#if $state === OwnRequestState.PENDING || $state === OwnRequestState.ACKNOWLEDGED}
+{#if $state === RequestStateType.CONNECTING || $state === RequestStateType.WAITING_FOR_RESPONSE}
<h1>Waiting for a response...</h1>
<p>
- {#if $state === OwnRequestState.ACKNOWLEDGED}
+ {#if $state === RequestStateType.CONNECTING}
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}
+{:else if $state === RequestStateType.IN_FLIGHT || $state === RequestStateType.DONE}
<h1>Your request was <b>accepted!</b></h1>
- {#if $state === OwnRequestState.IN_FLIGHT}
+ {#if $state === RequestStateType.IN_FLIGHT}
Transferring...
{:else}
<p>Congratulations! You can access the received data below:</p>
<DataView />
{/if}
-{:else if $state === OwnRequestState.DECLINED}
+{:else if $state === RequestStateType.DECLINED}
<h1>Your request was <b>declined!</b></h1>
<p>Sorry! I hope we can still be friends?</p>
{:else}
diff --git a/assets/src/components/share/DataSelector.svelte b/assets/src/components/share/DataSelector.svelte
index 6838a05..965d0a1 100644
--- a/assets/src/components/share/DataSelector.svelte
+++ b/assets/src/components/share/DataSelector.svelte
@@ -1,13 +1,11 @@
<script lang="ts">
- import { startShareConnection } from "../../network/channel/share_connection";
-
- import data from "../../stores/data";
+ import { ChoosingData, getShareState } from "../../state/share";
let value = "";
const submit = () => {
- data.set(value);
- startShareConnection();
+ const share = getShareState().state as ChoosingData;
+ share.submitData(value);
};
// TODO: Accept data other than text.
diff --git a/assets/src/components/share/Request.svelte b/assets/src/components/share/Request.svelte
index e554bfe..40a62fc 100644
--- a/assets/src/components/share/Request.svelte
+++ b/assets/src/components/share/Request.svelte
@@ -1,12 +1,9 @@
<script lang="ts">
- import {
- acceptIncomingRequest,
- declineIncomingRequest,
- IncomingRequestState,
- } from "../../models/incoming_request";
+ import { IncomingRequestState } from "../../models/incoming_request";
import type { IncomingRequest } from "../../models/incoming_request";
import CheckIcon from "../icons/CheckIcon.svelte";
import CloseIcon from "../icons/CloseIcon.svelte";
+ import { getShareState, Sharing } from "../../state/share";
export let request: IncomingRequest;
const state = request.state;
@@ -14,11 +11,13 @@
const time = `${request.info.receivedAt.getHours()}:${request.info.receivedAt.getMinutes()}`;
async function accept() {
- acceptIncomingRequest(request);
+ const sharing = getShareState().state as Sharing;
+ sharing.acceptRequest(request);
}
function decline() {
- declineIncomingRequest(request);
+ const sharing = getShareState().state as Sharing;
+ sharing.declineRequest(request);
}
</script>
diff --git a/assets/src/components/share/RequestList.svelte b/assets/src/components/share/RequestList.svelte
index 510e80c..1a3b715 100644
--- a/assets/src/components/share/RequestList.svelte
+++ b/assets/src/components/share/RequestList.svelte
@@ -1,6 +1,20 @@
<script lang="ts">
- import requests from "../../stores/received_requests";
+ import { derived } from "svelte/store";
+ import type { Readable } from "svelte/store";
+ import type { IncomingRequest } from "../../models/incoming_request";
+ import { getShareState, Sharing } from "../../state/share";
import Request from "./Request.svelte";
+
+ const sharing = getShareState().state as Sharing;
+ const requestMap = sharing.getRequests();
+
+ function requestSorter(a: IncomingRequest, b: IncomingRequest): number {
+ return a.info.receivedAt.getTime() - b.info.receivedAt.getTime();
+ }
+
+ const requests: Readable<IncomingRequest[]> = derived(requestMap, $map => {
+ return Object.values($map).sort(requestSorter);
+ });
</script>
{#each $requests as request (request.info.token)}
diff --git a/assets/src/components/share/ShareStatus.svelte b/assets/src/components/share/ShareStatus.svelte
index 7c22a04..ba0fea0 100644
--- a/assets/src/components/share/ShareStatus.svelte
+++ b/assets/src/components/share/ShareStatus.svelte
@@ -1,17 +1,17 @@
<script lang="ts">
- import {
- ConnectionState,
- getOwnToken,
- getStateStore,
- } from "../../network/channel/connection";
- import data from "../../stores/data";
- import DataView from "../DataView.svelte";
+ import { getShareState, ShareStateType, Sharing } from "../../state/share";
import DataSelector from "./DataSelector.svelte";
+ import DataView from "../DataView.svelte";
- let connection = getStateStore();
+ const state = getShareState().type;
+
+ function token() {
+ const sharing = getShareState().state as Sharing;
+ return sharing.getToken();
+ }
</script>
-{#if !$data.locked}
+{#if $state == ShareStateType.CHOOSING_DATA}
<h1>What do you want to share?</h1>
<DataSelector />
{:else}
@@ -19,14 +19,14 @@
You are <br />
sharing <b>a text.</b>
</h1>
- {#if $connection === ConnectionState.CONNECTED}
+ {#if $state === ShareStateType.CONNECTING}
+ <p>Connecting to signaling server...</p>
+ {:else}
<p>
Your share is available under: <br />
- rook.rnrd.eu/<span>{getOwnToken()}</span>
+ rook.rnrd.eu/<span>{token()}</span>
</p>
<DataView />
- {:else}
- <p>Connecting to signaling server...</p>
{/if}
{/if}