Implementing Permalinks and jumping to post from search. Performance

improvements.
Этот коммит содержится в:
Christopher Speller
2015-11-18 17:29:06 -05:00
родитель 5ee226d7f9
Коммит 9e8cd93790
29 изменённых файлов: 1340 добавлений и 696 удалений

Просмотреть файл

@@ -8,8 +8,6 @@ var Utils;
import Constants from '../utils/constants.jsx';
const ActionTypes = Constants.ActionTypes;
import BrowserStore from '../stores/browser_store.jsx';
const CHANGE_EVENT = 'change';
const LEAVE_EVENT = 'leave';
const MORE_CHANGE_EVENT = 'change';
@@ -21,7 +19,38 @@ class ChannelStoreClass extends EventEmitter {
this.setMaxListeners(11);
this.emitChange = this.emitChange.bind(this);
this.addChangeListener = this.addChangeListener.bind(this);
this.removeChangeListener = this.removeChangeListener.bind(this);
this.emitMoreChange = this.emitMoreChange.bind(this);
this.addMoreChangeListener = this.addMoreChangeListener.bind(this);
this.removeMoreChangeListener = this.removeMoreChangeListener.bind(this);
this.emitExtraInfoChange = this.emitExtraInfoChange.bind(this);
this.addExtraInfoChangeListener = this.addExtraInfoChangeListener.bind(this);
this.removeExtraInfoChangeListener = this.removeExtraInfoChangeListener.bind(this);
this.emitLeave = this.emitLeave.bind(this);
this.addLeaveListener = this.addLeaveListener.bind(this);
this.removeLeaveListener = this.removeLeaveListener.bind(this);
this.findFirstBy = this.findFirstBy.bind(this);
this.get = this.get.bind(this);
this.getMember = this.getMember.bind(this);
this.getByName = this.getByName.bind(this);
this.pSetPostMode = this.pSetPostMode.bind(this);
this.getPostMode = this.getPostMode.bind(this);
this.currentId = null;
this.postMode = this.POST_MODE_CHANNEL;
this.channels = [];
this.channelMembers = {};
this.moreChannels = {};
this.moreChannels.loading = true;
this.extraInfos = {};
}
get POST_MODE_CHANNEL() {
return 1;
}
get POST_MODE_FOCUS() {
return 2;
}
emitChange() {
this.emit(CHANGE_EVENT);
@@ -90,16 +119,6 @@ class ChannelStoreClass extends EventEmitter {
setCurrentId(id) {
this.currentId = id;
}
setLastVisitedName(name) {
if (name == null) {
BrowserStore.removeItem('last_visited_name');
} else {
BrowserStore.setItem('last_visited_name', name);
}
}
getLastVisitedName() {
return BrowserStore.getItem('last_visited_name');
}
resetCounts(id) {
var cm = this.pGetChannelMembers();
for (var cmid in cm) {
@@ -192,10 +211,10 @@ class ChannelStoreClass extends EventEmitter {
this.pStoreChannels(channels);
}
pStoreChannels(channels) {
BrowserStore.setItem('channels', channels);
this.channels = channels;
}
pGetChannels() {
return BrowserStore.getItem('channels', []);
return this.channels;
}
pStoreChannelMember(channelMember) {
var members = this.pGetChannelMembers();
@@ -203,49 +222,58 @@ class ChannelStoreClass extends EventEmitter {
this.pStoreChannelMembers(members);
}
pStoreChannelMembers(channelMembers) {
BrowserStore.setItem('channel_members', channelMembers);
this.channelMembers = channelMembers;
}
pGetChannelMembers() {
return BrowserStore.getItem('channel_members', {});
return this.channelMembers;
}
pStoreMoreChannels(channels) {
BrowserStore.setItem('more_channels', channels);
this.moreChannels = channels;
}
pGetMoreChannels() {
var channels = BrowserStore.getItem('more_channels');
if (channels == null) {
channels = {};
channels.loading = true;
}
return channels;
return this.moreChannels;
}
pStoreExtraInfos(extraInfos) {
BrowserStore.setItem('extra_infos', extraInfos);
this.extraInfos = extraInfos;
}
pGetExtraInfos() {
return BrowserStore.getItem('extra_infos', {});
return this.extraInfos;
}
isDefault(channel) {
return channel.name === Constants.DEFAULT_CHANNEL;
}
pSetPostMode(mode) {
this.postMode = mode;
}
getPostMode() {
return this.postMode;
}
}
var ChannelStore = new ChannelStoreClass();
ChannelStore.dispatchToken = AppDispatcher.register(function handleAction(payload) {
ChannelStore.dispatchToken = AppDispatcher.register((payload) => {
var action = payload.action;
var currentId;
switch (action.type) {
case ActionTypes.CLICK_CHANNEL:
ChannelStore.setCurrentId(action.id);
ChannelStore.setLastVisitedName(action.name);
ChannelStore.resetCounts(action.id);
ChannelStore.pSetPostMode(ChannelStore.POST_MODE_CHANNEL);
ChannelStore.emitChange();
break;
case ActionTypes.RECIEVED_FOCUSED_POST: {
const post = action.post_list.posts[action.postId];
ChannelStore.setCurrentId(post.channel_id);
ChannelStore.pSetPostMode(ChannelStore.POST_MODE_FOCUS);
ChannelStore.emitChange();
break;
}
case ActionTypes.RECIEVED_CHANNELS:
ChannelStore.pStoreChannels(action.channels);
ChannelStore.pStoreChannelMembers(action.members);