State progress update
This commit is contained in:
parent
42822d2ec9
commit
9821373504
3 changed files with 179 additions and 55 deletions
96
app/main.jsx
96
app/main.jsx
|
|
@ -1,13 +1,21 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import injectTapEventPlugin from "react-tap-event-plugin"
|
import injectTapEventPlugin from "react-tap-event-plugin"
|
||||||
injectTapEventPlugin()
|
injectTapEventPlugin()
|
||||||
import ThemeManager from 'material-ui/lib/styles/theme-manager'
|
import getMuiTheme from 'material-ui/lib/styles/getMuiTheme'
|
||||||
import ReactDOM from 'react-dom'
|
import ReactDOM from 'react-dom'
|
||||||
import LibraryNav from 'LibraryNav'
|
import LibraryNav from 'LibraryNav'
|
||||||
import Styles from 'material-ui/lib/styles'
|
import Styles from 'material-ui/lib/styles'
|
||||||
import Rethink from 'rethinkdbdash'
|
import Rethink from 'rethinkdbdash'
|
||||||
|
import Edit from 'material-ui/lib/svg-icons/editor/mode-edit'
|
||||||
|
import Delete from 'material-ui/lib/svg-icons/action/delete'
|
||||||
|
import Divider from 'material-ui/lib/divider'
|
||||||
import moment from 'moment'
|
import moment from 'moment'
|
||||||
|
import mui from 'material-ui'
|
||||||
|
|
||||||
|
const {
|
||||||
|
Popover,
|
||||||
|
Menu,
|
||||||
|
MenuItem} = mui
|
||||||
|
|
||||||
const DefaultRawTheme = Styles.LightRawTheme
|
const DefaultRawTheme = Styles.LightRawTheme
|
||||||
|
|
||||||
|
|
@ -28,23 +36,19 @@ function createTables(){
|
||||||
r.tableCreate('accounts').run().error(function(){})
|
r.tableCreate('accounts').run().error(function(){})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class Main extends React.Component {
|
class Main extends React.Component {
|
||||||
constructor(props){
|
constructor(props, context){
|
||||||
super(props)
|
super(props, context)
|
||||||
createTables()
|
createTables()
|
||||||
this.state = {entries: []}
|
this.state = {
|
||||||
}
|
entries: [],
|
||||||
|
contextMenuOpen: false,
|
||||||
static get childContextTypes(){
|
contextMenuItems: this.context.contextMenuItems
|
||||||
return {muiTheme: React.PropTypes.object}
|
|
||||||
}
|
|
||||||
|
|
||||||
getChildContext() {
|
|
||||||
return {
|
|
||||||
muiTheme: ThemeManager.getMuiTheme(DefaultRawTheme)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
entriesTapped = () => {
|
entriesTapped = () => {
|
||||||
r.table('notes').getAll('jyapayne@gmail.com', {index: 'account_id'}).run().then(
|
r.table('notes').getAll('jyapayne@gmail.com', {index: 'account_id'}).run().then(
|
||||||
function(notes){
|
function(notes){
|
||||||
|
|
@ -53,20 +57,76 @@ class Main extends React.Component {
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
handleRequestClose = () => {
|
||||||
|
this.setState({
|
||||||
|
contextMenuOpen: false,
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
|
tapped = () => {
|
||||||
|
console.log('tapped')
|
||||||
|
console.log(this.context.contextMenuItems)
|
||||||
|
};
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<LibraryNav
|
<div onTouchTap={this.tapped}>
|
||||||
id="library-nav"
|
<div style={{position: 'absolute',
|
||||||
entriesTapped={this.entriesTapped}
|
width: 1,
|
||||||
className="left inline fill-height"/>
|
height: 1,
|
||||||
|
top: this.state.popTop,
|
||||||
|
left: this.state.popLeft}} ref='menuPos'></div>
|
||||||
|
<Popover
|
||||||
|
open={this.state.contextMenuOpen}
|
||||||
|
anchorEl={this.refs.menuPos}
|
||||||
|
anchorOrigin={{horizontal: 'middle', vertical: 'bottom'}}
|
||||||
|
targetOrigin={{horizontal: 'left', vertical: 'top'}}
|
||||||
|
onRequestClose={this.handleRequestClose}>
|
||||||
|
<Menu desktop={true}>
|
||||||
|
{this.state.contextMenuItems.map(function (el, i){
|
||||||
|
return el;
|
||||||
|
})}
|
||||||
|
</Menu>
|
||||||
|
</Popover>
|
||||||
|
|
||||||
|
<LibraryNav
|
||||||
|
id="library-nav"
|
||||||
|
ref="libraryNav"
|
||||||
|
entriesTapped={this.entriesTapped}
|
||||||
|
className="left inline fill-height"/>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
class S extends React.Component {
|
||||||
|
static get childContextTypes(){
|
||||||
|
return {muiTheme: React.PropTypes.object,
|
||||||
|
contextMenuItems: React.PropTypes.array}
|
||||||
|
}
|
||||||
|
|
||||||
|
getChildContext() {
|
||||||
|
return {
|
||||||
|
muiTheme: getMuiTheme(DefaultRawTheme),
|
||||||
|
contextMenuItems: []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render(){
|
||||||
|
return <Main />
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Main.contextTypes = {
|
||||||
|
contextMenuItems: React.PropTypes.array.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
ReactDOM.render(
|
ReactDOM.render(
|
||||||
<Main />,
|
<S />,
|
||||||
document.getElementById('main')
|
document.getElementById('main')
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
import mui from 'material-ui'
|
import mui from 'material-ui'
|
||||||
import ThemeManager from 'material-ui/lib/styles/theme-manager'
|
import getMuiTheme from 'material-ui/lib/styles/getMuiTheme'
|
||||||
|
|
||||||
import List from 'material-ui/lib/lists/list'
|
import List from 'material-ui/lib/lists/list'
|
||||||
import ListItem from 'material-ui/lib/lists/list-item'
|
import ListItem from 'material-ui/lib/lists/list-item'
|
||||||
|
|
@ -46,7 +46,7 @@ export default class EntrySelector extends React.Component {
|
||||||
|
|
||||||
getChildContext() {
|
getChildContext() {
|
||||||
return {
|
return {
|
||||||
muiTheme: ThemeManager.getMuiTheme(DefaultRawTheme)
|
muiTheme: getMuiTheme(DefaultRawTheme)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
|
|
||||||
import mui from 'material-ui'
|
import mui from 'material-ui'
|
||||||
import ThemeManager from 'material-ui/lib/styles/theme-manager'
|
import getMuiTheme from 'material-ui/lib/styles/getMuiTheme'
|
||||||
|
|
||||||
import styles from 'material-ui/lib/styles'
|
import styles from 'material-ui/lib/styles'
|
||||||
import List from 'material-ui/lib/lists/list'
|
import List from 'material-ui/lib/lists/list'
|
||||||
|
|
@ -11,6 +11,7 @@ import NoteBook from 'material-ui/lib/svg-icons/action/class'
|
||||||
import History from 'material-ui/lib/svg-icons/action/history'
|
import History from 'material-ui/lib/svg-icons/action/history'
|
||||||
import AddCircleOutline from 'material-ui/lib/svg-icons/content/add-circle-outline'
|
import AddCircleOutline from 'material-ui/lib/svg-icons/content/add-circle-outline'
|
||||||
import Folder from 'material-ui/lib/svg-icons/file/folder'
|
import Folder from 'material-ui/lib/svg-icons/file/folder'
|
||||||
|
import Edit from 'material-ui/lib/svg-icons/editor/mode-edit'
|
||||||
import Delete from 'material-ui/lib/svg-icons/action/delete'
|
import Delete from 'material-ui/lib/svg-icons/action/delete'
|
||||||
import Divider from 'material-ui/lib/divider'
|
import Divider from 'material-ui/lib/divider'
|
||||||
import { SelectableContainerEnhance } from 'material-ui/lib/hoc/selectable-enhance'
|
import { SelectableContainerEnhance } from 'material-ui/lib/hoc/selectable-enhance'
|
||||||
|
|
@ -24,9 +25,11 @@ const {AppBar,
|
||||||
EnhancedButton,
|
EnhancedButton,
|
||||||
NavigationClose,
|
NavigationClose,
|
||||||
Menu,
|
Menu,
|
||||||
|
MenuItem,
|
||||||
Mixins,
|
Mixins,
|
||||||
RaisedButton,
|
RaisedButton,
|
||||||
FlatButton,
|
FlatButton,
|
||||||
|
Popover,
|
||||||
Badge,
|
Badge,
|
||||||
TextField,
|
TextField,
|
||||||
Dialog,
|
Dialog,
|
||||||
|
|
@ -66,35 +69,41 @@ const DefaultRawTheme = Styles.LightRawTheme
|
||||||
|
|
||||||
export default class LibraryNav extends React.Component {
|
export default class LibraryNav extends React.Component {
|
||||||
|
|
||||||
constructor(props){
|
constructor(props, context){
|
||||||
super(props)
|
super(props, context)
|
||||||
|
console.log(this.state)
|
||||||
this.state = {
|
this.state = {
|
||||||
open: false,
|
open: false,
|
||||||
navItems: [
|
navItems: [
|
||||||
{
|
{
|
||||||
'name': 'Entries',
|
'name': 'Entries',
|
||||||
'icon': <img src="images/note.svg"/>,
|
'icon': <img src="images/note.svg"/>,
|
||||||
'notes': 10
|
'notes': 10,
|
||||||
|
'clicked': this.props.entriesTapped || this.entriesTapped
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'Starred',
|
'name': 'Starred',
|
||||||
'icon': <ActionGrade color={colors.amberA700}/>,
|
'icon': <ActionGrade color={colors.amberA700}/>,
|
||||||
'notes': 1
|
'notes': 1,
|
||||||
|
'clicked': this.props.starredTapped || this.starredTapped
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'Recents',
|
'name': 'Recents',
|
||||||
'icon': <History color="#4BAE4E"/>,
|
'icon': <History color="#4BAE4E"/>,
|
||||||
'notes': 10
|
'notes': 10,
|
||||||
|
'clicked': this.props.recentsTapped || this.recentsTapped
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'Trash',
|
'name': 'Trash',
|
||||||
'icon': <Delete color={colors.grey500}/>,
|
'icon': <Delete color={colors.grey500}/>,
|
||||||
'notes': 0
|
'notes': 0,
|
||||||
|
'clicked': this.props.trashTapped || this.trashTapped
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'name': 'All Notes',
|
'name': 'All Notes',
|
||||||
'icon': <Folder color="#FFCC5F" />,
|
'icon': <Folder color="#FFCC5F" />,
|
||||||
'notes': 0
|
'notes': 0,
|
||||||
|
'clicked': this.props.allNotesTapped || this.allNotesTapped
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
@ -109,9 +118,10 @@ export default class LibraryNav extends React.Component {
|
||||||
return {muiTheme: React.PropTypes.object}
|
return {muiTheme: React.PropTypes.object}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getChildContext() {
|
getChildContext() {
|
||||||
return {
|
return {
|
||||||
muiTheme: ThemeManager.getMuiTheme(DefaultRawTheme)
|
muiTheme: getMuiTheme(DefaultRawTheme)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -142,32 +152,81 @@ export default class LibraryNav extends React.Component {
|
||||||
newNotebookTyped = (i) => {
|
newNotebookTyped = (i) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
menuItemClicked = (i, ev) => {
|
||||||
|
var nativeEvent = ev.nativeEvent
|
||||||
|
if(nativeEvent.button == 2){
|
||||||
|
//Right click
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
noteBookTapped = (i, ev) => {
|
||||||
|
var nativeEvent = ev.nativeEvent
|
||||||
|
if(nativeEvent.button == 2){
|
||||||
|
//Right click
|
||||||
|
var x = nativeEvent.pageX
|
||||||
|
var y = nativeEvent.pageY
|
||||||
|
this.context.contextMenuItems = [
|
||||||
|
<MenuItem primaryText="Rename" leftIcon={<Edit />} />,
|
||||||
|
<Divider />,
|
||||||
|
<MenuItem primaryText="Delete" leftIcon={<Delete />} />
|
||||||
|
]
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
popTop: y,
|
||||||
|
popLeft: x,
|
||||||
|
open: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
handleRequestClose = () => {
|
||||||
|
this.setState({
|
||||||
|
open: false,
|
||||||
|
})
|
||||||
|
};
|
||||||
|
|
||||||
render(){
|
render(){
|
||||||
return (
|
return (
|
||||||
<div id={this.props.id} className={this.props.className || ""}>
|
<div id={this.props.id} className={this.props.className || ""}>
|
||||||
<SelectableList subheader="Library">
|
<div style={{position: 'absolute', width: 1, height: 1, top: this.state.popTop, left: this.state.popLeft}} ref='menuPos'></div>
|
||||||
{this.state.navItems.map(function(item, i){
|
<Popover
|
||||||
return <ListItem
|
open={this.state.open}
|
||||||
primaryText={item.name}
|
anchorEl={this.refs.menuPos}
|
||||||
key={i}
|
anchorOrigin={{horizontal: 'middle', vertical: 'bottom'}}
|
||||||
leftIcon={item.icon}
|
targetOrigin={{horizontal: 'left', vertical: 'top'}}
|
||||||
rightIcon={<Badge badgeContent={item.notes} />}
|
onRequestClose={this.handleRequestClose}>
|
||||||
value={i}
|
<Menu desktop={true}>
|
||||||
className="noselect"/>;
|
<MenuItem primaryText="Rename" leftIcon={<Edit />} />
|
||||||
})}
|
<Divider />
|
||||||
</SelectableList>
|
<MenuItem primaryText="Delete" leftIcon={<Delete />} />
|
||||||
<Divider />
|
</Menu>
|
||||||
<List subheader={<div>
|
</Popover>
|
||||||
<div className="inline">NoteBooks</div>
|
<SelectableList subheader="Library">
|
||||||
<IconButton
|
{this.state.navItems.map((item, i) => {
|
||||||
onTouchTap={this.addNotebookTapped}
|
return <ListItem
|
||||||
tooltip="Add New Notebook"
|
primaryText={item.name}
|
||||||
style={{'zIndex': 10000}}
|
key={i}
|
||||||
className="right inline">
|
leftIcon={item.icon}
|
||||||
<AddCircleOutline
|
rightIcon={<Badge badgeContent={item.notes} />}
|
||||||
color={colors.grey500}/>
|
value={i}
|
||||||
</IconButton>
|
onTouchTap={this.menuItemClicked.bind(this, i)}
|
||||||
</div>}>
|
className="noselect"/>;
|
||||||
|
})}
|
||||||
|
</SelectableList>
|
||||||
|
<Divider />
|
||||||
|
<List subheader={<div>
|
||||||
|
<div className="inline">NoteBooks</div>
|
||||||
|
<IconButton
|
||||||
|
onTouchTap={this.addNotebookTapped}
|
||||||
|
tooltip="Add New Notebook"
|
||||||
|
style={{'zIndex': 1000}}
|
||||||
|
className="right inline">
|
||||||
|
<AddCircleOutline
|
||||||
|
color={colors.grey500}/>
|
||||||
|
</IconButton>
|
||||||
|
</div>}>
|
||||||
|
|
||||||
{this.state.notebooks.map((notebook, i) =>{
|
{this.state.notebooks.map((notebook, i) =>{
|
||||||
var l = null
|
var l = null
|
||||||
|
|
@ -194,16 +253,21 @@ export default class LibraryNav extends React.Component {
|
||||||
key={i}
|
key={i}
|
||||||
primaryText={notebook.title}
|
primaryText={notebook.title}
|
||||||
className="noselect"
|
className="noselect"
|
||||||
|
onTouchTap={this.noteBookTapped.bind(this, i)}
|
||||||
leftIcon={<NoteBook color={colors.grey500}/>}
|
leftIcon={<NoteBook color={colors.grey500}/>}
|
||||||
rightIcon={<Badge badgeContent={notebook.notes} />}
|
rightIcon={<Badge badgeContent={notebook.notes} />}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
return l
|
return l
|
||||||
})}
|
})}
|
||||||
</List>
|
</List>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LibraryNav.contextTypes = {
|
||||||
|
contextMenuItems: React.PropTypes.array.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue