From 5b357faf16d759f0ea25cd86939678c421593f93 Mon Sep 17 00:00:00 2001 From: Mark McDowall Date: Fri, 20 Dec 2024 16:10:24 -0800 Subject: [PATCH] useMeasure instead of Measure in TypeScript components (cherry picked from commit ee1a0a1f7175839c63595bef6d0221d3787189f4) --- frontend/src/Calendar/CalendarPage.tsx | 39 ++++++++++++-------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/frontend/src/Calendar/CalendarPage.tsx b/frontend/src/Calendar/CalendarPage.tsx index 9c4167f661..0c78a62109 100644 --- a/frontend/src/Calendar/CalendarPage.tsx +++ b/frontend/src/Calendar/CalendarPage.tsx @@ -1,10 +1,9 @@ import moment from 'moment'; -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { createSelector } from 'reselect'; import AppState from 'App/State/AppState'; import * as commandNames from 'Commands/commandNames'; -import Measure from 'Components/Measure'; import FilterMenu from 'Components/Menu/FilterMenu'; import PageContent from 'Components/Page/PageContent'; 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 PageToolbarSection from 'Components/Page/Toolbar/PageToolbarSection'; import PageToolbarSeparator from 'Components/Page/Toolbar/PageToolbarSeparator'; +import useMeasure from 'Helpers/Hooks/useMeasure'; import { align, icons } from 'Helpers/Props'; import NoMovie from 'Movie/NoMovie'; import { @@ -96,27 +96,13 @@ function CalendarPage() { const customFilters = useSelector(createCustomFiltersSelector('calendar')); const hasMovies = !!useSelector(createMovieCountSelector()); + const [pageContentRef, { width }] = useMeasure(); const [isCalendarLinkModalOpen, setIsCalendarLinkModalOpen] = useState(false); const [isOptionsModalOpen, setIsOptionsModalOpen] = useState(false); - const [width, setWidth] = useState(0); const isMeasured = width > 0; 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(() => { setIsCalendarLinkModalOpen(true); }, []); @@ -152,6 +138,19 @@ function CalendarPage() { [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 ( @@ -200,13 +199,11 @@ function CalendarPage() { - - {isMeasured ? :
} - - + {isMeasured ? :
} {hasMovies && }