about summary refs log tree commit diff
path: root/client/src/Components/Response.js
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2020-05-20 21:16:34 +0200
committerGitHub <noreply@github.com>2020-05-20 21:16:34 +0200
commite9f542ddc8b8230418b1e6fc1656677453ea5a10 (patch)
treeefe84fba111c308370a89fba61dd9e8548a01085 /client/src/Components/Response.js
parenta00a8a867cae381982c7b8b77f07836ab4a504ed (diff)
parent58abd266b0b5ec37c5d7beea37abc2babd7d504a (diff)
downloadshorest-e9f542ddc8b8230418b1e6fc1656677453ea5a10.tar.zst
shorest-e9f542ddc8b8230418b1e6fc1656677453ea5a10.zip
Merge pull request #1 from Melonai/react-port 0.2.0
React port
Diffstat (limited to 'client/src/Components/Response.js')
-rw-r--r--client/src/Components/Response.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/client/src/Components/Response.js b/client/src/Components/Response.js
new file mode 100644
index 0000000..83c6ff1
--- /dev/null
+++ b/client/src/Components/Response.js
@@ -0,0 +1,50 @@
+import React, {useEffect, useState} from 'react';
+import axios from "axios";
+import Loader from "./Loader";
+import CopyButton from "./CopyButton";
+
+function Response(props){
+    const CancelToken = axios.CancelToken;
+    const [requestState, setRequestState] = useState({loading: true, cancel: CancelToken.source()});
+
+    useEffect(() => {
+        axios.post('/', {url: "https://" + props.url}, {cancelToken: requestState.cancel.token})
+            .then((r) => {
+                setRequestState({loading: false, hash: r.data.hash, cancel: requestState.cancel});
+            }).catch((e) => {
+                if (!axios.isCancel(e)) {
+                    setRequestState({loading: false, error: true, cancel: requestState.cancel});
+                }
+            });
+
+        return () => {
+            requestState.cancel.cancel();
+        };
+    }, [props.url, requestState.cancel])
+
+    let text;
+    if (!requestState.loading) {
+        if (!requestState.error) {
+            if (props.url.length < 20) {
+                text =
+                    <span>The short link for <strong>{props.url}</strong> is<br/><strong>sho.rest/{requestState.hash}</strong></span>;
+            } else {
+                text =
+                    <span>The short link for your URL is<br/><strong>sho.rest/{requestState.hash}</strong></span>;
+            }
+        } else {
+            text = <span>There was an error.</span>
+        }
+    } else {
+        text = <Loader/>
+    }
+
+    return (
+        <div className={"response-container" + (requestState.error ? " disabled" : "")}>
+            <div className={"title response-text" + (requestState.error ? " disabled" : "")}>{text}</div>
+            {requestState.error || requestState.loading ? "" : <CopyButton hash={requestState.hash}/>}
+        </div>
+    )
+}
+
+export default Response;
\ No newline at end of file