l-min-components 1.0.690 → 1.0.694
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/package.json
CHANGED
|
@@ -185,7 +185,7 @@ const AppMainLayout = () => {
|
|
|
185
185
|
: window.location.pathname.includes("developer") ||
|
|
186
186
|
window.location.hostname.includes("developer")
|
|
187
187
|
? "developer"
|
|
188
|
-
:
|
|
188
|
+
: "developer"
|
|
189
189
|
}
|
|
190
190
|
isOpen={isOpen}
|
|
191
191
|
setIsOpen={setIsOpen}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState,
|
|
1
|
+
import React, { useState, useEffect, useRef } from "react";
|
|
2
2
|
import LoaderCustom from "../customLoader";
|
|
3
3
|
import {
|
|
4
4
|
ControlInput,
|
|
@@ -7,7 +7,10 @@ import {
|
|
|
7
7
|
DropDownControls,
|
|
8
8
|
DropDownHeader,
|
|
9
9
|
DropDownItem,
|
|
10
|
-
|
|
10
|
+
DownIcon,
|
|
11
|
+
Tick,
|
|
12
|
+
} from "./DropDownComponentStyles";
|
|
13
|
+
|
|
11
14
|
/**
|
|
12
15
|
* @param {{
|
|
13
16
|
* dropdownData: Array,
|
|
@@ -26,21 +29,14 @@ import {
|
|
|
26
29
|
*/
|
|
27
30
|
|
|
28
31
|
const DropDownComponent = (props) => {
|
|
29
|
-
// select state that dictates the current value.
|
|
30
32
|
const [selected, setSelected] = useState(props.default);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const [dropdown, setDropdown] = useState();
|
|
34
|
-
|
|
35
|
-
//search params
|
|
36
|
-
const [searchParam, setSearchParam] = useState();
|
|
33
|
+
const [dropdown, setDropdown] = useState(false);
|
|
34
|
+
const [searchParam, setSearchParam] = useState("");
|
|
37
35
|
const { isLoading, showLoader = false } = props;
|
|
38
36
|
|
|
39
|
-
// dropdown menu ref
|
|
40
37
|
const dropdownRef = useRef(null);
|
|
41
38
|
const dropdownListRef = useRef(null);
|
|
42
39
|
|
|
43
|
-
// click outside closes the dropdown menu
|
|
44
40
|
const handleClickOutside = (event) => {
|
|
45
41
|
if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
|
|
46
42
|
setDropdown(false);
|
|
@@ -54,9 +50,10 @@ const DropDownComponent = (props) => {
|
|
|
54
50
|
};
|
|
55
51
|
}, []);
|
|
56
52
|
|
|
57
|
-
// useEffect to return a function value onChange
|
|
58
53
|
useEffect(() => {
|
|
59
|
-
|
|
54
|
+
if (props.onSelect) {
|
|
55
|
+
props.onSelect(selected);
|
|
56
|
+
}
|
|
60
57
|
}, [selected]);
|
|
61
58
|
|
|
62
59
|
const handleDropdownToggle = () => {
|
|
@@ -65,9 +62,8 @@ const DropDownComponent = (props) => {
|
|
|
65
62
|
|
|
66
63
|
const handleScroll = (e) => {
|
|
67
64
|
const { scrollTop, scrollHeight, clientHeight } = e.target;
|
|
68
|
-
const isBottom = scrollTop + clientHeight >= scrollHeight - 10;
|
|
65
|
+
const isBottom = scrollTop + clientHeight >= scrollHeight - 10;
|
|
69
66
|
if (isBottom) {
|
|
70
|
-
console.log("Near bottom, loading more data.");
|
|
71
67
|
props.loadMoreData();
|
|
72
68
|
}
|
|
73
69
|
};
|
|
@@ -82,79 +78,74 @@ const DropDownComponent = (props) => {
|
|
|
82
78
|
|
|
83
79
|
return (
|
|
84
80
|
<DropDownContainer
|
|
85
|
-
className={props
|
|
81
|
+
className={props.className}
|
|
86
82
|
ref={dropdownRef}
|
|
87
83
|
onMouseEnter={() => props.toggleOnHover && setDropdown(true)}
|
|
88
84
|
onMouseLeave={() => props.toggleOnHover && setDropdown(false)}
|
|
89
85
|
>
|
|
90
|
-
<DropDownHeader>{props
|
|
86
|
+
<DropDownHeader>{props.header}</DropDownHeader>
|
|
91
87
|
<DropDownControls>
|
|
92
|
-
{props
|
|
88
|
+
{props.searchable ? (
|
|
93
89
|
<ControlInput
|
|
94
|
-
placeholder={props
|
|
90
|
+
placeholder={props.inputPlaceHolder || "Select Dropdown"}
|
|
95
91
|
type="text"
|
|
96
|
-
value={props
|
|
97
|
-
onChange={(e) =>
|
|
98
|
-
setSearchParam(e.target.value);
|
|
99
|
-
}}
|
|
100
|
-
// onClick={() => setDropdown(true)}
|
|
92
|
+
value={props.valueSelect?.name || selected?.name}
|
|
93
|
+
onChange={(e) => setSearchParam(e.target.value)}
|
|
101
94
|
onClick={handleDropdownToggle}
|
|
102
95
|
/>
|
|
103
96
|
) : (
|
|
104
|
-
// <p onClick={() => setDropdown(!dropdown)}>
|
|
105
97
|
<p onClick={handleDropdownToggle}>
|
|
106
|
-
{props
|
|
98
|
+
{props.valueSelect?.name ||
|
|
107
99
|
selected?.name ||
|
|
108
|
-
props
|
|
100
|
+
props.inputPlaceHolder}
|
|
109
101
|
</p>
|
|
110
102
|
)}
|
|
111
|
-
|
|
112
|
-
|
|
103
|
+
<DownIcon onClick={handleDropdownToggle}>
|
|
104
|
+
<path d="M1 1L7 7L13 1" />
|
|
105
|
+
</DownIcon>
|
|
113
106
|
{searchParam && dropdown && (
|
|
114
107
|
<DropDownContent onScroll={handleScroll} ref={dropdownListRef}>
|
|
115
|
-
{props
|
|
108
|
+
{props.dropdownData.map((dropdownItem, idx) => {
|
|
116
109
|
if (
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
.includes(searchParam
|
|
120
|
-
)
|
|
110
|
+
dropdownItem.name
|
|
111
|
+
.toLowerCase()
|
|
112
|
+
.includes(searchParam.toLowerCase())
|
|
113
|
+
) {
|
|
121
114
|
return (
|
|
122
115
|
<DropDownItem
|
|
123
116
|
key={idx}
|
|
124
117
|
onClick={() => {
|
|
125
118
|
setSelected(dropdownItem);
|
|
126
|
-
setDropdown();
|
|
119
|
+
setDropdown(false);
|
|
127
120
|
}}
|
|
128
121
|
>
|
|
129
|
-
<span>{dropdownItem
|
|
130
|
-
{(props
|
|
122
|
+
<span>{dropdownItem.name}</span>
|
|
123
|
+
{(props.valueSelect || selected) === dropdownItem && (
|
|
131
124
|
<Tick />
|
|
132
125
|
)}
|
|
133
126
|
</DropDownItem>
|
|
134
127
|
);
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
135
130
|
})}
|
|
136
131
|
</DropDownContent>
|
|
137
132
|
)}
|
|
138
133
|
{!searchParam && dropdown && (
|
|
139
134
|
<DropDownContent onScroll={handleScroll} ref={dropdownListRef}>
|
|
140
|
-
{props
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
>
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
)}
|
|
153
|
-
</DropDownItem>
|
|
154
|
-
);
|
|
155
|
-
})}
|
|
135
|
+
{props.dropdownData.map((dropdownItem, idx) => (
|
|
136
|
+
<DropDownItem
|
|
137
|
+
key={idx}
|
|
138
|
+
onClick={() => {
|
|
139
|
+
setSelected(dropdownItem);
|
|
140
|
+
setDropdown(false);
|
|
141
|
+
}}
|
|
142
|
+
>
|
|
143
|
+
<span>{dropdownItem.name}</span>
|
|
144
|
+
{(props.valueSelect || selected) === dropdownItem && <Tick />}
|
|
145
|
+
</DropDownItem>
|
|
146
|
+
))}
|
|
156
147
|
<div className={showLoader ? "loader" : ""}>
|
|
157
|
-
{isLoading && showLoader && props
|
|
148
|
+
{isLoading && showLoader && props.dropdownData.length > 0 && (
|
|
158
149
|
<LoaderCustom />
|
|
159
150
|
)}
|
|
160
151
|
</div>
|
|
@@ -164,44 +155,5 @@ const DropDownComponent = (props) => {
|
|
|
164
155
|
</DropDownContainer>
|
|
165
156
|
);
|
|
166
157
|
};
|
|
167
|
-
export default DropDownComponent;
|
|
168
158
|
|
|
169
|
-
export
|
|
170
|
-
return (
|
|
171
|
-
<svg
|
|
172
|
-
width={width || "18"}
|
|
173
|
-
height={height || "9"}
|
|
174
|
-
viewBox="0 0 14 8"
|
|
175
|
-
fill="none"
|
|
176
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
177
|
-
onClick={onClick}
|
|
178
|
-
>
|
|
179
|
-
<path
|
|
180
|
-
d="M1 1L7 7L13 1"
|
|
181
|
-
stroke={fill || "#7C8080"}
|
|
182
|
-
strokeWidth="2"
|
|
183
|
-
strokeLinecap="round"
|
|
184
|
-
strokeLinejoin="round"
|
|
185
|
-
/>
|
|
186
|
-
</svg>
|
|
187
|
-
);
|
|
188
|
-
};
|
|
189
|
-
export const Tick = ({ size, stroke }) => {
|
|
190
|
-
return (
|
|
191
|
-
<svg
|
|
192
|
-
width={size || "16"}
|
|
193
|
-
height={size || "16"}
|
|
194
|
-
viewBox="0 0 16 16"
|
|
195
|
-
fill="none"
|
|
196
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
197
|
-
>
|
|
198
|
-
<path
|
|
199
|
-
d="M12.3828 4.23828L5.82031 11.7383L3.00781 8.92578"
|
|
200
|
-
stroke={stroke || "white"}
|
|
201
|
-
strokeWidth="1.5"
|
|
202
|
-
strokeLinecap="round"
|
|
203
|
-
strokeLinejoin="round"
|
|
204
|
-
/>
|
|
205
|
-
</svg>
|
|
206
|
-
);
|
|
207
|
-
};
|
|
159
|
+
export default DropDownComponent;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import styled from "styled-components";
|
|
2
2
|
import(
|
|
3
|
-
"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;0,1000
|
|
3
|
+
"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;0,1000&display=swap"
|
|
4
4
|
);
|
|
5
5
|
|
|
6
6
|
export const DropDownContainer = styled.div`
|
|
@@ -43,6 +43,10 @@ export const ControlInput = styled.input`
|
|
|
43
43
|
border: none;
|
|
44
44
|
cursor: caret;
|
|
45
45
|
background: none;
|
|
46
|
+
|
|
47
|
+
&::placeholder {
|
|
48
|
+
color: #adb2b2; // Placeholder text color
|
|
49
|
+
}
|
|
46
50
|
`;
|
|
47
51
|
|
|
48
52
|
export const DropDownContent = styled.ul`
|
|
@@ -56,24 +60,18 @@ export const DropDownContent = styled.ul`
|
|
|
56
60
|
max-height: 200px;
|
|
57
61
|
overflow-y: scroll;
|
|
58
62
|
scrollbar-width: thin;
|
|
59
|
-
/* "auto" or "thin" depending on browser support */
|
|
60
63
|
scrollbar-color: transparent transparent;
|
|
61
|
-
/* color values for thumb and track */
|
|
62
64
|
|
|
63
65
|
&::-webkit-scrollbar {
|
|
64
66
|
width: 6px;
|
|
65
|
-
/* adjust as needed */
|
|
66
67
|
background-color: transparent;
|
|
67
|
-
/* color value for track */
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
&::-webkit-scrollbar-thumb {
|
|
71
71
|
background-color: transparent;
|
|
72
|
-
/* color value for thumb */
|
|
73
72
|
}
|
|
74
|
-
|
|
75
|
-
.loader{
|
|
76
|
-
/* padding: 5px 0px; */
|
|
73
|
+
|
|
74
|
+
.loader {
|
|
77
75
|
margin-bottom: 20px;
|
|
78
76
|
}
|
|
79
77
|
`;
|
|
@@ -104,3 +102,28 @@ export const DropDownItem = styled.li`
|
|
|
104
102
|
}
|
|
105
103
|
}
|
|
106
104
|
`;
|
|
105
|
+
|
|
106
|
+
export const DownIcon = styled.svg`
|
|
107
|
+
width: ${({ width }) => width || "18px"};
|
|
108
|
+
height: ${({ height }) => height || "9px"};
|
|
109
|
+
fill: none;
|
|
110
|
+
cursor: pointer;
|
|
111
|
+
path {
|
|
112
|
+
stroke: ${({ fill }) => fill || "#7C8080"};
|
|
113
|
+
stroke-width: 2;
|
|
114
|
+
stroke-linecap: round;
|
|
115
|
+
stroke-linejoin: round;
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
|
|
119
|
+
export const Tick = styled.svg`
|
|
120
|
+
width: ${({ size }) => size || "16px"};
|
|
121
|
+
height: ${({ size }) => size || "16px"};
|
|
122
|
+
fill: none;
|
|
123
|
+
path {
|
|
124
|
+
stroke: ${({ stroke }) => stroke || "white"};
|
|
125
|
+
stroke-width: 1.5;
|
|
126
|
+
stroke-linecap: round;
|
|
127
|
+
stroke-linejoin: round;
|
|
128
|
+
}
|
|
129
|
+
`;
|