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 api from '../api';
import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; 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_SUCCESS = 'SOAPBOX_CONFIG_REQUEST_SUCCESS';
export const SOAPBOX_CONFIG_REQUEST_FAIL = 'SOAPBOX_CONFIG_REQUEST_FAIL'; 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({ export const defaultConfig = ImmutableMap({
logo: '', logo: '',
banner: '', banner: '',
@ -18,18 +38,22 @@ export const defaultConfig = ImmutableMap({
navlinks: ImmutableMap({ navlinks: ImmutableMap({
homeFooter: ImmutableList(), homeFooter: ImmutableList(),
}), }),
allowedEmoji: ImmutableList([ allowedEmoji: allowedEmoji,
'👍',
'❤️',
'😆',
'😮',
'😢',
'😩',
]),
}); });
export function getSoapboxConfig(state) { 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() { export function fetchSoapboxConfig() {

@ -16,7 +16,7 @@ exports[`<EmojiSelector /> renders correctly 1`] = `
className="emoji-react-selector__emoji" className="emoji-react-selector__emoji"
dangerouslySetInnerHTML={ dangerouslySetInnerHTML={
Object { 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, max_options: 4,
min_expiration: 300, min_expiration: 300,
}), }),
version: '0.0.0',
})); }));
}); });
}); });

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

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

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

Loading…
Cancel
Save