old_examples/dyno/app.js (86 lines of code) (raw):
import React from 'react';
import { render } from 'react-dom';
import Modal from 'react-modal';
import { Tab, Tabs, TabList, TabPanel } from '../../src/index';
import '../../style/react-tabs.css';
Modal.setAppElement(document.getElementById('example'));
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
isModalOpen: false,
selectedIndex: -1,
tabs: [
{ label: 'Foo', content: 'This is foo' },
{ label: 'Bar', content: 'This is bar' },
{ label: 'Baz', content: 'This is baz' },
{ label: 'Zap', content: 'This is zap' },
],
};
}
openModal = () => {
this.setState({
isModalOpen: true,
});
}
closeModal = () => {
this.setState({
isModalOpen: false,
});
}
addTab = () => {
const label = this.refs.label.value;
const content = this.refs.content.value;
this.setState({
tabs: [
...this.state.tabs,
{ label, content },
],
selectedIndex: this.state.tabs.length,
});
this.closeModal();
}
removeTab = (index) => {
this.setState({
tabs: this.state.tabs.filter((tab, i) => i !== index),
selectedIndex: Math.max(this.state.selectedIndex - 1, 0),
});
}
render() {
return (
<div style={{ padding: 50 }}>
<p>
<button onClick={this.openModal}>+ Add</button>
</p>
<Tabs
selectedIndex={this.state.selectedIndex}
onSelect={selectedIndex => this.setState({ selectedIndex })}
>
<TabList>
{this.state.tabs.map((tab, i) => (
<Tab key={i}>
{tab.label} <a href="#" onClick={() => this.removeTab(i)}>✕</a>
</Tab>
))}
</TabList>
{this.state.tabs.map((tab, i) => <TabPanel key={i}>{tab.content}</TabPanel>)}
</Tabs>
<Modal
isOpen={this.state.isModalOpen}
onRequestClose={this.closeModal}
style={{ width: 400, height: 350, margin: '0 auto' }}
contentLabel="tabs"
>
<h2>Add a Tab</h2>
<label htmlFor="label">Label:</label><br />
<input id="label" type="text" ref="label" /><br /><br />
<label htmlFor="content">Content:</label><br />
<textarea id="content" ref="content" rows="10" cols="50" /><br /><br />
<button onClick={this.addTab}>OK</button>{' '}
<button onClick={this.closeModal}>Cancel</button>
</Modal>
</div>
);
}
}
render(<App />, document.getElementById('example'));