Merge branch 'filter-invalid-chats-again' into 'develop'
Filter invalid chats again Closes #648 See merge request soapbox-pub/soapbox-fe!582
This commit is contained in:
commit
6e5d864904
4 changed files with 50 additions and 24 deletions
|
@ -4,6 +4,7 @@ import { patchMe } from 'soapbox/actions/me';
|
|||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||
import { isLoggedIn } from 'soapbox/utils/auth';
|
||||
import uuid from '../uuid';
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
export const SETTING_CHANGE = 'SETTING_CHANGE';
|
||||
export const SETTING_SAVE = 'SETTING_SAVE';
|
||||
|
@ -136,12 +137,14 @@ export const defaultSettings = ImmutableMap({
|
|||
]),
|
||||
});
|
||||
|
||||
export function getSettings(state) {
|
||||
const soapboxSettings = state.getIn(['soapbox', 'defaultSettings']);
|
||||
export const getSettings = createSelector([
|
||||
state => state.getIn(['soapbox', 'defaultSettings']),
|
||||
state => state.get('settings'),
|
||||
], (soapboxSettings, settings) => {
|
||||
return defaultSettings
|
||||
.mergeDeep(soapboxSettings)
|
||||
.mergeDeep(state.get('settings'));
|
||||
}
|
||||
.mergeDeep(settings);
|
||||
});
|
||||
|
||||
export function changeSetting(path, value) {
|
||||
return dispatch => {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import api from '../api';
|
||||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
|
||||
import { getFeatures } from 'soapbox/utils/features';
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
export const SOAPBOX_CONFIG_REQUEST_SUCCESS = 'SOAPBOX_CONFIG_REQUEST_SUCCESS';
|
||||
export const SOAPBOX_CONFIG_REQUEST_FAIL = 'SOAPBOX_CONFIG_REQUEST_FAIL';
|
||||
|
@ -50,20 +51,19 @@ export const defaultConfig = ImmutableMap({
|
|||
aboutPages: ImmutableMap(),
|
||||
});
|
||||
|
||||
export function getSoapboxConfig(state) {
|
||||
const instance = state.get('instance');
|
||||
const soapbox = state.get('soapbox');
|
||||
const features = getFeatures(instance);
|
||||
|
||||
export const getSoapboxConfig = createSelector([
|
||||
state => state.get('soapbox'),
|
||||
state => getFeatures(state.get('instance')).emojiReactsRGI,
|
||||
], (soapbox, emojiReactsRGI) => {
|
||||
// https://git.pleroma.social/pleroma/pleroma/-/issues/2355
|
||||
if (features.emojiReactsRGI) {
|
||||
if (emojiReactsRGI) {
|
||||
return defaultConfig
|
||||
.set('allowedEmoji', allowedEmojiRGI)
|
||||
.merge(soapbox);
|
||||
} else {
|
||||
return defaultConfig.merge(soapbox);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export function fetchSoapboxConfig() {
|
||||
return (dispatch, getState) => {
|
||||
|
|
|
@ -10,18 +10,39 @@ import { openChat, toggleMainWindow } from 'soapbox/actions/chats';
|
|||
import ChatWindow from './chat_window';
|
||||
import { shortNumberFormat } from 'soapbox/utils/numbers';
|
||||
import AudioToggle from 'soapbox/features/chats/components/audio_toggle';
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
const mapStateToProps = state => {
|
||||
const settings = getSettings(state);
|
||||
|
||||
return {
|
||||
panes: settings.getIn(['chats', 'panes']),
|
||||
mainWindowState: settings.getIn(['chats', 'mainWindow']),
|
||||
unreadCount: state.get('chats').reduce((acc, curr) => acc + Math.min(curr.get('unread', 0), 1), 0),
|
||||
};
|
||||
const getChatsUnreadCount = state => {
|
||||
const chats = state.get('chats');
|
||||
return chats.reduce((acc, curr) => acc + Math.min(curr.get('unread', 0), 1), 0);
|
||||
};
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
// Filter out invalid chats
|
||||
const normalizePanes = (chats, panes = ImmutableList()) => (
|
||||
panes.filter(pane => chats.get(pane.get('chat_id')))
|
||||
);
|
||||
|
||||
const makeNormalizeChatPanes = () => createSelector([
|
||||
state => state.get('chats'),
|
||||
state => getSettings(state).getIn(['chats', 'panes']),
|
||||
], normalizePanes);
|
||||
|
||||
const makeMapStateToProps = () => {
|
||||
const mapStateToProps = state => {
|
||||
const normalizeChatPanes = makeNormalizeChatPanes();
|
||||
|
||||
return {
|
||||
panes: normalizeChatPanes(state),
|
||||
mainWindowState: getSettings(state).getIn(['chats', 'mainWindow']),
|
||||
unreadCount: getChatsUnreadCount(state),
|
||||
};
|
||||
};
|
||||
|
||||
return mapStateToProps;
|
||||
};
|
||||
|
||||
export default @connect(makeMapStateToProps)
|
||||
class ChatPanes extends ImmutablePureComponent {
|
||||
|
||||
static propTypes = {
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
// Detect backend features to conditionally render elements
|
||||
import gte from 'semver/functions/gte';
|
||||
import { List as ImmutableList } from 'immutable';
|
||||
import { createSelector } from 'reselect';
|
||||
|
||||
export const getFeatures = instance => {
|
||||
const v = parseVersion(instance.get('version'));
|
||||
const f = instance.getIn(['pleroma', 'metadata', 'features'], ImmutableList());
|
||||
export const getFeatures = createSelector([
|
||||
instance => parseVersion(instance.get('version')),
|
||||
instance => instance.getIn(['pleroma', 'metadata', 'features'], ImmutableList()),
|
||||
], (v, f) => {
|
||||
return {
|
||||
suggestions: v.software === 'Mastodon' && gte(v.compatVersion, '2.4.3'),
|
||||
trends: v.software === 'Mastodon' && gte(v.compatVersion, '3.0.0'),
|
||||
|
@ -15,7 +17,7 @@ export const getFeatures = instance => {
|
|||
importMutes: v.software === 'Pleroma' && gte(v.version, '2.2.0'),
|
||||
emailList: f.includes('email_list'),
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
export const parseVersion = version => {
|
||||
let regex = /^([\w\.]*)(?: \(compatible; ([\w]*) (.*)\))?$/;
|
||||
|
|
Loading…
Reference in a new issue