1
0
forked from baron/baron-sso

feat: dynamic frontend tenant dropdown

This commit is contained in:
2026-04-06 16:56:33 +09:00
parent 46db7ac026
commit 332ac9c0d8
4 changed files with 83 additions and 51 deletions

View File

@@ -54,6 +54,10 @@ class _SignupScreenState extends State<SignupScreen> {
bool _isPasswordObscured = true;
bool _isConfirmPasswordObscured = true;
// Dynamic Tenants
List<Map<String, dynamic>> _tenants = [];
final Map<String, String> _affiliateDomains = {};
// Inline Errors
String? _emailError;
String? _phoneError;
@@ -66,20 +70,32 @@ class _SignupScreenState extends State<SignupScreen> {
Timer? _phoneTimer;
int _phoneSeconds = 0;
// 가족사 도메인 맵
final Map<String, String> _affiliateDomains = {
'hanmaceng.co.kr': 'HANMAC',
'samaneng.com': 'SAMAN',
'jangheon.co.kr': 'JANGHEON',
'hallasanup.com': 'HALLA',
'pre-cast.co.kr': 'PTC',
'baroncs.co.kr': 'BARON',
};
@override
void initState() {
super.initState();
_loadPolicy();
_fetchTenants();
}
Future<void> _fetchTenants() async {
try {
final tenants = await AuthProxyService.getActiveTenants();
if (mounted) {
setState(() {
_tenants = tenants;
_affiliateDomains.clear();
for (var t in tenants) {
if (t['domains'] != null) {
for (var d in (t['domains'] as List)) {
_affiliateDomains[d.toString().toLowerCase()] = t['slug'];
}
}
}
});
}
} catch (e) {
debugPrint('Failed to load tenants: $e');
}
}
Future<void> _loadPolicy() async {
@@ -1505,47 +1521,12 @@ class _SignupScreenState extends State<SignupScreen> {
),
border: const OutlineInputBorder(),
),
items: [
DropdownMenuItem(
value: 'HANMAC',
child: Text(
tr('domain.company.hanmac'),
),
),
DropdownMenuItem(
value: 'SAMAN',
child: Text(
tr('domain.company.saman'),
),
),
DropdownMenuItem(
value: 'PTC',
child: Text(
tr(
'domain.company.ptc',
fallback: 'PTC',
),
),
),
DropdownMenuItem(
value: 'JANGHEON',
child: Text(
tr('domain.company.jangheon'),
),
),
DropdownMenuItem(
value: 'BARON',
child: Text(
tr('domain.company.baron'),
),
),
DropdownMenuItem(
value: 'HALLA',
child: Text(
tr('domain.company.halla'),
),
),
],
items: _tenants.map((t) {
return DropdownMenuItem<String>(
value: t['slug'],
child: Text(t['name'] ?? t['slug']),
);
}).toList(),
onChanged: _isAffiliateEmail
? null
: (val) => setState(