diff --git a/lib/logic/api_maps/graphql_maps/server_api/server_actions_api.dart b/lib/logic/api_maps/graphql_maps/server_api/server_actions_api.dart index 05269d33..51a893c0 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server_actions_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server_actions_api.dart @@ -29,7 +29,7 @@ mixin ServerActionsApi on GraphQLApiMap { print(response.exception.toString()); } if (response.parsedData!.rebootSystem.success) { - time = DateTime.now(); + time = DateTime.now().toUtc(); } } catch (e) { print(e); diff --git a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart index bc28a681..fcf3db05 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart @@ -248,7 +248,7 @@ class ServerApi extends GraphQLApiMap final GraphQLClient client = await getClient(); final input = Input$RecoveryKeyLimitsInput( - expirationDate: expirationDate, + expirationDate: expirationDate?.toUtc(), uses: numberOfUses, ); final variables = Variables$Mutation$GetNewRecoveryApiKey( diff --git a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart index 0b783a2c..fe317327 100644 --- a/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart +++ b/lib/logic/api_maps/rest_maps/server_providers/hetzner/hetzner_api.dart @@ -360,21 +360,14 @@ class HetznerApi extends RestApiMap { return GenericResult(success: true, data: pricing); } - Future>> getVolumes({ - final String? status, - }) async { + Future>> getVolumes() async { final List volumes = []; - Response? getVolumesResonse; + Response? getVolumesResponse; final Dio client = await getClient(); try { - getVolumesResonse = await client.get( - '/volumes', - queryParameters: { - 'status': status, - }, - ); - for (final volume in getVolumesResonse.data['volumes']) { + getVolumesResponse = await client.get('/volumes'); + for (final volume in getVolumesResponse.data['volumes']) { volumes.add(HetznerVolume.fromJson(volume)); } } catch (e) { @@ -391,8 +384,8 @@ class HetznerApi extends RestApiMap { return GenericResult( data: volumes, success: true, - code: getVolumesResonse.statusCode, - message: getVolumesResonse.statusMessage, + code: getVolumesResponse.statusCode, + message: getVolumesResponse.statusMessage, ); } diff --git a/lib/ui/pages/setup/initializing/server_type_picker.dart b/lib/ui/pages/setup/initializing/server_type_picker.dart index 9862fc3c..932cbd93 100644 --- a/lib/ui/pages/setup/initializing/server_type_picker.dart +++ b/lib/ui/pages/setup/initializing/server_type_picker.dart @@ -9,6 +9,7 @@ import 'package:selfprivacy/logic/models/server_type.dart'; import 'package:selfprivacy/ui/components/buttons/brand_button.dart'; import 'package:selfprivacy/ui/components/info_box/info_box.dart'; import 'package:selfprivacy/ui/layouts/responsive_layout_with_infobox.dart'; +import 'package:selfprivacy/utils/ui_helpers.dart'; class ServerTypePicker extends StatefulWidget { const ServerTypePicker({ @@ -329,7 +330,7 @@ class SelectTypePage extends StatelessWidget { 'initializing.choose_server_type_payment_per_month' .tr( args: [ - '${(type.price.value + storagePrice + publicIpPrice).toStringAsFixed(4)} ${type.price.currency.shortcode}', + '${UiHelpers.formatWithPrecision(type.price.value + storagePrice + publicIpPrice)} ${type.price.currency.shortcode}', ], ), style: Theme.of(context) @@ -370,8 +371,10 @@ class SelectTypePage extends StatelessWidget { 'initializing.choose_server_type_payment_server' .tr( args: [ - type.price.value - .toString(), + UiHelpers + .formatWithPrecision( + type.price.value, + ), ], ), style: Theme.of(context) @@ -401,7 +404,10 @@ class SelectTypePage extends StatelessWidget { 'initializing.choose_server_type_payment_storage' .tr( args: [ - storagePrice.toString(), + UiHelpers + .formatWithPrecision( + storagePrice, + ), ], ), style: Theme.of(context) @@ -432,8 +438,10 @@ class SelectTypePage extends StatelessWidget { 'initializing.choose_server_type_payment_ip' .tr( args: [ - publicIpPrice - .toString(), + UiHelpers + .formatWithPrecision( + publicIpPrice, + ), ], ), style: Theme.of(context) diff --git a/lib/utils/ui_helpers.dart b/lib/utils/ui_helpers.dart index f4d58a05..10f7419d 100644 --- a/lib/utils/ui_helpers.dart +++ b/lib/utils/ui_helpers.dart @@ -1,3 +1,4 @@ +import 'package:intl/intl.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; /// it's ui helpers use only for ui components, don't use for logic components. @@ -5,4 +6,14 @@ import 'package:selfprivacy/logic/cubit/server_installation/server_installation_ class UiHelpers { static String getDomainName(final ServerInstallationState config) => config.isDomainSelected ? config.serverDomain!.domainName : 'example.com'; + + static String formatWithPrecision( + final double value, { + final int fraction = 2, + }) { + final NumberFormat formatter = NumberFormat(); + formatter.minimumFractionDigits = 0; + formatter.maximumFractionDigits = fraction; + return formatter.format(value); + } }