From 99a9bcf45e9ed2c84423f6d7148573e60ef76c7c Mon Sep 17 00:00:00 2001 From: Sendou <38327916+Sendouc@users.noreply.github.com> Date: Sun, 7 Jun 2020 14:10:44 +0300 Subject: [PATCH] link to analyzer --- .../components/analyzer/BuildAnalyzerPage.tsx | 27 ++++++++++++++++-- .../src/components/builds/BuildCard.tsx | 28 +++++++++---------- .../src/components/builds/BuildCardStats.tsx | 17 +++++++++++ .../src/components/elements/Modal.tsx | 11 ++++---- frontend-react/tsconfig.json | 1 + 5 files changed, 60 insertions(+), 24 deletions(-) diff --git a/frontend-react/src/components/analyzer/BuildAnalyzerPage.tsx b/frontend-react/src/components/analyzer/BuildAnalyzerPage.tsx index 45780491e..fa480be3a 100644 --- a/frontend-react/src/components/analyzer/BuildAnalyzerPage.tsx +++ b/frontend-react/src/components/analyzer/BuildAnalyzerPage.tsx @@ -1,9 +1,9 @@ import { Box, FormLabel, Switch, Badge, Flex } from "@chakra-ui/core" -import { RouteComponentProps } from "@reach/router" +import { RouteComponentProps, useLocation } from "@reach/router" import React, { useState, useContext } from "react" import { Helmet } from "react-helmet-async" import useAbilityEffects from "../../hooks/useAbilityEffects" -import { Build, Ability } from "../../types" +import { Build, Ability, Weapon } from "../../types" import PageHeader from "../common/PageHeader" import WeaponSelector from "../common/WeaponSelector" import BuildStats from "./BuildStats" @@ -20,7 +20,8 @@ const defaultBuild: Partial = { const BuildAnalyzerPage: React.FC = () => { const { themeColor, grayWithShade } = useContext(MyThemeContext) - const [build, setBuild] = useState>(defaultBuild) + const location = useLocation() + const [build, setBuild] = useState>(getBuildFromUrl()) const [otherBuild, setOtherBuild] = useState>(defaultBuild) const [showOther, setShowOther] = useState(false) const [showNotActualProgress, setShowNotActualProgress] = useState(false) @@ -43,6 +44,26 @@ const BuildAnalyzerPage: React.FC = () => { otherLde ) + function getBuildFromUrl() { + const buildToReturn = { ...defaultBuild } + const decoded = new URLSearchParams(location.search) + + for (const [key, value] of decoded) { + switch (key) { + case "weapon": + buildToReturn.weapon = value as Weapon + break + case "headgear": + case "clothing": + case "shoes": + const abilityKey = key as "headgear" | "clothing" | "shoes" + buildToReturn[abilityKey] = value.split(",") as any + } + } + + return buildToReturn + } + return ( <> diff --git a/frontend-react/src/components/builds/BuildCard.tsx b/frontend-react/src/components/builds/BuildCard.tsx index fb14d2689..7f3954285 100644 --- a/frontend-react/src/components/builds/BuildCard.tsx +++ b/frontend-react/src/components/builds/BuildCard.tsx @@ -1,28 +1,26 @@ -import React, { useState, useContext, useEffect } from "react" import { - Image, - IconButton, - Popover, - PopoverTrigger, - PopoverContent, - PopoverBody, - Button, Box, BoxProps, - PseudoBox, Flex, + IconButton, + Image, + Popover, + PopoverBody, + PopoverContent, + PopoverTrigger, + PseudoBox, } from "@chakra-ui/core" import { Link } from "@reach/router" - -import WeaponImage from "../common/WeaponImage" +import React, { useContext, useEffect, useState } from "react" +import { FiBarChart2, FiEdit, FiInfo, FiTarget } from "react-icons/fi" import { top500 } from "../../assets/imageImports" -import ViewSlots from "./ViewSlots" -import ViewAP from "./ViewAP" import MyThemeContext from "../../themeContext" import { Build } from "../../types" -import Gears from "./Gears" -import { FiEdit, FiInfo, FiTarget, FiBarChart2 } from "react-icons/fi" +import WeaponImage from "../common/WeaponImage" import BuildCardStats from "./BuildCardStats" +import Gears from "./Gears" +import ViewAP from "./ViewAP" +import ViewSlots from "./ViewSlots" interface BuildCardProps { build: Build diff --git a/frontend-react/src/components/builds/BuildCardStats.tsx b/frontend-react/src/components/builds/BuildCardStats.tsx index 1eb73fb64..e2859e9c1 100644 --- a/frontend-react/src/components/builds/BuildCardStats.tsx +++ b/frontend-react/src/components/builds/BuildCardStats.tsx @@ -4,6 +4,9 @@ import { Build } from "../../types" import BuildStats from "../analyzer/BuildStats" import Modal from "../elements/Modal" import ViewSlots from "./ViewSlots" +import Button from "../elements/Button" +import { Link } from "@reach/router" +import { RiTShirtAirLine } from "react-icons/ri" interface BuildCardStatsProps { build: Build @@ -25,6 +28,15 @@ const BuildCardStats: React.FC = ({ shoes: ["UNKNOWN", "UNKNOWN", "UNKNOWN", "UNKNOWN"], } const zeroExplanations = useAbilityEffects(defaultBuild, unchangingBonus, 0) + + const strippedBuild = { + weapon: build.weapon, + headgear: build.headgear, + clothing: build.clothing, + shoes: build.shoes, + } + const queryParam = new URLSearchParams(strippedBuild as any).toString() + return ( = ({ closeOnOutsideClick > + + +