-
{input.name}
+
+ {input.name}
{errorText}
diff --git a/src/components/common/Garbage.js b/src/components/common/Garbage.js
new file mode 100644
index 0000000..ef4f284
--- /dev/null
+++ b/src/components/common/Garbage.js
@@ -0,0 +1,46 @@
+import React, { Component } from 'react'
+import { connect } from 'react-redux'
+import {DropTarget} from 'react-dnd'
+import { deleteEvent } from '../../ducks/events'
+
+const baseStyle = {
+ margin: '20px 0',
+ padding: 10,
+ display: 'inline-block',
+ borderRadius: 10,
+ opacity: .5,
+}
+
+class Garbage extends Component {
+ render() {
+ const { connectDropTarget, canDrop, hovered } = this.props
+
+ const style = {
+ ...baseStyle,
+ border: `5px dashed ${hovered ? '#666' : 'transparent'}`,
+ }
+
+ return connectDropTarget(
+
+
+
+ )
+ }
+}
+
+const spec = {
+ drop(props, monitor) {
+ const { id } = monitor.getItem()
+ props.deleteEvent(id)
+ }
+}
+
+const collect = (connect, monitor) => ({
+ connectDropTarget: connect.dropTarget(),
+ canDrop: monitor.canDrop(),
+ hovered: monitor.isOver()
+})
+
+export default connect(null, {deleteEvent})(
+ DropTarget('event', spec, collect)(Garbage)
+)
\ No newline at end of file
diff --git a/src/components/common/ProtectedRoute.js b/src/components/common/ProtectedRoute.js
index da53475..5f23add 100644
--- a/src/components/common/ProtectedRoute.js
+++ b/src/components/common/ProtectedRoute.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import {Route} from 'react-router-dom'
import {connect} from 'react-redux'
-import {userSelector} from '../../ducks/auth'
+import {userAuthorizedSelector} from '../../ducks/auth'
class ProtectedRoute extends Component {
static propTypes = {
@@ -21,5 +21,5 @@ class ProtectedRoute extends Component {
}
export default connect(state => ({
- authorized: !!userSelector(state)
-}), null, null, { pure: false })(ProtectedRoute)
\ No newline at end of file
+ authorized: userAuthorizedSelector(state)
+}), null, null, { pure: false })(ProtectedRoute)
diff --git a/src/components/common/Submenu.js b/src/components/common/Submenu.js
new file mode 100644
index 0000000..370f97e
--- /dev/null
+++ b/src/components/common/Submenu.js
@@ -0,0 +1,30 @@
+import React, { Component } from 'react'
+import { NavLink } from 'react-router-dom'
+
+class Submenu extends Component {
+ render() {
+ return (
+
+ {this.props.links.map(this.renderSubmenuItem.bind(this))}
+
+ )
+ }
+
+ renderSubmenuItem(item, index) {
+ const { to, title } = item
+
+ const props = {
+ key: index,
+ activeClassName: 'active',
+ to,
+ }
+
+ return (
+
+ {title}
+
+ )
+ }
+}
+
+export default Submenu
diff --git a/src/components/events/EventDragPreview.js b/src/components/events/EventDragPreview.js
new file mode 100644
index 0000000..ecaa569
--- /dev/null
+++ b/src/components/events/EventDragPreview.js
@@ -0,0 +1,30 @@
+import React, { Component } from 'react'
+import { connect } from 'react-redux'
+import { eventSelector } from '../../ducks/events'
+
+class EventDragPreview extends Component {
+ render() {
+ const style = {
+ display: 'inline-block',
+ border: '1px solid #ccc',
+ borderRadius: 5,
+ background: '#eee',
+ transform: 'translate(-30px, -40px)',
+ padding: 10,
+ }
+
+ const { event } = this.props
+
+ return (
+
+
{event.title}
+
{event.where}
+
{event.when}
+
+ )
+ }
+}
+
+export default connect((state, props) => ({
+ event: eventSelector(state, props)
+}))(EventDragPreview)
diff --git a/src/components/events/EventRow.js b/src/components/events/EventRow.js
new file mode 100644
index 0000000..661ee95
--- /dev/null
+++ b/src/components/events/EventRow.js
@@ -0,0 +1,43 @@
+import React, { Component } from 'react'
+import {DragSource} from 'react-dnd'
+import { defaultTableRowRenderer as DefaultTableRowRenderer } from 'react-virtualized'
+import {getEmptyImage} from 'react-dnd-html5-backend'
+import DragPreview from './EventDragPreview'
+
+class EventRow extends Component {
+ componentDidMount() {
+ this.props.connectPreview(getEmptyImage())
+ }
+
+ render() {
+ const { key, connectDragSource } = this.props
+
+ return connectDragSource(
+
+
+
+ )
+ }
+}
+
+const spec = {
+ beginDrag(props) {
+ return {
+ id: props.rowData.uid,
+ DragPreview
+ }
+ },
+
+ /*endDrag() {
+ console.log('---', 'endDrag')
+ }*/
+}
+
+const collect = (connect, monitor) => ({
+ connectDragSource: connect.dragSource(),
+ connectPreview: connect.dragPreview(),
+ // isDragging: monitor.isDragging(),
+ // canDrag: monitor.canDrag(),
+})
+
+export default DragSource('event', spec, collect)(EventRow)
diff --git a/src/components/events/EventTableVirtualized.js b/src/components/events/EventTableVirtualized.js
index 8fb544c..ee1b036 100644
--- a/src/components/events/EventTableVirtualized.js
+++ b/src/components/events/EventTableVirtualized.js
@@ -1,7 +1,7 @@
import React, { Component } from 'react'
import {Table, Column} from 'react-virtualized'
import {connect} from 'react-redux'
-import {fetchAllEvents, selectEvent, selectedEventsSelector, eventListSelector, loadedSelector, loadingSelector} from '../../ducks/events'
+import {selectEvent, selectedEventsSelector, eventListSelector, loadedSelector, loadingSelector} from '../../ducks/events'
import Loader from '../common/Loader'
import 'react-virtualized/styles.css'
@@ -9,10 +9,6 @@ class EventTableVirtualized extends Component {
static propTypes = {
};
- componentDidMount() {
- this.props.fetchAllEvents()
- console.log('---', 'load events')
- }
render() {
if (this.props.loading) return
@@ -54,4 +50,4 @@ export default connect((state, props) => ({
loading: loadingSelector(state),
loaded: loadedSelector(state),
selected: selectedEventsSelector(state)
-}), { fetchAllEvents, selectEvent })(EventTableVirtualized)
\ No newline at end of file
+}), { selectEvent })(EventTableVirtualized)
diff --git a/src/components/events/VirtualizedLazyTable.js b/src/components/events/VirtualizedLazyTable.js
index ee0fa86..66589fc 100644
--- a/src/components/events/VirtualizedLazyTable.js
+++ b/src/components/events/VirtualizedLazyTable.js
@@ -1,12 +1,14 @@
import React, { Component } from 'react'
+import PropTypes from 'prop-types'
import {connect} from 'react-redux'
import {moduleName, fetchLazy, selectEvent, eventListSelector} from '../../ducks/events'
import {Table, Column, InfiniteLoader} from 'react-virtualized'
+import EventRow from './EventRow'
import 'react-virtualized/styles.css'
export class EventList extends Component {
static propTypes = {
-
+ allowSelectEvents: PropTypes.bool
};
componentDidMount() {
@@ -33,6 +35,7 @@ export class EventList extends Component {
height={300}
onRowClick={this.handleRowClick}
onRowsRendered={onRowsRendered}
+ rowRenderer={this.rowRenderer}
>
{
- const {selectEvent} = this.props
- selectEvent && selectEvent(rowData.uid)
+ if (this.allowSelectEvents === true) {
+ const {selectEvent} = this.props
+ selectEvent && selectEvent(rowData.uid)
+ }
+ }
+
+ rowRenderer = props => {
+ return
}
}
diff --git a/src/components/routes/Admin.js b/src/components/routes/Admin.js
index 2d09350..05bc42a 100644
--- a/src/components/routes/Admin.js
+++ b/src/components/routes/Admin.js
@@ -14,7 +14,7 @@ class Admin extends Component {
Admin Page
-
+
)
}
diff --git a/src/components/routes/Auth.js b/src/components/routes/Auth.js
index ec4898e..a8abf42 100644
--- a/src/components/routes/Auth.js
+++ b/src/components/routes/Auth.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react'
-import {Route, NavLink} from 'react-router-dom'
+import {Route} from 'react-router-dom'
import {connect} from 'react-redux'
import {signUp, signIn} from '../../ducks/auth'
import SignIn from '../auth/SignIn'
@@ -14,8 +14,6 @@ class AuthPage extends Component {
return (