From 5cbfb775e5dcd30e89c328cbfd7c808f6c6b8f8f Mon Sep 17 00:00:00 2001 From: wil Date: Thu, 5 Sep 2024 11:43:35 -0400 Subject: [PATCH] contextual loading bar updates, and better sandbox tester alignments --- src/components/ui/LoadingBar.tsx | 58 +++---- src/pages/sandbox.tsx | 160 ------------------ .../sandbox/ContextualLoadingBarForm.tsx | 140 +++++++++++++++ src/pages/sandbox/ContextualToolbarForm.tsx | 46 +++++ src/pages/sandbox/index.tsx | 24 +++ src/signals/konvaContextuals/loadingBar.ts | 7 + src/signals/konvaContextuals/type.ts | 12 +- 7 files changed, 247 insertions(+), 200 deletions(-) delete mode 100644 src/pages/sandbox.tsx create mode 100644 src/pages/sandbox/ContextualLoadingBarForm.tsx create mode 100644 src/pages/sandbox/ContextualToolbarForm.tsx create mode 100644 src/pages/sandbox/index.tsx diff --git a/src/components/ui/LoadingBar.tsx b/src/components/ui/LoadingBar.tsx index f0ba563f16..000f829d4b 100644 --- a/src/components/ui/LoadingBar.tsx +++ b/src/components/ui/LoadingBar.tsx @@ -2,13 +2,7 @@ import { Transition } from "@headlessui/react"; import { twMerge } from "tailwind-merge"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { - faCheck, - faArrowRotateLeft, - faStop, -} from "@fortawesome/pro-thin-svg-icons"; - -import { Spinner } from "./Spinner"; +import { faArrowRotateLeft } from "@fortawesome/pro-thin-svg-icons"; export enum LoadingBarStatus { IDLE = "idle", @@ -16,7 +10,8 @@ export enum LoadingBarStatus { SUCCESS = "success", ERROR = "error", } -export type LoadingBarProps = { +export interface LoadingBarProps { + width?: number; progress: number; status: LoadingBarStatus; isShowing: boolean; @@ -26,9 +21,10 @@ export type LoadingBarProps = { }; message?: string; onRetry?: () => void; -}; +} export const LoadingBar = ({ + width, progress = 0, position, status, @@ -41,9 +37,10 @@ export const LoadingBar = ({
-
-
-
-
- {message && ( - - )} +
+
-
- {status === LoadingBarStatus.IDLE && ( - - )} - {status === LoadingBarStatus.LOADING && ( - - )} - {status === LoadingBarStatus.SUCCESS && ( - - )} + +
+ {message && } + {status === LoadingBarStatus.ERROR && ( - )} diff --git a/src/pages/sandbox.tsx b/src/pages/sandbox.tsx deleted file mode 100644 index a7195d6e18..0000000000 --- a/src/pages/sandbox.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { useRef } from "react"; -import { useSignals } from "@preact/signals-react/runtime"; - -import { ContextualToolbarImage } from "~/components/features/KonvaContainer/ContextualToolbarImage"; -import { ContextualLoadingBar } from "~/components/features/KonvaContainer/ContextualLoadingBar"; - -import { LoadingBarStatus } from "~/components/ui/LoadingBar"; - -import { - imageToolbar, - loadingBar, - ContextualLoadingBarProps, -} from "~/signals/konvaContextuals"; - -export const Sandbox = () => { - const xImageToolbarRef = useRef(0); - const yImageToolbarRef = useRef(0); - - const loadingBarPropsRef = useRef({ - position: { - x: 0, - y: 0, - }, - progress: 0, - status: LoadingBarStatus.IDLE, - isShowing: true, - message: "Loading...", - }); - - return ( -
- - -

Sandbox

-
-
- - { - xImageToolbarRef.current = parseInt(e.target.value); - }} - /> - { - yImageToolbarRef.current = parseInt(e.target.value); - }} - /> - - -
- -
-
- - { - loadingBarPropsRef.current.position.x = parseInt( - e.target.value, - ); - }} - /> - { - loadingBarPropsRef.current.position.y = parseInt( - e.target.value, - ); - }} - /> - { - loadingBarPropsRef.current.progress = parseInt(e.target.value); - }} - /> - - - -
- -
-
-
- ); -}; - -const PrintLoadingBarProps = () => { - useSignals(); - return ( - <> -

Status: {loadingBar.signal.value.status}

-

Message: {loadingBar.signal.value.message}

- - ); -}; diff --git a/src/pages/sandbox/ContextualLoadingBarForm.tsx b/src/pages/sandbox/ContextualLoadingBarForm.tsx new file mode 100644 index 0000000000..53d97af811 --- /dev/null +++ b/src/pages/sandbox/ContextualLoadingBarForm.tsx @@ -0,0 +1,140 @@ +import { useState } from "react"; +import { Menu, MenuButton, MenuItem, MenuItems } from "@headlessui/react"; +import { faChevronDown } from "@fortawesome/pro-thin-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { + loadingBar, + ContextualLoadingBarProps, +} from "~/signals/konvaContextuals"; + +import { Input, Button, LoadingBarStatus } from "~/components/ui"; +type LoadingBarPropsType = Omit; +export const ContextualLoadingBarForm = () => { + const [loadingBarProps, setLoadingBarProps] = useState({ + status: LoadingBarStatus.IDLE, + progress: 0, + position: { + x: 0, + y: 0, + }, + }); + + return ( +
+ +
+ + { + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + position: { + ...curr.position, + x: parseInt(e.target.value) || 0, + }, + })); + }} + /> + + { + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + position: { + ...curr.position, + y: parseInt(e.target.value) || 0, + }, + })); + }} + /> + + { + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + width: parseInt(e.target.value) || undefined, + })); + }} + /> + + { + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + progress: parseInt(e.target.value) || 0, + })); + }} + /> +
+
+ + { + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + message: e.target.value || undefined, + })); + }} + /> + + + +
+ + +
+
+ + {Object.values(LoadingBarStatus).map((status, idx) => { + return ( + +
{ + setLoadingBarProps((curr: LoadingBarPropsType) => ({ + ...curr, + status: status, + })); + }} + > + {status} +
+
+ ); + })} +
+
+
+ +
+ + + +
+
+ ); +}; diff --git a/src/pages/sandbox/ContextualToolbarForm.tsx b/src/pages/sandbox/ContextualToolbarForm.tsx new file mode 100644 index 0000000000..93a7a96f20 --- /dev/null +++ b/src/pages/sandbox/ContextualToolbarForm.tsx @@ -0,0 +1,46 @@ +import { useState } from "react"; + +import { Input, Button } from "~/components/ui"; +import { imageToolbar } from "~/signals"; + +export const ContextualToolbarForm = () => { + const [x, setX] = useState(0); + const [y, setY] = useState(0); + + return ( +
+
+ + { + setX(parseInt(e.target.value) || 0); + }} + /> + { + setY(parseInt(e.target.value) || 0); + }} + /> + + +
+
+ ); +}; diff --git a/src/pages/sandbox/index.tsx b/src/pages/sandbox/index.tsx new file mode 100644 index 0000000000..951cbaa4ec --- /dev/null +++ b/src/pages/sandbox/index.tsx @@ -0,0 +1,24 @@ +import { ContextualToolbarImage } from "~/components/features/KonvaContainer/ContextualToolbarImage"; +import { ContextualLoadingBar } from "~/components/features/KonvaContainer/ContextualLoadingBar"; + +import { useRenderCounter } from "~/hooks/useRenderCounter"; + +import { ContextualToolbarForm } from "./ContextualToolbarForm"; +import { ContextualLoadingBarForm } from "./ContextualLoadingBarForm"; + +export const Sandbox = () => { + useRenderCounter("Sandbox"); + + return ( +
+ + + +
+

Sandbox

+ + +
+
+ ); +}; diff --git a/src/signals/konvaContextuals/loadingBar.ts b/src/signals/konvaContextuals/loadingBar.ts index ab3f082f46..5de54d0ba6 100644 --- a/src/signals/konvaContextuals/loadingBar.ts +++ b/src/signals/konvaContextuals/loadingBar.ts @@ -19,6 +19,7 @@ export const loadingBar = { update(props: Omit) { loadingBarSignal.value = { ...loadingBarSignal.value, + isShowing: true, ...props, }; }, @@ -28,6 +29,12 @@ export const loadingBar = { message, }; }, + updateWidth(width: number) { + loadingBarSignal.value = { + ...loadingBarSignal.value, + width, + }; + }, updatePosition(position: { x: number; y: number }) { loadingBarSignal.value = { ...loadingBarSignal.value, diff --git a/src/signals/konvaContextuals/type.ts b/src/signals/konvaContextuals/type.ts index c7a8f543e9..30e8dcbb5e 100644 --- a/src/signals/konvaContextuals/type.ts +++ b/src/signals/konvaContextuals/type.ts @@ -1,5 +1,4 @@ -import { LoadingBarStatus } from "~/components/ui"; -export { LoadingBarStatus }; +import { LoadingBarProps } from "~/components/ui"; export interface ContextualUi { position: { @@ -9,9 +8,6 @@ export interface ContextualUi { isShowing: boolean; } -export interface ContextualLoadingBarProps extends ContextualUi { - progress: number; - status: LoadingBarStatus; - message?: string; - onRetry?: () => void; -} +export interface ContextualLoadingBarProps + extends ContextualUi, + Omit {}