metamaps--metamaps/frontend/src/Metamaps/Views/ExploreMaps.js

113 lines
3.1 KiB
JavaScript
Raw Normal View History

/* global $ */
2016-09-23 00:16:18 +00:00
import React from 'react'
import ReactDOM from 'react-dom' // TODO ensure this isn't a double import
2016-09-23 00:05:26 +00:00
import Active from '../Active'
2016-11-07 20:25:08 +00:00
import DataModel from '../DataModel'
2016-10-21 21:42:21 +00:00
import GlobalUI from '../GlobalUI'
import Realtime from '../Realtime'
import Loading from '../Loading'
import Maps from '../../components/Maps'
2016-09-23 00:05:26 +00:00
const ExploreMaps = {
pending: false,
2016-10-24 13:42:26 +00:00
mapper: null,
2016-11-07 20:25:08 +00:00
setCollection: function(collection) {
var self = ExploreMaps
if (self.collection) {
self.collection.off('add', self.render)
self.collection.off('successOnFetch', self.handleSuccess)
self.collection.off('errorOnFetch', self.handleError)
}
self.collection = collection
self.collection.on('add', self.render)
self.collection.on('successOnFetch', self.handleSuccess)
self.collection.on('errorOnFetch', self.handleError)
},
2016-11-07 20:25:08 +00:00
render: function(cb) {
var self = ExploreMaps
if (!self.collection) return
var exploreObj = {
currentUser: Active.Mapper,
section: self.collection.id,
maps: self.collection,
juntoState: Realtime.juntoState,
2016-11-07 20:25:08 +00:00
moreToLoad: self.collection.page !== 'loadedAll',
2016-10-24 13:42:26 +00:00
user: self.collection.id === 'mapper' ? self.mapper : null,
2016-10-21 21:42:21 +00:00
loadMore: self.loadMore,
pending: self.pending,
2016-11-07 20:25:08 +00:00
onStar: function(map) {
2016-10-21 21:42:21 +00:00
$.post('/maps/' + map.id + '/star')
map.set('star_count', map.get('star_count') + 1)
2016-11-07 20:25:08 +00:00
if (DataModel.Stars) DataModel.Stars.push({ user_id: Active.Mapper.id, map_id: map.id })
DataModel.Maps.Starred.add(map)
2016-10-21 21:42:21 +00:00
GlobalUI.notifyUser('Map is now starred')
self.render()
},
2016-11-07 20:25:08 +00:00
onRequest: function(map) {
2016-10-21 21:42:21 +00:00
$.post({
url: `/maps/${map.id}/access_request`
})
GlobalUI.notifyUser('You will be notified by email if request accepted')
2016-10-21 21:42:21 +00:00
}
}
ReactDOM.render(
React.createElement(Maps, exploreObj),
document.getElementById('explore')
2016-10-21 23:10:28 +00:00
).resize()
if (cb) cb()
Loading.hide()
},
2016-11-07 20:25:08 +00:00
loadMore: function() {
var self = ExploreMaps
2016-11-07 20:25:08 +00:00
if (self.collection.page !== 'loadedAll') {
self.collection.getMaps()
self.pending = true
}
self.render()
},
2016-11-07 20:25:08 +00:00
handleSuccess: function(cb) {
var self = ExploreMaps
self.pending = false
if (self.collection && self.collection.id === 'mapper') {
self.fetchUserThenRender(cb)
} else {
self.render(cb)
2016-11-07 20:25:08 +00:00
Loading.hide()
}
},
2016-11-07 20:25:08 +00:00
handleError: function() {
console.log('error loading maps!') // TODO
2016-11-07 20:25:08 +00:00
Loading.hide()
},
2016-11-07 20:25:08 +00:00
fetchUserThenRender: function(cb) {
var self = ExploreMaps
2016-10-24 13:42:26 +00:00
if (self.mapper && self.mapper.id === self.collection.mapperId) {
self.render(cb)
2016-11-07 20:25:08 +00:00
return Loading.hide()
2016-10-24 13:42:26 +00:00
}
// first load the mapper object and then call the render function
$.ajax({
url: '/users/' + self.collection.mapperId + '/details.json',
2016-11-07 20:25:08 +00:00
success: function(response) {
2016-10-24 13:42:26 +00:00
self.mapper = response
self.render(cb)
2016-11-07 20:25:08 +00:00
Loading.hide()
},
2016-11-07 20:25:08 +00:00
error: function() {
self.render(cb)
2016-11-07 20:25:08 +00:00
Loading.hide()
}
})
}
}
export default ExploreMaps