mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-30 03:12:29 +00:00
Show GIF menu in reactions menu Search GIFs using the GIPHY API Show GIFs as images in chat Show GIFs on the thumbnail of the participant that sent it Move GIF focus using up/ down arrows and send with Enter Added analytics
61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
import { MiddlewareRegistry } from '../base/redux';
|
|
|
|
import { ADD_GIF_FOR_PARTICIPANT, HIDE_GIF_FOR_PARTICIPANT, SHOW_GIF_FOR_PARTICIPANT } from './actionTypes';
|
|
import { removeGif } from './actions';
|
|
import { GIF_DEFAULT_TIMEOUT } from './constants';
|
|
import { getGifForParticipant } from './functions';
|
|
|
|
/**
|
|
* Middleware which intercepts Gifs actions to handle changes to the
|
|
* visibility timeout of the Gifs.
|
|
*
|
|
* @param {Store} store - The redux store.
|
|
* @returns {Function}
|
|
*/
|
|
MiddlewareRegistry.register(store => next => action => {
|
|
const { dispatch, getState } = store;
|
|
const state = getState();
|
|
|
|
switch (action.type) {
|
|
case ADD_GIF_FOR_PARTICIPANT: {
|
|
const id = action.participantId;
|
|
const { giphy } = state['features/base/config'];
|
|
|
|
_clearGifTimeout(state, id);
|
|
const timeoutID = setTimeout(() => dispatch(removeGif(id)), giphy?.tileTime || GIF_DEFAULT_TIMEOUT);
|
|
|
|
action.timeoutID = timeoutID;
|
|
break;
|
|
}
|
|
case SHOW_GIF_FOR_PARTICIPANT: {
|
|
const id = action.participantId;
|
|
|
|
_clearGifTimeout(state, id);
|
|
break;
|
|
}
|
|
case HIDE_GIF_FOR_PARTICIPANT: {
|
|
const { giphy } = state['features/base/config'];
|
|
const id = action.participantId;
|
|
const timeoutID = setTimeout(() => dispatch(removeGif(id)), giphy?.tileTime || GIF_DEFAULT_TIMEOUT);
|
|
|
|
action.timeoutID = timeoutID;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return next(action);
|
|
});
|
|
|
|
/**
|
|
* Clears GIF timeout.
|
|
*
|
|
* @param {Object} state - Redux state.
|
|
* @param {string} id - Id of the participant for whom to clear the timeout.
|
|
* @returns {void}
|
|
*/
|
|
function _clearGifTimeout(state, id) {
|
|
const gif = getGifForParticipant(state, id);
|
|
|
|
clearTimeout(gif?.timeoutID);
|
|
}
|