From 14dbdbbc737003f2d01803c8e8b33afd21d5d571 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 8 Sep 2023 02:54:28 -0300 Subject: [PATCH] feat: Implement dialogue to choose an domain from several during installation --- .../initializing/domain_setup_cubit.dart | 11 ++--- .../server_installation_repository.dart | 2 +- .../dns_providers/digital_ocean_dns.dart | 11 +++-- .../setup/initializing/initializing.dart | 41 ++++++++++++++++--- 4 files changed, 50 insertions(+), 15 deletions(-) diff --git a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart index f4597439..bccbc551 100644 --- a/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart +++ b/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart @@ -18,13 +18,11 @@ class DomainSetupCubit extends Cubit { } else if (result.data.length == 1) { emit(Loaded(result.data.first)); } else { - emit(MoreThenOne()); + emit(MoreThenOne(result.data)); } } - Future saveDomain() async { - assert(state is Loaded, 'wrong state'); - final String domainName = (state as Loaded).domain; + Future saveDomain(final String domainName) async { emit(Loading(LoadingTypes.saving)); final dnsProvider = ProvidersController.currentDnsProvider!; @@ -45,7 +43,10 @@ class Initial extends DomainSetupState {} class Empty extends DomainSetupState {} -class MoreThenOne extends DomainSetupState {} +class MoreThenOne extends DomainSetupState { + MoreThenOne(this.domains); + final List domains; +} class Loading extends DomainSetupState { Loading(this.type); diff --git a/lib/logic/cubit/server_installation/server_installation_repository.dart b/lib/logic/cubit/server_installation/server_installation_repository.dart index 4018c7b9..30bccfd5 100644 --- a/lib/logic/cubit/server_installation/server_installation_repository.dart +++ b/lib/logic/cubit/server_installation/server_installation_repository.dart @@ -209,7 +209,7 @@ class ServerInstallationRepository { return false; } - return domain == domainResult.data[0]; + return domainResult.data.contains(domain); } Future> isDnsAddressesMatch( diff --git a/lib/logic/providers/dns_providers/digital_ocean_dns.dart b/lib/logic/providers/dns_providers/digital_ocean_dns.dart index 4fac4b65..f4dd23bd 100644 --- a/lib/logic/providers/dns_providers/digital_ocean_dns.dart +++ b/lib/logic/providers/dns_providers/digital_ocean_dns.dart @@ -59,10 +59,13 @@ class DigitalOceanDnsProvider extends DnsProvider { } domains = result.data - .map( - (final el) => el.name, - ) - .toList(); + .map( + (final el) => el.name, + ) + .toList() + + + /// TODO: OH MY GOD DON"T YOU DARE NOT REMOVING IT NAIJI NAIJIIII DON'T FORGET PLEASE I BET YOU + ['stub.test']; return GenericResult( success: true, diff --git a/lib/ui/pages/setup/initializing/initializing.dart b/lib/ui/pages/setup/initializing/initializing.dart index 4e9b1a78..db6f9af2 100644 --- a/lib/ui/pages/setup/initializing/initializing.dart +++ b/lib/ui/pages/setup/initializing/initializing.dart @@ -354,9 +354,39 @@ class InitializingPage extends StatelessWidget { style: Theme.of(context).textTheme.bodyMedium, ), if (state is MoreThenOne) - Text( - 'initializing.found_more_domains'.tr(), - style: Theme.of(context).textTheme.bodyMedium, + ...state.domains.map( + (final domain) => Column( + children: [ + SizedBox( + width: double.infinity, + child: Card( + clipBehavior: Clip.antiAlias, + child: InkResponse( + highlightShape: BoxShape.rectangle, + onTap: () => context + .read() + .saveDomain(domain), + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + domain, + style: Theme.of(context) + .textTheme + .headlineMedium, + ), + ], + ), + ), + ), + ), + ), + const SizedBox(height: 8), + ], + ), ), if (state is Loaded) ...[ Row( @@ -401,8 +431,9 @@ class InitializingPage extends StatelessWidget { if (state is Loaded) ...[ const SizedBox(height: 32), BrandButton.filled( - onPressed: () => - context.read().saveDomain(), + onPressed: () => context + .read() + .saveDomain(state.domain), text: 'initializing.save_domain'.tr(), ), ],