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:
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user