diff --git a/src/app/WardrobePage/OutfitControls.js b/src/app/WardrobePage/OutfitControls.js
index 39ebd03..58794d6 100644
--- a/src/app/WardrobePage/OutfitControls.js
+++ b/src/app/WardrobePage/OutfitControls.js
@@ -13,29 +13,24 @@ import {
UnorderedList,
useClipboard,
useToast,
- VStack,
} from "@chakra-ui/react";
import {
ArrowBackIcon,
CheckIcon,
DownloadIcon,
LinkIcon,
- WarningTwoIcon,
} from "@chakra-ui/icons";
-import { FaBug } from "react-icons/fa";
import { MdPause, MdPlayArrow } from "react-icons/md";
import { Link } from "react-router-dom";
import { getBestImageUrlForLayer } from "../components/OutfitPreview";
-import HTML5Badge, {
- GlitchBadgeLayout,
- layerUsesHTML5,
-} from "../components/HTML5Badge";
+import HTML5Badge, { layerUsesHTML5 } from "../components/HTML5Badge";
import PosePicker from "./PosePicker";
import SpeciesColorPicker from "../components/SpeciesColorPicker";
import { loadImage, useLocalStorage } from "../util";
import useCurrentUser from "../components/useCurrentUser";
import useOutfitAppearance from "../components/useOutfitAppearance";
+import OutfitKnownGlitchesBadge from "./OutfitKnownGlitchesBadge";
/**
* OutfitControls is the set of controls layered over the outfit preview, to
@@ -280,114 +275,6 @@ function OutfitHTML5Badge({ appearance }) {
);
}
-function OutfitKnownGlitchesBadge({ appearance }) {
- const glitchMessages = [];
-
- const { petAppearance, items } = appearance;
-
- // Look for UC/Invisible/etc incompatibilities that we hid, that we should
- // just mark Incompatible someday instead.
- //
- // HACK: Most of this logic is copy-pasted from `useOutfitAppearance`.
- const petOccupiedZoneIds = new Set(
- petAppearance?.layers.map((l) => l.zone.id)
- );
- const petRestrictedZoneIds = new Set(
- petAppearance?.restrictedZones.map((z) => z.id)
- );
- const petOccupiedOrRestrictedZoneIds = new Set([
- ...petOccupiedZoneIds,
- ...petRestrictedZoneIds,
- ]);
- for (const item of items) {
- const itemHasZoneRestrictedByPet = item.appearance.layers.some(
- (layer) =>
- layer.bodyId !== "0" &&
- petOccupiedOrRestrictedZoneIds.has(layer.zone.id)
- );
- if (itemHasZoneRestrictedByPet) {
- glitchMessages.push(
-
- {item.name} isn't actually compatible with this special pet.
- We're still showing the old behavior, which is to hide the item.
- Fixing this is in our todo list, sorry for the confusing UI!
-
- );
- }
- }
-
- // Look for items with the OFFICIAL_SVG_IS_INCORRECT glitch.
- for (const item of items) {
- const itemHasOfficialSvgIsIncorrect = item.appearance.layers.some((l) =>
- (l.knownGlitches || []).includes("OFFICIAL_SVG_IS_INCORRECT")
- );
- if (itemHasOfficialSvgIsIncorrect) {
- glitchMessages.push(
-
- There's a glitch in the art for {item.name} that prevents us
- from showing the full-scale SVG version of the image. Instead, we're
- showing a PNG, which might look a bit blurry on larger screens.
-
- );
- }
- }
-
- // Look for Dyeworks items that aren't converted yet.
- for (const item of items) {
- const itemIsDyeworks = item.name.includes("Dyeworks");
- const itemIsConverted = item.appearance.layers.every(layerUsesHTML5);
-
- if (itemIsDyeworks && !itemIsConverted) {
- glitchMessages.push(
-
- {item.name} isn't converted to HTML5 yet, and our Classic DTI
- code often shows old Dyeworks items in the wrong color. Once it's
- converted, we'll display it correctly!
-
- );
- }
- }
-
- // Check whether the pet has OFFICIAL_SVG_IS_INCORRECT.
- const petLayers = petAppearance?.layers || [];
- for (const layer of petLayers) {
- const layerHasOfficialSvgIsIncorrect = (layer.knownGlitches || []).includes(
- "OFFICIAL_SVG_IS_INCORRECT"
- );
- if (layerHasOfficialSvgIsIncorrect) {
- glitchMessages.push(
-
- There's a glitch in the art for this pet's {layer.zone.label}{" "}
- zone that prevents us from showing the full-scale SVG version of the
- image. Instead, we're showing a PNG, which might look a bit blurry on
- larger screens.
-
- );
- }
- }
-
- if (glitchMessages.length === 0) {
- return null;
- }
-
- return (
-
-
- Known glitches
-
- {glitchMessages}
-
- }
- >
-
-
-
- );
-}
-
/**
* BackButton takes you back home, or to Your Outfits if this outfit is yours.
*/
diff --git a/src/app/WardrobePage/OutfitKnownGlitchesBadge.js b/src/app/WardrobePage/OutfitKnownGlitchesBadge.js
new file mode 100644
index 0000000..f3d3cf0
--- /dev/null
+++ b/src/app/WardrobePage/OutfitKnownGlitchesBadge.js
@@ -0,0 +1,115 @@
+import React from "react";
+import { Box, VStack } from "@chakra-ui/react";
+import { WarningTwoIcon } from "@chakra-ui/icons";
+import { FaBug } from "react-icons/fa";
+import { GlitchBadgeLayout, layerUsesHTML5 } from "../components/HTML5Badge";
+
+function OutfitKnownGlitchesBadge({ appearance }) {
+ const glitchMessages = [];
+
+ const { petAppearance, items } = appearance;
+
+ // Look for UC/Invisible/etc incompatibilities that we hid, that we should
+ // just mark Incompatible someday instead.
+ //
+ // HACK: Most of this logic is copy-pasted from `useOutfitAppearance`.
+ const petOccupiedZoneIds = new Set(
+ petAppearance?.layers.map((l) => l.zone.id)
+ );
+ const petRestrictedZoneIds = new Set(
+ petAppearance?.restrictedZones.map((z) => z.id)
+ );
+ const petOccupiedOrRestrictedZoneIds = new Set([
+ ...petOccupiedZoneIds,
+ ...petRestrictedZoneIds,
+ ]);
+ for (const item of items) {
+ const itemHasZoneRestrictedByPet = item.appearance.layers.some(
+ (layer) =>
+ layer.bodyId !== "0" &&
+ petOccupiedOrRestrictedZoneIds.has(layer.zone.id)
+ );
+ if (itemHasZoneRestrictedByPet) {
+ glitchMessages.push(
+
+ {item.name} isn't actually compatible with this special pet.
+ We're still showing the old behavior, which is to hide the item.
+ Fixing this is in our todo list, sorry for the confusing UI!
+
+ );
+ }
+ }
+
+ // Look for items with the OFFICIAL_SVG_IS_INCORRECT glitch.
+ for (const item of items) {
+ const itemHasOfficialSvgIsIncorrect = item.appearance.layers.some((l) =>
+ (l.knownGlitches || []).includes("OFFICIAL_SVG_IS_INCORRECT")
+ );
+ if (itemHasOfficialSvgIsIncorrect) {
+ glitchMessages.push(
+
+ There's a glitch in the art for {item.name} that prevents us
+ from showing the full-scale SVG version of the image. Instead, we're
+ showing a PNG, which might look a bit blurry on larger screens.
+
+ );
+ }
+ }
+
+ // Look for Dyeworks items that aren't converted yet.
+ for (const item of items) {
+ const itemIsDyeworks = item.name.includes("Dyeworks");
+ const itemIsConverted = item.appearance.layers.every(layerUsesHTML5);
+
+ if (itemIsDyeworks && !itemIsConverted) {
+ glitchMessages.push(
+
+ {item.name} isn't converted to HTML5 yet, and our Classic DTI
+ code often shows old Dyeworks items in the wrong color. Once it's
+ converted, we'll display it correctly!
+
+ );
+ }
+ }
+
+ // Check whether the pet has OFFICIAL_SVG_IS_INCORRECT.
+ const petLayers = petAppearance?.layers || [];
+ for (const layer of petLayers) {
+ const layerHasOfficialSvgIsIncorrect = (layer.knownGlitches || []).includes(
+ "OFFICIAL_SVG_IS_INCORRECT"
+ );
+ if (layerHasOfficialSvgIsIncorrect) {
+ glitchMessages.push(
+
+ There's a glitch in the art for this pet's {layer.zone.label}{" "}
+ zone that prevents us from showing the full-scale SVG version of the
+ image. Instead, we're showing a PNG, which might look a bit blurry on
+ larger screens.
+
+ );
+ }
+ }
+
+ if (glitchMessages.length === 0) {
+ return null;
+ }
+
+ return (
+
+
+ Known glitches
+
+ {glitchMessages}
+
+ }
+ >
+
+
+
+ );
+}
+
+export default OutfitKnownGlitchesBadge;