add cross login from other regional

This commit is contained in:
2024-12-24 10:01:51 +07:00
parent c0e21811c0
commit 3692ba55eb
10 changed files with 364 additions and 14 deletions

View File

@@ -4,7 +4,10 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:mitra_corporate/model/aliases_model.dart';
import 'package:mitra_corporate/provider/aliases_provider.dart';
import 'package:mitra_corporate/provider/menu_provider.dart';
import 'package:mitra_corporate/provider/pindah_branch_provider.dart';
import 'package:mitra_corporate/widgets/custom_text_field.dart';
import 'package:loading_animation_widget/loading_animation_widget.dart';
import 'package:shared_preferences/shared_preferences.dart';
@@ -14,6 +17,7 @@ import '../app/route.dart';
import '../provider/auth_provider.dart';
import '../screen/login/change_password_provider.dart';
import '../screen/login/logout_provider.dart';
import 'dart:html' as html;
import 'custom_snackbar_widget.dart';
class Header extends HookConsumerWidget {
@@ -27,6 +31,8 @@ class Header extends HookConsumerWidget {
final isExpand = ref.watch(sideBarExpandProvider);
final auth = ref.watch(authProvider);
final date = useState("");
final listAliases = useState<List<AliasesModel>>(List.empty());
ref.listen(logoutProvider, (prev, next) async {
if (next is LogoutStateLoading) {
} else if (next is LogoutStateError) {
@@ -41,6 +47,13 @@ class Header extends HookConsumerWidget {
}
}
});
fetchAliases() async {
String token = auth?.token ?? "0";
ref.read(aliasesDataProvider.notifier).getAliases(token: token);
}
useEffect(() {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) async {
DateTime now = DateTime.now();
@@ -48,9 +61,45 @@ class Header extends HookConsumerWidget {
date.value = DateFormat('EEEE, d MMMM yyyy', "id").format(now);
print(DateFormat('EEEE, d MMMM yyyy', "id").format(now));
});
fetchAliases();
});
return () {};
}, []);
ref.listen(aliasesDataProvider, (pref, next) {
if (next is AliasesStateInit) {
} else if (next is AliasesStateLoading) {
} else if (next is AliasesStateError) {
SanckbarWidget(context, next.message ?? "", snackbarType.error);
} else if (next is AliasesStateDone) {
listAliases.value = next.model;
}
});
void openNewTab(String url) {
html.window.open(url, '_blank');
}
moveBranch(String userID, String username, String targetUrl) {
String token = auth?.token ?? "0";
ref.read(reqCabangTokenProvider.notifier).requestTokenCabang(token: token, userID: userID, username: username, targetUrl: targetUrl);
}
ref.listen(reqCabangTokenProvider, (prev, next) {
if (next is ReqCabangStateInit) {
} else if (next is ReqCabangStateLoading) {
} else if (next is ReqCabangStateError) {
SanckbarWidget(context, next.message ?? "", snackbarType.error);
} else if (next is ReqCabangStateDone) {
var url = next.model;
openNewTab("http://${url}");
}
});
return Container(
color: Colors.white,
alignment: Alignment.center,
@@ -185,6 +234,27 @@ class Header extends HookConsumerWidget {
style: Constant.body3_400(context: context),
),
),
...listAliases.value.isEmpty
? []
: listAliases.value.map((alias) {
return MenuItemButton(
leadingIcon: Icon(
EvaIcons.globe2Outline,
color: Constant.primaryRed,
),
child: Text(
alias.userAliasesTargetRegionalName ?? '',
style: Constant.body3_400(context: context),
),
onPressed: () {
moveBranch(
alias.userAliasesTargetUserID ?? "",
alias.userAliasesTargetUsername ?? "",
alias.userAliasesTargetIP ?? ""
);
},
);
}).toList(),
Container(
margin: EdgeInsets.only(top: 10, bottom: 10),
child: Center(