From f904d33a94ad501d0d4e2008d88d311840b3d38a Mon Sep 17 00:00:00 2001 From: Jakub Biesiada Date: Fri, 2 Apr 2021 21:02:34 +0200 Subject: [PATCH] refactor: replace state with group state --- src/useShortenUrl.ts | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/src/useShortenUrl.ts b/src/useShortenUrl.ts index 6301990..f7b6af6 100644 --- a/src/useShortenUrl.ts +++ b/src/useShortenUrl.ts @@ -1,33 +1,44 @@ -import { useState, useEffect } from 'react'; +import { useEffect } from 'react'; import { useSafeContext } from 'react-safe-context-hooks'; +import { useGroupState } from 'react-group-state'; import { BitlyLink } from 'bitly/dist/types'; import { ShortenUrlContext } from './context'; +interface State { + readonly loading: boolean; + readonly error: Error | null; + readonly data?: BitlyLink; +} + export const useShortenUrl = (url: string) => { - const [loading, setLoading] = useState(false); - const [error, setError] = useState(null); - const [data, setData] = useState(); + const [state, setState] = useGroupState({ + loading: false, + error: null, + data: undefined, + }); const { bitly } = useSafeContext(ShortenUrlContext); useEffect(() => { const shorten = async () => { - setLoading(true); + setState({ loading: true }); try { - setData(await bitly.shorten(url)); - - setLoading(false); + setState({ + data: await bitly.shorten(url), + loading: false, + }); } catch (err) { - setError(err); - - setLoading(false); + setState({ + error: err, + loading: false, + }); } }; shorten(); - }, [bitly, url]); + }, [bitly, setState, url]); - return { loading, error, data }; + return state; };