rizzo-next
Version:
The next generation of Lonely Planet's style guide and pattern library.
180 lines (146 loc) • 4.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _assign = require("lodash/assign");
var _assign2 = _interopRequireDefault(_assign);
var _arkham = require("../../core/arkham");
var _arkham2 = _interopRequireDefault(_arkham);
var _events = require("../../core/mixins/events");
var _events2 = _interopRequireDefault(_events);
var _delay = require("lodash/delay");
var _delay2 = _interopRequireDefault(_delay);
var _find = require("lodash/find");
var _find2 = _interopRequireDefault(_find);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// TODO: Pull in only delay method
var _ = {
find: _find2.default, delay: _delay2.default
};
var CHANGE_EVENT = "change";
var state = {
isOpen: false,
isFetching: true,
fetchingPlace: "",
isDetail: false,
activeSetIndex: 0,
poi: 2,
currentLocation: {},
sets: [],
error: null,
hoveredPin: 0,
hoveredItem: null,
customPanel: "",
tabDropdownOpen: false,
placeParent: "",
topicClicked: ""
};
var MapState = (0, _assign2.default)({
getState: function getState() {
return state;
},
emitChange: function emitChange() {
this.trigger(CHANGE_EVENT);
},
addChangeListener: function addChangeListener(cb) {
this.on(CHANGE_EVENT, cb);
},
removeChangeListener: function removeChangeListener(cb) {
this.stopListening(CHANGE_EVENT, cb);
},
sortSets: function sortSets(sets) {
var headings = state.topics.concat(["Countries", "Cities", "Sponsored", "About"]);
return headings.reduce(function (memo, heading) {
var set = (0, _find2.default)(sets, function (set) {
return set.title === heading;
});
if (set) {
memo.push(set);
}
return memo;
}, []);
}
}, _events2.default);
_arkham2.default.on("map.opened", function () {
state.isOpen = true;
MapState.emitChange();
});
_arkham2.default.on("map.closed", function () {
state.isOpen = false;
MapState.emitChange();
});
_arkham2.default.on("view.changed", function (data) {
state.hoveredItem = data;
state.activeSetIndex = data.view;
state.customPanel = "";
MapState.emitChange();
});
_arkham2.default.on("poi.opened", function (data) {
state.poiIndex = parseInt(data.index, 10);
state.poi = data.poi;
state.isDetail = true;
MapState.emitChange();
});
_arkham2.default.on("poi.closed", function () {
state.poi = null;
state.isDetail = false;
MapState.emitChange();
});
_arkham2.default.on("place.fetching", function (data) {
state.isFetching = true;
state.fetchingPlace = data.placeTitle;
state.placeParent = data.breadcrumb;
state.topicClicked = data.topic;
MapState.emitChange();
});
_arkham2.default.on("place.fetched", function (data) {
state.currentLocation = data.location;
state.topics = data.topics;
state.sets = MapState.sortSets(data.sets.filter(function (s) {
return !!s.items.length;
}));
state.activeSetIndex = 0;
state.fetchingPlace = "";
state.isFetching = false;
state.customPanel = "";
MapState.emitChange();
});
_arkham2.default.on("place.errorfetching", function (data) {
state.isFetching = false;
state.fetchingPlace = "";
state.error = data;
MapState.emitChange();
_.delay(function () {
state.error = null;
MapState.emitChange();
}, 3000);
});
_arkham2.default.on("state.setinitial", function (data) {
state.isFetching = false;
state.topics = data.topics;
state.sets = MapState.sortSets(data.sets.filter(function (s) {
return !!s.items.length;
}));
state.currentLocation = data.location;
MapState.emitChange();
});
_arkham2.default.on("poi.hover", function (data) {
state.hoveredPin = data.pin;
MapState.emitChange();
});
_arkham2.default.on("item.hovered", function (data) {
state.hoveredItem = data;
MapState.emitChange();
});
_arkham2.default.on("custompanel.opened", function (data) {
state.lastActiveSetIndex = state.activeSetIndex;
state.activeSetIndex = data.view;
state.customPanel = data.panel;
MapState.emitChange();
});
_arkham2.default.on("sponsor.fetched", function (data) {
state.sets.push(data);
MapState.emitChange();
});
exports.default = MapState;
;