diff --git a/lib/common/apifunctions/find_organisations.dart b/lib/common/apifunctions/find_organisations.dart index 8ad1fdf..e51051e 100644 --- a/lib/common/apifunctions/find_organisations.dart +++ b/lib/common/apifunctions/find_organisations.dart @@ -4,7 +4,6 @@ import 'package:http/http.dart' as http; import 'package:flutter/material.dart'; import 'package:local_spend/common/functions/get_token.dart'; - class Organisation { var id = 0; var name = ""; @@ -13,67 +12,83 @@ class Organisation { var town = ""; Organisation( - this.id, - this.name, - this.postcode, - this.streetName, - this.town, - ); + this.id, + this.name, + this.postcode, + this.streetName, + this.town, + ); } -List jsonToOrganisations(String json) { - Map decoded = jsonDecode(json); - List validated = decoded['validated']; - List organisationsMaps = new List(); - validated.forEach((element) => organisationsMaps.add(element)); - List organisations = new List(); +class Organisations { - for (var i = 0; i < organisationsMaps.length; i++) { - final params = organisationsMaps[i].values.toList(); + List getTestData() { + var numItems = 200; + var itemsList = new List(); - var newOrganisation = new Organisation( - params[0].toInt(), - params[1].toString(), - params[2].toString(), // oof - params[3].toString(), // this could be improved... - params[4].toString(), + for (int i = 0; i < numItems; i++) { + itemsList.add(new Organisation( + i, + "Payee " + (i + 1).toString(), + "eee eee", + "yeet street", + "Robloxia" + )); + } + + return itemsList; + } + + List _jsonToOrganisations(String json) { + Map decoded = jsonDecode(json); + List validated = decoded['validated']; + List organisationsMaps = new List(); + validated.forEach((element) => organisationsMaps.add(element)); + List organisations = new List(); + + for (var i = 0; i < organisationsMaps.length; i++) { + final params = organisationsMaps[i].values.toList(); + + var newOrganisation = new Organisation( + params[0].toInt(), + params[1].toString(), + params[2].toString(), // oof + params[3].toString(), // this could be improved... + params[4].toString(), + ); + + organisations.add(newOrganisation); + } + + return organisations; + } + + Future> findOrganisations(String search) async { + final url = "https://dev.peartrade.org/api/search"; + var token; + + await getToken().then((result) { + token = result; + }); + + Map body = { + "search_name":search, + "session_key":token, + }; + + final response = await http.post ( + url, + body: json.encode(body), ); - organisations.add(newOrganisation); + if (response.statusCode == 200) { + //request successful + return _jsonToOrganisations(response.body); + } else { + // not successful + return null; + } + } - - return organisations; -} - -Future> findOrganisations(String search) async { - final url = "https://dev.peartrade.org/api/search"; - var token; - - await getToken().then((result) { - token = result; - }); - - Map body = { - "search_name":search, - "session_key":token, - }; - - final response = await http.post ( - url, - body: json.encode(body), - ); - - if (response.statusCode == 200) { - //request successful - return jsonToOrganisations(response.body); - } else { - // not successful - return null; - } - -} - -class OrganizationController extends TextEditingController { - Organisation organisation; } \ No newline at end of file diff --git a/lib/common/widgets/organisations_dialog.dart b/lib/common/widgets/organisations_dialog.dart index db1a3c9..3939196 100644 --- a/lib/common/widgets/organisations_dialog.dart +++ b/lib/common/widgets/organisations_dialog.dart @@ -15,75 +15,117 @@ class FindOrganisations { ); } - List getFavourites() { - var numItems = 200; - var itemsList = new List(); - - for (int i = 0; i < numItems; i++) { - itemsList.add(Text( - "Payee " + (i + 1).toString(), - style: new TextStyle(fontSize: 18), - )); - } - - return itemsList; - } - // todo: get all organisations, favourites and all data from one 'organisations' class or similar // eg items: organisations.getFavourites().orderBy(name), Future dialog(context) { - var searchBar = getSearchBar(null, "Payee Name"); - var favourites = getFavourites(); + TextEditingController searchBarText = new TextEditingController(); + var organisations = new Organisations(); + var listTitle = "All Organisations"; + var organisationsList = organisations.getTestData(); + + void _submitSearch(String search) { + listTitle = "Results for \'" + search + "\'"; + + var futureOrgs = organisations.findOrganisations(search); + futureOrgs.then((val) { + debugPrint("There are " + val.length.toString() + + " payees matching the query \'" + search + "\'."); + organisationsList = val; + }); + } + return showDialog( context: context, barrierDismissible: true, builder: (BuildContext context) { - return SimpleDialog( - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 10), - child: searchBar, - ), + return StatefulBuilder( + builder: (context, setState) { + return SimpleDialog( + children: [ + Padding( + padding: EdgeInsets.fromLTRB(20, 0, 0, 0), + child: Row( + children: [ + Container( + width: 200, + height: 50, + child: TextField( + controller: searchBarText, + decoration: InputDecoration( + hintText: "Payee Name", + ), + onSubmitted: (_) { + _submitSearch(searchBarText.text); + setState(() => {}); + }, + ), + ), - Container( - padding: EdgeInsets.fromLTRB(20, 20, 0, 0), - child: Text( - "Favourites", - style: new TextStyle(fontSize: 23, fontWeight: FontWeight.bold), - ), - ), - - Container( - padding: EdgeInsets.fromLTRB(10, 10, 10, 0), - width: MediaQuery.of(context).size.width * 0.7, - height: MediaQuery.of(context).size.height * 0.67, - - child: Material( - shadowColor: Colors.transparent, - color: Colors.transparent, - child: ListView.builder( - itemCount: favourites.length, - itemBuilder: (context, index) { - return Card( - child: ListTile( - leading: Icon(Icons.person), - title: favourites[index], - trailing: Icon(Icons.arrow_forward_ios), - onTap: () {}, - ) - ); - }, + Container( + width: 80, + padding: EdgeInsets.fromLTRB(20, 0, 0, 0), + child: RaisedButton( + onPressed: () { + _submitSearch(searchBarText.text); + setState(() => {}); + }, + child: Icon(Icons.search, color: Colors.white), + color: Colors.blue, + // make inactive when search in progress as activity indicator + ), + ), + ], + ), + ), + + Container( + padding: EdgeInsets.fromLTRB(20, 20, 20, 0), + child: Text( + listTitle, + style: new TextStyle( + fontSize: 23, fontWeight: FontWeight.bold), + ), + ), + + Container( + padding: EdgeInsets.fromLTRB(10, 10, 10, 0), + width: MediaQuery + .of(context) + .size + .width * 0.7, + height: MediaQuery + .of(context) + .size + .height * 0.67, + + child: Material( + shadowColor: Colors.transparent, + color: Colors.transparent, + child: ListView.builder( + itemCount: organisationsList.length, + itemBuilder: (context, index) { + return Card( + child: ListTile( + leading: Icon(Icons.person), + title: Text(organisationsList[index].name, style: new TextStyle(fontSize: 18)), + trailing: Icon(Icons.arrow_forward_ios), + onTap: () {}, + ) + ); + }, + ), + ), ), - ), - ), - // help button for if org not listed - // cancel and ok buttons + // help button for if org not listed + // cancel and ok buttons - ], + ], + ); + }, ); }, ); diff --git a/lib/pages/receipt_page_2.dart b/lib/pages/receipt_page_2.dart index f58c4db..226e11a 100644 --- a/lib/pages/receipt_page_2.dart +++ b/lib/pages/receipt_page_2.dart @@ -17,12 +17,6 @@ class Transaction { ); } -// Find Organisations - - - -// end Find Organisations - class ReceiptPage2 extends StatefulWidget { @override State createState() {