@@ -21,98 +21,107 @@ import * as Joi from '@hapi/joi';
21
21
22
22
import { Availability } from '@wireapp/protocol-messaging' ;
23
23
24
- import { accountAction } from './AccountAction' ;
24
+ import { AccountAction , accountAction } from './AccountAction' ;
25
25
26
+ import { AppDispatch , State } from '../index' ;
26
27
import { generateUUID } from '../lib/util' ;
28
+ import {
29
+ AddAccount ,
30
+ DeleteAccount ,
31
+ InitiateSSO ,
32
+ ResetIdentity ,
33
+ SetConversationJoinData ,
34
+ UpdateAccount ,
35
+ UpdateAccountBadge ,
36
+ UpdateAccountDarkMode ,
37
+ UpdateAccountLifeCycle ,
38
+ } from '../reducers/accountReducer' ;
39
+ import { HideContextMenus , ToggleEditAccountVisibility } from '../reducers/contextMenuReducer' ;
27
40
import { AccountSelector } from '../selector/AccountSelector' ;
28
-
29
- export const ActionType = {
30
- ADD_ACCOUNT : 'ADD_ACCOUNT' ,
31
- DELETE_ACCOUNT : 'DELETE_ACCOUNT' ,
32
- HIDE_CONTEXT_MENUS : 'HIDE_CONTEXT_MENUS' ,
33
- INITIATE_SSO : 'INITIATE_SSO' ,
34
- RESET_IDENTITY : 'RESET_IDENTITY' ,
35
- SET_CONVERSATION_JOIN_DATA : 'SET_CONVERSATION_JOIN_DATA' ,
36
- SWITCH_ACCOUNT : 'SWITCH_ACCOUNT' ,
37
- TOGGLE_ADD_ACCOUNT_VISIBILITY : 'TOGGLE_ADD_ACCOUNT_VISIBILITY' ,
38
- TOGGLE_EDIT_ACCOUNT_VISIBILITY : 'TOGGLE_EDIT_ACCOUNT_VISIBILITY' ,
39
- UPDATE_ACCOUNT : 'UPDATE_ACCOUNT' ,
40
- UPDATE_ACCOUNT_BADGE : 'UPDATE_ACCOUNT_BADGE' ,
41
- UPDATE_ACCOUNT_DARK_MODE : 'UPDATE_ACCOUNT_DARK_MODE' ,
42
- UPDATE_ACCOUNT_LIFECYCLE : 'UPDATE_ACCOUNT_LIFECYCLE' ,
43
- } ;
44
-
45
- export const addAccount = ( withSession = true ) => ( {
41
+ import { Account , ConversationJoinData } from '../types/account' ;
42
+ import { ContextMenuState } from '../types/contextMenuState' ;
43
+
44
+ export enum ACCOUNT_ACTION {
45
+ ADD_ACCOUNT = 'ADD_ACCOUNT' ,
46
+ DELETE_ACCOUNT = 'DELETE_ACCOUNT' ,
47
+ HIDE_CONTEXT_MENUS = 'HIDE_CONTEXT_MENUS' ,
48
+ INITIATE_SSO = 'INITIATE_SSO' ,
49
+ RESET_IDENTITY = 'RESET_IDENTITY' ,
50
+ SET_CONVERSATION_JOIN_DATA = 'SET_CONVERSATION_JOIN_DATA' ,
51
+ SWITCH_ACCOUNT = 'SWITCH_ACCOUNT' ,
52
+ TOGGLE_ADD_ACCOUNT_VISIBILITY = 'TOGGLE_ADD_ACCOUNT_VISIBILITY' ,
53
+ TOGGLE_EDIT_ACCOUNT_VISIBILITY = 'TOGGLE_EDIT_ACCOUNT_VISIBILITY' ,
54
+ UPDATE_ACCOUNT = 'UPDATE_ACCOUNT' ,
55
+ UPDATE_ACCOUNT_BADGE = 'UPDATE_ACCOUNT_BADGE' ,
56
+ UPDATE_ACCOUNT_DARK_MODE = 'UPDATE_ACCOUNT_DARK_MODE' ,
57
+ UPDATE_ACCOUNT_LIFECYCLE = 'UPDATE_ACCOUNT_LIFECYCLE' ,
58
+ }
59
+
60
+ export const addAccount = ( withSession = true ) : AddAccount => ( {
46
61
sessionID : withSession ? generateUUID ( ) : undefined ,
47
- type : ActionType . ADD_ACCOUNT ,
62
+ type : ACCOUNT_ACTION . ADD_ACCOUNT ,
48
63
} ) ;
49
64
50
- export const initiateSSO = ( id , ssoCode = undefined , withSession = true ) => ( {
65
+ export const initiateSSO = ( id : string | undefined , ssoCode : string , withSession = true ) : InitiateSSO => ( {
51
66
id,
52
67
sessionID : withSession ? generateUUID ( ) : undefined ,
53
68
ssoCode,
54
- type : ActionType . INITIATE_SSO ,
69
+ type : ACCOUNT_ACTION . INITIATE_SSO ,
55
70
} ) ;
56
71
57
- export const deleteAccount = id => ( {
72
+ export const deleteAccount = ( id : string ) : DeleteAccount => ( {
58
73
id,
59
- type : ActionType . DELETE_ACCOUNT ,
74
+ type : ACCOUNT_ACTION . DELETE_ACCOUNT ,
60
75
} ) ;
61
76
62
- export const resetIdentity = id => ( {
77
+ export const resetIdentity = ( id : string ) : ResetIdentity => ( {
63
78
id,
64
- type : ActionType . RESET_IDENTITY ,
79
+ type : ACCOUNT_ACTION . RESET_IDENTITY ,
65
80
} ) ;
66
81
67
- export const updateAccount = ( id , data ) => ( {
82
+ export const updateAccount = ( id : string , data : Partial < Account > ) : UpdateAccount => ( {
68
83
data,
69
84
id,
70
- type : ActionType . UPDATE_ACCOUNT ,
85
+ type : ACCOUNT_ACTION . UPDATE_ACCOUNT ,
71
86
} ) ;
72
87
73
- export const updateAccountLifecycle = ( id , channel ) => {
88
+ export const updateAccountLifecycle = ( id : string , channel : string ) : UpdateAccountLifeCycle => {
74
89
return {
75
- data : channel ,
90
+ channel,
76
91
id,
77
- type : ActionType . UPDATE_ACCOUNT_LIFECYCLE ,
92
+ type : ACCOUNT_ACTION . UPDATE_ACCOUNT_LIFECYCLE ,
78
93
} ;
79
94
} ;
80
95
81
- export const setConversationJoinData = ( id , data ) => ( {
96
+ export const setConversationJoinData = ( id : string , data ?: ConversationJoinData ) : SetConversationJoinData => ( {
82
97
data,
83
98
id,
84
- type : ActionType . SET_CONVERSATION_JOIN_DATA ,
99
+ type : ACCOUNT_ACTION . SET_CONVERSATION_JOIN_DATA ,
85
100
} ) ;
86
101
87
- export const updateAccountBadge = ( id , count ) => ( {
102
+ export const updateAccountBadge = ( id : string , count : number ) : UpdateAccountBadge => ( {
88
103
count,
89
104
id,
90
- type : ActionType . UPDATE_ACCOUNT_BADGE ,
105
+ type : ACCOUNT_ACTION . UPDATE_ACCOUNT_BADGE ,
91
106
} ) ;
92
107
93
- export const updateAccountDarkMode = ( id , darkMode ) => ( {
108
+ export const updateAccountDarkMode = ( id : string , darkMode : boolean ) : UpdateAccountDarkMode => ( {
94
109
darkMode,
95
110
id,
96
- type : ActionType . UPDATE_ACCOUNT_DARK_MODE ,
111
+ type : ACCOUNT_ACTION . UPDATE_ACCOUNT_DARK_MODE ,
97
112
} ) ;
98
113
99
- export const setAccountContextHidden = ( ) => ( {
100
- type : ActionType . HIDE_CONTEXT_MENUS ,
114
+ export const setAccountContextHidden = ( ) : HideContextMenus => ( {
115
+ type : ACCOUNT_ACTION . HIDE_CONTEXT_MENUS ,
101
116
} ) ;
102
117
103
- export const toggleEditAccountMenuVisibility = ( centerX , centerY , accountId , sessionId , lifecycle , isAtLeastAdmin ) => ( {
104
- payload : {
105
- accountId,
106
- isAtLeastAdmin,
107
- lifecycle,
108
- position : { centerX, centerY} ,
109
- sessionId,
110
- } ,
111
- type : ActionType . TOGGLE_EDIT_ACCOUNT_VISIBILITY ,
118
+ export const toggleEditAccountMenuVisibility = ( payload : ContextMenuState ) : ToggleEditAccountVisibility => ( {
119
+ payload,
120
+ type : ACCOUNT_ACTION . TOGGLE_EDIT_ACCOUNT_VISIBILITY ,
112
121
} ) ;
113
122
114
- export const abortAccountCreation = id => {
115
- return ( dispatch , getState ) => {
123
+ export const abortAccountCreation = ( id : string ) => {
124
+ return ( dispatch : AppDispatch , getState : ( ) => State ) => {
116
125
// Note: It's not guaranteed that the dispatched action "deleteAccount" generates a new state without the deleted account
117
126
const accounts = AccountSelector . getAccounts ( getState ( ) ) . filter ( account => account . id !== id ) ;
118
127
const lastAccount = accounts [ accounts . length - 1 ] ;
@@ -121,6 +130,7 @@ export const abortAccountCreation = id => {
121
130
122
131
if ( lastAccount ) {
123
132
const accountIndex = AccountSelector . getAccountIndex ( getState ( ) , lastAccount . id ) ;
133
+ // @ts -ignore
124
134
dispatch ( accountAction . switchWebview ( accountIndex ) ) ;
125
135
} else {
126
136
dispatch ( addAccount ( false ) ) ;
@@ -129,12 +139,13 @@ export const abortAccountCreation = id => {
129
139
} ;
130
140
131
141
export const addAccountWithSession = ( ) => {
132
- return ( dispatch , getState ) => {
142
+ return ( dispatch : AppDispatch , getState : ( ) => State ) => {
133
143
const hasReachedAccountLimit = AccountSelector . hasReachedLimitOfAccounts ( getState ( ) ) ;
134
144
const unboundAccount = AccountSelector . getUnboundAccount ( getState ( ) ) ;
135
145
136
146
if ( ! ! unboundAccount ) {
137
147
const unboundAccountIndex = AccountSelector . getAccountIndex ( getState ( ) , unboundAccount . id ) ;
148
+ // @ts -ignore
138
149
dispatch ( accountAction . switchWebview ( unboundAccountIndex ) ) ;
139
150
return ;
140
151
}
@@ -147,7 +158,7 @@ export const addAccountWithSession = () => {
147
158
} ;
148
159
} ;
149
160
150
- export const updateAccountData = ( id , data ) => {
161
+ export const updateAccountData = ( id : string , data : Partial < Account > ) => {
151
162
const accountDataSchema = Joi . object ( {
152
163
accentID : Joi . number ( ) ,
153
164
availability : Joi . number ( ) . optional ( ) ,
@@ -160,7 +171,7 @@ export const updateAccountData = (id, data) => {
160
171
webappUrl : Joi . string ( ) ,
161
172
} ) . unknown ( true ) ;
162
173
163
- return dispatch => {
174
+ return ( dispatch : AppDispatch ) => {
164
175
const validatedAccountData = accountDataSchema . validate ( data ) ;
165
176
166
177
if ( ! validatedAccountData . error ) {
@@ -171,14 +182,14 @@ export const updateAccountData = (id, data) => {
171
182
} ;
172
183
} ;
173
184
174
- export const updateAccountBadgeCount = ( id , count ) => {
175
- return ( dispatch , getState ) => {
185
+ export const updateAccountBadgeCount = ( id : string , count : number ) => {
186
+ return ( dispatch : AppDispatch , getState : ( ) => State ) => {
176
187
const accounts = getState ( ) . accounts ;
177
188
const account = getState ( ) . accounts . find ( acc => acc . id === id ) ;
178
189
const accumulatedCount = accounts . reduce ( ( accumulated , account ) => {
179
190
return accumulated + ( account . id === id ? count : account . badgeCount ) ;
180
191
} , 0 ) ;
181
- const ignoreFlash = account . availability === Availability . Type . BUSY ;
192
+ const ignoreFlash = account ? .availability === Availability . Type . BUSY ;
182
193
183
194
window . sendBadgeCount ( accumulatedCount , ignoreFlash ) ;
184
195
@@ -193,7 +204,11 @@ export const updateAccountBadgeCount = (id, count) => {
193
204
} ;
194
205
} ;
195
206
196
- const actionRoot = {
207
+ export interface ActionRoot {
208
+ accountAction : AccountAction ;
209
+ }
210
+
211
+ const actionRoot : ActionRoot = {
197
212
accountAction,
198
213
} ;
199
214
0 commit comments