forked from baron/baron-sso
feat: dynamic frontend tenant dropdown
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user