Skip to content

Latest commit

 

History

History
72 lines (61 loc) · 4.09 KB

README.md

File metadata and controls

72 lines (61 loc) · 4.09 KB

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.