Decrease manga description collapsed size

Adjust collapsed size to actual description height.
The collapsed size is still set once the element is expanded, which can cause a lot of empty space for short descriptions
This commit is contained in:
schroda
2024-09-09 23:00:25 +02:00
parent aa628c72f6
commit 164d810eb4

View File

@@ -186,9 +186,18 @@ const DescriptionGenre = ({
}: { }: {
manga: Pick<MangaType, 'description' | 'genre'>; manga: Pick<MangaType, 'description' | 'genre'>;
}) => { }) => {
const [descriptionElement, setDescriptionElement] = useState<HTMLSpanElement | null>(null);
const [descriptionHeight, setDescriptionHeight] = useState<number>();
useResizeObserver(
descriptionElement,
useCallback(() => setDescriptionHeight(descriptionElement?.clientHeight), [descriptionElement]),
);
const [isCollapsed, setIsCollapsed] = useLocalStorage('isDescriptionGenreCollapsed', true); const [isCollapsed, setIsCollapsed] = useLocalStorage('isDescriptionGenreCollapsed', true);
const collapsedSize = description ? DESCRIPTION_COLLAPSED_SIZE : 0; const collapsedSize = description
? Math.min(DESCRIPTION_COLLAPSED_SIZE, descriptionHeight ?? DESCRIPTION_COLLAPSED_SIZE)
: 0;
const genres = useMemo(() => mangaGenres.filter(Boolean), [mangaGenres]); const genres = useMemo(() => mangaGenres.filter(Boolean), [mangaGenres]);
return ( return (
@@ -196,7 +205,10 @@ const DescriptionGenre = ({
{description && ( {description && (
<Stack sx={{ position: 'relative' }}> <Stack sx={{ position: 'relative' }}>
<Collapse collapsedSize={collapsedSize} in={!isCollapsed}> <Collapse collapsedSize={collapsedSize} in={!isCollapsed}>
<Typography style={{ whiteSpace: 'pre-line', textAlign: 'justify', textJustify: 'inter-word' }}> <Typography
ref={setDescriptionElement}
style={{ whiteSpace: 'pre-line', textAlign: 'justify', textJustify: 'inter-word' }}
>
{description} {description}
</Typography> </Typography>
</Collapse> </Collapse>