Skip to content

Commit c5e8aa8

Browse files
authored
Merge pull request #106 from kmiyauchi/master
Fixed bug on WFUIDropdown
2 parents 2b5f2df + 5c3e4a1 commit c5e8aa8

2 files changed

Lines changed: 38 additions & 31 deletions

File tree

lib/WFUIDropdown/WFUIDropdown.js

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -211,15 +211,28 @@ var WFUIDropdown = function (_React$Component) {
211211
_this.onHide = _this.onHide.bind(_this);
212212
_this.onShowOther = _this.onShowOther.bind(_this); // When other dropdown menu is activated.
213213
_this.getMenu = _this.getMenu.bind(_this);
214+
_this.getMenuContainerElement = _this.getMenuContainerElement.bind(_this);
214215
return _this;
215216
}
216217

217218
_createClass(WFUIDropdown, [{
219+
key: 'getMenuContainerElement',
220+
value: function getMenuContainerElement() {
221+
// Create container for dropdown menu
222+
var el = document.getElementById('wfui-dropdown-menu');
223+
if (!el) {
224+
el = document.createElement('div');
225+
el.setAttribute('id', 'wfui-dropdown-menu');
226+
document.body.appendChild(el);
227+
}
228+
return el;
229+
}
230+
}, {
218231
key: 'onToggle',
219232
value: function onToggle(e) {
220233
var uid = this.state.uid;
221234

222-
var el = document.getElementById('wfui-dropdown-menu');
235+
var el = this.getMenuContainerElement();
223236
e.stopPropagation();
224237
if (el) {
225238
if (el.getAttribute('data-uid') !== uid) {
@@ -291,7 +304,7 @@ var WFUIDropdown = function (_React$Component) {
291304
window.dispatchEvent(event);
292305

293306
// Render Element
294-
var el = document.getElementById('wfui-dropdown-menu');
307+
var el = this.getMenuContainerElement();
295308
if (el) {
296309
var buttonElement = e.target.tagName === 'SPAN' ? e.target.parentElement : e.target;
297310
var viewportOffset = buttonElement.getBoundingClientRect();
@@ -321,7 +334,7 @@ var WFUIDropdown = function (_React$Component) {
321334
}, {
322335
key: 'onHide',
323336
value: function onHide(e) {
324-
var el = document.getElementById('wfui-dropdown-menu');
337+
var el = this.getMenuContainerElement();
325338
if (el.getAttribute('class') === 'menu-opened') {
326339
el.setAttribute('class', 'menu-closed');
327340
el.setAttribute('data-uid', '');
@@ -340,25 +353,17 @@ var WFUIDropdown = function (_React$Component) {
340353
}, {
341354
key: 'componentWillMount',
342355
value: function componentWillMount() {
343-
// Create container for dropdown menu
344-
var el = document.getElementById('wfui-dropdown-menu');
345-
if (!el) {
346-
el = document.createElement('div');
347-
el.setAttribute('id', 'wfui-dropdown-menu');
348-
document.body.appendChild(el);
349-
350-
// Outside click
351-
window.addEventListener('click', this.onHide);
352-
}
353-
356+
this.getMenuContainerElement();
357+
// Outside click
358+
window.addEventListener('click', this.onHide);
354359
// Set event listener
355360
window.addEventListener('wfui-dropdown-menu-clicked', this.onShowOther);
356361
}
357362
}, {
358363
key: 'componentWillUnmount',
359364
value: function componentWillUnmount() {
360365
// Remove
361-
var el = document.getElementById('wfui-dropdown-menu');
366+
var el = this.getMenuContainerElement();
362367
if (el) {
363368
document.body.removeChild(el);
364369
// Remove event listener

src/WFUIDropdown/WFUIDropdown.jsx

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -143,11 +143,21 @@ class WFUIDropdown extends React.Component {
143143
this.onHide = this.onHide.bind(this);
144144
this.onShowOther = this.onShowOther.bind(this); // When other dropdown menu is activated.
145145
this.getMenu = this.getMenu.bind(this);
146+
this.getMenuContainerElement = this.getMenuContainerElement.bind(this);
147+
}
148+
getMenuContainerElement() {
149+
// Create container for dropdown menu
150+
let el = document.getElementById('wfui-dropdown-menu');
151+
if (!el) {
152+
el = document.createElement('div');
153+
el.setAttribute('id', 'wfui-dropdown-menu');
154+
document.body.appendChild(el);
155+
}
156+
return el;
146157
}
147-
148158
onToggle(e) {
149159
const { uid } = this.state;
150-
const el = document.getElementById('wfui-dropdown-menu');
160+
const el = this.getMenuContainerElement();
151161
e.stopPropagation();
152162
if (el) {
153163
if (el.getAttribute('data-uid') !== uid) {
@@ -200,7 +210,7 @@ class WFUIDropdown extends React.Component {
200210
window.dispatchEvent(event);
201211

202212
// Render Element
203-
const el = document.getElementById('wfui-dropdown-menu');
213+
const el = this.getMenuContainerElement();
204214
if (el) {
205215
const buttonElement =
206216
e.target.tagName === 'SPAN' ? e.target.parentElement : e.target;
@@ -240,7 +250,7 @@ class WFUIDropdown extends React.Component {
240250
}
241251

242252
onHide(e) {
243-
const el = document.getElementById('wfui-dropdown-menu');
253+
const el = this.getMenuContainerElement();
244254
if (el.getAttribute('class') === 'menu-opened') {
245255
el.setAttribute('class', 'menu-closed');
246256
el.setAttribute('data-uid', '');
@@ -257,24 +267,16 @@ class WFUIDropdown extends React.Component {
257267
/////////////////////////////////////////////////////////////
258268

259269
componentWillMount() {
260-
// Create container for dropdown menu
261-
let el = document.getElementById('wfui-dropdown-menu');
262-
if (!el) {
263-
el = document.createElement('div');
264-
el.setAttribute('id', 'wfui-dropdown-menu');
265-
document.body.appendChild(el);
266-
267-
// Outside click
268-
window.addEventListener('click', this.onHide);
269-
}
270-
270+
this.getMenuContainerElement();
271+
// Outside click
272+
window.addEventListener('click', this.onHide);
271273
// Set event listener
272274
window.addEventListener('wfui-dropdown-menu-clicked', this.onShowOther);
273275
}
274276

275277
componentWillUnmount() {
276278
// Remove
277-
let el = document.getElementById('wfui-dropdown-menu');
279+
let el = this.getMenuContainerElement();
278280
if (el) {
279281
document.body.removeChild(el);
280282
// Remove event listener

0 commit comments

Comments
 (0)