From 86815dc22bf17a54599ca71296266f213d822cb1 Mon Sep 17 00:00:00 2001 From: wil Date: Tue, 18 Jun 2024 19:29:45 -0400 Subject: [PATCH] fix/loadingbar-untangled-from-signals (#492) quick fix Co-authored-by: wil --- app/components/reusable/LoadingBar.tsx | 81 ++++--------------- app/components/reusable/index.ts | 3 +- app/pages/PageEnigma/PageEnigma.tsx | 9 +-- .../PageEnigma/comps/EditorLoadingBar.tsx | 16 ++++ app/signals/loadingBar.ts | 2 - 5 files changed, 34 insertions(+), 77 deletions(-) create mode 100644 app/pages/PageEnigma/comps/EditorLoadingBar.tsx diff --git a/app/components/reusable/LoadingBar.tsx b/app/components/reusable/LoadingBar.tsx index 290ee849ad..ba0e2101f7 100644 --- a/app/components/reusable/LoadingBar.tsx +++ b/app/components/reusable/LoadingBar.tsx @@ -1,8 +1,5 @@ -import { useEffect, useRef, useState } from "react"; import { Transition } from "@headlessui/react"; import { twMerge } from "tailwind-merge"; -import { loadingBarData, loadingBarIsShowing } from "~/signals/loadingBar"; -import { useSignals } from "@preact/signals-react/runtime"; interface LoadingBarProps { id?: string; @@ -11,72 +8,23 @@ interface LoadingBarProps { progressBackgroundClassName?: string; progressClassName?: string; variant?: string; + show?: boolean; + progressData: { + progress: number; + label?: string; + message?: string; + }; } export const LoadingBar = ({ wrapperClassName: propsWrapperClassName, innerWrapperClassName: propsInnerWrapperClassName, progressBackgroundClassName: propsProgressBackgroundClassName, progressClassName: propsProgressClassName, + progressData, variant = "primary", + show = true, ...rest }: LoadingBarProps) => { - useSignals(); - const [progress, setProgress] = useState( - loadingBarData.value.progress, - ); - const [loop, setLoop] = useState(null); - - const useFakeTimer = useRef(0); - if (useFakeTimer.current !== loadingBarData.value.useFakeTimer) { - useFakeTimer.current = loadingBarData.value.useFakeTimer; - if (loop) { - clearInterval(loop); - } - if (loadingBarData.value.useFakeTimer > 0) { - if (loadingBarData.value.useFakeTimer >= 30000) { - // this math produce 96 cuts so the progress bar updates more - setLoop( - setInterval( - function step() { - setProgress((curr) => { - if (curr < 96) { - return curr + 3; - } else { - clearInterval(loop!); - return curr; - } - }); - }, - Math.round(loadingBarData.value.useFakeTimer / 96) * 3, - ), - ); - } - // this math produce less cuts if useFakeTimer predicts - // a shorter load time, shorter than 30s - const progressPerInterval = loadingBarData.value.useFakeTimer / 500; - setLoop( - setInterval(function step() { - setProgress((curr) => { - if (curr + progressPerInterval < 96) { - return curr + progressPerInterval; - } else if (curr < 96 && curr + progressPerInterval >= 96) { - return 96; - } else { - clearInterval(loop!); - return curr; - } - }); - }, 300), - ); - } - } - - const oldProgress = useRef(loadingBarData.value.progress); - if (oldProgress.current !== loadingBarData.value.progress) { - oldProgress.current = loadingBarData.value.progress; - setProgress(loadingBarData.value.progress); - } - function getVariantClassNames(variant: string) { switch (variant) { case "secondary": { @@ -110,25 +58,24 @@ export const LoadingBar = ({ return ( + {...rest} + >
- {loadingBarData.value.label && ( - - )} + {progressData.label && }
- {loadingBarData.value.message &&

{loadingBarData.value.message}

} + {progressData.message &&

{progressData.message}

}
); diff --git a/app/components/reusable/index.ts b/app/components/reusable/index.ts index e255871e74..67f1848846 100644 --- a/app/components/reusable/index.ts +++ b/app/components/reusable/index.ts @@ -12,6 +12,7 @@ export * from "./Gravatar"; export * from "./Input"; //need to decouple hotkey signal export * from "./InputVector"; //need to decouple hotkey signal export * from "./ListDropdown"; +export * from "./LoadingBar"; export * from "./Pagination"; export * from "./Pill"; export * from "./Select"; //Select's onChange type should be generic @@ -22,8 +23,6 @@ export * from "./TransitionDialogue"; //need to decouple hotkey signal export * from "./Typography"; export * from "./WaveformPlayer"; -//TODO: need to rewrite to decouple from signal -export * from "./LoadingBar"; //TODO: need to rewrite because it's against tailwind export * from "./LoadingDots"; //TODO: need to rewrite because it's not using fontawesome diff --git a/app/pages/PageEnigma/PageEnigma.tsx b/app/pages/PageEnigma/PageEnigma.tsx index 0f7bda0869..86df132043 100644 --- a/app/pages/PageEnigma/PageEnigma.tsx +++ b/app/pages/PageEnigma/PageEnigma.tsx @@ -4,10 +4,11 @@ import { DragComponent } from "~/pages/PageEnigma/comps/DragComponent/DragCompon import { EngineProvider } from "./contexts/EngineContext"; import { useActiveJobs } from "~/hooks"; import { useQueueHandler } from "./hooks/useQueueHandler"; -import { ErrorDialog, LoadingBar } from "~/components"; +import { ErrorDialog } from "~/components"; import { GenerateModals } from "~/pages/PageEnigma/comps/GenerateModals/GenerateModals"; import { useBackgroundLoadingMedia } from "~/hooks/useBackgroundLoadingMedia"; +import { EditorLoadingBar } from "./comps/EditorLoadingBar"; export const PageEnigma = ({ sceneToken }: { sceneToken?: string }) => { useActiveJobs(); useBackgroundLoadingMedia(); @@ -23,11 +24,7 @@ export const PageEnigma = ({ sceneToken }: { sceneToken?: string }) => { - + ); }; diff --git a/app/pages/PageEnigma/comps/EditorLoadingBar.tsx b/app/pages/PageEnigma/comps/EditorLoadingBar.tsx new file mode 100644 index 0000000000..0e857a7cf6 --- /dev/null +++ b/app/pages/PageEnigma/comps/EditorLoadingBar.tsx @@ -0,0 +1,16 @@ +import { useSignals } from "@preact/signals-react/runtime"; +import { loadingBarData, loadingBarIsShowing } from "~/signals"; + +import { LoadingBar } from "~/components"; +export const EditorLoadingBar = () => { + useSignals(); + return ( + + ); +}; diff --git a/app/signals/loadingBar.ts b/app/signals/loadingBar.ts index ca8e649f79..2637c45383 100644 --- a/app/signals/loadingBar.ts +++ b/app/signals/loadingBar.ts @@ -5,10 +5,8 @@ export const loadingBarData = signal<{ label: string; message: string; progress: number; - useFakeTimer: number; }>({ label: "", progress: 5, message: "Loading Editor Engine 🦊", - useFakeTimer: 0, });