date-fns#max JavaScript Examples
The following examples show how to use
date-fns#max.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: DateRangePicker.js From discovery-mobile-ui with MIT License | 6 votes |
DateRangePicker = ({ timelineProps, dateRangeFilter, updateDateRangeFilter }) => {
const { minimumDate, maximumDate } = timelineProps;
if (!minimumDate || !maximumDate) {
return null;
}
const { dateRangeStart = minimumDate, dateRangeEnd = maximumDate } = dateRangeFilter;
return (
<View style={styles.container}>
<DatePicker
activeDate={dateRangeStart}
minimumDate={minimumDate}
maximumDate={min([maximumDate, dateRangeEnd])}
onDateSelect={(d) => updateDateRangeFilter('dateRangeStart', startOfDay(d))}
/>
<View><Text style={styles.dash}>-</Text></View>
<DatePicker
activeDate={dateRangeEnd}
minimumDate={max([minimumDate, dateRangeStart])}
maximumDate={maximumDate}
onDateSelect={(d) => updateDateRangeFilter('dateRangeEnd', endOfDay(d))}
/>
</View>
);
}
Example #2
Source File: Actions.js From covid19india-react with MIT License | 5 votes |
Actions = ({date, setDate, dates, lastUpdatedDate}) => {
const [showUpdates, setShowUpdates] = useState(false);
const [newUpdate, setNewUpdate] = useLocalStorage('newUpdate', false);
const [lastViewedLog, setLastViewedLog] = useLocalStorage('lastViewedLog', 0);
const [isTimelineMode, setIsTimelineMode] = useState(false);
const {data: updates} = useSWR(`${API_DOMAIN}/updatelog/log.json`, fetcher, {
refreshInterval: API_REFRESH_INTERVAL,
});
useEffect(() => {
if (updates !== undefined) {
const lastTimestamp = updates.slice().reverse()[0].timestamp * 1000;
if (lastTimestamp !== lastViewedLog) {
setNewUpdate(true);
setLastViewedLog(lastTimestamp);
}
}
}, [lastViewedLog, updates, setLastViewedLog, setNewUpdate]);
const maxLastUpdatedDate = useMemo(() => {
return formatDateObjIndia(
max(
[lastViewedLog, lastUpdatedDate]
.filter((date) => date)
.map((date) => parseIndiaDate(date))
)
);
}, [lastViewedLog, lastUpdatedDate]);
return (
<>
<ActionsPanel
{...{
lastUpdatedDate: maxLastUpdatedDate,
newUpdate,
isTimelineMode,
setIsTimelineMode,
showUpdates,
date,
setDate,
dates,
setNewUpdate,
setShowUpdates,
}}
/>
{showUpdates && (
<Suspense fallback={<div />}>
<Updates {...{updates}} />
</Suspense>
)}
</>
);
}
Example #3
Source File: Home.js From covid19india-react with MIT License | 4 votes |
function Home() {
const [regionHighlighted, setRegionHighlighted] = useState({
stateCode: 'TT',
districtName: null,
});
const [anchor, setAnchor] = useLocalStorage('anchor', null);
const [expandTable, setExpandTable] = useLocalStorage('expandTable', false);
const [mapStatistic, setMapStatistic] = useSessionStorage(
'mapStatistic',
'active'
);
const [mapView, setMapView] = useLocalStorage('mapView', MAP_VIEWS.DISTRICTS);
const [date, setDate] = useState('');
const location = useLocation();
const {data: timeseries} = useStickySWR(
`${DATA_API_ROOT}/timeseries.min.json`,
fetcher,
{
revalidateOnMount: true,
refreshInterval: API_REFRESH_INTERVAL,
}
);
const {data} = useStickySWR(
`${DATA_API_ROOT}/data${date ? `-${date}` : ''}.min.json`,
fetcher,
{
revalidateOnMount: true,
refreshInterval: API_REFRESH_INTERVAL,
}
);
const homeRightElement = useRef();
const isVisible = useIsVisible(homeRightElement);
const {width} = useWindowSize();
const hideDistrictData = date !== '' && date < DISTRICT_START_DATE;
const hideDistrictTestData =
date === '' ||
date >
formatISO(
addDays(parseIndiaDate(DISTRICT_TEST_END_DATE), TESTED_EXPIRING_DAYS),
{representation: 'date'}
);
const hideVaccinated =
getStatistic(data?.['TT'], 'total', 'vaccinated') === 0;
const lastDataDate = useMemo(() => {
const updatedDates = [
data?.['TT']?.meta?.date,
data?.['TT']?.meta?.tested?.date,
data?.['TT']?.meta?.vaccinated?.date,
].filter((date) => date);
return updatedDates.length > 0
? formatISO(max(updatedDates.map((date) => parseIndiaDate(date))), {
representation: 'date',
})
: null;
}, [data]);
const lastUpdatedDate = useMemo(() => {
const updatedDates = Object.keys(data || {})
.map((stateCode) => data?.[stateCode]?.meta?.['last_updated'])
.filter((datetime) => datetime);
return updatedDates.length > 0
? formatDateObjIndia(
max(updatedDates.map((datetime) => parseIndiaDate(datetime)))
)
: null;
}, [data]);
const noDistrictDataStates = useMemo(
() =>
// Heuristic: All cases are in Unknown
Object.entries(data || {}).reduce((res, [stateCode, stateData]) => {
res[stateCode] = !!(
stateData?.districts &&
stateData.districts?.[UNKNOWN_DISTRICT_KEY] &&
PRIMARY_STATISTICS.every(
(statistic) =>
getStatistic(stateData, 'total', statistic) ===
getStatistic(
stateData.districts[UNKNOWN_DISTRICT_KEY],
'total',
statistic
)
)
);
return res;
}, {}),
[data]
);
const noRegionHighlightedDistrictData =
regionHighlighted?.stateCode &&
regionHighlighted?.districtName &&
regionHighlighted.districtName !== UNKNOWN_DISTRICT_KEY &&
noDistrictDataStates[regionHighlighted.stateCode];
return (
<>
<Helmet>
<title>Coronavirus Outbreak in India - covid19india.org</title>
<meta
name="title"
content="Coronavirus Outbreak in India: Latest Map and Case Count"
/>
</Helmet>
<div className="Home">
<div className={classnames('home-left', {expanded: expandTable})}>
<div className="header">
<Suspense fallback={<div />}>
<Search />
</Suspense>
{!data && !timeseries && <div style={{height: '60rem'}} />}
<>
{!timeseries && <div style={{minHeight: '61px'}} />}
{timeseries && (
<Suspense fallback={<div style={{minHeight: '61px'}} />}>
<Actions
{...{
date,
setDate,
dates: Object.keys(timeseries['TT']?.dates),
lastUpdatedDate,
}}
/>
</Suspense>
)}
</>
</div>
<div style={{position: 'relative', marginTop: '1rem'}}>
{data && (
<Suspense fallback={<div style={{height: '50rem'}} />}>
{width >= 769 && !expandTable && (
<MapSwitcher {...{mapStatistic, setMapStatistic}} />
)}
<Level data={data['TT']} />
</Suspense>
)}
<>
{!timeseries && <div style={{height: '123px'}} />}
{timeseries && (
<Suspense fallback={<div style={{height: '123px'}} />}>
<Minigraphs
timeseries={timeseries['TT']?.dates}
{...{date}}
/>
</Suspense>
)}
</>
</div>
{!hideVaccinated && <VaccinationHeader data={data['TT']} />}
{data && (
<Suspense fallback={<TableLoader />}>
<Table
{...{
data,
regionHighlighted,
setRegionHighlighted,
expandTable,
setExpandTable,
hideDistrictData,
hideDistrictTestData,
hideVaccinated,
lastDataDate,
noDistrictDataStates,
}}
/>
</Suspense>
)}
</div>
<div
className={classnames('home-right', {expanded: expandTable})}
ref={homeRightElement}
style={{minHeight: '4rem'}}
>
{(isVisible || location.hash) && (
<>
{data && (
<div
className={classnames('map-container', {
expanded: expandTable,
stickied:
anchor === 'mapexplorer' || (expandTable && width >= 769),
})}
>
<Suspense fallback={<div style={{height: '50rem'}} />}>
<StateHeader data={data['TT']} stateCode={'TT'} />
<MapExplorer
{...{
stateCode: 'TT',
data,
mapStatistic,
setMapStatistic,
mapView,
setMapView,
regionHighlighted,
setRegionHighlighted,
anchor,
setAnchor,
expandTable,
lastDataDate,
hideDistrictData,
hideDistrictTestData,
hideVaccinated,
noRegionHighlightedDistrictData,
}}
/>
</Suspense>
</div>
)}
{timeseries && (
<Suspense fallback={<div style={{height: '50rem'}} />}>
<TimeseriesExplorer
stateCode="TT"
{...{
timeseries,
date,
regionHighlighted,
setRegionHighlighted,
anchor,
setAnchor,
expandTable,
hideVaccinated,
noRegionHighlightedDistrictData,
}}
/>
</Suspense>
)}
</>
)}
</div>
</div>
{isVisible && (
<Suspense fallback={<div />}>
<Footer />
</Suspense>
)}
</>
);
}
Example #4
Source File: State.js From covid19india-react with MIT License | 4 votes |
function State() {
const {t} = useTranslation();
const stateCode = useParams().stateCode.toUpperCase();
const [mapStatistic, setMapStatistic] = useSessionStorage(
'mapStatistic',
'active'
);
const [showAllDistricts, setShowAllDistricts] = useState(false);
const [regionHighlighted, setRegionHighlighted] = useState({
stateCode: stateCode,
districtName: null,
});
const [delta7Mode, setDelta7Mode] = useState(false);
useEffect(() => {
if (regionHighlighted.stateCode !== stateCode) {
setRegionHighlighted({
stateCode: stateCode,
districtName: null,
});
setShowAllDistricts(false);
}
}, [regionHighlighted.stateCode, stateCode]);
const {data: timeseries, error: timeseriesResponseError} = useSWR(
`${DATA_API_ROOT}/timeseries-${stateCode}.min.json`,
fetcher,
{
revalidateOnMount: true,
refreshInterval: 100000,
}
);
const {data} = useSWR(`${DATA_API_ROOT}/data.min.json`, fetcher, {
revalidateOnMount: true,
refreshInterval: 100000,
});
const stateData = data?.[stateCode];
const toggleShowAllDistricts = () => {
setShowAllDistricts(!showAllDistricts);
};
const handleSort = (districtNameA, districtNameB) => {
const districtA = stateData.districts[districtNameA];
const districtB = stateData.districts[districtNameB];
return (
getStatistic(districtB, 'total', mapStatistic) -
getStatistic(districtA, 'total', mapStatistic)
);
};
const gridRowCount = useMemo(() => {
if (!stateData) return;
const gridColumnCount = window.innerWidth >= 540 ? 3 : 2;
const districtCount = stateData?.districts
? Object.keys(stateData.districts).filter(
(districtName) => districtName !== 'Unknown'
).length
: 0;
const gridRowCount = Math.ceil(districtCount / gridColumnCount);
return gridRowCount;
}, [stateData]);
const stateMetaElement = useRef();
const isStateMetaVisible = useIsVisible(stateMetaElement);
const trail = useMemo(() => {
const styles = [];
[0, 0, 0, 0].map((element, index) => {
styles.push({
animationDelay: `${index * 250}ms`,
});
return null;
});
return styles;
}, []);
const lookback = showAllDistricts ? (window.innerWidth >= 540 ? 10 : 8) : 6;
const lastDataDate = useMemo(() => {
const updatedDates = [
stateData?.meta?.date,
stateData?.meta?.tested?.date,
stateData?.meta?.vaccinated?.date,
].filter((date) => date);
return updatedDates.length > 0
? formatISO(max(updatedDates.map((date) => parseIndiaDate(date))), {
representation: 'date',
})
: null;
}, [stateData]);
const primaryStatistic = MAP_STATISTICS.includes(mapStatistic)
? mapStatistic
: 'confirmed';
const noDistrictData = useMemo(() => {
// Heuristic: All cases are in Unknown
return !!(
stateData?.districts &&
stateData.districts?.[UNKNOWN_DISTRICT_KEY] &&
PRIMARY_STATISTICS.every(
(statistic) =>
getStatistic(stateData, 'total', statistic) ===
getStatistic(
stateData.districts[UNKNOWN_DISTRICT_KEY],
'total',
statistic
)
)
);
}, [stateData]);
const statisticConfig = STATISTIC_CONFIGS[primaryStatistic];
const noRegionHighlightedDistrictData =
regionHighlighted?.districtName &&
regionHighlighted.districtName !== UNKNOWN_DISTRICT_KEY &&
noDistrictData;
const districts = Object.keys(
((!noDistrictData || !statisticConfig.hasPrimary) &&
stateData?.districts) ||
{}
);
return (
<>
<Helmet>
<title>
Coronavirus Outbreak in {STATE_NAMES[stateCode]} - covid19india.org
</title>
<meta
name="title"
content={`Coronavirus Outbreak in ${STATE_NAMES[stateCode]}: Latest Map and Case Count`}
/>
</Helmet>
<div className="State">
<div className="state-left">
<StateHeader data={stateData} stateCode={stateCode} />
<div style={{position: 'relative'}}>
<MapSwitcher {...{mapStatistic, setMapStatistic}} />
<Level data={stateData} />
<Minigraphs
timeseries={timeseries?.[stateCode]?.dates}
{...{stateCode}}
forceRender={!!timeseriesResponseError}
/>
</div>
{stateData?.total?.vaccinated1 && (
<VaccinationHeader data={stateData} />
)}
{data && (
<Suspense fallback={<div style={{minHeight: '50rem'}} />}>
<MapExplorer
{...{
stateCode,
data,
regionHighlighted,
setRegionHighlighted,
mapStatistic,
setMapStatistic,
lastDataDate,
delta7Mode,
setDelta7Mode,
noRegionHighlightedDistrictData,
noDistrictData,
}}
></MapExplorer>
</Suspense>
)}
<span ref={stateMetaElement} />
{isStateMetaVisible && data && (
<Suspense fallback={<div />}>
<StateMeta
{...{
stateCode,
data,
}}
timeseries={timeseries?.[stateCode]?.dates}
/>
</Suspense>
)}
</div>
<div className="state-right">
<>
<div className="district-bar">
<div
className={classnames('district-bar-top', {
expanded: showAllDistricts,
})}
>
<div className="district-bar-left">
<h2
className={classnames(primaryStatistic, 'fadeInUp')}
style={trail[0]}
>
{t('Top districts')}
</h2>
<div
className={`districts fadeInUp ${
showAllDistricts ? 'is-grid' : ''
}`}
style={
showAllDistricts
? {
gridTemplateRows: `repeat(${gridRowCount}, 2rem)`,
...trail[1],
}
: trail[1]
}
>
{districts
.filter((districtName) => districtName !== 'Unknown')
.sort((a, b) => handleSort(a, b))
.slice(0, showAllDistricts ? undefined : 5)
.map((districtName) => {
const total = getStatistic(
stateData.districts[districtName],
'total',
primaryStatistic
);
const delta = getStatistic(
stateData.districts[districtName],
'delta',
primaryStatistic
);
return (
<div key={districtName} className="district">
<h2>{formatNumber(total)}</h2>
<h5>{t(districtName)}</h5>
{primaryStatistic !== 'active' && (
<div className="delta">
<h6 className={primaryStatistic}>
{delta > 0
? '\u2191' + formatNumber(delta)
: ''}
</h6>
</div>
)}
</div>
);
})}
</div>
</div>
<div className="district-bar-right fadeInUp" style={trail[2]}>
{timeseries &&
(primaryStatistic === 'confirmed' ||
primaryStatistic === 'deceased') && (
<div className="happy-sign">
{Object.keys(timeseries[stateCode]?.dates || {})
.slice(-lookback)
.every(
(date) =>
getStatistic(
timeseries[stateCode].dates[date],
'delta',
primaryStatistic
) === 0
) && (
<div
className={`alert ${
primaryStatistic === 'confirmed' ? 'is-green' : ''
}`}
>
<SmileyIcon />
<div className="alert-right">
No new {primaryStatistic} cases in the past five
days
</div>
</div>
)}
</div>
)}
<DeltaBarGraph
timeseries={timeseries?.[stateCode]?.dates}
statistic={primaryStatistic}
{...{stateCode, lookback}}
forceRender={!!timeseriesResponseError}
/>
</div>
</div>
<div className="district-bar-bottom">
{districts.length > 5 ? (
<button
className="button fadeInUp"
onClick={toggleShowAllDistricts}
style={trail[3]}
>
<span>
{t(showAllDistricts ? 'View less' : 'View all')}
</span>
</button>
) : (
<div style={{height: '3.75rem', flexBasis: '15%'}} />
)}
</div>
</div>
<Suspense fallback={<div />}>
<TimeseriesExplorer
{...{
stateCode,
timeseries,
regionHighlighted,
setRegionHighlighted,
noRegionHighlightedDistrictData,
}}
forceRender={!!timeseriesResponseError}
/>
</Suspense>
</>
</div>
</div>
<Footer />
</>
);
}