summaryrefslogtreecommitdiff
path: root/bs5/server/pages/NoteList.re
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-15 04:59:49 +0700
committerpolwex <polwex@sortug.com>2025-06-15 04:59:49 +0700
commit71c20233ff79e696d0eeca2ce1462d3083fbcfed (patch)
tree4491f680fb6fe65e9d8606764c7000396856e93e /bs5/server/pages/NoteList.re
parent241dc9c99bed4dddbc748aad54cee5bf7d77ab92 (diff)
and were done, just like that
Diffstat (limited to 'bs5/server/pages/NoteList.re')
-rw-r--r--bs5/server/pages/NoteList.re52
1 files changed, 52 insertions, 0 deletions
diff --git a/bs5/server/pages/NoteList.re b/bs5/server/pages/NoteList.re
new file mode 100644
index 0000000..d284f0f
--- /dev/null
+++ b/bs5/server/pages/NoteList.re
@@ -0,0 +1,52 @@
+open Lwt.Syntax;
+
+let is_substring = (a, b) => {
+ let len_a = String.length(a);
+ let len_b = String.length(b);
+ if (len_a > len_b) {
+ false;
+ } else {
+ let rec check = start =>
+ if (start > len_b - len_a) {
+ false;
+ } else if (String.sub(b, start, len_a) == a) {
+ true;
+ } else {
+ check(start + 1);
+ };
+ check(0);
+ };
+};
+
+[@react.async.component]
+let make = (~searchText: string) => {
+ let+ notes = DB.read_notes();
+
+ switch (notes) {
+ | Error(error) =>
+ <div
+ className="mt-8 h-full w-full flex flex-col items-center justify-center gap-4">
+ <Text size=XXLarge> "❌" </Text>
+ <Text> "Couldn't read notes file" </Text>
+ <Text weight=Bold> error </Text>
+ </div>
+ | Ok(notes) when notes->List.length == 0 =>
+ <div className="mt-8">
+ <Text> "There's no notes created yet!" </Text>
+ </div>
+ | Ok(notes) =>
+ <ul className="mt-8">
+ {notes
+ |> List.filter((note: Note.t) =>
+ is_substring(
+ String.lowercase_ascii(searchText),
+ String.lowercase_ascii(note.title),
+ )
+ )
+ |> List.map((note: Note.t) =>
+ <li key={Int.to_string(note.id)}> <SidebarNote note /> </li>
+ )
+ |> React.list}
+ </ul>
+ };
+};