From a91844b937345fa3190f5883db08bc3592275902 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Mon, 23 Sep 2024 11:11:10 +0530 Subject: [PATCH] [client] basic sync dialog with pending actions --- client/lib/ui/app/nav_list.dart | 6 ++--- client/lib/ui/sync/action_queue_list.dart | 29 +++++++++++++++++++++++ client/lib/ui/sync/sync_dialog.dart | 20 ++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 client/lib/ui/sync/action_queue_list.dart create mode 100644 client/lib/ui/sync/sync_dialog.dart diff --git a/client/lib/ui/app/nav_list.dart b/client/lib/ui/app/nav_list.dart index ac45ce5c..b889bb8f 100644 --- a/client/lib/ui/app/nav_list.dart +++ b/client/lib/ui/app/nav_list.dart @@ -4,8 +4,7 @@ import 'package:flutter/material.dart'; import 'package:offtheline/offtheline.dart'; import 'package:phylum/app_shortcuts.dart'; import 'package:phylum/integrations/download_manager.dart'; -import 'package:phylum/libphylum/phylum_account.dart'; -import 'package:phylum/util/dialogs.dart'; +import 'package:phylum/ui/sync/sync_dialog.dart'; import 'package:provider/provider.dart'; enum _SyncState { @@ -162,8 +161,7 @@ class SyncButton extends StatelessWidget { title: const Text('Sync'), subtitle: Text(qState.text), onTap: () { - final state = context.read(); - showAlertDialog(context, message: state.toDetailedString(context.read())); + SyncDialog.show(context); }, ); } diff --git a/client/lib/ui/sync/action_queue_list.dart b/client/lib/ui/sync/action_queue_list.dart new file mode 100644 index 00000000..6c1abcda --- /dev/null +++ b/client/lib/ui/sync/action_queue_list.dart @@ -0,0 +1,29 @@ +import 'package:flutter/material.dart'; +import 'package:offtheline/offtheline.dart'; +import 'package:phylum/libphylum/phylum_account.dart'; +import 'package:provider/provider.dart'; + +class ActionQueueList extends StatelessWidget { + const ActionQueueList({super.key}); + + @override + Widget build(BuildContext context) { + final queue = context.select>((state) => state.actions.keys).toList(growable: false); + return ListView.builder(shrinkWrap: true, itemCount: queue.length, itemBuilder: (context, i) => ActionView(action: queue[i])); + } +} + +class ActionView extends StatelessWidget { + final ApiAction action; + ActionView({required this.action}) : super(key: ValueKey(action.key)); + + @override + Widget build(BuildContext context) { + final account = context.read(); + final state = context.select((state) => state.actions[action]!); + return ListTile( + title: Text(action.generateDescription(account)), + subtitle: Text(state.toString()), + ); + } +} diff --git a/client/lib/ui/sync/sync_dialog.dart b/client/lib/ui/sync/sync_dialog.dart new file mode 100644 index 00000000..e9f0af5c --- /dev/null +++ b/client/lib/ui/sync/sync_dialog.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; +import 'package:phylum/ui/sync/action_queue_list.dart'; + +class SyncDialog extends StatelessWidget { + const SyncDialog({super.key}); + + static void show(BuildContext context) { + showDialog(context: context, builder: (context) => const SyncDialog()); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Pending Actions'), + ), + body: const ActionQueueList(), + ); + } +}