From 62e906d1a4a110e64f0a67ed018e5b1cbdeec842 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 29 Jun 2023 12:53:13 +0300 Subject: [PATCH] feat(jobs): Update the model and modal sheets --- lib/logic/cubit/server_jobs/server_jobs_state.dart | 5 +++++ lib/logic/models/json/server_job.dart | 3 +++ lib/logic/models/json/server_job.g.dart | 2 ++ lib/ui/components/jobs_content/jobs_content.dart | 10 ++++++++-- lib/ui/components/pre_styled_buttons/flash_fab.dart | 11 ++++++++++- lib/ui/layouts/brand_hero_screen.dart | 11 ++++++++++- .../binds_migration/services_migration.dart | 11 ++++++++++- 7 files changed, 48 insertions(+), 5 deletions(-) diff --git a/lib/logic/cubit/server_jobs/server_jobs_state.dart b/lib/logic/cubit/server_jobs/server_jobs_state.dart index 03b564c0..71732d67 100644 --- a/lib/logic/cubit/server_jobs/server_jobs_state.dart +++ b/lib/logic/cubit/server_jobs/server_jobs_state.dart @@ -21,6 +21,11 @@ class ServerJobsState extends ServerInstallationDependendState { } } + List get backupJobList => serverJobList.where( + // The backup jobs has the format of 'service..backup' + (final job) => job.typeId.contains('backup'), + ).toList(); + bool get hasRemovableJobs => serverJobList.any( (final job) => job.status == JobStatusEnum.finished || diff --git a/lib/logic/models/json/server_job.dart b/lib/logic/models/json/server_job.dart index 2c448e81..6b125c5f 100644 --- a/lib/logic/models/json/server_job.dart +++ b/lib/logic/models/json/server_job.dart @@ -12,6 +12,7 @@ class ServerJob { required this.description, required this.status, required this.uid, + required this.typeId, required this.updatedAt, required this.createdAt, this.error, @@ -33,12 +34,14 @@ class ServerJob { status: JobStatusEnum.fromString(serverJob.status), statusText: serverJob.statusText, uid: serverJob.uid, + typeId: serverJob.typeId, updatedAt: serverJob.updatedAt, ); final String name; final String description; final JobStatusEnum status; final String uid; + final String typeId; final DateTime updatedAt; final DateTime createdAt; diff --git a/lib/logic/models/json/server_job.g.dart b/lib/logic/models/json/server_job.g.dart index 5328547b..61ff259b 100644 --- a/lib/logic/models/json/server_job.g.dart +++ b/lib/logic/models/json/server_job.g.dart @@ -11,6 +11,7 @@ ServerJob _$ServerJobFromJson(Map json) => ServerJob( description: json['description'] as String, status: $enumDecode(_$JobStatusEnumEnumMap, json['status']), uid: json['uid'] as String, + typeId: json['typeId'] as String, updatedAt: DateTime.parse(json['updatedAt'] as String), createdAt: DateTime.parse(json['createdAt'] as String), error: json['error'] as String?, @@ -27,6 +28,7 @@ Map _$ServerJobToJson(ServerJob instance) => { 'description': instance.description, 'status': _$JobStatusEnumEnumMap[instance.status]!, 'uid': instance.uid, + 'typeId': instance.typeId, 'updatedAt': instance.updatedAt.toIso8601String(), 'createdAt': instance.createdAt.toIso8601String(), 'error': instance.error, diff --git a/lib/ui/components/jobs_content/jobs_content.dart b/lib/ui/components/jobs_content/jobs_content.dart index 5ba00f89..8db853ac 100644 --- a/lib/ui/components/jobs_content/jobs_content.dart +++ b/lib/ui/components/jobs_content/jobs_content.dart @@ -12,7 +12,12 @@ import 'package:selfprivacy/ui/components/jobs_content/server_job_card.dart'; import 'package:selfprivacy/ui/helpers/modals.dart'; class JobsContent extends StatelessWidget { - const JobsContent({super.key}); + const JobsContent({ + required this.controller, + super.key, + }); + + final ScrollController controller; @override Widget build(final BuildContext context) { @@ -119,9 +124,10 @@ class JobsContent extends StatelessWidget { ]; } return ListView( + controller: controller, padding: paddingH15V0, children: [ - const SizedBox(height: 15), + const SizedBox(height: 16), Center( child: Text( 'jobs.title'.tr(), diff --git a/lib/ui/components/pre_styled_buttons/flash_fab.dart b/lib/ui/components/pre_styled_buttons/flash_fab.dart index 2098f79e..caffbfac 100644 --- a/lib/ui/components/pre_styled_buttons/flash_fab.dart +++ b/lib/ui/components/pre_styled_buttons/flash_fab.dart @@ -62,7 +62,16 @@ class _BrandFabState extends State // TODO: Make a hero animation to the screen showModalBottomSheet( context: context, - builder: (final BuildContext context) => const JobsContent(), + useRootNavigator: true, + isScrollControlled: true, + builder: (final BuildContext context) => DraggableScrollableSheet( + expand: false, + maxChildSize: 0.9, + minChildSize: 0.4, + initialChildSize: 0.6, + builder: (final context, final scrollController) => + JobsContent(controller: scrollController), + ), ); }, isExtended: widget.extended, diff --git a/lib/ui/layouts/brand_hero_screen.dart b/lib/ui/layouts/brand_hero_screen.dart index adb94902..e7b320c0 100644 --- a/lib/ui/layouts/brand_hero_screen.dart +++ b/lib/ui/layouts/brand_hero_screen.dart @@ -145,7 +145,16 @@ class _HeroSliverAppBarState extends State { onPressed: () { showModalBottomSheet( context: context, - builder: (final BuildContext context) => const JobsContent(), + useRootNavigator: true, + isScrollControlled: true, + builder: (final BuildContext context) => DraggableScrollableSheet( + expand: false, + maxChildSize: 0.9, + minChildSize: 0.4, + initialChildSize: 0.6, + builder: (final context, final scrollController) => + JobsContent(controller: scrollController), + ), ); }, icon: Icon( diff --git a/lib/ui/pages/server_storage/binds_migration/services_migration.dart b/lib/ui/pages/server_storage/binds_migration/services_migration.dart index cdb3339b..f7c26c88 100644 --- a/lib/ui/pages/server_storage/binds_migration/services_migration.dart +++ b/lib/ui/pages/server_storage/binds_migration/services_migration.dart @@ -177,7 +177,16 @@ class _ServicesMigrationPageState extends State { context.router.popUntilRoot(); showModalBottomSheet( context: context, - builder: (final BuildContext context) => const JobsContent(), + useRootNavigator: true, + isScrollControlled: true, + builder: (final BuildContext context) => DraggableScrollableSheet( + expand: false, + maxChildSize: 0.9, + minChildSize: 0.4, + initialChildSize: 0.6, + builder: (final context, final scrollController) => + JobsContent(controller: scrollController), + ), ); }, ),