mirror of
https://github.com/movie-web/movie-web.git
synced 2024-11-11 02:45:09 +01:00
fix bad sizing
This commit is contained in:
parent
a520cf02bb
commit
80f7240f58
@ -3,7 +3,7 @@ import { FloatingCardMobilePosition } from "@/components/popout/positions/Floati
|
|||||||
import { useIsMobile } from "@/hooks/useIsMobile";
|
import { useIsMobile } from "@/hooks/useIsMobile";
|
||||||
import { PopoutSection } from "@/video/components/popouts/PopoutUtils";
|
import { PopoutSection } from "@/video/components/popouts/PopoutUtils";
|
||||||
import { useSpringValue, animated, easings } from "@react-spring/web";
|
import { useSpringValue, animated, easings } from "@react-spring/web";
|
||||||
import { ReactNode, useCallback, useEffect, useRef } from "react";
|
import { ReactNode, useCallback, useEffect, useRef, useState } from "react";
|
||||||
import { Icon, Icons } from "../Icon";
|
import { Icon, Icons } from "../Icon";
|
||||||
import { FloatingDragHandle, MobilePopoutSpacer } from "./FloatingDragHandle";
|
import { FloatingDragHandle, MobilePopoutSpacer } from "./FloatingDragHandle";
|
||||||
|
|
||||||
@ -26,12 +26,15 @@ function CardBase(props: { children: ReactNode }) {
|
|||||||
const width = useSpringValue(0, {
|
const width = useSpringValue(0, {
|
||||||
config: { easing: easings.easeInOutSine, duration: 300 },
|
config: { easing: easings.easeInOutSine, duration: 300 },
|
||||||
});
|
});
|
||||||
|
const [pages, setPages] = useState<NodeListOf<Element> | null>(null);
|
||||||
|
|
||||||
const getNewHeight = useCallback(() => {
|
const getNewHeight = useCallback(
|
||||||
|
(updateList = true) => {
|
||||||
if (!ref.current) return;
|
if (!ref.current) return;
|
||||||
const children = ref.current.querySelectorAll(
|
const children = ref.current.querySelectorAll(
|
||||||
":scope *[data-floating-page='true']"
|
":scope *[data-floating-page='true']"
|
||||||
);
|
);
|
||||||
|
if (updateList) setPages(children);
|
||||||
if (children.length === 0) {
|
if (children.length === 0) {
|
||||||
height.start(0);
|
height.start(0);
|
||||||
width.start(0);
|
width.start(0);
|
||||||
@ -39,14 +42,17 @@ function CardBase(props: { children: ReactNode }) {
|
|||||||
}
|
}
|
||||||
const lastChild = children[children.length - 1];
|
const lastChild = children[children.length - 1];
|
||||||
const rect = lastChild.getBoundingClientRect();
|
const rect = lastChild.getBoundingClientRect();
|
||||||
|
const rectHeight = lastChild.scrollHeight;
|
||||||
if (height.get() === 0) {
|
if (height.get() === 0) {
|
||||||
height.set(rect.height);
|
height.set(rectHeight);
|
||||||
width.set(rect.width);
|
width.set(rect.width);
|
||||||
} else {
|
} else {
|
||||||
height.start(rect.height);
|
height.start(rectHeight);
|
||||||
width.start(rect.width);
|
width.start(rect.width);
|
||||||
}
|
}
|
||||||
}, [height, width]);
|
},
|
||||||
|
[height, width]
|
||||||
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!ref.current) return;
|
if (!ref.current) return;
|
||||||
@ -65,22 +71,14 @@ function CardBase(props: { children: ReactNode }) {
|
|||||||
}, [getNewHeight]);
|
}, [getNewHeight]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!ref.current) return;
|
|
||||||
const children = ref.current.querySelectorAll(
|
|
||||||
":scope *[data-floating-page='true']"
|
|
||||||
);
|
|
||||||
const observer = new ResizeObserver(() => {
|
const observer = new ResizeObserver(() => {
|
||||||
getNewHeight();
|
getNewHeight(false);
|
||||||
});
|
|
||||||
observer.observe(ref.current, {
|
|
||||||
attributes: false,
|
|
||||||
childList: true,
|
|
||||||
subtree: false,
|
|
||||||
});
|
});
|
||||||
|
pages?.forEach((el) => observer.observe(el));
|
||||||
return () => {
|
return () => {
|
||||||
observer.disconnect();
|
observer.disconnect();
|
||||||
};
|
};
|
||||||
}, [getNewHeight]);
|
}, [pages, getNewHeight]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<animated.div
|
<animated.div
|
||||||
|
@ -6,7 +6,7 @@ export function FloatingDragHandle() {
|
|||||||
if (!isMobile) return null;
|
if (!isMobile) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mx-auto my-2 mb-2 h-1 w-12 rounded-full bg-ash-500 bg-opacity-30" />
|
<div className="mx-auto my-3 -mb-3 h-1 w-12 rounded-full bg-ash-500 bg-opacity-30" />
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user