How to Truncate File Names While Retaining Their Extensions (Part 1)

Mở đầu

    Xin chào tất cả các bạn hôm nay mình sẽ giới thiệu cho các bạn cách truncate file name/text mà vẫn dữ được extension trên nhiều line. Hi vọng nó sẽ giúp ích cho các bạn.

1. Vấn đề hay gặp phải :

    Các bạn muốn nó hiển thị 2 line và vẫn giữ đc phần extension, những phần bị truncate sẽ hiển thị dấu '...' nhưng nó lại ra như thế này : image.png

2. Cách khắc phục :

    Mục tiêu là 2 line và truncate vẫn giữ được extension name nha các bạn.

    Để giải quyết được vấn đề này thì có rất nhiều cách để giải quyết sẽ có một số cách sẽ phù hợp với một số bạn:

Cách 1: Mình dùng Tailwind nha :

<div className="min-h-[50px] break-all line-clamp-2">
    {name} // Tên file
</div>

    Thì nó sẽ cho ra kết quả như thế này :

    image.png

    Ở đây như các bạn sẽ thấy nó đã hiển thị được 2 line rồi, UI không bị bể như trên nữa nhưng nó lại không đáp ứng được việc hiển thị extension ở cuối uhmmm.... vậy là không được rồi bây giờ qua cách 2 nha

Cách 2: Mình dùng chút JavaScript :

    Ở đây mình sẽ có một hàm như sau :

const truncateText = (text: string, maxLength: number) => {
    if (text.length > maxLength) {
      return (
        text.substring(0, 20) +
        '...' +
        text.substring(text.length - 10, text.length)
      );
    }
    return text;
  };
  
 truncateText(name, 35)

    Và kết quả sẽ ở đây : image.png

    Như chúng t thấy hiện tại nó đã được 2 line, có extension hiện đã đáp ứng đúng nhưng nếu nhìn kĩ thì sẽ thấy chưa max width mà đã truncate rồi như thế là không ổn rồi, rồi còn một số trường hợp nếu name chỉ chỉ chứa 1 ký tự nữa, nói thật ra cách thì này khá lúa :v

Cách 3: Sử dụng thư viện React-Text-Truncate :

    Đây là Demo nhé các bạn.

    Cách cài :

//npm
npm install react-text-truncate

//yarn
yarn add react-text-truncate

    Cách sử dụng khá đơn giản :

<div className="min-h-[50px] mt-3 break-all">
    <TextTruncate
      line={2}
      truncateText={`...${removeExtension(name).slice(-3,)}.${getExtensionFile(name)}`}
      text={name}
    />
</div>

    Kết quả nó sẽ như thế nay: image.png

    Bây giờ nhìn trong ổn phết đấy chứ nhỉ =)))

    Ở đây sẽ có 2 hàm removeExtension() và hàm getExtensionFile()

    Nếu muốn biết 2 hàm này từ đâu mà ra thì hãy đón xem phần 2 nha =))))

3 Kết luận

    Hãy đón xem phần 2 với những hàm xử lý truncate text. Cảm ơn bạn đã đọc bài viết.

Nguồn: Viblo

Bình luận
Vui lòng đăng nhập để bình luận
Một số bài viết liên quan