diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-06-18 14:42:32 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-18 14:42:32 -0400 |
commit | ab67f6e257f6e8f08145a02a7b93550f99641be4 (patch) | |
tree | d33d1c58a3d229f7e37db58bc2c397ac3806c503 /webapp/reducers/views | |
parent | 0231e95f1c5a8c42ba97875f0d2301815f552974 (diff) | |
download | chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.tar.gz chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.tar.bz2 chat-ab67f6e257f6e8f08145a02a7b93550f99641be4.zip |
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
Diffstat (limited to 'webapp/reducers/views')
-rw-r--r-- | webapp/reducers/views/channel.js | 69 | ||||
-rw-r--r-- | webapp/reducers/views/index.js | 12 | ||||
-rw-r--r-- | webapp/reducers/views/rhs.js | 63 |
3 files changed, 144 insertions, 0 deletions
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 +}); |