gbs-add-block 0.0.13 → 0.0.14

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": "gbs-add-block",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "React Component Library",
5
5
  "files": [
6
6
  "index.js",
@@ -74,6 +74,7 @@ export const Input = ({
74
74
  {/* If Type is password, this will show a password visible toggle button */}
75
75
  {props.type && props.type === "password" && (
76
76
  <button
77
+ type="button"
77
78
  className="absolute inset-y-0 right-0 flex items-center pr-2"
78
79
  onClick={toggleTypeForPassword}
79
80
  >
@@ -98,7 +99,9 @@ export const Input = ({
98
99
  value={otpValues[index]}
99
100
  onChange={(e) => updateOtpValue(index, e)}
100
101
  onKeyDown={(e) => handleKeydown(index, e)}
101
- // ref={(ref) => (inputRefs.current[index] = ref)}
102
+ ref={(ref) => {
103
+ inputRefs.current[index] = ref;
104
+ }}
102
105
  className={OTPClass}
103
106
  />
104
107
  ))}
@@ -8,6 +8,7 @@
8
8
  import React, {
9
9
  forwardRef,
10
10
  memo,
11
+ useCallback,
11
12
  useEffect,
12
13
  useImperativeHandle,
13
14
  useRef,
@@ -50,10 +51,6 @@ const MultiSelect = forwardRef<any, MultiSelectProps>((props, ref) => {
50
51
  handleDataSource();
51
52
  }, [items]);
52
53
 
53
- useEffect(() => {
54
- if (onSelect) onSelect(selected);
55
- }, [selected, onSelect]);
56
-
57
54
  useEffect(() => {
58
55
  const handleClickOutside = (event: MouseEvent) => {
59
56
  if (
@@ -87,13 +84,16 @@ const MultiSelect = forwardRef<any, MultiSelectProps>((props, ref) => {
87
84
  setShowPopover(!showPopover);
88
85
  };
89
86
 
90
- const handleSelect = (value: string) => {
91
- setSelected((prev) =>
92
- prev.includes(value)
93
- ? prev.filter((item) => item !== value)
94
- : [...prev, value]
95
- );
96
- };
87
+ const handleSelect = useCallback(
88
+ (value: string) => {
89
+ const newSelected = selected.includes(value)
90
+ ? selected.filter((item) => item !== value)
91
+ : [...selected, value];
92
+ setSelected(newSelected);
93
+ onSelect?.(newSelected);
94
+ },
95
+ [selected, onSelect]
96
+ );
97
97
 
98
98
  const getSelectedDisplay = () => {
99
99
  if (selected.length === 0) return placeholder;
@@ -127,6 +127,7 @@ const MultiSelect = forwardRef<any, MultiSelectProps>((props, ref) => {
127
127
  const clearSelected = () => {
128
128
  setSelected([]);
129
129
  setShowPopover(false);
130
+ if (onSelect) onSelect([]);
130
131
  };
131
132
 
132
133
  useImperativeHandle(ref, () => ({
@@ -142,19 +143,27 @@ const MultiSelect = forwardRef<any, MultiSelectProps>((props, ref) => {
142
143
  return (
143
144
  <div className="relative w-[200px]" ref={selectRef}>
144
145
  <div className="relative border w-[200px] flex items-center px-4 py-2 rounded-lg">
145
- <button onClick={togglePopover} className="flex-grow text-sm text-left">
146
+ <button
147
+ onClick={togglePopover}
148
+ className="flex-grow text-sm text-left"
149
+ type="button"
150
+ >
146
151
  {getSelectedDisplay()}
147
152
  </button>
148
153
  <div className="flex items-center space-x-2">
149
154
  {selected.length > 0 && (
150
- <button className="flex items-center px-2" onClick={clearSelected}>
155
+ <button
156
+ className="flex items-center px-2"
157
+ onClick={clearSelected}
158
+ type="button"
159
+ >
151
160
  <Icon
152
161
  elements={x}
153
162
  svgClass="h-4 w-4 stroke-gray-500 fill-none dark:stroke-white"
154
163
  />
155
164
  </button>
156
165
  )}
157
- <button onClick={togglePopover}>
166
+ <button onClick={togglePopover} type="button">
158
167
  <Icon
159
168
  elements={upDown}
160
169
  svgClass="h-4 w-4 stroke-gray-500 fill-none dark:stroke-white"
@@ -187,6 +196,7 @@ const MultiSelect = forwardRef<any, MultiSelectProps>((props, ref) => {
187
196
  {filteredItems.length > 0 ? (
188
197
  filteredItems.map(({ value, label }) => (
189
198
  <button
199
+ type="button"
190
200
  key={value}
191
201
  className="flex items-center w-full px-2 py-1 text-left hover:bg-blue-100 gap-2 rounded-lg mt-1 text-sm dark:hover:bg-blue-600"
192
202
  onClick={() => handleSelect(value)}