Merge branch 'rgi-reacts' into 'develop'

Support RGI emoji reacts conditionally

See merge request soapbox-pub/soapbox-fe!421
merge-requests/423/merge
Alex Gleason 4 years ago
commit d97f9d7472

@ -1,9 +1,29 @@
import api from '../api';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable';
import { getFeatures } from 'soapbox/utils/features';
export const SOAPBOX_CONFIG_REQUEST_SUCCESS = 'SOAPBOX_CONFIG_REQUEST_SUCCESS';
export const SOAPBOX_CONFIG_REQUEST_FAIL = 'SOAPBOX_CONFIG_REQUEST_FAIL';
const allowedEmoji = ImmutableList([
'👍',
'❤',
'😆',
'😮',
'😢',
'😩',
]);
// https://git.pleroma.social/pleroma/pleroma/-/issues/2355
const allowedEmojiRGI = ImmutableList([
'👍',
'❤️',
'😆',
'😮',
'😢',
'😩',
]);
export const defaultConfig = ImmutableMap({
logo: '',
banner: '',
@ -18,18 +38,22 @@ export const defaultConfig = ImmutableMap({
navlinks: ImmutableMap({
homeFooter: ImmutableList(),
}),
allowedEmoji: ImmutableList([
'👍',
'❤️',
'😆',
'😮',
'😢',
'😩',
]),
allowedEmoji: allowedEmoji,
});
export function getSoapboxConfig(state) {
return defaultConfig.merge(state.get('soapbox'));
const instance = state.get('instance');
const soapbox = state.get('soapbox');
const features = getFeatures(instance);
// https://git.pleroma.social/pleroma/pleroma/-/issues/2355
if (features.emojiReactsRGI) {
return defaultConfig
.set('allowedEmoji', allowedEmojiRGI)
.merge(soapbox);
} else {
return defaultConfig.merge(soapbox);
}
}
export function fetchSoapboxConfig() {

@ -16,7 +16,7 @@ exports[`<EmojiSelector /> renders correctly 1`] = `
className="emoji-react-selector__emoji"
dangerouslySetInnerHTML={
Object {
"__html": "<img draggable=\\"false\\" class=\\"emojione\\" alt=\\"❤\\" title=\\":heart:\\" src=\\"/emoji/2764.svg\\" />",
"__html": "<img draggable=\\"false\\" class=\\"emojione\\" alt=\\"❤\\" title=\\":heart:\\" src=\\"/emoji/2764.svg\\" />",
}
}
/>

@ -11,6 +11,7 @@ describe('instance reducer', () => {
max_options: 4,
min_expiration: 300,
}),
version: '0.0.0',
}));
});
});

@ -32,6 +32,7 @@ const initialState = ImmutableMap({
max_options: 4,
min_expiration: 300,
}),
version: '0.0.0',
});
const preloadImport = (state, action, path) => {

@ -8,6 +8,7 @@ import { IntlProvider } from 'react-intl';
import { BrowserRouter } from 'react-router-dom';
import configureMockStore from 'redux-mock-store';
import { Map as ImmutableMap } from 'immutable';
import rootReducer from 'soapbox/reducers';
// Mock Redux
// https://redux.js.org/recipes/writing-tests/
@ -18,7 +19,7 @@ export const mockStore = configureMockStore(middlewares);
export const createComponent = (children, props = {}) => {
props = ImmutableMap({
locale: 'en',
store: mockStore(ImmutableMap()),
store: mockStore(rootReducer(ImmutableMap(), {})),
}).merge(props);
return renderer.create(

@ -7,6 +7,7 @@ export const getFeatures = instance => {
suggestions: v.software === 'Mastodon' && gte(v.compatVersion, '2.4.3'),
trends: v.software === 'Mastodon' && gte(v.compatVersion, '3.0.0'),
emojiReacts: v.software === 'Pleroma' && gte(v.version, '2.0.0'),
emojiReactsRGI: v.software === 'Pleroma' && gte(v.version, '2.2.49'),
attachmentLimit: v.software === 'Pleroma' ? Infinity : 4,
focalPoint: v.software === 'Mastodon' && gte(v.compatVersion, '2.3.0'),
importMutes: v.software === 'Pleroma' && gte(v.version, '2.2.0'),

Loading…
Cancel
Save