|
1 | 1 | import classNames from 'classnames';
|
2 | 2 | import React, { ChangeEvent, KeyboardEvent, useMemo, useState } from 'react';
|
| 3 | +import { createPortal } from 'react-dom'; |
3 | 4 | import { DropdownState, ReducerAction, StateChangeType, useDropdown } from '../../src';
|
4 | 5 | import './MultiSelect.css';
|
5 | 6 |
|
@@ -125,71 +126,71 @@ export const Dropdown: React.FC<Props> = ({ onSelect, values }) => {
|
125 | 126 |
|
126 | 127 | return (
|
127 | 128 | <div
|
128 |
| - className="wrapper" |
| 129 | + className={classNames('wrapper', { 'wrapper-open': isOpen })} |
129 | 130 | {...getWrapperProps()}
|
130 | 131 | onKeyDown={handleKeyDown}
|
131 | 132 | onFocus={handleFocus}
|
132 | 133 | onBlur={handleBlur}
|
133 | 134 | >
|
134 |
| - <div className={classNames('inner-wrapper', { 'inner-wrapper-open': isOpen })}> |
135 |
| - {values.length === 0 |
136 |
| - ? null |
137 |
| - : values.map((item: Item) => { |
138 |
| - return ( |
139 |
| - <div className="multivalue" key={item.value}> |
140 |
| - <span className="multivalue-name">{item.name}</span> |
141 |
| - <button |
142 |
| - type="button" |
143 |
| - className="remove" |
144 |
| - onClick={handleRemoveClick(item)} |
145 |
| - tabIndex={isFocused ? 0 : -1} |
146 |
| - aria-label={`Remove value ${item.name}`} |
147 |
| - ></button> |
148 |
| - </div> |
149 |
| - ); |
150 |
| - })} |
151 |
| - |
152 |
| - <input |
153 |
| - className="input" |
154 |
| - type="text" |
155 |
| - id="input" |
156 |
| - {...getInputProps()} |
157 |
| - placeholder="Select city" |
158 |
| - value={inputValue} |
159 |
| - onChange={handleChange} |
160 |
| - autoComplete="off" |
161 |
| - /> |
162 |
| - |
163 |
| - {values.length === 0 ? null : ( |
164 |
| - <button |
165 |
| - className="reset" |
166 |
| - onClick={handleResetClick} |
167 |
| - type="button" |
168 |
| - aria-label="Clear all values" |
169 |
| - ></button> |
170 |
| - )} |
171 |
| - </div> |
172 |
| - |
173 |
| - {isOpen && ( |
174 |
| - <ul className="menu" {...(getMenuProps() as any)}> |
175 |
| - {options.length === 0 ? ( |
176 |
| - <li>No data</li> |
177 |
| - ) : ( |
178 |
| - options.map((item: Item, index) => ( |
179 |
| - <li |
180 |
| - key={item.value} |
181 |
| - className={classNames('item', { |
182 |
| - active: highlightedIndex === index, |
183 |
| - selected: values.some((el) => el.value === item.value), |
184 |
| - })} |
185 |
| - {...getItemProps(item, index)} |
186 |
| - > |
187 |
| - {item.name} |
188 |
| - </li> |
189 |
| - )) |
190 |
| - )} |
191 |
| - </ul> |
| 135 | + {values.length === 0 |
| 136 | + ? null |
| 137 | + : values.map((item: Item) => { |
| 138 | + return ( |
| 139 | + <div className="multivalue" key={item.value}> |
| 140 | + <span className="multivalue-name">{item.name}</span> |
| 141 | + <button |
| 142 | + type="button" |
| 143 | + className="remove" |
| 144 | + onClick={handleRemoveClick(item)} |
| 145 | + tabIndex={isFocused ? 0 : -1} |
| 146 | + aria-label={`Remove value ${item.name}`} |
| 147 | + ></button> |
| 148 | + </div> |
| 149 | + ); |
| 150 | + })} |
| 151 | + |
| 152 | + <input |
| 153 | + className="input" |
| 154 | + type="text" |
| 155 | + id="input" |
| 156 | + {...getInputProps()} |
| 157 | + placeholder="Select city" |
| 158 | + value={inputValue} |
| 159 | + onChange={handleChange} |
| 160 | + autoComplete="off" |
| 161 | + /> |
| 162 | + |
| 163 | + {values.length === 0 ? null : ( |
| 164 | + <button |
| 165 | + className="reset" |
| 166 | + onClick={handleResetClick} |
| 167 | + type="button" |
| 168 | + aria-label="Clear all values" |
| 169 | + ></button> |
192 | 170 | )}
|
| 171 | + |
| 172 | + {isOpen && |
| 173 | + createPortal( |
| 174 | + <ul className="menu" {...(getMenuProps() as any)}> |
| 175 | + {options.length === 0 ? ( |
| 176 | + <li>No data</li> |
| 177 | + ) : ( |
| 178 | + options.map((item: Item, index) => ( |
| 179 | + <li |
| 180 | + key={item.value} |
| 181 | + className={classNames('item', { |
| 182 | + active: highlightedIndex === index, |
| 183 | + selected: values.some((el) => el.value === item.value), |
| 184 | + })} |
| 185 | + {...getItemProps(item, index)} |
| 186 | + > |
| 187 | + {item.name} |
| 188 | + </li> |
| 189 | + )) |
| 190 | + )} |
| 191 | + </ul>, |
| 192 | + document.body |
| 193 | + )} |
193 | 194 | </div>
|
194 | 195 | );
|
195 | 196 | };
|
0 commit comments