From 9fb20915e890be0993c15ad19b59105b78cf8f12 Mon Sep 17 00:00:00 2001 From: dan Date: Sat, 13 Apr 2024 12:19:21 +0100 Subject: [Embed] Don't reuse DOM when changing embed (#3530) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Don't reuse DOM when changing embed * add skeleton loading state 💀 * autoselect text --------- Co-authored-by: Samuel Newman --- bskyembed/src/screens/landing.tsx | 49 ++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 9 deletions(-) (limited to 'bskyembed/src/screens/landing.tsx') diff --git a/bskyembed/src/screens/landing.tsx b/bskyembed/src/screens/landing.tsx index f10100baa..0c5508935 100644 --- a/bskyembed/src/screens/landing.tsx +++ b/bskyembed/src/screens/landing.tsx @@ -1,7 +1,7 @@ import '../index.css' import {AppBskyFeedDefs, AppBskyFeedPost, AtUri, BskyAgent} from '@atproto/api' -import {Fragment, h, render} from 'preact' +import {h, render} from 'preact' import {useEffect, useMemo, useRef, useState} from 'preact/hooks' import arrowBottom from '../../assets/arrowBottom_stroke2_corner0_rounded.svg' @@ -30,6 +30,7 @@ render(, root) function LandingPage() { const [uri, setUri] = useState('') const [error, setError] = useState(null) + const [loading, setLoading] = useState(false) const [thread, setThread] = useState( null, ) @@ -37,6 +38,8 @@ function LandingPage() { useEffect(() => { void (async () => { setError(null) + setThread(null) + setLoading(true) try { let atUri = DEFAULT_URI @@ -98,6 +101,8 @@ function LandingPage() { } catch (err) { console.error(err) setError(err instanceof Error ? err.message : 'Invalid Bluesky URL') + } finally { + setLoading(false) } })() }, [uri]) @@ -122,16 +127,39 @@ function LandingPage() { -
- {uri && !error && thread && } - {!error && thread && } - {error && ( -
-

{error}

+ {loading ? ( + + ) : ( +
+ {!error && thread && uri && } + {!error && thread && } + {error && ( +
+

{error}

+
+ )} +
+ )} + + ) +} + +function Skeleton() { + return ( + +
+
+
+
+
+
- )} +
+
+
+
- + ) } @@ -195,6 +223,9 @@ function Snippet({thread}: {thread: AppBskyFeedDefs.ThreadViewPost}) { className="border rounded-lg py-3 w-full px-4" readOnly autoFocus + onFocus={() => { + ref.current?.select() + }} />