react-artasys-ui 0.1.19 → 0.1.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/lib/Dropdown/Dropdown.d.ts +3 -1
- package/lib/Dropdown/Items.d.ts +2 -2
- package/package.json +1 -1
- package/src/Dropdown/Dropdown.tsx +5 -3
- package/src/Dropdown/Items.tsx +14 -14
|
@@ -6,10 +6,12 @@ export interface IDropdown extends AllHTMLAttributes<HTMLDivElement> {
|
|
|
6
6
|
position?: 'left' | 'right';
|
|
7
7
|
split?: boolean;
|
|
8
8
|
hover?: boolean;
|
|
9
|
+
arrow?: boolean;
|
|
9
10
|
items?: FunctionComponentElement<IItem> | FunctionComponentElement<IItem>[];
|
|
10
11
|
disabled?: boolean;
|
|
12
|
+
enableRerenderItems?: boolean;
|
|
11
13
|
onShow?: () => void;
|
|
12
14
|
onHide?: () => void;
|
|
13
15
|
}
|
|
14
|
-
declare const Dropdown: ({ children, className, items, direction, position, split, disabled, hover, onShow, onHide, ...props }: IDropdown) => JSX.Element;
|
|
16
|
+
declare const Dropdown: ({ children, className, items, arrow, direction, position, split, disabled, hover, enableRerenderItems, onShow, onHide, ...props }: IDropdown) => JSX.Element;
|
|
15
17
|
export default Dropdown;
|
package/lib/Dropdown/Items.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { IDropdown } from "./Dropdown";
|
|
2
|
-
interface IItems extends Pick<IDropdown, 'items' | 'disabled'> {
|
|
2
|
+
interface IItems extends Pick<IDropdown, 'items' | 'disabled' | 'enableRerenderItems'> {
|
|
3
3
|
isOpen: boolean;
|
|
4
4
|
}
|
|
5
|
-
declare const Items: ({ items, isOpen, disabled }: IItems) => JSX.Element | null;
|
|
5
|
+
declare const Items: ({ items, isOpen, enableRerenderItems, disabled }: IItems) => JSX.Element | null;
|
|
6
6
|
export default Items;
|
package/package.json
CHANGED
|
@@ -25,13 +25,15 @@ export interface IDropdown extends AllHTMLAttributes<HTMLDivElement> {
|
|
|
25
25
|
position?: 'left' | 'right';
|
|
26
26
|
split?: boolean;
|
|
27
27
|
hover?: boolean;
|
|
28
|
+
arrow?: boolean;
|
|
28
29
|
items?: FunctionComponentElement<IItem> | FunctionComponentElement<IItem>[];
|
|
29
30
|
disabled?: boolean;
|
|
31
|
+
enableRerenderItems?: boolean;
|
|
30
32
|
onShow?: () => void;
|
|
31
33
|
onHide?: () => void;
|
|
32
34
|
};
|
|
33
35
|
|
|
34
|
-
const Dropdown = ({children, className, items, direction = 'down', position = 'right', split = false, disabled, hover = false, onShow, onHide, ...props}: IDropdown) => {
|
|
36
|
+
const Dropdown = ({children, className, items, arrow = true, direction = 'down', position = 'right', split = false, disabled, hover = false, enableRerenderItems = true, onShow, onHide, ...props}: IDropdown) => {
|
|
35
37
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
36
38
|
const hoverTimeout = useRef<ReturnType<typeof setTimeout>>();
|
|
37
39
|
const [isOpen, setOpen] = useState(false);
|
|
@@ -103,8 +105,8 @@ const Dropdown = ({children, className, items, direction = 'down', position = 'r
|
|
|
103
105
|
<div onClick={handleClick} className={'ui-dropdown-block' + (isOpen ? ' ' + styles['hide'] : '')}>
|
|
104
106
|
{children}
|
|
105
107
|
</div>
|
|
106
|
-
{(position === 'right' && !disabled) && <Arrow className={styles['arrow']} onClick={handleClickArrow}/>}
|
|
107
|
-
<Items isOpen={isOpen} disabled={disabled} items={items}/>
|
|
108
|
+
{(position === 'right' && !disabled && arrow) && <Arrow className={styles['arrow']} onClick={handleClickArrow}/>}
|
|
109
|
+
<Items isOpen={isOpen} disabled={disabled} enableRerenderItems={enableRerenderItems} items={items}/>
|
|
108
110
|
</div>
|
|
109
111
|
</Context.Provider>);
|
|
110
112
|
};
|
package/src/Dropdown/Items.tsx
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import styles from "./style.module.css";
|
|
2
2
|
import type { IDropdown } from "./Dropdown";
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
4
4
|
|
|
5
|
-
interface IItems extends Pick<IDropdown, 'items' | 'disabled'> {
|
|
5
|
+
interface IItems extends Pick<IDropdown, 'items' | 'disabled' | 'enableRerenderItems'> {
|
|
6
6
|
isOpen: boolean;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
|
-
const Items = ({items, isOpen, disabled}: IItems) => {
|
|
9
|
+
const Items = ({items, isOpen, enableRerenderItems, disabled}: IItems) => {
|
|
10
10
|
const listRef = useRef<HTMLUListElement>(null);
|
|
11
|
-
|
|
11
|
+
|
|
12
|
+
const renderItems = useMemo(() => {
|
|
13
|
+
if (enableRerenderItems) {
|
|
14
|
+
return isOpen ? items : null;
|
|
15
|
+
}
|
|
16
|
+
return items;
|
|
17
|
+
}, [enableRerenderItems, items, isOpen]);
|
|
12
18
|
|
|
13
19
|
useEffect(() => {
|
|
20
|
+
|
|
14
21
|
if (!listRef.current) return;
|
|
15
22
|
const screenWidth = window.innerWidth;
|
|
16
23
|
const element = listRef.current.getBoundingClientRect();
|
|
17
|
-
|
|
18
|
-
listRef.current.ontransitionend = () => {
|
|
19
|
-
setHide(true);
|
|
20
|
-
};
|
|
21
|
-
}else{
|
|
22
|
-
listRef.current.ontransitionend = null;
|
|
23
|
-
setHide(false);
|
|
24
|
-
}
|
|
24
|
+
|
|
25
25
|
|
|
26
26
|
// console.log(element.left)
|
|
27
27
|
if (element.left <= 0) {
|
|
@@ -30,9 +30,9 @@ const Items = ({items, isOpen, disabled}: IItems) => {
|
|
|
30
30
|
}
|
|
31
31
|
},[isOpen]);
|
|
32
32
|
|
|
33
|
-
if (disabled
|
|
33
|
+
if (disabled) return null;
|
|
34
34
|
|
|
35
|
-
return(<ul className={styles['dropdown-list']} children={
|
|
35
|
+
return(<ul className={styles['dropdown-list']} children={renderItems} ref={listRef}/>);
|
|
36
36
|
};
|
|
37
37
|
|
|
38
38
|
export default Items;
|