diff --git a/lib/api_service.dart b/lib/api_service.dart index b9ffdf8..4525d32 100644 --- a/lib/api_service.dart +++ b/lib/api_service.dart @@ -46,6 +46,7 @@ class ApiService { } } } + currFolder = folder; return allEmails; } else { throw Exception('Failed to load threads'); @@ -159,7 +160,7 @@ class ApiService { return serializableMessages; } else { print( - "failed get request with status code ${response.statusCode}, and body ${response.body}"); + "failed get request with status code ${response.statusCode}, and body ${response.body}"); } } catch (e) { print("caught in threadInSerializable method error: $e"); diff --git a/lib/augment.dart b/lib/augment.dart index ebee03b..21c6770 100644 --- a/lib/augment.dart +++ b/lib/augment.dart @@ -1,7 +1,10 @@ +// import 'dart:ffi'; + import 'package:crab_ui/api_service.dart'; import 'package:crab_ui/attachmentDownload.dart'; import 'package:crab_ui/structs.dart'; import 'package:flutter/material.dart'; +import 'package:pdfrx/pdfrx.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'dart:html' as html; import 'dart:js' as js; @@ -88,6 +91,12 @@ class _DynamicClassesAugment extends State { onPressed: AugmentClasses.handleStop, child: Text('Stop'), ), + ElevatedButton( + onPressed: () { + AugmentClasses.handleMove(context); + }, + child: Text('Move'), + ), Spacer(), PopupMenuButton( onSelected: (String value) { @@ -212,8 +221,9 @@ class _DynamicClassesAugment extends State { } class AugmentClasses { - ApiService _apiService = ApiService(); static OverlayEntry? _overlayEntry; + static String? selectedFolder; // Manage selected folder at the class level + static void handleHome(BuildContext context) { Navigator.of(context).popUntil((route) => route.isFirst); } @@ -222,11 +232,165 @@ class AugmentClasses { print("reload"); } + Widget listOfFolders(BuildContext context) { + //list the emails and make some sort of selection box + return FutureBuilder>( + future: ApiService().fetchFolders(), + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.waiting) { + return Center(child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + return Center(child: Text('Error: ${snapshot.error}')); + } else if (snapshot.hasData) { + String? selectedFolder; // Declare the selected folder state + return StatefulBuilder( + builder: (context, setState) { + return ListView( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + children: snapshot.data!.map((folder) { + return RadioListTile( + title: Text(folder), + value: folder, + groupValue: selectedFolder, + onChanged: (String? value) { + setState(() { + selectedFolder = value; // Update the selected folder + }); + }, + ); + }).toList(), + ); + }, + ); + } else { + return const Center(child: Text('No folders found.')); + } + }, + ); + } + + static void handleMove(BuildContext context) async { + print("current folder: ${ApiService.currFolder}"); + final overlay = Overlay.of(context); + String? selectedFolder; // Variable to store the selected folder + + _overlayEntry = OverlayEntry( + builder: (context) => Stack( + children: [ + // Dimmed background + Container( + color: Colors.black54, + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.height, + ), + // Focused content window + PointerInterceptor( + child: Center( + child: Material( + elevation: 8, + borderRadius: BorderRadius.circular(12), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 400, + maxHeight: 500, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + 'Move email from folder ${ApiService.currFolder} to:', + style: TextStyle(fontSize: 16), + ), + Divider(height: 1), + Expanded( + child: FutureBuilder>( + future: ApiService().fetchFolders(), + builder: (context, snapshot) { + if (snapshot.connectionState == + ConnectionState.waiting) { + return const Center( + child: CircularProgressIndicator()); + } else if (snapshot.hasError) { + return Center( + child: Text('Error: ${snapshot.error}')); + } else if (snapshot.hasData) { + return StatefulBuilder( + builder: (context, setState) { + return ListView( + shrinkWrap: true, + children: snapshot.data!.map((folder) { + return RadioListTile( + title: Text(folder), + value: folder, + groupValue: selectedFolder, + onChanged: (String? value) { + setState(() { + selectedFolder = value; // Update the selected folder + }); + }, + ); + }).toList(), + ); + }, + ); + } else { + return const Center( + child: Text('No folders found.')); + } + }, + ), + ), + Divider(height: 1), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + ElevatedButton( + onPressed: () { + // Handle Accept button + if (selectedFolder != null) { + print("Selected folder: $selectedFolder"); + // Store the selected folder or perform any action + // ApiService.currFolder = selectedFolder!; + ApiService() + .moveEmail(ApiService.currFolder, ApiService.currThreadID, selectedFolder!); + _overlayEntry?.remove(); + } else { + print("No folder selected"); + } + }, + child: Text('Accept'), + ), + ElevatedButton( + onPressed: () { + // Handle Cancel button + _overlayEntry?.remove(); + }, + child: Text('Cancel'), + ), + ], + ), + ], + ), + ), + ), + ), + ), + ], + ), + ); + + if (_overlayEntry != null) { + overlay.insert(_overlayEntry!); + } + } + static void handleImages(BuildContext context) { + //rename to handle attachments print("Images button pressed"); final overlay = Overlay.of(context); - final renderBox = context.findRenderObject() as RenderBox; - final offset = renderBox.localToGlobal(Offset.zero); + // final renderBox = context.findRenderObject() as RenderBox; + // final offset = renderBox.localToGlobal(Offset.zero); _overlayEntry = OverlayEntry( builder: (context) => Stack( @@ -295,11 +459,10 @@ class AugmentClasses { static List _buildMenuItem(BuildContext context) { List listOfFiles = []; for (AttachmentResponse file in ApiService.threadAttachments) { - listOfFiles.add( - ListTile ( + listOfFiles.add(ListTile( leading: Icon(Icons.file_present), title: Text(file.name.toString()), - trailing: GestureDetector( + trailing: GestureDetector( child: Icon(Icons.download), onTap: () => Attachmentdownload().saveFile(file), ),