Add Modal.tsx

This commit is contained in:
Jerko Steiner 2019-03-26 20:33:00 +08:00
parent 1e7ea06f3d
commit b38004a08a
3 changed files with 68 additions and 0 deletions

View File

@ -0,0 +1,47 @@
import React from 'react'
import T from 'react-dom/test-utils'
import {Modal} from './Modal'
import {TestUtils} from '../test-utils'
describe('Modal', () => {
class TestToggle extends React.PureComponent<{}, {visible: boolean}> {
constructor(props: {}) {
super(props)
this.state = {
visible: false,
}
}
toggle = () => {
this.setState({
visible: !this.state.visible,
})
}
render() {
return (
<div>
<button onClick={this.toggle}>Toggle</button>
<Modal isActive={this.state.visible}>
hi!
</Modal>
</div>
)
}
}
describe('isActive', () => {
const t = new TestUtils()
it('toggles is-active via isActive property', () => {
const {node} = t.render(<TestToggle />)
expect(node.innerHTML).toContain('hi!')
const modal = node.querySelector('.modal') as HTMLElement
expect(modal.className).toEqual('modal')
T.Simulate.click(node.querySelector('button') as HTMLElement)
expect(modal.className).toEqual('modal is-active')
T.Simulate.click(node.querySelector('button') as HTMLElement)
expect(modal.className).toEqual('modal')
})
})
})

View File

@ -0,0 +1,20 @@
import {Modal as M, ModalBackground, ModalContent, ModalClose} from 'bloomer'
import React from 'react'
export interface IModalProps {
isActive?: boolean
}
export class Modal extends React.PureComponent<IModalProps> {
render() {
return (
<M isActive={this.props.isActive}>
<ModalBackground />
<ModalContent>
{this.props.children}
</ModalContent>
<ModalClose />
</M>
)
}
}

View File

@ -1,4 +1,5 @@
export * from './Button' export * from './Button'
// export * from './Component' // export * from './Component'
export * from './Input' export * from './Input'
export * from './Modal'
export * from './Redirect' export * from './Redirect'