Skip to content

Commit 5099538

Browse files
♻️ return complete object as onChange
1 parent b4668b0 commit 5099538

File tree

8 files changed

+17
-28
lines changed

8 files changed

+17
-28
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export default App;
6262
| --------------------- | --------------------------------- | ------------------ | ------- |
6363
| `labelledBy` | value for `aria-labelledby` | `string` | |
6464
| `options` | options for dropdown | `[{label, value}]` | |
65-
| `selected` | pre-selected rows | `[value]` | `[]` |
65+
| `selected` | pre-selected rows | `[{label, value}]` | `[]` |
6666
| `hasSelectAll` | toggle 'Select All' option | `boolean` | `true` |
6767
| `isLoading` | show spinner on select | `boolean` | `false` |
6868
| `shouldToggleOnHover` | toggle dropdown on hover option | `boolean` | `false` |

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-multi-select-component",
3-
"version": "1.0.1",
3+
"version": "1.2.0",
44
"description": "Simple multiple selection dropdown component with checkboxes, search and select-al`",
55
"author": "harshzalavadiya",
66
"license": "MIT",

preview.gif

37.6 KB
Loading

src/lib/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ export interface IStyledProps {
1717

1818
export interface ISelectProps {
1919
options: Option[];
20-
selected: any[];
20+
selected: Option[];
2121
onChange?;
22-
valueRenderer?: (selected: any[], options: Option[]) => string;
22+
valueRenderer?: (selected: Option[], options: Option[]) => string;
2323
ItemRenderer?: Function;
2424
selectAllLabel?: string;
2525
isLoading?: boolean;

src/multi-select/header.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,7 @@ const DropdownHeader = ({
1212
const allSelected = selected.length === options.length;
1313
const customText = valueRenderer && valueRenderer(selected, options);
1414

15-
const getSelectedText = () => {
16-
const selectedOptions = selected.map(s =>
17-
options.find((o: any) => o.value === s)
18-
);
19-
return selectedOptions.map((s: any) => (s ? s.label : "")).join(", ");
20-
};
15+
const getSelectedText = () => selected.map(s => s.label).join(", ");
2116

2217
if (noneSelected) {
2318
return (

src/select-panel/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ import SelectList from "./select-list";
1515
interface ISelectPanelProps {
1616
ItemRenderer?: Function;
1717
options: Option[];
18-
selected: any[];
18+
selected: Option[];
1919
selectAllLabel?: string;
20-
onChange: (selected: Array<any>) => void;
20+
onChange: (selected: Option[]) => void;
2121
disabled?: boolean;
2222
disableSearch?: boolean;
2323
hasSelectAll: boolean;
@@ -58,7 +58,7 @@ export const SelectPanel = (props: ISelectPanelProps) => {
5858
value: ""
5959
};
6060

61-
const selectAll = () => onChange(options.map(o => o.value));
61+
const selectAll = () => onChange(options);
6262

6363
const selectNone = () => onChange([]);
6464

src/select-panel/select-item.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ const SelectItem = ({
5656

5757
const updateFocus = () => {
5858
if (focused && itemRef) {
59-
console.log(itemRef);
6059
itemRef.current.focus();
6160
}
6261
};

src/select-panel/select-list.tsx

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import SelectItem from "./select-item";
1010
interface ISelectListProps {
1111
focusIndex: number;
1212
ItemRenderer?: Function;
13-
options: object[];
14-
selected: object[];
15-
onChange: (selected: any) => void;
13+
options: Option[];
14+
selected: Option[];
15+
onChange: (selected: Option[]) => void;
1616
onClick: Function;
1717
disabled?: boolean;
1818
}
@@ -38,16 +38,11 @@ const SelectList = ({
3838
if (disabled) {
3939
return;
4040
}
41-
if (checked) {
42-
onChange([...selected, option.value]);
43-
} else {
44-
const index = selected.indexOf(option.value);
45-
const removed = [
46-
...selected.slice(0, index),
47-
...selected.slice(index + 1)
48-
];
49-
onChange(removed);
50-
}
41+
onChange(
42+
checked
43+
? [...selected, option]
44+
: selected.filter((o: any) => o.value !== option.value)
45+
);
5146
};
5247

5348
return (
@@ -58,7 +53,7 @@ const SelectList = ({
5853
focused={focusIndex === i}
5954
option={o}
6055
onSelectionChanged={c => handleSelectionChanged(o, c)}
61-
checked={selected.includes(o.value)}
56+
checked={selected.find(s => s.value === o.value) ? true : false}
6257
onClick={e => onClick(e, i)}
6358
itemRenderer={ItemRenderer}
6459
disabled={o.disabled || disabled}

0 commit comments

Comments
 (0)