Start making the chat faster, but it flickers

loading-indicator-on-tls^2
Alex Gleason 2020-08-27 00:06:27 -05:00
rodzic 29f415d786
commit 9af664bda8
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
3 zmienionych plików z 25 dodań i 10 usunięć

Wyświetl plik

@ -1,5 +1,6 @@
import api from '../api'; import api from '../api';
import { getSettings, changeSetting } from 'soapbox/actions/settings'; import { getSettings, changeSetting } from 'soapbox/actions/settings';
import { v4 as uuidv4 } from 'uuid';
import { Map as ImmutableMap } from 'immutable'; import { Map as ImmutableMap } from 'immutable';
export const CHATS_FETCH_REQUEST = 'CHATS_FETCH_REQUEST'; export const CHATS_FETCH_REQUEST = 'CHATS_FETCH_REQUEST';
@ -42,11 +43,13 @@ export function fetchChatMessages(chatId) {
export function sendChatMessage(chatId, params) { export function sendChatMessage(chatId, params) {
return (dispatch, getState) => { return (dispatch, getState) => {
dispatch({ type: CHAT_MESSAGE_SEND_REQUEST, chatId, params }); const uuid = uuidv4();
const me = getState().get('me');
dispatch({ type: CHAT_MESSAGE_SEND_REQUEST, chatId, params, uuid, me });
return api(getState).post(`/api/v1/pleroma/chats/${chatId}/messages`, params).then(({ data }) => { return api(getState).post(`/api/v1/pleroma/chats/${chatId}/messages`, params).then(({ data }) => {
dispatch({ type: CHAT_MESSAGE_SEND_SUCCESS, chatId, chatMessage: data }); dispatch({ type: CHAT_MESSAGE_SEND_SUCCESS, chatId, chatMessage: data, uuid });
}).catch(error => { }).catch(error => {
dispatch({ type: CHAT_MESSAGE_SEND_FAIL, chatId, error }); dispatch({ type: CHAT_MESSAGE_SEND_FAIL, chatId, error, uuid });
}); });
}; };
} }

Wyświetl plik

@ -1,6 +1,7 @@
import { import {
CHATS_FETCH_SUCCESS, CHATS_FETCH_SUCCESS,
CHAT_MESSAGES_FETCH_SUCCESS, CHAT_MESSAGES_FETCH_SUCCESS,
CHAT_MESSAGE_SEND_REQUEST,
CHAT_MESSAGE_SEND_SUCCESS, CHAT_MESSAGE_SEND_SUCCESS,
} from 'soapbox/actions/chats'; } from 'soapbox/actions/chats';
import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming'; import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming';
@ -32,18 +33,20 @@ const importLastMessages = (state, chats) =>
export default function chatMessageLists(state = initialState, action) { export default function chatMessageLists(state = initialState, action) {
switch(action.type) { switch(action.type) {
case CHAT_MESSAGE_SEND_REQUEST:
return updateList(state, action.chatId, [action.uuid]).sort();
case CHATS_FETCH_SUCCESS: case CHATS_FETCH_SUCCESS:
return importLastMessages(state, action.chats); return importLastMessages(state, action.chats).sort();
case STREAMING_CHAT_UPDATE: case STREAMING_CHAT_UPDATE:
if (action.chat.last_message) if (action.chat.last_message)
return importMessages(state, [action.chat.last_message]); return importMessages(state, [action.chat.last_message]).sort();
else else
return state; return state.sort();
case CHAT_MESSAGES_FETCH_SUCCESS: case CHAT_MESSAGES_FETCH_SUCCESS:
return updateList(state, action.chatId, action.chatMessages.map(chat => chat.id).reverse()); return updateList(state, action.chatId, action.chatMessages.map(chat => chat.id).reverse()).sort();
case CHAT_MESSAGE_SEND_SUCCESS: case CHAT_MESSAGE_SEND_SUCCESS:
return updateList(state, action.chatId, [action.chatMessage.id]); return updateList(state, action.chatId, [action.chatMessage.id]).sort();
default: default:
return state; return state.sort();
} }
}; };

Wyświetl plik

@ -1,6 +1,7 @@
import { import {
CHATS_FETCH_SUCCESS, CHATS_FETCH_SUCCESS,
CHAT_MESSAGES_FETCH_SUCCESS, CHAT_MESSAGES_FETCH_SUCCESS,
CHAT_MESSAGE_SEND_REQUEST,
CHAT_MESSAGE_SEND_SUCCESS, CHAT_MESSAGE_SEND_SUCCESS,
} from 'soapbox/actions/chats'; } from 'soapbox/actions/chats';
import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming'; import { STREAMING_CHAT_UPDATE } from 'soapbox/actions/streaming';
@ -25,12 +26,20 @@ const importLastMessages = (state, chats) =>
export default function chatMessages(state = initialState, action) { export default function chatMessages(state = initialState, action) {
switch(action.type) { switch(action.type) {
case CHAT_MESSAGE_SEND_REQUEST:
return importMessage(state, fromJS({
id: action.uuid, // Make fake message to get overriden later
chat_id: action.chatId,
account_id: action.me,
content: action.params.content,
pending: true,
}));
case CHATS_FETCH_SUCCESS: case CHATS_FETCH_SUCCESS:
return importLastMessages(state, fromJS(action.chats)); return importLastMessages(state, fromJS(action.chats));
case CHAT_MESSAGES_FETCH_SUCCESS: case CHAT_MESSAGES_FETCH_SUCCESS:
return importMessages(state, fromJS(action.chatMessages)); return importMessages(state, fromJS(action.chatMessages));
case CHAT_MESSAGE_SEND_SUCCESS: case CHAT_MESSAGE_SEND_SUCCESS:
return importMessage(state, fromJS(action.chatMessage)); return importMessage(state, fromJS(action.chatMessage)).delete(action.uuid);
case STREAMING_CHAT_UPDATE: case STREAMING_CHAT_UPDATE:
return importLastMessages(state, fromJS([action.chat])); return importLastMessages(state, fromJS([action.chat]));
default: default: