From 351b9a88bd103f96c9f36f9b1ab8a8c1fd902bcc Mon Sep 17 00:00:00 2001 From: Matchu Date: Sun, 13 Sep 2020 04:12:14 -0700 Subject: [PATCH] use corner spinner on item page, and fix delay bug Fading the whole preview to a black overlay for the loading state was feeling aggressive, especially since loading delay wasn't working correctly! In this change, I fix loading delay, and I add a nice subtle "corner" variant for outfit preview spinners :) --- src/app/HomePage.js | 2 +- src/app/ItemPage.js | 2 + src/app/components/HangerSpinner.js | 7 +-- src/app/components/OutfitPreview.js | 81 +++++++++++++++++------------ 4 files changed, 51 insertions(+), 41 deletions(-) diff --git a/src/app/HomePage.js b/src/app/HomePage.js index 9be51750..c5ebb958 100644 --- a/src/app/HomePage.js +++ b/src/app/HomePage.js @@ -40,7 +40,7 @@ function HomePage() { colorId={previewState?.colorId} pose={previewState?.pose} wornItemIds={[]} - loadingDelay="1.5s" + loadingDelayMs={1500} placeholder={ diff --git a/src/app/components/HangerSpinner.js b/src/app/components/HangerSpinner.js index 4505493a..04efe560 100644 --- a/src/app/components/HangerSpinner.js +++ b/src/app/components/HangerSpinner.js @@ -86,12 +86,7 @@ function HangerSpinner({ size = "md", ...props }) { `} {...props} > - + ); diff --git a/src/app/components/OutfitPreview.js b/src/app/components/OutfitPreview.js index 26af72d5..d87fdbb1 100644 --- a/src/app/components/OutfitPreview.js +++ b/src/app/components/OutfitPreview.js @@ -1,7 +1,7 @@ import React from "react"; import { css, cx } from "emotion"; import { CSSTransition, TransitionGroup } from "react-transition-group"; -import { Box, Flex, DarkMode, Text } from "@chakra-ui/core"; +import { Box, DarkMode, Flex, Text } from "@chakra-ui/core"; import { WarningIcon } from "@chakra-ui/icons"; import HangerSpinner from "./HangerSpinner"; @@ -25,10 +25,11 @@ function OutfitPreview({ speciesId, colorId, pose, - appearanceId = null, wornItemIds, + appearanceId = null, placeholder, - loadingDelay, + loadingDelayMs, + spinnerVariant, }) { const { loading, error, visibleLayers } = useOutfitAppearance({ speciesId, @@ -55,15 +56,14 @@ function OutfitPreview({ } return ( - - - + ); } @@ -75,13 +75,18 @@ export function OutfitLayers({ loading, visibleLayers, placeholder, - loadingDelay = "0.5s", + loadingDelayMs = 500, + spinnerVariant = "overlay", doAnimations = false, }) { - const [isMounted, setIsMounted] = React.useState(false); - React.useLayoutEffect(() => { - setIsMounted(true); - }, []); + const [loadingDelayHasPassed, setLoadingDelayHasPassed] = React.useState( + false + ); + + React.useEffect(() => { + const t = setTimeout(() => setLoadingDelayHasPassed(true), loadingDelayMs); + return () => clearTimeout(t); + }, [loadingDelayMs]); return ( - - + {spinnerVariant === "overlay" && ( + <> + + {/* Against the dark overlay, use the Dark Mode spinner. */} + + + + + )} + {spinnerVariant === "corner" && ( + + )} );