import React, { useState } from "react" import { useQuery, useMutation } from "@apollo/react-hooks" import { Button, Message, Card } from "semantic-ui-react" import { weapons } from "../../utils/lists" import { addBuild } from "../../graphql/mutations/addBuild" import { searchForBuilds } from "../../graphql/queries/searchForBuilds" import { deleteBuild } from "../../graphql/mutations/deleteBuild" import { updateBuild } from "../../graphql/mutations/updateBuild" 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, { variables: { discord_id: userViewed.discord_id }, }) 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) setTimeout(() => { setErrorMsg(null) }, 10000) } const [addBuildMutation] = useMutation(addBuild, { onError: handleError, refetchQueries: [ { query: searchForBuilds, variables: { discord_id: userViewed.discord_id }, }, ], }) const [deleteBuildMutation] = useMutation(deleteBuild, { onError: handleError, refetchQueries: [ { query: searchForBuilds, variables: { discord_id: userViewed.discord_id }, }, ], }) const [editBuildMutation] = useMutation(updateBuild, { onError: handleError, refetchQueries: [ { query: searchForBuilds, variables: { discord_id: userViewed.discord_id }, }, ], }) const deleteBuildById = async ({ id, title, weapon }) => { await deleteBuildMutation({ variables: { id }, }) const buildTitle = title ? title : `${weapon} build` setSuccessMsg(`Successfully deleted ${buildTitle}`) window.scrollTo(0, 0) setTimeout(() => { setSuccessMsg(null) }, 10000) } const editBuildById = async build => { await editBuildMutation({ variables: { ...build }, }) setSuccessMsg("Build successfully updated!") window.scrollTo(0, 0) setTimeout(() => { setSuccessMsg(null) }, 10000) } if (loading) return if (error) return const removeBuildFunction = user && user.discord_id === userViewed.discord_id ? deleteBuildById : null const editBuildFunction = user && user.discord_id === userViewed.discord_id ? editBuildById : null return (
{successMsg && !errorMsg && (
)} {errorMsg && (
)}
{data.searchForBuilds.length >= 100 && user && user.discord_id === userViewed.discord_id ? "Looks like you have 100 buids. Insane flex. Delete a build before adding a new one." : null} {!user || user.discord_id !== userViewed.discord_id || data.searchForBuilds.length >= 100 ? null : (
{data.searchForBuilds .sort((a, b) => weapons.indexOf(a.weapon) - weapons.indexOf(b.weapon)) .map(b => ( ))} {data.searchForBuilds.length === 0 ? "So far this user has no builds!" : null}
) } export default BuildTab