diff --git a/frontend-react/src/components/builds/BuildsBrowser.js b/frontend-react/src/components/builds/BuildsBrowser.js index 93232ab31..b3d555f26 100644 --- a/frontend-react/src/components/builds/BuildsBrowser.js +++ b/frontend-react/src/components/builds/BuildsBrowser.js @@ -2,10 +2,11 @@ import React, { useEffect } from "react" import { useQuery } from "@apollo/react-hooks" import { useQueryParams, StringParam, NumberParam } from "use-query-params" import WeaponDropdown from "../common/WeaponDropdown" +import useLocalStorage from "../../hooks/useLocalStorage" import { searchForBuildsByWeapon } from "../../graphql/queries/searchForBuildsByWeapon" import Loading from "../common/Loading" import Error from "../common/Error" -import { Card, Header, Pagination, Icon } from "semantic-ui-react" +import { Card, Header, Pagination, Icon, Radio } from "semantic-ui-react" import BuildCard from "../common/BuildCard" import WpnImage from "../common/WpnImage" @@ -18,6 +19,10 @@ const BuildsBrowser = () => { const { data, error, loading } = useQuery(searchForBuildsByWeapon, { variables: query, }) + const [prefersAPView, setPrefersAPView] = useLocalStorage( + "prefersAPView", + false + ) useEffect(() => { document.title = weapon @@ -39,6 +44,16 @@ const BuildsBrowser = () => { <>Latest Builds )} + {!weapon && ( +
+ setPrefersAPView(!prefersAPView)} + toggle + label="Default to Ability Point view" + /> +
+ )} setQuery({ page: activePage })} @@ -51,7 +66,12 @@ const BuildsBrowser = () => { {data.searchForBuildsByWeapon.builds.map(build => { return ( - + ) })} diff --git a/frontend-react/src/components/common/BuildCard.js b/frontend-react/src/components/common/BuildCard.js index 850496fb3..c80c36157 100644 --- a/frontend-react/src/components/common/BuildCard.js +++ b/frontend-react/src/components/common/BuildCard.js @@ -1,4 +1,4 @@ -import React, { useState } from "react" +import React, { useState, useEffect } from "react" import { Card, Image, Icon, Popup, Button } from "semantic-ui-react" import { useHistory } from "react-router-dom" import english_internal from "../../utils/english_internal.json" @@ -21,13 +21,18 @@ const BuildCard = ({ setHeadgear, setClothing, setShoes, + prefersAPView, showWeapon = true, showDescription = true, }) => { const [showEdit, setShowEdit] = useState(false) - const [apView, setApView] = useState(false) + const [apView, setApView] = useState(prefersAPView ? prefersAPView : false) const history = useHistory() + useEffect(() => { + setApView(prefersAPView) + }, [prefersAPView]) + if (showEdit) { return (
diff --git a/frontend-react/src/components/user/BuildTab.js b/frontend-react/src/components/user/BuildTab.js index 78b897d35..98f058cf5 100644 --- a/frontend-react/src/components/user/BuildTab.js +++ b/frontend-react/src/components/user/BuildTab.js @@ -11,6 +11,7 @@ import AddBuildForm from "./AddBuildForm" import BuildCard from "../common/BuildCard" import Loading from "../common/Loading" import Error from "../common/Error" +import useLocalStorage from "../../hooks/useLocalStorage" const BuildTab = ({ user, userViewed }) => { const { data, error, loading } = useQuery(searchForBuilds, { @@ -19,6 +20,7 @@ const BuildTab = ({ user, userViewed }) => { const [errorMsg, setErrorMsg] = useState(null) const [successMsg, setSuccessMsg] = useState(null) const [showForm, setShowForm] = useState(false) + const [prefersAPView] = useLocalStorage("prefersAPView", false) const handleError = error => { setErrorMsg(error.message) @@ -141,6 +143,7 @@ const BuildTab = ({ user, userViewed }) => { editBuildFunction={editBuildFunction} setSuccessMsg={setSuccessMsg} buildsArray={data.searchForBuilds} + prefersAPView={prefersAPView} /> ))} {data.searchForBuilds.length === 0 diff --git a/frontend-react/src/hooks/useLocalStorage.js b/frontend-react/src/hooks/useLocalStorage.js new file mode 100644 index 000000000..53310ec8d --- /dev/null +++ b/frontend-react/src/hooks/useLocalStorage.js @@ -0,0 +1,29 @@ +import { useState } from "react" + +//https://usehooks.com/useLocalStorage/ +function useLocalStorage(key, initialValue) { + const [storedValue, setStoredValue] = useState(() => { + try { + const item = window.localStorage.getItem(key) + return item ? JSON.parse(item) : initialValue + } catch (error) { + console.error(error) + return initialValue + } + }) + + const setValue = value => { + try { + const valueToStore = + value instanceof Function ? value(storedValue) : value + setStoredValue(valueToStore) + window.localStorage.setItem(key, JSON.stringify(valueToStore)) + } catch (error) { + console.error(error) + } + } + + return [storedValue, setValue] +} + +export default useLocalStorage