l-min-components 1.0.480 → 1.0.485

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "l-min-components",
3
- "version": "1.0.480",
3
+ "version": "1.0.485",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "src/assets",
@@ -0,0 +1,201 @@
1
+ import React, { useState, CSSProperties, useEffect, useRef } from "react";
2
+ import LoaderCustom from "../loader";
3
+ import {
4
+ ControlInput,
5
+ DropDownContainer,
6
+ DropDownContent,
7
+ DropDownControls,
8
+ DropDownHeader,
9
+ DropDownItem,
10
+ } from "./styles";
11
+ /**
12
+ * @param {{
13
+ * dropdownData: Array,
14
+ * header: string,
15
+ * searchable: boolean,
16
+ * className: string,
17
+ * onSelect: Function,
18
+ * inputPlaceHolder: string,
19
+ * default: {name: string | number, [key: string]: string | number}
20
+ * toggleOnHover: boolean
21
+ * loadMoreData: Function
22
+ * isLoading: boolean,
23
+ * showLoader: boolean,
24
+ * }} props - properties of the dropdown component
25
+ */
26
+
27
+ const DropDownComponent = (props) => {
28
+ // select state that dictates the current value.
29
+ const [selected, setSelected] = useState(props.default);
30
+
31
+ // dropdown state that dictates if dropdown is dropped or not.
32
+ const [dropdown, setDropdown] = useState();
33
+
34
+ //search params
35
+ const [searchParam, setSearchParam] = useState();
36
+ const { isLoading, showLoader = false } = props;
37
+
38
+ // dropdown menu ref
39
+ const dropdownRef = useRef(null);
40
+ const dropdownListRef = useRef(null);
41
+
42
+ // click outside closes the dropdown menu
43
+ const handleClickOutside = (event) => {
44
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
45
+ setDropdown(false)
46
+ }
47
+ };
48
+
49
+ useEffect(() => {
50
+ document.addEventListener('click', handleClickOutside);
51
+ return () => {
52
+ document.removeEventListener('click', handleClickOutside);
53
+ };
54
+ }, []);
55
+
56
+ // useEffect to return a function value onChange
57
+ useEffect(() => {
58
+ props?.onSelect && props?.onSelect(selected);
59
+ }, [selected]);
60
+
61
+ const handleDropdownToggle = () => {
62
+ setDropdown(prevDropdown => !prevDropdown);
63
+ };
64
+
65
+
66
+ const handleScroll = (e) => {
67
+ const { scrollTop, scrollHeight, clientHeight } = e.target;
68
+ const isBottom = scrollTop + clientHeight >= scrollHeight - 10; // Adjusted threshold to 10px
69
+ if (isBottom) {
70
+ console.log("Near bottom, loading more data.");
71
+ props.loadMoreData();
72
+ }
73
+ };
74
+
75
+ useEffect(() => {
76
+ const listElement = dropdownListRef.current;
77
+ if (listElement) {
78
+ listElement.addEventListener('scroll', handleScroll);
79
+ return () => listElement.removeEventListener('scroll', handleScroll);
80
+ }
81
+ }, [props.dropdownData]);
82
+
83
+
84
+ return (
85
+ <DropDownContainer
86
+ className={props?.className}
87
+ ref={dropdownRef}
88
+ onMouseEnter={() => props.toggleOnHover && setDropdown(true)}
89
+ onMouseLeave={() => props.toggleOnHover && setDropdown(false)}
90
+ >
91
+ <DropDownHeader>{props?.header}</DropDownHeader>
92
+ <DropDownControls>
93
+ {props?.searchable ? (
94
+ <ControlInput
95
+ placeholder={props?.inputPlaceHolder || "Select Dropdown"}
96
+ type="text"
97
+ value={selected?.name}
98
+ onChange={(e) => {
99
+ setSearchParam(e.target.value);
100
+ }}
101
+ // onClick={() => setDropdown(true)}
102
+ onClick={handleDropdownToggle}
103
+ />
104
+ ) : (
105
+ // <p onClick={() => setDropdown(!dropdown)}>
106
+ <p onClick={handleDropdownToggle}>
107
+ {selected?.name || props?.inputPlaceHolder}
108
+ </p>
109
+ )}
110
+ {/* <DownIcon onClick={() => setDropdown(!dropdown)} /> */}
111
+ <DownIcon onClick={handleDropdownToggle} />
112
+ {searchParam && dropdown && (
113
+ <DropDownContent onScroll={handleScroll} ref={dropdownListRef}>
114
+ {props?.dropdownData?.map((dropdownItem, idx) => {
115
+ if (
116
+ props?.dropdownData[idx]?.name
117
+ ?.toLowerCase()
118
+ .includes(searchParam?.toLowerCase())
119
+ )
120
+ return (
121
+ <DropDownItem
122
+ key={idx}
123
+ onClick={() => {
124
+ setSelected(dropdownItem);
125
+ setDropdown();
126
+ }}
127
+ >
128
+ <span>{dropdownItem?.name}</span>
129
+ {selected === dropdownItem && <Tick />}
130
+ </DropDownItem>
131
+ );
132
+ })}
133
+ </DropDownContent>
134
+ )}
135
+ {!searchParam && dropdown && (
136
+ <DropDownContent onScroll={handleScroll} ref={dropdownListRef}>
137
+ {props?.dropdownData?.map((dropdownItem, idx) => {
138
+ return (
139
+ <DropDownItem
140
+ key={idx}
141
+ onClick={() => {
142
+ setSelected(dropdownItem);
143
+ setDropdown();
144
+ }}
145
+ >
146
+ <span>{dropdownItem?.name}</span>
147
+ {selected === dropdownItem && <Tick />}
148
+ </DropDownItem>
149
+ );
150
+ })}
151
+ <div className={showLoader ? "loader" : ""}>
152
+ {isLoading && showLoader && props?.dropdownData?.length > 0 && <LoaderCustom />}
153
+ </div>
154
+
155
+ </DropDownContent>
156
+ )}
157
+ </DropDownControls>
158
+ </DropDownContainer>
159
+ );
160
+ };
161
+ export default DropDownComponent;
162
+
163
+ export const DownIcon = ({ width, height, fill, onClick }) => {
164
+ return (
165
+ <svg
166
+ width={width || "18"}
167
+ height={height || "9"}
168
+ viewBox="0 0 14 8"
169
+ fill="none"
170
+ xmlns="http://www.w3.org/2000/svg"
171
+ onClick={onClick}
172
+ >
173
+ <path
174
+ d="M1 1L7 7L13 1"
175
+ stroke={fill || "#7C8080"}
176
+ strokeWidth="2"
177
+ strokeLinecap="round"
178
+ strokeLinejoin="round"
179
+ />
180
+ </svg>
181
+ );
182
+ };
183
+ export const Tick = ({ size, stroke }) => {
184
+ return (
185
+ <svg
186
+ width={size || "16"}
187
+ height={size || "16"}
188
+ viewBox="0 0 16 16"
189
+ fill="none"
190
+ xmlns="http://www.w3.org/2000/svg"
191
+ >
192
+ <path
193
+ d="M12.3828 4.23828L5.82031 11.7383L3.00781 8.92578"
194
+ stroke={stroke || "white"}
195
+ strokeWidth="1.5"
196
+ strokeLinecap="round"
197
+ strokeLinejoin="round"
198
+ />
199
+ </svg>
200
+ );
201
+ };
@@ -50,7 +50,8 @@ export const DropDownContent = styled.ul`
50
50
  top: 35px;
51
51
  left: 0;
52
52
  list-style-type: none;
53
- padding-left: 20px;
53
+ padding-left: 25px;
54
+ padding-bottom: 0px;
54
55
  width: 100%;
55
56
  max-height: 200px;
56
57
  overflow-y: scroll;
@@ -71,6 +72,10 @@ export const DropDownContent = styled.ul`
71
72
  /* color value for thumb */
