Phased rollout by country code; starting w/ desktop.stories remote flag

This commit is contained in:
Scott Nonnenberg 2022-10-20 14:02:22 -07:00 committed by GitHub
parent e14c3241c5
commit 1c89168301
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 318 additions and 25 deletions

View file

@ -5,17 +5,19 @@ import { createSelector } from 'reselect';
import { isInteger } from 'lodash';
import { ITEM_NAME as UNIVERSAL_EXPIRE_TIMER_ITEM } from '../../util/universalExpireTimer';
import { innerIsBucketValueEnabled } from '../../RemoteConfig';
import type { ConfigKeyType, ConfigMapType } from '../../RemoteConfig';
import type { StateType } from '../reducer';
import type { ItemsStateType } from '../ducks/items';
import type {
ConversationColorType,
CustomColorType,
} from '../../types/Colors';
import type { UUIDStringType } from '../../types/UUID';
import { DEFAULT_CONVERSATION_COLOR } from '../../types/Colors';
import { getPreferredReactionEmoji as getPreferredReactionEmojiFromStoredValue } from '../../reactions/preferredReactionEmoji';
import { isBeta } from '../../util/version';
import { getUserNumber, getUserACI } from './user';
const DEFAULT_PREFERRED_LEFT_PANE_WIDTH = 320;
@ -53,6 +55,17 @@ const isRemoteConfigFlagEnabled = (
key: ConfigKeyType
): boolean => Boolean(config[key]?.enabled);
// See isBucketValueEnabled in RemoteConfig.ts
const isRemoteConfigBucketEnabled = (
config: Readonly<ConfigMapType>,
name: ConfigKeyType,
e164: string | undefined,
uuid: UUIDStringType | undefined
): boolean => {
const flagValue = config[name]?.value;
return innerIsBucketValueEnabled(name, flagValue, e164, uuid);
};
const getRemoteConfig = createSelector(
getItems,
(state: ItemsStateType): ConfigMapType => state.remoteConfig || {}
@ -64,16 +77,41 @@ export const getUsernamesEnabled = createSelector(
isRemoteConfigFlagEnabled(remoteConfig, 'desktop.usernames')
);
// Note: types/Stories is the other place this check is done
// Note: ts/util/stories is the other place this check is done
export const getStoriesEnabled = createSelector(
getItems,
getRemoteConfig,
(state: ItemsStateType, remoteConfig: ConfigMapType): boolean =>
!state.hasStoriesDisabled &&
(isRemoteConfigFlagEnabled(remoteConfig, 'desktop.internalUser') ||
isRemoteConfigFlagEnabled(remoteConfig, 'desktop.stories') ||
(isRemoteConfigFlagEnabled(remoteConfig, 'desktop.stories.beta') &&
isBeta(window.getVersion())))
getUserNumber,
getUserACI,
(
state: ItemsStateType,
remoteConfig: ConfigMapType,
e164: string | undefined,
aci: UUIDStringType | undefined
): boolean => {
if (state.hasStoriesDisabled) {
return false;
}
if (
isRemoteConfigBucketEnabled(remoteConfig, 'desktop.stories', e164, aci)
) {
return true;
}
if (isRemoteConfigFlagEnabled(remoteConfig, 'desktop.internalUser')) {
return true;
}
if (
isRemoteConfigFlagEnabled(remoteConfig, 'desktop.stories.beta') &&
isBeta(window.getVersion())
) {
return true;
}
return false;
}
);
export const getDefaultConversationColor = createSelector(