sprint-asia-custom-component 0.1.54 → 0.1.55
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 +11 -16
- package/package.json +1 -1
- package/src/components/dropdown/dropdownText/index.js +107 -106
package/dist/index.js
CHANGED
|
@@ -24034,10 +24034,7 @@
|
|
|
24034
24034
|
};
|
|
24035
24035
|
|
|
24036
24036
|
const DropdownText = ({
|
|
24037
|
-
options = [
|
|
24038
|
-
option: "Name 1",
|
|
24039
|
-
value: "Value 1"
|
|
24040
|
-
}],
|
|
24037
|
+
options = [],
|
|
24041
24038
|
onSelect,
|
|
24042
24039
|
title = "Title Dropdown",
|
|
24043
24040
|
placeholder = "Placeholder",
|
|
@@ -24045,13 +24042,9 @@
|
|
|
24045
24042
|
isEdited = true,
|
|
24046
24043
|
mode = "default",
|
|
24047
24044
|
footer = null,
|
|
24048
|
-
currentOption =
|
|
24049
|
-
option: "Name 1",
|
|
24050
|
-
value: "Value 1"
|
|
24051
|
-
}
|
|
24045
|
+
currentOption = ""
|
|
24052
24046
|
}) => {
|
|
24053
24047
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
24054
|
-
const [selectedOption, setSelectedOption] = React.useState(null);
|
|
24055
24048
|
const dropdownRef = React.useRef(null);
|
|
24056
24049
|
React.useEffect(() => {
|
|
24057
24050
|
const handleOutsideClick = event => {
|
|
@@ -24060,17 +24053,16 @@
|
|
|
24060
24053
|
}
|
|
24061
24054
|
};
|
|
24062
24055
|
if (isOpen) {
|
|
24063
|
-
document.addEventListener(
|
|
24056
|
+
document.addEventListener("mousedown", handleOutsideClick);
|
|
24064
24057
|
}
|
|
24065
24058
|
return () => {
|
|
24066
|
-
document.removeEventListener(
|
|
24059
|
+
document.removeEventListener("mousedown", handleOutsideClick);
|
|
24067
24060
|
};
|
|
24068
24061
|
}, [isOpen]);
|
|
24069
24062
|
const handleToggleDropdownText = () => {
|
|
24070
24063
|
setIsOpen(!isOpen);
|
|
24071
24064
|
};
|
|
24072
24065
|
const handleOptionClick = (option, value) => {
|
|
24073
|
-
setSelectedOption(option);
|
|
24074
24066
|
setIsOpen(false);
|
|
24075
24067
|
if (onSelect) {
|
|
24076
24068
|
onSelect({
|
|
@@ -24079,6 +24071,9 @@
|
|
|
24079
24071
|
});
|
|
24080
24072
|
}
|
|
24081
24073
|
};
|
|
24074
|
+
const selectedValue = options.filter(val => {
|
|
24075
|
+
return val.value === currentOption;
|
|
24076
|
+
});
|
|
24082
24077
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
24083
24078
|
className: "relative inline-block text-left w-full",
|
|
24084
24079
|
ref: dropdownRef
|
|
@@ -24093,14 +24088,14 @@
|
|
|
24093
24088
|
}, /*#__PURE__*/React__default["default"].createElement("button", {
|
|
24094
24089
|
type: "button",
|
|
24095
24090
|
className: `
|
|
24096
|
-
${isEdited
|
|
24097
|
-
${mode
|
|
24098
|
-
${mode
|
|
24091
|
+
${!isEdited && "bg-neutral30 cursor-not-allowed"}
|
|
24092
|
+
${mode === "default" && "border-neutral50 bg-neutral20 cursor-pointer"}
|
|
24093
|
+
${mode === "danger" && "border-danger500 bg-danger50 cursor-pointer"}
|
|
24099
24094
|
flex items-center w-full py-2.5 text-left px-4 font-normal text-sm text-neutral300 rounded-md border focus:outline-none overflow-hidden`,
|
|
24100
24095
|
onClick: () => isEdited && handleToggleDropdownText()
|
|
24101
24096
|
}, /*#__PURE__*/React__default["default"].createElement("span", {
|
|
24102
24097
|
className: "flex-grow overflow-hidden"
|
|
24103
|
-
},
|
|
24098
|
+
}, selectedValue?.length ? selectedValue[0]?.option : placeholder), /*#__PURE__*/React__default["default"].createElement("span", {
|
|
24104
24099
|
className: "ml-2"
|
|
24105
24100
|
}, isOpen ? /*#__PURE__*/React__default["default"].createElement(PiCaretUp, {
|
|
24106
24101
|
size: 16,
|
package/package.json
CHANGED
|
@@ -1,124 +1,125 @@
|
|
|
1
|
-
import React, { useState, useEffect, useRef } from
|
|
2
|
-
import { PiCaretDown, PiCaretUp, PiInfo } from
|
|
1
|
+
import React, { useState, useEffect, useRef } from "react";
|
|
2
|
+
import { PiCaretDown, PiCaretUp, PiInfo } from "react-icons/pi";
|
|
3
3
|
|
|
4
|
-
const DropdownText = ({
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
isRequired = true,
|
|
15
|
-
isEdited = true,
|
|
16
|
-
mode = "default",
|
|
17
|
-
footer = null,
|
|
18
|
-
currentOption = {option : "Name 1", value:"Value 1"},
|
|
4
|
+
const DropdownText = ({
|
|
5
|
+
options = [],
|
|
6
|
+
onSelect,
|
|
7
|
+
title = "Title Dropdown",
|
|
8
|
+
placeholder = "Placeholder",
|
|
9
|
+
isRequired = true,
|
|
10
|
+
isEdited = true,
|
|
11
|
+
mode = "default",
|
|
12
|
+
footer = null,
|
|
13
|
+
currentOption = "",
|
|
19
14
|
}) => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const dropdownRef = useRef(null);
|
|
15
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
16
|
+
const dropdownRef = useRef(null);
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (isOpen) {
|
|
32
|
-
document.addEventListener('mousedown', handleOutsideClick);
|
|
33
|
-
}
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
const handleOutsideClick = (event) => {
|
|
20
|
+
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
21
|
+
setIsOpen(false);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
34
24
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}, [isOpen]);
|
|
25
|
+
if (isOpen) {
|
|
26
|
+
document.addEventListener("mousedown", handleOutsideClick);
|
|
27
|
+
}
|
|
39
28
|
|
|
40
|
-
|
|
41
|
-
|
|
29
|
+
return () => {
|
|
30
|
+
document.removeEventListener("mousedown", handleOutsideClick);
|
|
42
31
|
};
|
|
32
|
+
}, [isOpen]);
|
|
43
33
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
34
|
+
const handleToggleDropdownText = () => {
|
|
35
|
+
setIsOpen(!isOpen);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const handleOptionClick = (option, value) => {
|
|
39
|
+
setIsOpen(false);
|
|
40
|
+
if (onSelect) {
|
|
41
|
+
onSelect({ option: option, value: value });
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const selectedValue = options.filter((val) => {
|
|
46
|
+
return val.value === currentOption;
|
|
47
|
+
});
|
|
51
48
|
|
|
52
49
|
return (
|
|
53
|
-
<div className=
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
${
|
|
68
|
-
${mode == "default" && "border-neutral50 bg-neutral20 cursor-pointer"}
|
|
69
|
-
${mode == "danger" && "border-danger500 bg-danger50 cursor-pointer"}
|
|
50
|
+
<div className="relative inline-block text-left w-full" ref={dropdownRef}>
|
|
51
|
+
{title && (
|
|
52
|
+
<div className="flex">
|
|
53
|
+
<p className="text-sm font-normal text-black mb-1">{title}</p>
|
|
54
|
+
{isRequired && <p className="text-sm font-normal text-danger500 ml-1">*</p>}
|
|
55
|
+
</div>
|
|
56
|
+
)}
|
|
57
|
+
<div>
|
|
58
|
+
<span className="rounded-md shadow-sm">
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
className={`
|
|
62
|
+
${!isEdited && "bg-neutral30 cursor-not-allowed"}
|
|
63
|
+
${mode === "default" && "border-neutral50 bg-neutral20 cursor-pointer"}
|
|
64
|
+
${mode === "danger" && "border-danger500 bg-danger50 cursor-pointer"}
|
|
70
65
|
flex items-center w-full py-2.5 text-left px-4 font-normal text-sm text-neutral300 rounded-md border focus:outline-none overflow-hidden`}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
{isOpen ? <PiCaretUp size={16} className='text-neutral300' /> : <PiCaretDown size={16} className='text-neutral300' />}
|
|
76
|
-
</span>
|
|
77
|
-
</button>
|
|
66
|
+
onClick={() => isEdited && handleToggleDropdownText()}
|
|
67
|
+
>
|
|
68
|
+
<span className="flex-grow overflow-hidden">
|
|
69
|
+
{selectedValue?.length ? selectedValue[0]?.option : placeholder}
|
|
78
70
|
</span>
|
|
79
|
-
|
|
71
|
+
<span className="ml-2">
|
|
72
|
+
{isOpen ? (
|
|
73
|
+
<PiCaretUp size={16} className="text-neutral300" />
|
|
74
|
+
) : (
|
|
75
|
+
<PiCaretDown size={16} className="text-neutral300" />
|
|
76
|
+
)}
|
|
77
|
+
</span>
|
|
78
|
+
</button>
|
|
79
|
+
</span>
|
|
80
|
+
</div>
|
|
80
81
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
82
|
+
{isOpen && isEdited && (
|
|
83
|
+
<div
|
|
84
|
+
className="z-10 origin-top-right absolute left-0 mt-2 w-full rounded-md shadow-md bg-white ring-1 ring-black ring-opacity-5 focus:outline-none overflow-hidden"
|
|
85
|
+
role="menu"
|
|
86
|
+
aria-orientation="vertical"
|
|
87
|
+
aria-labelledby="options-menu"
|
|
88
|
+
>
|
|
89
|
+
<div className="px-1 py-2 max-h-40 overflow-y-auto">
|
|
90
|
+
{options.map((option, index) => (
|
|
91
|
+
<div
|
|
92
|
+
key={index}
|
|
93
|
+
className="hover:bg-neutral20 bg-white py-2.5 px-4 my-0.5 rounded-md"
|
|
94
|
+
onClick={() => {
|
|
95
|
+
if (option.option !== "Loading...") {
|
|
96
|
+
handleOptionClick(option.option, option.value);
|
|
97
|
+
}
|
|
98
|
+
}}
|
|
99
|
+
>
|
|
100
|
+
<p className="text-sm text-black">{option.option}</p>
|
|
101
|
+
</div>
|
|
102
|
+
))}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
)}
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
</div>
|
|
115
|
-
) : (
|
|
116
|
-
<p className="text-black text-xs">{footer}</p>
|
|
117
|
-
)}
|
|
107
|
+
{footer && (
|
|
108
|
+
<div className="mt-1">
|
|
109
|
+
{mode === "danger" ? (
|
|
110
|
+
<div className="flex">
|
|
111
|
+
<div>
|
|
112
|
+
<PiInfo size={16} className="text-danger500" />
|
|
113
|
+
</div>
|
|
114
|
+
<p className="text-danger500 text-xs ml-1">{footer}</p>
|
|
118
115
|
</div>
|
|
119
|
-
|
|
116
|
+
) : (
|
|
117
|
+
<p className="text-black text-xs">{footer}</p>
|
|
118
|
+
)}
|
|
119
|
+
</div>
|
|
120
|
+
)}
|
|
120
121
|
</div>
|
|
121
122
|
);
|
|
122
123
|
};
|
|
123
124
|
|
|
124
|
-
export default DropdownText;
|
|
125
|
+
export default DropdownText;
|