Skip to content

Commit ea31327

Browse files
refactor: fix eslint-related code issues
1 parent 385dbc5 commit ea31327

File tree

6 files changed

+90
-5
lines changed

6 files changed

+90
-5
lines changed

src/components/Tabs/TabsContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {useComponentProps} from "../../providers";
66

77
import styles from "./tabs.module.scss";
88

9-
export interface TabsContentProps extends TabsContentRadixProps {}
9+
export type TabsContentProps = TabsContentRadixProps
1010

1111
const TabsList: ForwardRefRenderFunction<HTMLDivElement, TabsContentProps> = (props, ref) => {
1212
const {

src/components/Tabs/TabsList.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,16 @@ const TabsList: ForwardRefRenderFunction<HTMLDivElement, TabsListProps> = (props
3030
const [mounted, setMounted] = useState(false);
3131
const [modificators, setModificators] = useState<{ first?: boolean; last?: boolean }>({});
3232

33+
useEffect(() => {
34+
if (!ref) return;
35+
if (typeof ref === "function") {
36+
ref(listRef.current);
37+
} else {
38+
ref.current = listRef.current;
39+
}
40+
}, [ref]);
41+
42+
3343
useEffect(() => {
3444
const updateIndicator = () => {
3545
const list = listRef.current;

src/components/Tabs/TabsTrigger.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, {forwardRef, ForwardRefRenderFunction, memo, useMemo} from "react";
1+
import React, {forwardRef, ForwardRefRenderFunction, memo} from "react";
22
import classnames from "classnames";
33

44
import {TabsTriggerProps as TabsTriggerRadixProps, Trigger} from "@radix-ui/react-tabs";

src/components/Truncate/Truncate.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ const trimMiddle = (el: HTMLElement, text: string, separator: string) => {
2828
if (measure(text)) return text;
2929

3030
let low = 0;
31-
let high = text.length -2;
31+
let high = text.length - 2;
3232
let result = "";
3333

3434
while (low <= high) {
3535
const size = Math.floor((low + high) / 2);
3636
const left = text.slice(0, Math.ceil(size / 2));
3737
const right = text.slice(text.length - Math.floor(size / 2));
38-
const trimmed = left + separator + right;
38+
const trimmed = left + separator + right;
3939

4040
if (measure(trimmed)) {
4141
result = trimmed;
@@ -97,6 +97,7 @@ const Truncate: ForwardRefRenderFunction<HTMLSpanElement, TruncateProps> = (prop
9797
observer?.disconnect();
9898
cancelAnimationFrame(animationFrameId);
9999
};
100+
// eslint-disable-next-line react-hooks/exhaustive-deps
100101
}, [text, separator, middle]);
101102

102103
return (

src/components/Truncate/utils.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
export const measure = (el: HTMLElement, txt: string) => {
2+
el.textContent = txt;
3+
return el.scrollWidth <= el.clientWidth;
4+
};
5+
6+
export const binaryTrim = (el: HTMLElement, text: string, generator: (size: number) => string) => {
7+
let low = 0;
8+
let high = text.length;
9+
let result = "";
10+
11+
while (low <= high) {
12+
const size = Math.floor((low + high) / 2);
13+
14+
const trimmed = generator(size);
15+
16+
if (measure(el, trimmed)) {
17+
result = trimmed;
18+
low = size + 1;
19+
} else {
20+
high = size - 1;
21+
}
22+
}
23+
24+
return result;
25+
};
26+
27+
export const trimEnd = (el: HTMLElement, text: string, separator: string) => {
28+
if (measure(el, text)) return text;
29+
30+
const generator = (size: number) => text.slice(0, size) + separator;
31+
32+
const best = binaryTrim(el, text, generator);
33+
34+
return best || text.charAt(0) + separator;
35+
};
36+
37+
export const trimMiddle = (el: HTMLElement, text: string, separator: string) => {
38+
if (measure(el, text)) return text;
39+
40+
const generator = (size: number) => {
41+
const left = text.slice(0, Math.ceil(size / 2));
42+
const right = text.slice(text.length - Math.floor(size / 2));
43+
return left + separator + right;
44+
};
45+
46+
const best = binaryTrim(el, text, generator);
47+
48+
return best || text.charAt(0) + separator + text.charAt(text.length - 1);
49+
};
50+
51+
export const trimUrl = (el: HTMLElement, url: string, separator: string) => {
52+
let host = url;
53+
let path = "";
54+
55+
try {
56+
const u = new URL(url);
57+
host = `${u.protocol}//${u.host}`;
58+
path = u.pathname + u.search + u.hash;
59+
} catch {
60+
return trimEnd(el, url, separator);
61+
}
62+
63+
if (measure(el, url)) return url;
64+
65+
const generator = (size: number) => {
66+
const left = path.slice(0, Math.ceil(size / 2));
67+
const right = path.slice(path.length - Math.floor(size / 2));
68+
return host + left + separator + right;
69+
};
70+
71+
const best = binaryTrim(el, path, generator);
72+
73+
return best || trimEnd(el, url, separator);
74+
};

src/components/TruncateList/TruncateList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {useComponentProps} from "../../providers";
77
import styles from "./truncate-list.module.scss";
88
import {Tag} from "../Tag";
99

10-
type TruncateListProps<T = any> = OverflowListProps<T> & {
10+
export type TruncateListProps<T = unknown> = OverflowListProps<T> & {
1111
counterClassName?: string;
1212
};
1313

0 commit comments

Comments
 (0)