Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / unleash / UnleashFeatureFlagsVariants.ts
blob8e0108f043c6231d26d00d509bbc750518768ad1
1 import { type useVariant as useUnleashVariant } from '@unleash/proxy-client-react';
3 import { type FeatureFlag } from './UnleashFeatureFlags';
5 /**
6  * List of feature flags with a variant.
7  */
8 export const FLAGS_WITH_VARIANT = ['MailOnboarding', 'InboxNewUpsellModals'] satisfies FeatureFlag[];
10 /**
11  * Flags with variants variants.
12  * @description Union type of the list of feature flags with a variant.
13  *
14  * Naming convention: `${FlagName}Variant`
15  */
16 export type MailOnboardingVariant = 'none' | 'old' | 'new';
17 export type InboxNewUpsellModalsVariant = 'old' | 'new';
19 /**
20  * @description Union type of the list of feature flags with a variant.
21  *
22  * Based on `FLAG_VARIANTS` list.
23  */
24 export type FeatureFlagsWithVariant = (typeof FLAGS_WITH_VARIANT)[number];
26 type VariantReturnType<TVariantNameValue extends string> = Partial<
27     // If flag is disabled, the variant name is 'disabled'
28     Omit<ReturnType<typeof useUnleashVariant>, 'name'> & { name?: TVariantNameValue | 'disabled' }
31 /**
32  * @description Map of feature flags with a variant.
33  * Register your new variant here.
34  */
35 type FeatureFlagVariantMap = {
36     MailOnboarding: VariantReturnType<MailOnboardingVariant>;
37     InboxNewUpsellModals: VariantReturnType<InboxNewUpsellModalsVariant>;
40 /**
41  * @param FlagName - The feature flag name
42  * @description Returns the Unleash variant value based on the declared `FeatureFlagsWithVariant` names
43  */
44 export type FeatureFlagVariant<FlagName extends FeatureFlagsWithVariant> = FlagName extends keyof FeatureFlagVariantMap
45     ? FeatureFlagVariantMap[FlagName]
46     : unknown;