123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- // @flow
-
- import { ReducerRegistry } from '../base/redux';
- import { type Image } from '../virtual-background/constants';
-
- import {
- SET_DYNAMIC_BRANDING_DATA,
- SET_DYNAMIC_BRANDING_FAILED,
- SET_DYNAMIC_BRANDING_READY
- } from './actionTypes';
-
- /**
- * The name of the redux store/state property which is the root of the redux
- * state of the feature {@code dynamic-branding}.
- */
- const STORE_NAME = 'features/dynamic-branding';
-
- const DEFAULT_STATE = {
-
- /**
- * The pool of avatar backgrounds.
- *
- * @public
- * @type {Array<string>}
- */
- avatarBackgrounds: [],
-
- /**
- * The custom background color for the LargeVideo.
- *
- * @public
- * @type {string}
- */
- backgroundColor: '',
-
- /**
- * The custom background image used on the LargeVideo.
- *
- * @public
- * @type {string}
- */
- backgroundImageUrl: '',
-
- /**
- * Flag indicating that the branding data can be displayed.
- * This is used in order to avoid image flickering / text changing(blipping).
- *
- * @public
- * @type {boolean}
- */
- customizationReady: false,
-
- /**
- * Flag indicating that the dynamic branding data request has failed.
- * When the request fails there is no logo (JitsiWatermark) displayed.
- *
- * @public
- * @type {boolean}
- */
- customizationFailed: false,
-
- /**
- * Flag indicating that the dynamic branding has not been modified and should use
- * the default options.
- *
- * @public
- * @type {boolean}
- */
- defaultBranding: true,
-
- /**
- * Url for a custom page for DID numbers list.
- *
- * @public
- * @type {string}
- */
- didPageUrl: '',
-
- /**
- * The custom invite domain.
- *
- * @public
- * @type {string}
- */
- inviteDomain: '',
-
- /**
- * The custom url used when the user clicks the logo.
- *
- * @public
- * @type {string}
- */
- logoClickUrl: '',
-
- /**
- * The custom logo (JitisWatermark).
- *
- * @public
- * @type {string}
- */
- logoImageUrl: '',
-
- /**
- * The lobby/prejoin background.
- *
- * @public
- * @type {string}
- */
- premeetingBackground: '',
-
- /**
- * Flag used to signal if the app should use a custom logo or not
- *
- * @public
- * @type {boolean}
- */
- useDynamicBrandingData: false,
-
- /**
- * An array of images to be used as virtual backgrounds instead of the default ones.
- *
- * @public
- * @type {Array<Object>}
- */
- virtualBackgrounds: []
- };
-
- /**
- * Reduces redux actions for the purposes of the feature {@code dynamic-branding}.
- */
- ReducerRegistry.register(STORE_NAME, (state = DEFAULT_STATE, action) => {
- switch (action.type) {
- case SET_DYNAMIC_BRANDING_DATA: {
- const {
- avatarBackgrounds,
- backgroundColor,
- backgroundImageUrl,
- defaultBranding,
- didPageUrl,
- inviteDomain,
- logoClickUrl,
- logoImageUrl,
- premeetingBackground,
- virtualBackgrounds
- } = action.value;
-
- return {
- avatarBackgrounds,
- backgroundColor,
- backgroundImageUrl,
- defaultBranding,
- didPageUrl,
- inviteDomain,
- logoClickUrl,
- logoImageUrl,
- premeetingBackground,
- customizationFailed: false,
- customizationReady: true,
- useDynamicBrandingData: true,
- virtualBackgrounds: formatImages(virtualBackgrounds || [])
- };
- }
- case SET_DYNAMIC_BRANDING_FAILED: {
- return {
- ...state,
- customizationReady: true,
- customizationFailed: true,
- useDynamicBrandingData: true
- };
- }
- case SET_DYNAMIC_BRANDING_READY:
- return {
- ...state,
- customizationReady: true
- };
- }
-
- return state;
- });
-
- /**
- * Transforms the branding images into an array of Images objects ready
- * to be used as virtual backgrounds.
- *
- * @param {Array<string>} images -
- * @private
- * @returns {{Props}}
- */
- function formatImages(images: Array<string> | Array<Object>): Array<Image> {
- return images.map((img, i) => {
- let src;
- let tooltip;
-
- if (typeof img === 'object') {
- ({ src, tooltip } = img);
- } else {
- src = img;
- }
-
- return {
- id: `branding-${i}`,
- src,
- tooltip
- };
- });
- }
|