1
1
import { memoize , memoizeWithArgs } from 'proxy-memoize' ;
2
2
3
3
import { Message , Category } from '@suite-common/suite-types' ;
4
+ import { RequiredKey } from '@trezor/type-utils' ;
4
5
5
6
import { ContextDomain , FeatureDomain , MessageSystemRootState } from './messageSystemTypes' ;
6
7
@@ -35,6 +36,7 @@ export const selectActiveBannerMessages = makeSelectActiveMessagesByCategory('ba
35
36
export const selectActiveContextMessages = makeSelectActiveMessagesByCategory ( 'context' ) ;
36
37
export const selectActiveModalMessages = makeSelectActiveMessagesByCategory ( 'modal' ) ;
37
38
export const selectActiveFeatureMessages = makeSelectActiveMessagesByCategory ( 'feature' ) ;
39
+ export const selectActiveAbTestingMessages = makeSelectActiveMessagesByCategory ( 'abTesting' ) ;
38
40
39
41
export const selectIsAnyBannerMessageActive = ( state : MessageSystemRootState ) => {
40
42
const activeBannerMessages = selectActiveBannerMessages ( state ) ;
@@ -66,7 +68,7 @@ export const selectContextMessageContent = memoizeWithArgs(
66
68
67
69
return {
68
70
...message ,
69
- content : message ?. content [ language ] ?? message ?. content . en ,
71
+ content : message ?. content ?. [ language ] ?? message ?. content ? .en ,
70
72
cta : message ?. cta
71
73
? {
72
74
...message . cta ,
@@ -91,7 +93,7 @@ export const selectFeatureMessageContent = memoizeWithArgs(
91
93
( state : MessageSystemRootState , domain : FeatureDomain , language : string ) => {
92
94
const featureMessages = selectFeatureMessage ( state , domain ) ;
93
95
94
- return featureMessages ?. content [ language ] ?? featureMessages ?. content . en ;
96
+ return featureMessages ?. content ?. [ language ] ?? featureMessages ?. content ? .en ;
95
97
} ,
96
98
) ;
97
99
@@ -130,7 +132,16 @@ export const selectAllValidMessages = memoize((state: MessageSystemRootState) =>
130
132
...validMessages . feature ,
131
133
...validMessages . modal ,
132
134
...validMessages . context ,
135
+ ...validMessages . abTesting ,
133
136
] ;
134
137
135
138
return config ?. actions . map ( a => a . message ) . filter ( m => allValidMessages . includes ( m . id ) ) || [ ] ;
136
139
} ) ;
140
+
141
+ export const selectAbTestingById = memoizeWithArgs ( ( state : MessageSystemRootState , id : string ) => {
142
+ const abTests = selectActiveAbTestingMessages ( state ) . filter (
143
+ item => item . category === 'abTesting' && item . distribution ,
144
+ ) as RequiredKey < Message , 'distribution' > [ ] ;
145
+
146
+ return abTests . find ( abTest => abTest . id === id ) ;
147
+ } ) ;
0 commit comments