Line data Source code
1 : import 'package:fast_immutable_collections/fast_immutable_collections.dart';
2 : import 'package:redux/redux.dart';
3 :
4 : import '../../types/red_fire_state.dart';
5 : import '../actions/set_auth_user_data_action.dart';
6 : import '../enums/providers_enum.dart';
7 : import '../link-providers/enums/linking_account_enum.dart';
8 : import '../link-providers/models/link_accounts_view_model.dart';
9 : import '../utils/constants/auth_provider_names.dart';
10 :
11 : class SetAuthUserDataReducer<T extends RedFireState>
12 : extends TypedReducer<T, SetAuthUserDataAction> {
13 2 : SetAuthUserDataReducer()
14 4 : : super((state, action) {
15 2 : var newStateOf = <ProvidersEnum, LinkingStateEnum>{
16 4 : for (var v in ProvidersEnum.values) v: LinkingStateEnum.unlinked
17 : };
18 :
19 8 : for (var entry in state.auth.linking.stateOf.entries) {
20 0 : if (entry.value == LinkingStateEnum.linking) {
21 0 : newStateOf[entry.key] = LinkingStateEnum.linking;
22 : }
23 : }
24 :
25 2 : if (action.authUserData != null) {
26 4 : for (var authProvider in action.authUserData!.providers) {
27 0 : newStateOf[authProviderEnumFrom[authProvider.providerId]!] =
28 : LinkingStateEnum.linked;
29 : }
30 : }
31 4 : return ((state as dynamic).copyWith.auth(
32 2 : userData: action.authUserData,
33 4 : linking: LinkAccountsViewModel(newStateOf.lock)) as T);
34 : });
35 : }
|