72
73
  }
73
74
  // padding: 4px 10px;
75
+ .loader{
76
+ /* padding: 5px 0px; */
77
+ margin-bottom: 20px;
78
+ }
74
79
  `;
75
80
 
76
81
  export const DropDownItem = styled.li`
@@ -19,7 +19,8 @@ const ChatHeader = ({
19
19
  deleteChatModal,
20
20
  userFullName,
21
21
  courseName,
22
- userType
22
+ userType,
23
+ userAvatar
23
24
  }) => {
24
25
  // handle click outside dropdown container
25
26
  const dropdownContainer = useRef(null);
@@ -48,9 +49,9 @@ const ChatHeader = ({
48
49
  <div className="avatar-profile">
49
50
  <img
50
51
  src={
51
- !chatRecipient?.profile_picture?.length
52
- ? Avatar
53
- : chatRecipient?.profile_picture
52
+ userAvatar
53
+ ? userAvatar
54
+ : Avatar
54
55
  }
55
56
  alt=""
56
57
  />
@@ -13,6 +13,7 @@ const MessagesAddon = ({
13
13
  setRoomID,
14
14
  userID,
15
15
  setUserID,
16
+ userAvatar
16
17
  }) => {
17
18
  const messagesContextData = useMessagesContext();
18
19
 
@@ -28,6 +29,7 @@ const MessagesAddon = ({
28
29
  setRoomID={setRoomID}
29
30
  userID={userID}
30
31
  setUserID={setUserID}
32
+ userAvatar={userAvatar}
31
33
  />
32
34
  </MessagesContext.Provider>
33
35
  );
@@ -44,6 +44,7 @@ const Messages = ({
44
44
  setRoomID,
45
45
  userID,
46
46
  setUserID,
47
+ userAvatar
47
48
  }) => {
48
49
  const [showEmoji, setShowEmoji] = useState(false);
49
50
  const [chatOptions, setChatOptions] = useState(false);
@@ -230,7 +231,7 @@ const Messages = ({
230
231
  setUserChatList(sortedList);
231
232
 
232
233
  if (newMessage?.room?.id === roomID) {
233
- setAllMessages((prev) => [...prev, newMessage]);
234
+ // setAllMessages((prev) => [...prev, newMessage]);
234
235
  } else {
235
236
  console.log(userChatList);
236
237
  }
@@ -291,6 +292,7 @@ const Messages = ({
291
292
  userFullName={userFullName}
292
293
  userType={userType}
293
294
  courseName={courseName}
295
+ userAvatar={userAvatar}
294
296
  />
295
297
 
296
298
  <MessageBody ref={scrollRef}>
@@ -34,7 +34,7 @@ const UserCard = ({ user, isOpen }) => {
34
34
  }
35
35
 
36
36
  generalData?.accounts?.results?.map((account, idx) => {
37
- if (account?.id === activeDeveloperAccount) {
37
+ if (account?.id) {
38
38
  return setOrganizationName(account);
39
39
  }
40
40
  });
@@ -1,108 +0,0 @@
1
- import React, { useState, useRef, useEffect } from "react";
2
- import {
3
- ControlInput,
4
- DropDownContainer,
5
- DropDownContent,
6
- DropDownControls,
7
- DropDownHeader,
8
- DropDownItem,
9
- } from "./styles";
10
-
11
- const DropDownComponent = (props) => {
12
- const [selected, setSelected] = useState(props.default);
13
- const [dropdown, setDropdown] = useState(false);
14
- const [searchParam, setSearchParam] = useState();
15
-
16
- const dropdownRef = useRef(null);
17
-
18
- const handleClickOutside = (event) => {
19
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
20
- setDropdown(false);
21
- }
22
- };
23
-
24
- useEffect(() => {
25
- document.addEventListener('click', handleClickOutside);
26
- return () => {
27
- document.removeEventListener('click', handleClickOutside);
28
- };
29
- }, []);
30
-
31
- useEffect(() => {
32
- props?.onSelect && props?.onSelect(selected);
33
- }, [selected]);
34
-
35
- const handleDropdownToggle = () => {
36
- setDropdown(prevDropdown => !prevDropdown);
37
- };
38
-
39
- return (
40
- <DropDownContainer
41
- className={props?.className}
42
- ref={dropdownRef}
43
- onMouseEnter={() => props.toggleOnHover && setDropdown(true)}
44
- onMouseLeave={() => props.toggleOnHover && setDropdown(false)}
45
- >
46
- <DropDownHeader>{props?.header}</DropDownHeader>
47
- <DropDownControls>
48
- {props?.searchable ? (
49
- <ControlInput
50
- placeholder={props?.inputPlaceHolder || "Select Dropdown"}
51
- type="text"
52
- value={selected?.name}
53
- onChange={(e) => setSearchParam(e.target.value)}
54
- onClick={handleDropdownToggle}
55
- />
56
- ) : (
57
- <p onClick={handleDropdownToggle}>
58
- {selected?.name || props?.inputPlaceHolder}
59
- </p>
60
- )}
61
- <DownIcon onClick={handleDropdownToggle} />
62
- {searchParam && dropdown && (
63
- <DropDownContent>
64
- {props?.dropdownData?.map((dropdownItem, idx) => {
65
- if (
66
- props?.dropdownData[idx]?.name
67
- ?.toLowerCase()
68
- .includes(searchParam?.toLowerCase())
69
- )
70
- return (
71
- <DropDownItem
72
- key={idx}
73
- onClick={() => {
74
- setSelected(dropdownItem);
75
- setDropdown(false);
76
- }}
77
- >
78
- <span>{dropdownItem?.name}</span>
79
- {selected === dropdownItem && <Tick />}
80
- </DropDownItem>
81
- );
82
- })}
83
- </DropDownContent>
84
- )}
85
- {!searchParam && dropdown && (
86
- <DropDownContent>
87
- {props?.dropdownData?.map((dropdownItem, idx) => {
88
- return (
89
- <DropDownItem
90
- key={idx}
91
- onClick={() => {
92
- setSelected(dropdownItem);
93
- setDropdown(false);
94
- }}
95
- >
96
- <span>{dropdownItem?.name}</span>
97
- {selected === dropdownItem && <Tick />}
98
- </DropDownItem>
99
- );
100
- })}
101
- </DropDownContent>
102
- )}
103
- </DropDownControls>
104
- </DropDownContainer>
105
- );
106
- };
107
-
108
- export default DropDownComponent;