From f4d17bb7dcd40874d8ab0ac715bd136104ce1d25 Mon Sep 17 00:00:00 2001 From: Ryan Prather Date: Thu, 16 May 2024 01:25:08 -0400 Subject: [PATCH] Update search --- public/js/script.js | 42 ++++++++++++++++++++++++++++- src/Controller/AjaxController.php | 8 +++--- src/Repository/NoteRepository.php | 16 +++++++++++ templates/default/sidebar.html.twig | 6 ++--- 4 files changed, 64 insertions(+), 8 deletions(-) diff --git a/public/js/script.js b/public/js/script.js index 74b5bb7..ae281d1 100644 --- a/public/js/script.js +++ b/public/js/script.js @@ -52,9 +52,50 @@ function setHeight() { if ($('#noteDate')) { $('#noteDate').datepicker(); } + + if ($('#query')) { + document.querySelector('#query').addEventListener('keyup', function (event) { + if (event.key == "Enter") { + search(); + } + }); + } setTimeout(saveNote, saveTimeout); } +function search() { + query = document.querySelector('#query').value; + fetch('/index.php/search', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + 'query': query + }) + }) + .then(response => response.json()) + .then(results => { + var oldNotes = document.querySelector('#old-notes'); + oldNotes.innerHTML = ''; + for (var n in results) { + var link = document.createElement('a'); + link.href = '#'; + link.setAttribute('onclick', "retrieveNote('" + results[n].id + "');openNote();"); + link.innerHTML = results[n].title; + + var p = document.createElement('p'); + p.innerHTML = results[n].passage; + + var article = document.createElement('article'); + article.appendChild(link); + article.appendChild(p); + + oldNotes.append(article); + } + }); +} + function newNote() { notes = document.querySelector('#notes'); notes.text = ''; @@ -75,7 +116,6 @@ function newNote() { document.querySelector('#passage').value = ''; document.querySelector('#noteId').value = uuidv4(); - //document.querySelector('#noteSearch').style.display = 'none'; document.querySelector('#ref-list').innerHTML = ''; document.querySelector('#ref').innerHTML = ''; document.querySelector('.toggle').click(); diff --git a/src/Controller/AjaxController.php b/src/Controller/AjaxController.php index e1db328..dc43131 100644 --- a/src/Controller/AjaxController.php +++ b/src/Controller/AjaxController.php @@ -239,12 +239,14 @@ class AjaxController extends AbstractController return $res; } - #[Route('/search-note', name: 'app_open_note')] - public function openNote(Request $req, EntityManagerInterface $emi): Response + #[Route('/search', name: 'app_search_note')] + public function searchNote(Request $req, EntityManagerInterface $emi): Response { + /** @var User $user */ + $user = $this->getUser(); $res = new Response(); $data = json_decode($req->getContent()); - $note = $emi->getRepository(Note::class)->findNote($data->search); + $note = $emi->getRepository(Note::class)->findNote($data->query, $user->getId()->toBinary()); $res->setContent(json_encode($note)); return $res; diff --git a/src/Repository/NoteRepository.php b/src/Repository/NoteRepository.php index 52bfe34..f3eea13 100644 --- a/src/Repository/NoteRepository.php +++ b/src/Repository/NoteRepository.php @@ -29,6 +29,22 @@ class NoteRepository extends ServiceEntityRepository return $ret; } + public function findNote(string $query, string $userId): array + { + $ret = $this->createQueryBuilder('n') + ->orderBy('n.date', 'DESC') + ->where('n.title LIKE :query') + ->orWhere('n.passage LIKE :query') + ->andWhere('n.user = :user') + ->setParameter('query', "%{$query}%") + ->setParameter('user', $userId) + ->setMaxResults(3) + ->getQuery() + ->getResult(); + + return $ret; + } + // /** // * @return Note[] Returns an array of Note objects // */ diff --git a/templates/default/sidebar.html.twig b/templates/default/sidebar.html.twig index 6f413a7..8d93905 100644 --- a/templates/default/sidebar.html.twig +++ b/templates/default/sidebar.html.twig @@ -5,9 +5,7 @@ {% if app.user %} {% endif %} @@ -48,7 +46,7 @@

Recent Notes

-
+
{% for n in app.user.notes %}