From 36b38eb0ab001f4e71156041a403f452e12d06b1 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Sun, 10 Sep 2017 18:04:14 +0400 Subject: [PATCH 1/7] Events list --- src/components/common/Basket.js | 18 +++++++++ src/components/events/TableEventCard.js | 19 ++++++++++ src/components/events/TableEventList.js | 50 +++++++++++++++---------- src/components/routes/AdminPage.js | 4 +- 4 files changed, 71 insertions(+), 20 deletions(-) create mode 100644 src/components/common/Basket.js create mode 100644 src/components/events/TableEventCard.js diff --git a/src/components/common/Basket.js b/src/components/common/Basket.js new file mode 100644 index 0000000..52c85e4 --- /dev/null +++ b/src/components/common/Basket.js @@ -0,0 +1,18 @@ +import React, { Component } from 'react' +import {Link} from 'react-router-dom' + +class Basket extends Component { + static propTypes = { + + }; + + render() { + return ( +
+

Unauthorized, please Sign In

+
+ ) + } +} + +export default Basket \ No newline at end of file diff --git a/src/components/events/TableEventCard.js b/src/components/events/TableEventCard.js new file mode 100644 index 0000000..716fa73 --- /dev/null +++ b/src/components/events/TableEventCard.js @@ -0,0 +1,19 @@ +import React, {Component} from 'react' +import {Link} from 'react-router-dom' + +class TableEventCard extends Component { + static propTypes = {}; + + render() { + console.log('TableEventCard',this.props); + const {uid, title, where, month} = this.props.event; + return ( +
console.log('onClick')} className="test--event-list__row" > + {title} + {where} + {month} +
+ ) + } +} +export default TableEventCard \ No newline at end of file diff --git a/src/components/events/TableEventList.js b/src/components/events/TableEventList.js index 05af863..66de817 100644 --- a/src/components/events/TableEventList.js +++ b/src/components/events/TableEventList.js @@ -1,34 +1,48 @@ -import React, { Component } from 'react' +import React, {Component} from 'react' import {connect} from 'react-redux' -import {moduleName, fetchAll, selectEvent, eventListSelector} from '../../ducks/events' +import {List, InfiniteLoader} from 'react-virtualized' +import {moduleName, fetchLazy, selectEvent, eventListSelector} from '../../ducks/events' import Loader from '../common/Loader' +import TableEventCard from './TableEventCard' export class EventList extends Component { - static propTypes = { - - }; + static propTypes = {}; componentDidMount() { - this.props.fetchAll() + this.props.fetchLazy() + } + + isRowLoaded = ({index}) => index < this.props.events.length + loadMoreRows = () => { + console.log('---', 'load more') + this.props.fetchLazy() } render() { + const {loaded, events} = this.props if (this.props.loading) return return ( -
- - - {this.getRows()} - -
-
+ + {({onRowsRendered, registerChild}) => + + } + ) } - getRows() { - return this.props.events.map(this.getRow) + getRows = (event) => { + return this.props.events.map(event => ) } - getRow = (event) => { return {event.title} @@ -36,14 +50,12 @@ export class EventList extends Component { {event.month} } - handleRowClick = (uid) => () => { const {selectEvent} = this.props selectEvent && selectEvent(uid) } } - export default connect(state => ({ events: eventListSelector(state), loading: state[moduleName].loading -}), {fetchAll, selectEvent})(EventList) \ No newline at end of file +}), {fetchLazy, selectEvent})(EventList) \ No newline at end of file diff --git a/src/components/routes/AdminPage.js b/src/components/routes/AdminPage.js index 92587ea..de2e03c 100644 --- a/src/components/routes/AdminPage.js +++ b/src/components/routes/AdminPage.js @@ -2,6 +2,7 @@ import React, { Component } from 'react' import PeopleList from '../people/PeopleList' import EventTable from '../events/VirtualizedEventList' import SelectedEvents from '../events/SelectedEvents' +import TableEventList from '../events/TableEventList' class AdminPage extends Component { static propTypes = { @@ -14,7 +15,8 @@ class AdminPage extends Component {

Admin Page

- + {/**/} + ) } From 71b62e6cecbcdc0c18ef17a32885d2ef6ad841a7 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Sun, 10 Sep 2017 18:43:46 +0400 Subject: [PATCH 2/7] Add style for basket and TableEventList --- src/components/common/{ => Basket}/Basket.js | 4 ++-- src/components/events/TableEventCard.js | 2 +- src/components/events/TableEventList.js | 8 +------- src/components/routes/AdminPage.js | 3 +++ 4 files changed, 7 insertions(+), 10 deletions(-) rename src/components/common/{ => Basket}/Basket.js (64%) diff --git a/src/components/common/Basket.js b/src/components/common/Basket/Basket.js similarity index 64% rename from src/components/common/Basket.js rename to src/components/common/Basket/Basket.js index 52c85e4..f961b7c 100644 --- a/src/components/common/Basket.js +++ b/src/components/common/Basket/Basket.js @@ -8,8 +8,8 @@ class Basket extends Component { render() { return ( -
-

Unauthorized, please Sign In

+
+ Drag event here to delete!
) } diff --git a/src/components/events/TableEventCard.js b/src/components/events/TableEventCard.js index 716fa73..fe031a2 100644 --- a/src/components/events/TableEventCard.js +++ b/src/components/events/TableEventCard.js @@ -8,7 +8,7 @@ class TableEventCard extends Component { console.log('TableEventCard',this.props); const {uid, title, where, month} = this.props.event; return ( -
console.log('onClick')} className="test--event-list__row" > +
console.log('onClick')} className="test--event-list__row" > {title} {where} {month} diff --git a/src/components/events/TableEventList.js b/src/components/events/TableEventList.js index 66de817..23deb1c 100644 --- a/src/components/events/TableEventList.js +++ b/src/components/events/TableEventList.js @@ -43,13 +43,7 @@ export class EventList extends Component { getRows = (event) => { return this.props.events.map(event => ) } - getRow = (event) => { - return - {event.title} - {event.where} - {event.month} - - } + handleRowClick = (uid) => () => { const {selectEvent} = this.props selectEvent && selectEvent(uid) diff --git a/src/components/routes/AdminPage.js b/src/components/routes/AdminPage.js index de2e03c..a0e47a8 100644 --- a/src/components/routes/AdminPage.js +++ b/src/components/routes/AdminPage.js @@ -3,6 +3,7 @@ import PeopleList from '../people/PeopleList' import EventTable from '../events/VirtualizedEventList' import SelectedEvents from '../events/SelectedEvents' import TableEventList from '../events/TableEventList' +import Basket from '../common/Basket/Basket.js' class AdminPage extends Component { static propTypes = { @@ -12,10 +13,12 @@ class AdminPage extends Component { render() { return (
+

Admin Page

{/**/} +
) From e2dc95fa44ab59ece7174de63eab7214de11db47 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Sun, 10 Sep 2017 18:58:15 +0400 Subject: [PATCH 3/7] Add draggable list --- src/components/events/TableEventCard.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/components/events/TableEventCard.js b/src/components/events/TableEventCard.js index fe031a2..7a9d053 100644 --- a/src/components/events/TableEventCard.js +++ b/src/components/events/TableEventCard.js @@ -1,5 +1,6 @@ import React, {Component} from 'react' import {Link} from 'react-router-dom' +import {DragSource} from 'react-dnd' class TableEventCard extends Component { static propTypes = {}; @@ -7,7 +8,7 @@ class TableEventCard extends Component { render() { console.log('TableEventCard',this.props); const {uid, title, where, month} = this.props.event; - return ( + return this.props.connectDragSource(
console.log('onClick')} className="test--event-list__row" > {title} {where} @@ -16,4 +17,19 @@ class TableEventCard extends Component { ) } } -export default TableEventCard \ No newline at end of file + +const spec = { + beginDrag(props) { + return { + uid:props.event.uid + } + } +} + +const collect = (connect, monitor) => ({ + connectDragSource: connect.dragSource(), + connectPreview: connect.dragPreview(), + isDragging: monitor.isDragging(), +}) + +export default DragSource('event', spec, collect)(TableEventCard) \ No newline at end of file From b53478969d6c511961a210bb7c70b7f0fc3a02f8 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Mon, 11 Sep 2017 09:21:36 +0400 Subject: [PATCH 4/7] Add dropable --- src/components/common/Basket.js | 37 +++++++++++++++++++++++++ src/components/common/Basket/Basket.js | 18 ------------ src/components/events/TableEventCard.js | 9 ++++-- src/components/routes/AdminPage.js | 2 +- 4 files changed, 44 insertions(+), 22 deletions(-) create mode 100644 src/components/common/Basket.js delete mode 100644 src/components/common/Basket/Basket.js diff --git a/src/components/common/Basket.js b/src/components/common/Basket.js new file mode 100644 index 0000000..fc72da0 --- /dev/null +++ b/src/components/common/Basket.js @@ -0,0 +1,37 @@ +import React, { Component } from 'react' +import {Link} from 'react-router-dom' +import {DropTarget} from 'react-dnd' + +class Basket extends Component { + static propTypes = { + + }; + + render() { + const {connectDropTarget, hovered, canDrop, people} = this.props + const dropStyle = { + border: `4px solid ${canDrop?`black`:`transparent`}` + } + return connectDropTarget( +
+ Drag event here to delete! +
+ ) + } +} +const collect = (connect, monitor) => ({ + connectDropTarget: connect.dropTarget(), + canDrop: monitor.canDrop(), + hovered: monitor.isOver() +}) + +const spec = { + drop(props, monitor) { + const eventDragUid = monitor.getItem().uid + + console.log(eventDragUid,'eventDragUid'); + return { eventDragUid } + } +} + +export default DropTarget('event',spec, collect)(Basket) \ No newline at end of file diff --git a/src/components/common/Basket/Basket.js b/src/components/common/Basket/Basket.js deleted file mode 100644 index f961b7c..0000000 --- a/src/components/common/Basket/Basket.js +++ /dev/null @@ -1,18 +0,0 @@ -import React, { Component } from 'react' -import {Link} from 'react-router-dom' - -class Basket extends Component { - static propTypes = { - - }; - - render() { - return ( -
- Drag event here to delete! -
- ) - } -} - -export default Basket \ No newline at end of file diff --git a/src/components/events/TableEventCard.js b/src/components/events/TableEventCard.js index 7a9d053..f27e084 100644 --- a/src/components/events/TableEventCard.js +++ b/src/components/events/TableEventCard.js @@ -6,10 +6,13 @@ class TableEventCard extends Component { static propTypes = {}; render() { - console.log('TableEventCard',this.props); - const {uid, title, where, month} = this.props.event; + + const {connectDragSource,isDragging, event: {uid, title, where, month}} = this.props; + const dragStyle = { + backgroundColor:isDragging?'gray':'white' + } return this.props.connectDragSource( -
console.log('onClick')} className="test--event-list__row" > +
console.log('onClick')} className="test--event-list__row" > {title} {where} {month} diff --git a/src/components/routes/AdminPage.js b/src/components/routes/AdminPage.js index a0e47a8..5ea9685 100644 --- a/src/components/routes/AdminPage.js +++ b/src/components/routes/AdminPage.js @@ -3,7 +3,7 @@ import PeopleList from '../people/PeopleList' import EventTable from '../events/VirtualizedEventList' import SelectedEvents from '../events/SelectedEvents' import TableEventList from '../events/TableEventList' -import Basket from '../common/Basket/Basket.js' +import Basket from '../common/Basket' class AdminPage extends Component { static propTypes = { From a0ce4c666ca168a8b973e6716e2aa9b444d7d774 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Mon, 11 Sep 2017 18:39:02 +0400 Subject: [PATCH 5/7] Delete event --- src/components/common/Basket.js | 8 ++++-- src/config.js | 14 +++++----- src/ducks/events.js | 45 +++++++++++++++++++++++++++++++-- 3 files changed, 56 insertions(+), 11 deletions(-) diff --git a/src/components/common/Basket.js b/src/components/common/Basket.js index fc72da0..f347560 100644 --- a/src/components/common/Basket.js +++ b/src/components/common/Basket.js @@ -1,6 +1,9 @@ import React, { Component } from 'react' import {Link} from 'react-router-dom' import {DropTarget} from 'react-dnd' +import {connect} from 'react-redux' +import {deleteEvent} from '../../ducks/events' + class Basket extends Component { static propTypes = { @@ -19,6 +22,7 @@ class Basket extends Component { ) } } + const collect = (connect, monitor) => ({ connectDropTarget: connect.dropTarget(), canDrop: monitor.canDrop(), @@ -28,10 +32,10 @@ const collect = (connect, monitor) => ({ const spec = { drop(props, monitor) { const eventDragUid = monitor.getItem().uid - console.log(eventDragUid,'eventDragUid'); + props.deleteEvent(eventDragUid); return { eventDragUid } } } -export default DropTarget('event',spec, collect)(Basket) \ No newline at end of file +export default connect(null, {deleteEvent}) (DropTarget ('event',spec, collect)(Basket)) diff --git a/src/config.js b/src/config.js index e8d8d78..18292a3 100644 --- a/src/config.js +++ b/src/config.js @@ -1,13 +1,13 @@ import firebase from 'firebase' -export const appName = "advreact-21-08" +export const appName = "advreact-21-081" export const firebaseConfig = { - apiKey: "AIzaSyDjA6CeIHuni5lNm4ML1b-TSxJltsYUO8g", - authDomain: `${appName}.firebaseapp.com`, - databaseURL: `https://${appName}.firebaseio.com`, - projectId: appName, - storageBucket: `${appName}.appspot.com`, - messagingSenderId: "789814589283" + apiKey: "AIzaSyC0hcpDsBhr85usoHIwloBeYbkDHeUcqKo", + authDomain: "advreact-21-081.firebaseapp.com", + databaseURL: "https://advreact-21-081.firebaseio.com", + projectId: "advreact-21-081", + storageBucket: "advreact-21-081.appspot.com", + messagingSenderId: "450237050585" } firebase.initializeApp(firebaseConfig) \ No newline at end of file diff --git a/src/ducks/events.js b/src/ducks/events.js index bd17fc4..6c4bbc6 100644 --- a/src/ducks/events.js +++ b/src/ducks/events.js @@ -1,4 +1,4 @@ -import {all, take, call, put, select} from 'redux-saga/effects' +import {all, take, takeEvery, call, put, select} from 'redux-saga/effects' import {appName} from '../config' import {Record, OrderedMap, OrderedSet} from 'immutable' import firebase from 'firebase' @@ -17,6 +17,8 @@ export const FETCH_LAZY_REQUEST = `${prefix}/FETCH_LAZY_REQUEST` export const FETCH_LAZY_START = `${prefix}/FETCH_LAZY_START` export const FETCH_LAZY_SUCCESS = `${prefix}/FETCH_LAZY_SUCCESS` export const SELECT_EVENT = `${prefix}/SELECT_EVENT` +export const DELETE_EVENT = `${prefix}/DELETE_EVENT` +export const DELETE_EVENT_REQUEST = `${prefix}/DELETE_EVENT_REQUEST` /** * Reducer @@ -93,6 +95,44 @@ export function fetchAll() { } } +export function deleteEvent (eventDragUid) { + console.log(eventDragUid ,'load data'); + return { + type: DELETE_EVENT_REQUEST, + payload: { eventDragUid } + } +} + +export const deleteEventSaga = function * (action) { + console.log(action,'action'); + + const peopleRef = firebase.database().ref('events'); + console.log( peopleRef.child(action.payload.eventDragUid),'peopleRef'); + peopleRef.child(action.payload.eventDragUid).remove() + ; + // return { + // type: DELETE_EVENT_REQUEST, + // payload: { eventDragUid } + // } + // const eventsRef = firebase.database().ref(`people/${personUid}/events`) + // const state = yield select(stateSelector) + // const events = state.getIn(['entities', personUid, 'events']).concat(eventUid) + // + // try { + // yield call([eventsRef, eventsRef.set], events) + // yield put({ + // type: ADD_EVENT_SUCCESS, + // payload: { + // personUid, + // events + // } + // }) + // } catch (e) { + // console.log(e,'error') + // } + +} + export function selectEvent(uid) { return { type: SELECT_EVENT, @@ -157,6 +197,7 @@ export const fetchLazySaga = function * () { export function* saga() { yield all([ fetchAllSaga(), - fetchLazySaga() + fetchLazySaga(), + takeEvery(DELETE_EVENT_REQUEST, deleteEventSaga) ]) } \ No newline at end of file From 50ee0748e25f49e7ed44f879d43280e36377c1a5 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Tue, 12 Sep 2017 17:29:48 +0400 Subject: [PATCH 6/7] delete by redux --- src/components/events/TableEventList.js | 2 +- src/ducks/events.js | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/components/events/TableEventList.js b/src/components/events/TableEventList.js index 23deb1c..a03267f 100644 --- a/src/components/events/TableEventList.js +++ b/src/components/events/TableEventList.js @@ -17,8 +17,8 @@ export class EventList extends Component { console.log('---', 'load more') this.props.fetchLazy() } - render() { + const {loaded, events} = this.props if (this.props.loading) return return ( diff --git a/src/ducks/events.js b/src/ducks/events.js index 6c4bbc6..7ec5844 100644 --- a/src/ducks/events.js +++ b/src/ducks/events.js @@ -48,6 +48,10 @@ export default function reducer(state = new ReducerRecord(), action) { case FETCH_ALL_REQUEST: case FETCH_LAZY_START: return state.set('loading', true) + + case DELETE_EVENT: + console.log('delete'); + return state.update('entities', selected => selected.remove(payload.eventDragUid)) case FETCH_ALL_SUCCESS: return state @@ -105,10 +109,15 @@ export function deleteEvent (eventDragUid) { export const deleteEventSaga = function * (action) { console.log(action,'action'); - + const eventDragUid = action.payload.eventDragUid; const peopleRef = firebase.database().ref('events'); - console.log( peopleRef.child(action.payload.eventDragUid),'peopleRef'); peopleRef.child(action.payload.eventDragUid).remove() + yield put({ + type: DELETE_EVENT, + payload: { + eventDragUid + } + }) ; // return { // type: DELETE_EVENT_REQUEST, From f536bf246e327edfc01157a3082f7a35de72dc10 Mon Sep 17 00:00:00 2001 From: Kirill <908city@gmail.com> Date: Wed, 13 Sep 2017 16:20:44 +0400 Subject: [PATCH 7/7] Fixes --- src/components/common/Basket.js | 1 + src/components/events/TableEventList.js | 3 ++- src/ducks/events.js | 13 ++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/components/common/Basket.js b/src/components/common/Basket.js index f347560..ede58fb 100644 --- a/src/components/common/Basket.js +++ b/src/components/common/Basket.js @@ -33,6 +33,7 @@ const spec = { drop(props, monitor) { const eventDragUid = monitor.getItem().uid console.log(eventDragUid,'eventDragUid'); + console.log('start'); props.deleteEvent(eventDragUid); return { eventDragUid } } diff --git a/src/components/events/TableEventList.js b/src/components/events/TableEventList.js index a03267f..b311fe7 100644 --- a/src/components/events/TableEventList.js +++ b/src/components/events/TableEventList.js @@ -20,6 +20,7 @@ export class EventList extends Component { render() { const {loaded, events} = this.props + console.log(events.length,'events.length'); if (this.props.loading) return return ( {({onRowsRendered, registerChild}) =>