From de27c4297da82cb951a0d030f45b37fa9e2f7b05 Mon Sep 17 00:00:00 2001 From: Matchu Date: Fri, 23 Apr 2021 16:05:52 -0700 Subject: [PATCH] Stop reverting PosePickerSupport with cache data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oops, making changes in PosePickerSupport would sometimes trigger a re-fetch in PosePicker. Specifically, PosePicker needs some fields that PosePickerSupport doesn't, so changing the canonical poses causes PosePicker to ask for stuff again—which will probably serve a SWR'd cached version that doesn't reflect the Support changes! Here, we update the PosePickerSupport query to prefetch all the fields the PosePicker _would_ want for any of these poses. That way, if we swap in a new one as the canonical appearance for a pose, there's no refetch needed, and therefore no risk of hitting a stale cache. --- src/app/WardrobePage/PosePicker.js | 18 +++++++++++------- .../WardrobePage/support/PosePickerSupport.js | 6 ++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/app/WardrobePage/PosePicker.js b/src/app/WardrobePage/PosePicker.js index a46eb99..a98dcda 100644 --- a/src/app/WardrobePage/PosePicker.js +++ b/src/app/WardrobePage/PosePicker.js @@ -578,13 +578,7 @@ function usePoses(speciesId, colorId, selectedPose) { } } - fragment PetAppearanceForPosePicker on PetAppearance { - id - bodyId - pose - ...PetAppearanceForOutfitPreview - } - ${petAppearanceFragment} + ${petAppearanceForPosePickerFragment} `, { variables: { speciesId, colorId }, onError: (e) => console.error(e) } ); @@ -668,6 +662,16 @@ function getTransform(poseInfo) { return transformsByBodyId.default; } +export const petAppearanceForPosePickerFragment = gql` + fragment PetAppearanceForPosePicker on PetAppearance { + id + bodyId + pose + ...PetAppearanceForOutfitPreview + } + ${petAppearanceFragment} +`; + const transformsByBodyId = { "93": "translate(-5px, 10px) scale(2.8)", "106": "translate(-8px, 8px) scale(2.9)", diff --git a/src/app/WardrobePage/support/PosePickerSupport.js b/src/app/WardrobePage/support/PosePickerSupport.js index d98598d..e9d440d 100644 --- a/src/app/WardrobePage/support/PosePickerSupport.js +++ b/src/app/WardrobePage/support/PosePickerSupport.js @@ -23,6 +23,7 @@ import HangerSpinner from "../../components/HangerSpinner"; import Metadata, { MetadataLabel, MetadataValue } from "./Metadata"; import useSupport from "./useSupport"; import AppearanceLayerSupportModal from "./AppearanceLayerSupportModal"; +import { petAppearanceForPosePickerFragment } from "../PosePicker"; function PosePickerSupport({ speciesId, @@ -64,11 +65,16 @@ function PosePickerSupport({ id name } + + # Also, anything the PosePicker wants that isn't here, so that we + # don't have to refetch anything when we change the canonical poses. + ...PetAppearanceForPosePicker } ...CanonicalPetAppearances } ${canonicalPetAppearancesFragment} + ${petAppearanceForPosePickerFragment} `, { variables: { speciesId, colorId } } );