feat(gif) Support rating config + show display name over gif tile (#12461)

pull/12465/head jitsi-meet_7998
Mihaela Dumitru 3 years ago committed by GitHub
parent 6dedc7fb1a
commit b4809fe083
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      config.js
  2. 1
      react/features/base/config/configType.ts
  3. 1
      react/features/filmstrip/components/web/Thumbnail.tsx
  4. 17
      react/features/gifs/components/native/GifsMenu.js
  5. 12
      react/features/gifs/components/web/GifsMenu.tsx
  6. 5
      react/features/gifs/constants.ts
  7. 14
      react/features/gifs/function.any.ts

@ -1503,6 +1503,8 @@ var config = {
// displayMode: 'all', // displayMode: 'all',
// // How long the GIF should be displayed on the tile (in milliseconds). // // How long the GIF should be displayed on the tile (in milliseconds).
// tileTime: 5000, // tileTime: 5000,
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
// rating: 'pg',
// }, // },
// Logging // Logging

@ -312,6 +312,7 @@ export interface IConfig {
giphy?: { giphy?: {
displayMode?: 'all' | 'tile' | 'chat'; displayMode?: 'all' | 'tile' | 'chat';
enabled?: boolean; enabled?: boolean;
rating?: 'g' | 'pg' | 'pg-13' | 'r';
sdkKey?: string; sdkKey?: string;
tileTime?: number; tileTime?: number;
}; };

@ -363,7 +363,6 @@ const defaultStyles = (theme: Theme) => {
position: 'absolute' as const, position: 'absolute' as const,
width: '100%', width: '100%',
height: '100%', height: '100%',
zIndex: 11,
display: 'flex', display: 'flex',
justifyContent: 'center', justifyContent: 'center',
alignItems: 'center', alignItems: 'center',

@ -1,14 +1,14 @@
import { GiphyContent, GiphyGridView, GiphyMediaType } from '@giphy/react-native-sdk'; import { GiphyContent, GiphyGridView, GiphyMediaType } from '@giphy/react-native-sdk';
import React, { useCallback, useState } from 'react'; import React, { useCallback, useState } from 'react';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
import { useDispatch } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { createGifSentEvent, sendAnalytics } from '../../../analytics'; import { createGifSentEvent, sendAnalytics } from '../../../analytics';
import JitsiScreen from '../../../base/modal/components/JitsiScreen'; import JitsiScreen from '../../../base/modal/components/JitsiScreen';
import { sendMessage } from '../../../chat/actions.any'; import { sendMessage } from '../../../chat/actions.any';
import { goBack } from '../../../mobile/navigation/components/conference/ConferenceNavigationContainerRef'; import { goBack } from '../../../mobile/navigation/components/conference/ConferenceNavigationContainerRef';
import ClearableInput from '../../../participants-pane/components/native/ClearableInput'; import ClearableInput from '../../../participants-pane/components/native/ClearableInput';
import { formatGifUrlMessage, getGifUrl } from '../../functions'; import { formatGifUrlMessage, getGifRating, getGifUrl } from '../../functions';
import GifsMenuFooter from './GifsMenuFooter'; import GifsMenuFooter from './GifsMenuFooter';
import styles from './styles'; import styles from './styles';
@ -17,12 +17,19 @@ const GifsMenu = () => {
const [ searchQuery, setSearchQuery ] = useState(''); const [ searchQuery, setSearchQuery ] = useState('');
const dispatch = useDispatch(); const dispatch = useDispatch();
const { t } = useTranslation(); const { t } = useTranslation();
const rating = useSelector(getGifRating);
const options = {
mediaType: GiphyMediaType.Gif,
limit: 20,
rating
};
const content = searchQuery === '' const content = searchQuery === ''
? GiphyContent.trending({ mediaType: GiphyMediaType.Gif }) ? GiphyContent.trending(options)
: GiphyContent.search({ : GiphyContent.search({
searchQuery, ...options,
mediaType: GiphyMediaType.Gif searchQuery
}); });
const sendGif = useCallback(e => { const sendGif = useCallback(e => {

@ -20,7 +20,12 @@ import { setOverflowMenuVisible } from '../../../toolbox/actions.web';
import { Drawer, JitsiPortal } from '../../../toolbox/components/web'; import { Drawer, JitsiPortal } from '../../../toolbox/components/web';
import { showOverflowDrawer } from '../../../toolbox/functions.web'; import { showOverflowDrawer } from '../../../toolbox/functions.web';
import { setGifDrawerVisibility } from '../../actions'; import { setGifDrawerVisibility } from '../../actions';
import { formatGifUrlMessage, getGifAPIKey, getGifUrl } from '../../functions'; import {
formatGifUrlMessage,
getGifAPIKey,
getGifRating,
getGifUrl
} from '../../function.any';
const OVERFLOW_DRAWER_PADDING = 16; const OVERFLOW_DRAWER_PADDING = 16;
@ -88,12 +93,13 @@ function GifsMenu() {
const { t } = useTranslation(); const { t } = useTranslation();
const overflowDrawer: boolean = useSelector(showOverflowDrawer); const overflowDrawer: boolean = useSelector(showOverflowDrawer);
const { clientWidth } = useSelector((state: IReduxState) => state['features/base/responsive-ui']); const { clientWidth } = useSelector((state: IReduxState) => state['features/base/responsive-ui']);
const rating = useSelector(getGifRating);
const fetchGifs = useCallback(async (offset = 0) => { const fetchGifs = useCallback(async (offset = 0) => {
const options: TrendingOptions = { const options: TrendingOptions = {
rating: 'pg-13',
limit: 20, limit: 20,
offset offset,
rating
}; };
if (!searchKey) { if (!searchKey) {

@ -7,3 +7,8 @@ export const GIF_DEFAULT_TIMEOUT = 5000;
* The prefix for formatted GIF messages. * The prefix for formatted GIF messages.
*/ */
export const GIF_PREFIX = 'gif['; export const GIF_PREFIX = 'gif[';
/**
* The Giphy default option for audience rating.
*/
export const GIF_DEFAULT_RATING = 'g';

@ -1,6 +1,6 @@
import { IReduxState } from '../app/types'; import { IReduxState } from '../app/types';
import { GIF_PREFIX } from './constants'; import { GIF_DEFAULT_RATING, GIF_PREFIX } from './constants';
import { IGif } from './reducer'; import { IGif } from './reducer';
/** /**
@ -87,3 +87,15 @@ export function getGifDisplayMode(state: IReduxState) {
return giphy?.displayMode || 'all'; return giphy?.displayMode || 'all';
} }
/**
* Get the GIF audience rating.
*
* @param {IReduxState} state - Redux state.
* @returns {string}
*/
export function getGifRating(state: IReduxState) {
const { giphy } = state['features/base/config'];
return giphy?.rating || GIF_DEFAULT_RATING;
}

Loading…
Cancel
Save