From c36e8826a77c14b1831f5c26aa5838013c903cb9 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Thu, 4 Apr 2024 11:39:33 +0200
Subject: [PATCH] add: searching function with fuzzy, not tested

---
 app/lib/pages/default_page.dart               |  23 +++++++++++++++++-
 app/pubspec.lock                              |  16 ++++++++++++
 app/pubspec.yaml                              |   3 ++-
 .../__pycache__/add_new_lake.cpython-311.pyc  | Bin 0 -> 6156 bytes
 .../lake_relations/all_system_relations.txt   |   2 ++
 5 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 server/map_handler/__pycache__/add_new_lake.cpython-311.pyc
 create mode 100644 server/map_handler/lake_relations/all_system_relations.txt

diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart
index 7d4830e9..150adf27 100644
--- a/app/lib/pages/default_page.dart
+++ b/app/lib/pages/default_page.dart
@@ -1,6 +1,7 @@
 import 'dart:async';
-import 'package:flutter/material.dart';
 import 'dart:typed_data';
+import 'package:fuzzy/fuzzy.dart';
+import 'package:flutter/material.dart';
 
 import '../consts.dart';
 import 'loading_page.dart';
@@ -25,6 +26,26 @@ class _DefaultPageState extends State<DefaultPage> {
   late Future<List<Measurement>> markerListFuture;
   late Future<Uint8List> relationFuture;
 
+  late List<String> testSearchNames = [
+    "Mjøsa",
+    "Bogstadsvannet",
+    "Einavatnet",
+    "Femsjøen",
+    "Femunden",
+    "Fjellsjøen",
+    "Gjende",
+    "Gjersjøen"
+  ];
+  // Searching function for lake names using Fuzzy library
+  List<String> searchLakeNames(String query) {
+    final options = FuzzyOptions(threshold: 0.3, findAllMatches: true);
+    final matcher = Fuzzy(testSearchNames, options: options);
+    final results = matcher.search(query);
+
+    // Extracting lake names from the results and casting them to strings
+    return results.map((result) => result.item as String).toList();
+  }
+
   @override
   void initState() {
     super.initState();
diff --git a/app/pubspec.lock b/app/pubspec.lock
index 1e772894..73538620 100644
--- a/app/pubspec.lock
+++ b/app/pubspec.lock
@@ -120,6 +120,14 @@ packages:
     description: flutter
     source: sdk
     version: "0.0.0"
+  fuzzy:
+    dependency: "direct main"
+    description:
+      name: fuzzy
+      sha256: af5fbd36f2f8de0663a5b562ef5ca209aea957e81a2f0e97f97475cfbed044ec
+      url: "https://pub.dev"
+    source: hosted
+    version: "0.5.1"
   google_fonts:
     dependency: "direct main"
     description:
@@ -453,6 +461,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.2.0"
+  stringr:
+    dependency: transitive
+    description:
+      name: stringr
+      sha256: "2846b6811c3cbb34c8937a35e623986e3fbf7203b3bb33ffe7f80e496ea3eff2"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.0"
   syncfusion_flutter_core:
     dependency: "direct main"
     description:
diff --git a/app/pubspec.yaml b/app/pubspec.yaml
index 34233214..c87dfe46 100644
--- a/app/pubspec.yaml
+++ b/app/pubspec.yaml
@@ -16,9 +16,10 @@ dependencies:
   fl_chart: ^0.20.0-nullsafety1       # Charts and diagrams
   google_fonts: any                   # Fonts
   syncfusion_flutter_maps: ^20.4.41   # Choropleth map_handler
-  syncfusion_flutter_core: any       # Choropleth shape selection
+  syncfusion_flutter_core: any        # Choropleth shape selection
   path_provider: ^2.0.8
   shared_preferences: any             # Persistent data storage
+  fuzzy: any                          # Search algorithm
 
 dev_dependencies:
   flutter_test:
diff --git a/server/map_handler/__pycache__/add_new_lake.cpython-311.pyc b/server/map_handler/__pycache__/add_new_lake.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1ebfb30e892fc06a0ebe716236c82ae01c6ae030
GIT binary patch
literal 6156
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

literal 0
HcmV?d00001

diff --git a/server/map_handler/lake_relations/all_system_relations.txt b/server/map_handler/lake_relations/all_system_relations.txt
new file mode 100644
index 00000000..6a20bd4a
--- /dev/null
+++ b/server/map_handler/lake_relations/all_system_relations.txt
@@ -0,0 +1,2 @@
+Mjøsa - mjosa
+TestLake - testlake
\ No newline at end of file
-- 
GitLab