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
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
0231e95f1c
Коммит
ab67f6e257
8
webapp/reducers/index.js
Обычный файл
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
Обычный файл
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
Обычный файл
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
Обычный файл
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
|
||||
});
|
||||
Ссылка в новой задаче
Block a user