Skip to content

yukimotochern/useClampText

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

use-clamp-text hook: useClampText

Custom react hook that clamp multiline text to a specified line number. Can optionally specify trailing spaces. Fix some bugs and use cleaner implementation. Modified from:

Install

npm i @yukimoto/use-clamp-text

Usage

const component = () => {
  const {
    longEnoughToClamp,
    textContainerRef,
    addOnsContainerRef,
    wrapperContainerRef,
    clamped,
    clampedText,
    toggleClamp,
  } = useClampText<{
    WrapperContainer: HTMLDivElement;
    TextContainer: HTMLSpanElement;
    AddonsContainer: HTMLButtonElement;
  }>({
    originalText: 'some potentially really long text...',
    lines: 2, // At most how many lines
    endSpaceNumber: 4, // how many trailing space,
    unitSpaceChar: '*', // single trailing space should be the width of this char
    debounceTime: 100, // in miliseconds
  });
  return (
    <div ref={wrapperContainerRef}>
      <span ref={textContainerRef}>{clampedText}</span>
      {longEnoughToClamp ? (
        <button ref={addOnsContainerRef} onClick={toggleClamp}>
          {clamped ? '...show more' : '...show less'}
        </button>
      ) : null}
    </div>
  );
};

API reference

Arguments

property type required default description
originalText string false '' Text you wish to clamp.
lines number false 2 Number of visible lines when collapsed.
debounceTime number false 300 How many time in miliseconds before the clamp action will be triggered when window resizes.
minSpaceCharNum number false 0 The minium trailing space number, will make the process of adding space to the end of the addons component more efficient.
unitSpaceChar string false '.' The width of single trailing space, pass a char for the measurement of width.
endSpaceNumber number false 0 How many trailing spaces. Each of them will be the width of unitSpaceChar.

Returns

property type description
longEnoughtToClamp boolean Whether the originalText is longer enough to exceeds the given line number by it self.
clampedText string The string to be rendered.
clamped boolean A state indicating whether the text should be clamped if long enough.
toggleClamp () => void A callback which togger the clamped state.
wrapperContainerRef, textContainerRef, addOnsContainerRef React.RefObject<E extends HTMLElement> Ref for corresponding containers.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published