From ab67f6e257f6e8f08145a02a7b93550f99641be4 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Sun, 18 Jun 2017 14:42:32 -0400 Subject: 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 --- webapp/reducers/index.js | 8 +++++ webapp/reducers/views/channel.js | 69 ++++++++++++++++++++++++++++++++++++++++ webapp/reducers/views/index.js | 12 +++++++ webapp/reducers/views/rhs.js | 63 ++++++++++++++++++++++++++++++++++++ 4 files changed, 152 insertions(+) create mode 100644 webapp/reducers/index.js create mode 100644 webapp/reducers/views/channel.js create mode 100644 webapp/reducers/views/index.js create mode 100644 webapp/reducers/views/rhs.js (limited to 'webapp/reducers') diff --git a/webapp/reducers/index.js b/webapp/reducers/index.js new file mode 100644 index 000000000..ff2eb0d50 --- /dev/null +++ b/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 +}; diff --git a/webapp/reducers/views/channel.js b/webapp/reducers/views/channel.js new file mode 100644 index 000000000..0deb2389e --- /dev/null +++ b/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 +}); diff --git a/webapp/reducers/views/index.js b/webapp/reducers/views/index.js new file mode 100644 index 000000000..98eb7dac9 --- /dev/null +++ b/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 +}); diff --git a/webapp/reducers/views/rhs.js b/webapp/reducers/views/rhs.js new file mode 100644 index 000000000..1e6480743 --- /dev/null +++ b/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 +}); -- cgit v1.2.3-1-g7c22