import { Typography } from "@mui/material";
import { useEffect, useRef, useState } from "react";
interface ExpandableTextProps {
text: string;
extendedText: string;
numberOfLine: number;
}
const ExpandableText: React.FC<ExpandableTextProps> = ({ text, extendedText = "Description", numberOfLine = 3 }) => {
const [expanded, setExpanded] = useState(false);
const [maxHeight, setMaxHeight] = useState<string | number>('none');
const contentRef = useRef<HTMLDivElement>(null);
useEffect(() => {
if (contentRef.current) {
setMaxHeight(expanded ? contentRef.current.scrollHeight : `${numberOfLine * 1.5}em`);
}
}, [expanded, numberOfLine])
const toggleExpand = () => {
setExpanded((prev) => !prev);
};
return (
<>
<div
ref={contentRef}
style={{
overflow: 'hidden',
maxHeight: maxHeight,
transition: 'max-height 0.3s ease-in-out',
}}
>
<Typography
component="p"
sx={{
fontSize: 12,
fontWeight: 700,
letterSpacing: 0.5,
display: '-webkit-box',
WebkitBoxOrient: 'vertical',
WebkitLineClamp: expanded ? 'unset' : numberOfLine,
textOverflow: 'ellipsis',
mt: 1,
}}
>
{text}
</Typography>
</div>
<span style={{ color: "blue", cursor: "pointer" }} onClick={toggleExpand}>
{expanded ? `Collapse ${extendedText}` : `Expand ${extendedText}`}
</span>
</>
);
};
export default ExpandableText;

Build Your Own Forms without Manual Coding
SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.
For further actions, you may consider blocking this person and/or reporting abuse
Top comments (0)