1
0
mirror of https://github.com/Radarr/Radarr.git synced 2026-03-05 13:21:25 -05:00

useMeasure instead of Measure in TypeScript components

(cherry picked from commit ee1a0a1f7175839c63595bef6d0221d3787189f4)
This commit is contained in:
Mark McDowall
2024-12-20 16:10:24 -08:00
committed by Bogdan
parent 3f35b7c782
commit 5b357faf16

View File

@@ -1,10 +1,9 @@
import moment from 'moment'; import moment from 'moment';
import React, { useCallback, useState } from 'react'; import React, { useCallback, useEffect, useState } from 'react';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { createSelector } from 'reselect'; import { createSelector } from 'reselect';
import AppState from 'App/State/AppState'; import AppState from 'App/State/AppState';
import * as commandNames from 'Commands/commandNames'; import * as commandNames from 'Commands/commandNames';
import Measure from 'Components/Measure';
import FilterMenu from 'Components/Menu/FilterMenu'; import FilterMenu from 'Components/Menu/FilterMenu';
import PageContent from 'Components/Page/PageContent'; import PageContent from 'Components/Page/PageContent';
import PageContentBody from 'Components/Page/PageContentBody'; import PageContentBody from 'Components/Page/PageContentBody';
@@ -12,6 +11,7 @@ import PageToolbar from 'Components/Page/Toolbar/PageToolbar';
import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton'; import PageToolbarButton from 'Components/Page/Toolbar/PageToolbarButton';
import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection'; import PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection';
import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator'; import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator';
import useMeasure from 'Helpers/Hooks/useMeasure';
import { align, icons } from 'Helpers/Props'; import { align, icons } from 'Helpers/Props';
import NoMovie from 'Movie/NoMovie'; import NoMovie from 'Movie/NoMovie';
import { import {
@@ -96,27 +96,13 @@ function CalendarPage() {
const customFilters = useSelector(createCustomFiltersSelector('calendar')); const customFilters = useSelector(createCustomFiltersSelector('calendar'));
const hasMovies = !!useSelector(createMovieCountSelector()); const hasMovies = !!useSelector(createMovieCountSelector());
const [pageContentRef, { width }] = useMeasure();
const [isCalendarLinkModalOpen, setIsCalendarLinkModalOpen] = useState(false); const [isCalendarLinkModalOpen, setIsCalendarLinkModalOpen] = useState(false);
const [isOptionsModalOpen, setIsOptionsModalOpen] = useState(false); const [isOptionsModalOpen, setIsOptionsModalOpen] = useState(false);
const [width, setWidth] = useState(0);
const isMeasured = width > 0; const isMeasured = width > 0;
const PageComponent = hasMovies ? Calendar : NoMovie; const PageComponent = hasMovies ? Calendar : NoMovie;
const handleMeasure = useCallback(
({ width: newWidth }: { width: number }) => {
setWidth(newWidth);
const dayCount = Math.max(
3,
Math.min(7, Math.floor(newWidth / MINIMUM_DAY_WIDTH))
);
dispatch(setCalendarDaysCount({ dayCount }));
},
[dispatch]
);
const handleGetCalendarLinkPress = useCallback(() => { const handleGetCalendarLinkPress = useCallback(() => {
setIsCalendarLinkModalOpen(true); setIsCalendarLinkModalOpen(true);
}, []); }, []);
@@ -152,6 +138,19 @@ function CalendarPage() {
[dispatch] [dispatch]
); );
useEffect(() => {
if (width === 0) {
return;
}
const dayCount = Math.max(
3,
Math.min(7, Math.floor(width / MINIMUM_DAY_WIDTH))
);
dispatch(setCalendarDaysCount({ dayCount }));
}, [width, dispatch]);
return ( return (
<PageContent title={translate('Calendar')}> <PageContent title={translate('Calendar')}>
<PageToolbar> <PageToolbar>
@@ -200,13 +199,11 @@ function CalendarPage() {
</PageToolbar> </PageToolbar>
<PageContentBody <PageContentBody
ref={pageContentRef}
className={styles.calendarPageBody} className={styles.calendarPageBody}
innerClassName={styles.calendarInnerPageBody} innerClassName={styles.calendarInnerPageBody}
> >
<Measure whitelist={['width']} onMeasure={handleMeasure}> {isMeasured ? <PageComponent totalItems={0} /> : <div />}
{isMeasured ? <PageComponent totalItems={0} /> : <div />}
</Measure>
{hasMovies && <Legend />} {hasMovies && <Legend />}
</PageContentBody> </PageContentBody>