import { Stack, Typography, styled, useTheme } from "@mui/material"; import Image from "next/image"; import { AccessToken, Planet, PlanetInfo, PlanetInfoUniverse } from "@/types"; import { Api } from "@/esi-api"; import { forwardRef, useEffect, useState } from "react"; import { DateTime } from "luxon"; import { EXTRACTOR_TYPE_IDS } from "@/const"; import Countdown from "react-countdown"; import PinsCanvas3D from "./PinsCanvas3D"; import Slide from "@mui/material/Slide"; import { TransitionProps } from "@mui/material/transitions"; import Dialog from "@mui/material/Dialog"; import AppBar from "@mui/material/AppBar"; import Toolbar from "@mui/material/Toolbar"; import IconButton from "@mui/material/IconButton"; import CloseIcon from "@mui/icons-material/Close"; import Button from "@mui/material/Button"; const StackItem = styled(Stack)(({ theme }) => ({ ...theme.typography.body2, padding: 0, margin: "0 !important", textAlign: "left", justifyContent: "flex-start", alignItems: "center", })); const Transition = forwardRef(function Transition( props: TransitionProps & { children: React.ReactElement; }, ref: React.Ref ) { return ; }); export const PlanetCard = ({ planet, character, }: { planet: Planet; character: AccessToken; }) => { const [planetInfo, setPlanetInfo] = useState( undefined ); const [planetInfoUniverse, setPlanetInfoUniverse] = useState< PlanetInfoUniverse | undefined >(undefined); const [planetRenderOpen, setPlanetRenderOpen] = useState(false); const theme = useTheme(); const handle3DrenderOpen = () => { setPlanetRenderOpen(true); }; const handle3DrenderClose = () => { setPlanetRenderOpen(false); }; const extractors = (planetInfo && planetInfo.pins .filter((p) => EXTRACTOR_TYPE_IDS.some((e) => e === p.type_id)) .map((p) => p.expiry_time)) ?? []; const getPlanet = async ( character: AccessToken, planet: Planet ): Promise => { const api = new Api(); const planetInfo = ( await api.v3.getCharactersCharacterIdPlanetsPlanetId( character.character.characterId, planet.planet_id, { token: character.access_token, } ) ).data; return planetInfo; }; const getPlanetUniverse = async ( planet: Planet ): Promise => { const api = new Api(); const planetInfo = ( await api.v1.getUniversePlanetsPlanetId(planet.planet_id) ).data; return planetInfo; }; const timeColor = (extractorDate: string | undefined): string => { if (!extractorDate) return "red"; const dateExtractor = DateTime.fromISO(extractorDate); const dateNow = DateTime.now(); if (dateExtractor < dateNow) return "red"; if (dateExtractor.minus({ hours: 24 }) < dateNow) return "yellow"; return "green"; }; useEffect(() => { getPlanet(character, planet).then(setPlanetInfo); getPlanetUniverse(planet).then(setPlanetInfoUniverse); }, [planet, character]); return ( {extractors.some((e) => { if (!e) return true; const dateExtractor = DateTime.fromISO(e); const dateNow = DateTime.now(); return dateExtractor < dateNow; }) && ( )}
{planetInfoUniverse?.name} L{planet.upgrade_level}
{extractors.map((e, idx) => { return ( {e ? ( ) : ( "STOPPED" )} ); })} {planetInfoUniverse?.name}
); };