import axios from 'axios'; import {format, parse} from 'date-fns'; import React, {useEffect, useRef, useState} from 'react'; import {Link, useParams} from 'react-router-dom'; import * as Icon from 'react-feather'; import { formatDateAbsolute, formatNumber, parseStateTimeseries, } from '../utils/common-functions'; import {MAP_META, STATE_CODES} from '../constants'; import Clusters from './clusters'; import DeltaBarGraph from './deltabargraph'; import Level from './level'; import MapExplorer from './mapexplorer'; import Minigraph from './minigraph'; import TimeSeries from './timeseries'; import Footer from './footer'; function State(props) { const mapRef = useRef(); const tsRef = useRef(); const {stateCode} = useParams(); const [fetched, setFetched] = useState(false); const [timeseries, setTimeseries] = useState({}); const [graphOption, setGraphOption] = useState(1); const [timeseriesMode, setTimeseriesMode] = useState(true); const [timeseriesLogMode, setTimeseriesLogMode] = useState(false); const [stateData, setStateData] = useState({}); const [testData, setTestData] = useState({}); const [sources, setSources] = useState({}); const [districtData, setDistrictData] = useState({}); const [stateName] = useState(STATE_CODES[stateCode]); useEffect(() => { if (fetched === false) { getState(stateCode); } }, [fetched, stateCode]); const getState = async (code) => { try { const [ {data: dataResponse}, {data: stateDistrictWiseResponse}, {data: statesDailyResponse}, {data: stateTestResponse}, {data: sourcesResponse}, ] = await Promise.all([ axios.get('https://api.covid19india.org/data.json'), axios.get('https://api.covid19india.org/state_district_wise.json'), axios.get('https://api.covid19india.org/states_daily.json'), axios.get('https://api.covid19india.org/state_test_data.json'), axios.get('https://api.covid19india.org/sources_list.json'), ]); const states = dataResponse.statewise; setStateData(states.find((s) => s.statecode === code)); const ts = parseStateTimeseries(statesDailyResponse)[code]; setTimeseries(ts); const statesTests = stateTestResponse.states_tested_data; const name = STATE_CODES[code]; setTestData( statesTests.filter( (obj) => obj.state === name && obj.totaltested !== '' ) ); setDistrictData({ [name]: stateDistrictWiseResponse[name], }); const sourceList = sourcesResponse.sources_list; setSources(sourceList.filter((state) => state.statecode === code)); setFetched(true); } catch (err) { console.log(err); } }; const testObjLast = testData[testData.length - 1]; return (
Home/ {stateName}

{stateName}

Last Updated on{' '} {Object.keys(stateData).length ? formatDateAbsolute(stateData.lastupdatedtime) : ''}
Tested

{formatNumber(testObjLast?.totaltested)}

{!isNaN(parse(testObjLast?.updatedon, 'dd/MM/yyyy', new Date())) ? `As of ${format( parse(testObjLast?.updatedon, 'dd/MM/yyyy', new Date()), 'dd MMM' )}` : ''}
{'per '} {testObjLast?.totaltested && ( source )}
{fetched && } {fetched && } {fetched && ( { } )} {fetched && (
Awaiting district details for{' '} {districtData[stateName]?.districtData['Unknown'] ?.confirmed || '0'}{' '} cases
Data collected from sources{' '} {Object.keys(sources[0]).map((key) => { if (key.match('source') && sources[0][key] !== '') { const num = key.match(/\d+/); return ( {num > 1 ? ',' : ''} {num} ); } return null; })}
)}
{fetched && (

Top districts

{Object.keys(districtData[stateName].districtData) .slice(0, 6) .sort( (a, b) => districtData[stateName].districtData[b].confirmed - districtData[stateName].districtData[a].confirmed ) .map((district, index) => { return (

{ districtData[stateName].districtData[district] .confirmed }

{district}
{ districtData[stateName].districtData[district] .delta.confirmed }
); })}
{ }

Go to essentials

{ setGraphOption(1); }} >

Cumulative

{ setGraphOption(2); }} >

Daily

{ setTimeseriesMode(!timeseriesMode); }} />
{ setTimeseriesLogMode(!timeseriesLogMode); }} />
)}

Clusters