[Glitch] retrieve custom emoji list via API instead of before page load

Port b08ab329f4 to glitch-soc
signup-info-prompt
Thibaut Girka 2018-04-07 22:05:21 +02:00
parent d55ab8e3e8
commit 1822ce89f9
3 changed files with 49 additions and 9 deletions

View File

@ -0,0 +1,37 @@
import api from 'flavours/glitch/util/api';
export const CUSTOM_EMOJIS_FETCH_REQUEST = 'CUSTOM_EMOJIS_FETCH_REQUEST';
export const CUSTOM_EMOJIS_FETCH_SUCCESS = 'CUSTOM_EMOJIS_FETCH_SUCCESS';
export const CUSTOM_EMOJIS_FETCH_FAIL = 'CUSTOM_EMOJIS_FETCH_FAIL';
export function fetchCustomEmojis() {
return (dispatch, getState) => {
dispatch(fetchCustomEmojisRequest());
api(getState).get('/api/v1/custom_emojis').then(response => {
dispatch(fetchCustomEmojisSuccess(response.data));
}).catch(error => {
dispatch(fetchCustomEmojisFail(error));
});
};
};
export function fetchCustomEmojisRequest() {
return {
type: CUSTOM_EMOJIS_FETCH_REQUEST,
};
};
export function fetchCustomEmojisSuccess(custom_emojis) {
return {
type: CUSTOM_EMOJIS_FETCH_SUCCESS,
custom_emojis,
};
};
export function fetchCustomEmojisFail(error) {
return {
type: CUSTOM_EMOJIS_FETCH_FAIL,
error,
};
};

View File

@ -6,6 +6,7 @@ import { showOnboardingOnce } from 'flavours/glitch/actions/onboarding';
import { BrowserRouter, Route } from 'react-router-dom'; import { BrowserRouter, Route } from 'react-router-dom';
import { ScrollContext } from 'react-router-scroll-4'; import { ScrollContext } from 'react-router-scroll-4';
import UI from 'flavours/glitch/features/ui'; import UI from 'flavours/glitch/features/ui';
import { fetchCustomEmojis } from 'flavours/glitch/actions/custom_emojis';
import { hydrateStore } from 'flavours/glitch/actions/store'; import { hydrateStore } from 'flavours/glitch/actions/store';
import { connectUserStream } from 'flavours/glitch/actions/streaming'; import { connectUserStream } from 'flavours/glitch/actions/streaming';
import { IntlProvider, addLocaleData } from 'react-intl'; import { IntlProvider, addLocaleData } from 'react-intl';
@ -19,6 +20,9 @@ export const store = configureStore();
const hydrateAction = hydrateStore(initialState); const hydrateAction = hydrateStore(initialState);
store.dispatch(hydrateAction); store.dispatch(hydrateAction);
// load custom emojis
store.dispatch(fetchCustomEmojis());
export default class Mastodon extends React.PureComponent { export default class Mastodon extends React.PureComponent {
static propTypes = { static propTypes = {

View File

@ -1,16 +1,15 @@
import { List as ImmutableList } from 'immutable'; import { List as ImmutableList, fromJS as ConvertToImmutable } from 'immutable';
import { STORE_HYDRATE } from 'flavours/glitch/actions/store'; import { CUSTOM_EMOJIS_FETCH_SUCCESS } from 'flavours/glitch/actions/custom_emojis';
import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light'; import { search as emojiSearch } from 'flavours/glitch/util/emoji/emoji_mart_search_light';
import { buildCustomEmojis } from 'flavours/glitch/util/emoji'; import { buildCustomEmojis } from 'flavours/glitch/util/emoji';
const initialState = ImmutableList(); const initialState = ImmutableList([]);
export default function custom_emojis(state = initialState, action) { export default function custom_emojis(state = initialState, action) {
switch(action.type) { if(action.type === CUSTOM_EMOJIS_FETCH_SUCCESS) {
case STORE_HYDRATE: state = ConvertToImmutable(action.custom_emojis);
emojiSearch('', { custom: buildCustomEmojis(action.state.get('custom_emojis', [])) }); emojiSearch('', { custom: buildCustomEmojis(state) });
return action.state.get('custom_emojis');
default:
return state;
} }
return state;
}; };