PLT-6215 Major post list refactor (#6501)

* Major post list refactor

* Fix post and thread deletion

* Fix preferences not selecting correctly

* Fix military time displaying

* Fix UP key for editing posts

* Fix ESLint error

* Various fixes and updates per feedback

* Fix for permalink view

* Revert to old scrolling method and various fixes

* Add floating timestamp, new message indicator, scroll arrows

* Update post loading for focus mode and add visibility limit

* Fix pinning posts and a react warning

* Add loading UI updates from Asaad

* Fix refreshing loop

* Temporarily bump post visibility limit

* Update infinite scrolling

* Remove infinite scrolling
Этот коммит содержится в:
Joram Wilander
2017-06-18 14:42:32 -04:00
коммит произвёл GitHub
родитель 0231e95f1c
Коммит ab67f6e257
90 изменённых файлов: 2464 добавлений и 3986 удалений

8
webapp/reducers/index.js Обычный файл
Просмотреть файл

@@ -0,0 +1,8 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import views from './views';
export default {
views
};

69
webapp/reducers/views/channel.js Обычный файл
Просмотреть файл

@@ -0,0 +1,69 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {combineReducers} from 'redux';
import {ActionTypes, Constants} from 'utils/constants.jsx';
import {ChannelTypes, PostTypes} from 'mattermost-redux/action_types';
function postVisibility(state = {}, action) {
switch (action.type) {
case ChannelTypes.SELECT_CHANNEL: {
const nextState = {...state};
nextState[action.data] = Constants.POST_CHUNK_SIZE / 2;
return nextState;
}
case ActionTypes.INCREASE_POST_VISIBILITY: {
const nextState = {...state};
nextState[action.data] += action.amount;
return nextState;
}
case ActionTypes.RECEIVED_FOCUSED_POST: {
const nextState = {...state};
nextState[action.channelId] = Constants.POST_CHUNK_SIZE / 2;
return nextState;
}
case PostTypes.RECEIVED_POST: {
if (action.data && state[action.data.channel_id]) {
const nextState = {...state};
nextState[action.data.channel_id] += 1;
return nextState;
}
return state;
}
default:
return state;
}
}
function lastChannelViewTime(state = {}, action) {
switch (action.type) {
case ChannelTypes.SELECT_CHANNEL: {
if (action.member) {
const nextState = {...state};
nextState[action.data] = action.member.last_viewed_at;
return nextState;
}
return state;
}
default:
return state;
}
}
function loadingPosts(state = {}, action) {
switch (action.type) {
case ActionTypes.LOADING_POSTS: {
const nextState = {...state};
nextState[action.channelId] = action.data;
return nextState;
}
default:
return state;
}
}
export default combineReducers({
postVisibility,
lastChannelViewTime,
loadingPosts
});

12
webapp/reducers/views/index.js Обычный файл
Просмотреть файл

@@ -0,0 +1,12 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {combineReducers} from 'redux';
import rhs from './rhs';
import channel from './channel';
export default combineReducers({
rhs,
channel
});

63
webapp/reducers/views/rhs.js Обычный файл
Просмотреть файл

@@ -0,0 +1,63 @@
// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import {combineReducers} from 'redux';
import {ActionTypes} from 'utils/constants.jsx';
import {PostTypes} from 'mattermost-redux/action_types';
function selectedPostId(state = '', action) {
switch (action.type) {
case ActionTypes.SELECT_POST:
return action.postId;
case PostTypes.REMOVE_POST:
if (action.data && action.data.id === state) {
return '';
}
return state;
default:
return state;
}
}
function fromSearch(state = '', action) {
switch (action.type) {
case ActionTypes.SELECT_POST:
if (action.from_search) {
return action.from_search;
}
return '';
default:
return state;
}
}
function fromFlaggedPosts(state = false, action) {
switch (action.type) {
case ActionTypes.SELECT_POST:
if (action.from_flagged_posts) {
return action.from_flagged_posts;
}
return false;
default:
return state;
}
}
function fromPinnedPosts(state = false, action) {
switch (action.type) {
case ActionTypes.SELECT_POST:
if (action.from_pinned_posts) {
return action.from_pinned_posts;
}
return false;
default:
return state;
}
}
export default combineReducers({
selectedPostId,
fromSearch,
fromFlaggedPosts,
fromPinnedPosts
});