From 4e708396791f39396cbb9b5c3fe5deb6d5412c09 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Wed, 11 Dec 2024 22:06:58 +0530 Subject: [PATCH] [client] Manual retry in sync dialog --- client/lib/ui/sync/sliver_offline.dart | 28 +++++++++++++++++++ ...liver_changes.dart => sliver_updates.dart} | 2 +- client/lib/ui/sync/sync_dialog.dart | 5 ++-- 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 client/lib/ui/sync/sliver_offline.dart rename client/lib/ui/sync/{sliver_changes.dart => sliver_updates.dart} (92%) diff --git a/client/lib/ui/sync/sliver_offline.dart b/client/lib/ui/sync/sliver_offline.dart new file mode 100644 index 00000000..91a517de --- /dev/null +++ b/client/lib/ui/sync/sliver_offline.dart @@ -0,0 +1,28 @@ +import 'package:flutter/material.dart'; +import 'package:phylum/libphylum/phylum_api_types.dart'; +import 'package:provider/provider.dart'; + +class OfflineSliver extends StatelessWidget { + const OfflineSliver({super.key}); + + @override + Widget build(BuildContext context) { + final unreachable = context.select((state) => state.unreachable); + + return SliverList( + delegate: SliverChildBuilderDelegate( + (context, i) { + return ListTile( + leading: Icon(Icons.refresh), + title: Text('Server Unreachable'), + subtitle: Text('Tap to retry'), + onTap: () { + context.read().resume(); + }, + ); + }, + childCount: unreachable ? 1 : 0, + ), + ); + } +} diff --git a/client/lib/ui/sync/sliver_changes.dart b/client/lib/ui/sync/sliver_updates.dart similarity index 92% rename from client/lib/ui/sync/sliver_changes.dart rename to client/lib/ui/sync/sliver_updates.dart index f35813c7..fa0ea5f4 100644 --- a/client/lib/ui/sync/sliver_changes.dart +++ b/client/lib/ui/sync/sliver_updates.dart @@ -13,7 +13,7 @@ class UpdatesSliver extends StatelessWidget { @override Widget build(BuildContext context) { final actions = context.select>>((state) => state.actions); - final updates = actions.where((action) => action.action is! ResourceUploadAction).toList(growable: false); + final updates = actions.where((action) => action.action is! ResourceUploadAction && action.status is! ActionStatusError).toList(growable: false); return SliverList( delegate: SliverChildBuilderDelegate( diff --git a/client/lib/ui/sync/sync_dialog.dart b/client/lib/ui/sync/sync_dialog.dart index c008414b..133dff29 100644 --- a/client/lib/ui/sync/sync_dialog.dart +++ b/client/lib/ui/sync/sync_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:phylum/ui/sync/sliver_changes.dart'; +import 'package:phylum/ui/sync/sliver_updates.dart'; +import 'package:phylum/ui/sync/sliver_offline.dart'; import 'package:phylum/ui/sync/sliver_uploads.dart'; import 'package:phylum/ui/sync/sliver_downloads.dart'; @@ -41,6 +42,6 @@ class SyncDialog extends StatelessWidget { } Widget buildContents(BuildContext context) => const CustomScrollView( - slivers: [DownloadsSliver(), ErrorsSliver(), UploadsSliver(), UpdatesSliver()], + slivers: [OfflineSliver(), DownloadsSliver(), ErrorsSliver(), UploadsSliver(), UpdatesSliver()], ); }