diff --git a/.gitignore b/.gitignore
index e3b86d0..4caa8a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ coverage
examples/bundle.js
examples/style.css
npm-debug.log
+yarn.lock
diff --git a/src/Dropdown/DialogWrapper.js b/src/Dropdown/DialogWrapper.js
new file mode 100644
index 0000000..94ab3e5
--- /dev/null
+++ b/src/Dropdown/DialogWrapper.js
@@ -0,0 +1,28 @@
+import React, { Component, PropTypes } from 'react';
+/*
+ * We must make another component so that this.closePortal
+ * gets passed down and handed to children
+ */
+export default class DialogWrapper extends Component {
+ static propTypes = {
+ closePortal: PropTypes.func,
+ children: PropTypes.any,
+ target: PropTypes.any.isRequired
+ }
+
+ componentDidMount() {
+ this.dialogDom.showModal(this.props.target)
+ }
+
+ render() {
+ const { closePortal, children } = this.props
+ return(
+
+ );
+ }
+}
diff --git a/src/Dropdown/Dropdown.css b/src/Dropdown/Dropdown.css
index f6b21bd..deb4be8 100644
--- a/src/Dropdown/Dropdown.css
+++ b/src/Dropdown/Dropdown.css
@@ -14,3 +14,13 @@
.mdl-dropdown *, .mdl-dropdown *:before, .mdl-dropdown *:after {
box-sizing: inherit;
}
+
+.portal__dialog {
+ border: 0 none;
+ margin: 0;
+ padding: 0;
+}
+
+.portal__dialog::backdrop {
+ background: transparent;
+}
diff --git a/src/Dropdown/Dropdown.js b/src/Dropdown/Dropdown.js
index ea1f6b4..0973097 100644
--- a/src/Dropdown/Dropdown.js
+++ b/src/Dropdown/Dropdown.js
@@ -5,6 +5,7 @@ import Portal from 'react-portal'
import Tether from 'tether'
import './Dropdown.css'
+import DialogWrapper from './DialogWrapper';
const POS = {
t: 'top',
@@ -63,9 +64,10 @@ export default class Dropdown extends Component {
useTargetMinHeight,
viewportPadding: pad,
} = this.props
+ const mdlParent = findDOMNode(this.dialogDom);
// append class name
- portalNode.classList.add('mdl-dropdown')
+ mdlParent.classList.add('mdl-dropdown')
// window is our boundary
const { innerWidth, innerHeight } = window
@@ -74,7 +76,7 @@ export default class Dropdown extends Component {
const targetNode = this.props.targetNode || findDOMNode(this)
// get bounding rects
- const portal = portalNode.getBoundingClientRect()
+ const portal = portalNode.getBoundingClientRect() // TOOD: Test
const target = targetNode.getBoundingClientRect()
// parse position
@@ -167,7 +169,7 @@ export default class Dropdown extends Component {
// tether
this.tether = new Tether({
- element: portalNode,
+ element: mdlParent,
target: targetNode,
attachment: `${ay} ${ax}`,
targetAttachment: `${ty} ${tx}`,
@@ -179,7 +181,7 @@ export default class Dropdown extends Component {
})
// fade in
- this.applyStyles(portalNode, { opacity: 1 })
+ this.applyStyles(mdlParent, { opacity: 1 })
// force reposition
if (portal.height > maxHeight) {
@@ -213,9 +215,13 @@ export default class Dropdown extends Component {
onOpen={this.onOpen}
beforeClose={this.beforeClose}
>
- {children}
+
Useful for a button-style dropdown.
+