From 6014e385bc8c0f56018a768312afb069bfba6ca6 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Fri, 26 Aug 2022 05:34:25 +0300 Subject: [PATCH] Implement ServerJobCard --- .../provider_volume_cubit.dart | 20 +++++---- .../components/jobs_content/jobs_content.dart | 11 ++++- .../jobs_content/server_job_card.dart | 42 +++++++++++++++++++ 3 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 lib/ui/components/jobs_content/server_job_card.dart diff --git a/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart b/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart index 12e1a034..be0a0d82 100644 --- a/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart +++ b/lib/logic/cubit/provider_volumes/provider_volume_cubit.dart @@ -5,7 +5,6 @@ import 'package:selfprivacy/logic/api_maps/rest_maps/server_providers/server_pro import 'package:selfprivacy/logic/common_enum/common_enum.dart'; import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart'; import 'package:selfprivacy/logic/models/hive/server_details.dart'; -import 'package:selfprivacy/logic/models/json/server_disk_volume.dart'; import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart'; part 'provider_volume_state.dart'; @@ -54,14 +53,18 @@ class ApiProviderVolumeCubit emit(ApiProviderVolumeState(volumes, LoadingStatus.success)); } - Future attachVolume(final ServerVolume volume) async { + Future attachVolume(final DiskVolume volume) async { final ServerHostingDetails server = getIt().serverDetails!; - await providerApi!.getVolumeProvider().attachVolume(volume.id, server.id); + await providerApi! + .getVolumeProvider() + .attachVolume(volume.providerVolume!.id, server.id); refresh(); } - Future detachVolume(final ServerVolume volume) async { - await providerApi!.getVolumeProvider().detachVolume(volume.id); + Future detachVolume(final DiskVolume volume) async { + await providerApi! + .getVolumeProvider() + .detachVolume(volume.providerVolume!.id); refresh(); } @@ -86,11 +89,14 @@ class ApiProviderVolumeCubit Future createVolume() async { final ServerVolume? volume = await providerApi!.getVolumeProvider().createVolume(); - await attachVolume(volume!); + + final diskVolume = DiskVolume(); + diskVolume.providerVolume = volume; + await attachVolume(diskVolume); await Future.delayed(const Duration(seconds: 10)); - await ServerApi().mountVolume(volume.name); + await ServerApi().mountVolume(volume!.name); refresh(); } diff --git a/lib/ui/components/jobs_content/jobs_content.dart b/lib/ui/components/jobs_content/jobs_content.dart index b4cf3a89..3948f7c4 100644 --- a/lib/ui/components/jobs_content/jobs_content.dart +++ b/lib/ui/components/jobs_content/jobs_content.dart @@ -11,6 +11,7 @@ import 'package:selfprivacy/ui/components/brand_button/brand_button.dart'; import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart'; import 'package:selfprivacy/ui/components/brand_loader/brand_loader.dart'; import 'package:selfprivacy/ui/components/brand_text/brand_text.dart'; +import 'package:selfprivacy/ui/components/jobs_content/server_job_card.dart'; class JobsContent extends StatelessWidget { const JobsContent({final super.key}); @@ -117,7 +118,15 @@ class JobsContent extends StatelessWidget { ), ), const SizedBox(height: 20), - ...widgets + ...widgets, + const SizedBox(height: 8), + const Divider(), + const SizedBox(height: 8), + ...state.serverJobList.map( + (final job) => ServerJobCard( + serverJob: job, + ), + ), ], ); }, diff --git a/lib/ui/components/jobs_content/server_job_card.dart b/lib/ui/components/jobs_content/server_job_card.dart new file mode 100644 index 00000000..6f8c50fa --- /dev/null +++ b/lib/ui/components/jobs_content/server_job_card.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:selfprivacy/logic/models/json/server_job.dart'; +import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart'; +import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart'; + +class ServerJobCard extends StatelessWidget { + const ServerJobCard({ + required final this.serverJob, + final super.key, + }); + + final ServerJob serverJob; + + @override + Widget build(final BuildContext context) => GestureDetector( + child: BrandCards.big( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + serverJob.name, + style: Theme.of(context).textTheme.bodyMedium, + ), + Text( + serverJob.description, + style: Theme.of(context).textTheme.bodySmall, + ), + const SizedBox(height: 8), + BrandLinearIndicator( + value: serverJob.progress == null + ? 0.0 + : serverJob.progress! / 100.0, + color: Theme.of(context).colorScheme.secondary, + backgroundColor: Theme.of(context).colorScheme.surfaceVariant, + height: 7.0, + ), + const SizedBox(height: 8), + ], + ), + ), + ); +}