Refactor into WardrobePreviewAndControls component
I'm moving the preview and controls stuff closer together in the code, to clear the way to change `OutfitPreview` into a `useOutfitPreview` hook here!
This commit is contained in:
parent
d2240cc5c5
commit
2403bd813a
3 changed files with 40 additions and 41 deletions
|
@ -1,7 +1,7 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { Box, Grid, useColorModeValue } from "@chakra-ui/react";
|
import { Box, Grid, useColorModeValue } from "@chakra-ui/react";
|
||||||
|
|
||||||
function WardrobePageLayout({ preview, controls, itemsAndSearch }) {
|
function WardrobePageLayout({ previewAndControls, itemsAndSearch }) {
|
||||||
const itemsAndSearchBackground = useColorModeValue("white", "gray.900");
|
const itemsAndSearchBackground = useColorModeValue("white", "gray.900");
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -32,13 +32,8 @@ function WardrobePageLayout({ preview, controls, itemsAndSearch }) {
|
||||||
height="100%"
|
height="100%"
|
||||||
width="100%"
|
width="100%"
|
||||||
>
|
>
|
||||||
<Box gridArea="previewAndControls" bg="gray.900" pos="relative">
|
<Box gridArea="previewAndControls" bg="gray.900" position="relative">
|
||||||
<Box position="absolute" top="0" bottom="0" left="0" right="0">
|
{previewAndControls}
|
||||||
{preview}
|
|
||||||
</Box>
|
|
||||||
<Box position="absolute" top="0" bottom="0" left="0" right="0">
|
|
||||||
{controls}
|
|
||||||
</Box>
|
|
||||||
</Box>
|
</Box>
|
||||||
<Box gridArea="itemsAndSearch" bg={itemsAndSearchBackground}>
|
<Box gridArea="itemsAndSearch" bg={itemsAndSearchBackground}>
|
||||||
{itemsAndSearch}
|
{itemsAndSearch}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import React from "react";
|
import React from "react";
|
||||||
|
import { Box, DarkMode } from "@chakra-ui/react";
|
||||||
import gql from "graphql-tag";
|
import gql from "graphql-tag";
|
||||||
import { useQuery } from "@apollo/client";
|
import { useQuery } from "@apollo/client";
|
||||||
|
|
||||||
|
@ -7,14 +8,22 @@ import OutfitThumbnail, {
|
||||||
getOutfitThumbnailRenderSize,
|
getOutfitThumbnailRenderSize,
|
||||||
} from "../components/OutfitThumbnail";
|
} from "../components/OutfitThumbnail";
|
||||||
import OutfitPreview from "../components/OutfitPreview";
|
import OutfitPreview from "../components/OutfitPreview";
|
||||||
import { DarkMode } from "@chakra-ui/react";
|
import { loadable } from "../util";
|
||||||
|
|
||||||
function WardrobeOutfitPreview({
|
const OutfitControls = loadable(() => import("./OutfitControls"));
|
||||||
|
|
||||||
|
function WardrobePreviewAndControls({
|
||||||
isLoading,
|
isLoading,
|
||||||
outfitState,
|
outfitState,
|
||||||
onChangeHasAnimations,
|
dispatchToOutfit,
|
||||||
}) {
|
}) {
|
||||||
|
// Whether the current outfit preview has animations. Determines whether we
|
||||||
|
// show the play/pause button.
|
||||||
|
const [hasAnimations, setHasAnimations] = React.useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
<Box position="absolute" top="0" bottom="0" left="0" right="0">
|
||||||
<DarkMode>
|
<DarkMode>
|
||||||
<OutfitPreview
|
<OutfitPreview
|
||||||
isLoading={isLoading}
|
isLoading={isLoading}
|
||||||
|
@ -23,10 +32,19 @@ function WardrobeOutfitPreview({
|
||||||
pose={outfitState.pose}
|
pose={outfitState.pose}
|
||||||
appearanceId={outfitState.appearanceId}
|
appearanceId={outfitState.appearanceId}
|
||||||
wornItemIds={outfitState.wornItemIds}
|
wornItemIds={outfitState.wornItemIds}
|
||||||
onChangeHasAnimations={onChangeHasAnimations}
|
onChangeHasAnimations={setHasAnimations}
|
||||||
backdrop={<OutfitThumbnailIfCached outfitId={outfitState.id} />}
|
backdrop={<OutfitThumbnailIfCached outfitId={outfitState.id} />}
|
||||||
/>
|
/>
|
||||||
</DarkMode>
|
</DarkMode>
|
||||||
|
</Box>
|
||||||
|
<Box position="absolute" top="0" bottom="0" left="0" right="0">
|
||||||
|
<OutfitControls
|
||||||
|
outfitState={outfitState}
|
||||||
|
dispatchToOutfit={dispatchToOutfit}
|
||||||
|
showAnimationControls={hasAnimations}
|
||||||
|
/>
|
||||||
|
</Box>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,4 +101,4 @@ function OutfitThumbnailIfCached({ outfitId }) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default WardrobeOutfitPreview;
|
export default WardrobePreviewAndControls;
|
|
@ -7,11 +7,8 @@ import SupportOnly from "./support/SupportOnly";
|
||||||
import useOutfitState, { OutfitStateContext } from "./useOutfitState";
|
import useOutfitState, { OutfitStateContext } from "./useOutfitState";
|
||||||
import { usePageTitle } from "../util";
|
import { usePageTitle } from "../util";
|
||||||
import WardrobePageLayout from "./WardrobePageLayout";
|
import WardrobePageLayout from "./WardrobePageLayout";
|
||||||
import WardrobeOutfitPreview from "./WardrobeOutfitPreview";
|
import WardrobePreviewAndControls from "./WardrobePreviewAndControls";
|
||||||
|
|
||||||
const OutfitControls = loadable(() =>
|
|
||||||
import(/* webpackPreload: true */ "./OutfitControls")
|
|
||||||
);
|
|
||||||
const WardrobeDevHacks = loadable(() => import("./WardrobeDevHacks"));
|
const WardrobeDevHacks = loadable(() => import("./WardrobeDevHacks"));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,10 +26,6 @@ function WardrobePage() {
|
||||||
const toast = useToast();
|
const toast = useToast();
|
||||||
const { loading, error, outfitState, dispatchToOutfit } = useOutfitState();
|
const { loading, error, outfitState, dispatchToOutfit } = useOutfitState();
|
||||||
|
|
||||||
// Whether the current outfit preview has animations. Determines whether we
|
|
||||||
// show the play/pause button.
|
|
||||||
const [hasAnimations, setHasAnimations] = React.useState(false);
|
|
||||||
|
|
||||||
usePageTitle(outfitState.name || "Untitled outfit");
|
usePageTitle(outfitState.name || "Untitled outfit");
|
||||||
|
|
||||||
// TODO: I haven't found a great place for this error UI yet, and this case
|
// TODO: I haven't found a great place for this error UI yet, and this case
|
||||||
|
@ -60,18 +53,11 @@ function WardrobePage() {
|
||||||
<WardrobeDevHacks />
|
<WardrobeDevHacks />
|
||||||
</SupportOnly>
|
</SupportOnly>
|
||||||
<WardrobePageLayout
|
<WardrobePageLayout
|
||||||
preview={
|
previewAndControls={
|
||||||
<WardrobeOutfitPreview
|
<WardrobePreviewAndControls
|
||||||
isLoading={loading}
|
isLoading={loading}
|
||||||
outfitState={outfitState}
|
|
||||||
onChangeHasAnimations={setHasAnimations}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
controls={
|
|
||||||
<OutfitControls
|
|
||||||
outfitState={outfitState}
|
outfitState={outfitState}
|
||||||
dispatchToOutfit={dispatchToOutfit}
|
dispatchToOutfit={dispatchToOutfit}
|
||||||
showAnimationControls={hasAnimations}
|
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
itemsAndSearch={
|
itemsAndSearch={
|
||||||
|
|
Loading…
Reference in a new issue