Skip to content

refactor: email history search bar#316

Open
Skiperpol wants to merge 11 commits intomainfrom
refactor/312-email-history-search-engine
Open

refactor: email history search bar#316
Skiperpol wants to merge 11 commits intomainfrom
refactor/312-email-history-search-engine

Conversation

@Skiperpol
Copy link
Member

No description provided.

* Added @faker-js/faker as a dependency in package.json and package-lock.json
* Introduced type definitions for the faker module in src/types/faker.d.ts
…ties

* Updated MailHistoryPopup to use responsive dimensions.
* Introduced EmailHistoryToolbar for global and status filtering.
* Implemented sorting functionality in the email history table headers.
* Created useEmailHistoryTable hook to manage table state and filters.
* Added mock data generation for email history using @faker-js/faker.
@Skiperpol Skiperpol self-assigned this Feb 26, 2026
@solvro-coolify
Copy link

solvro-coolify bot commented Feb 26, 2026

The preview deployment for Eventownik Frontend Preview is ready. 🟢

Open Preview | Open Build Logs | Open Application Logs

Last updated at: 2026-03-01 16:47:42 CET

@Skiperpol
Copy link
Member Author

Closes #312

* Deleted @faker-js/faker from package.json and package-lock.json.
* Removed email history mock generation logic from the template-entry component and deleted the associated mock file.
Copy link
Member

@maciejkrol18 maciejkrol18 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Na plus

Porządny kod z samą tabelą

Do dorobienia dodatkowo

  • Tłumaczenia wszystkich labelów na angielski - też możesz zerknąć w kod zrefaktorowanej tabeli uczestników żeby zobaczyć jak się to robi
  • Przydałaby się jeszcze liczba wszystkich wierszy w tabeli. Imo gdzieś obok samego search bara albo pod samymi wierszami sticky napis (tam gdzie normalnie byłaby paginacja której tu imo nie trzeba dorabiać)

Uwagi ogólne poza komentarzami

  • Responsywność dialogu zdecydowanie do poprawy - zawsze sprawdzaj responsywność przed daniem do review
  • Tak jak pisałem w poprzednim review, "Closes #id issue" wpisuje się w opis pull requesta a nie w komentarz bo inaczej nie działa, alternatywnie też można oznaczyć które issue zamyka ten pr przez sidebar
  • Search engine to jest google a nie input z filtrem

}}
/>

<ScrollArea className="max-h-[60vh] min-w-0 flex-1">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Te dwie klasy nic tu nie robią

Suggested change
<ScrollArea className="max-h-[60vh] min-w-0 flex-1">
<ScrollArea className="max-h-[60vh]">

</Button>
</DialogTrigger>
<DialogContent className="max-h-96 max-w-128">
<DialogContent className="max-h-[80vh] max-w-[80vw]">
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vw nie jest odpowiednią jednostką do layoutów - jak już to zazwyczaj korzysta się z niej przy responsywnych font size'ach z clamp() - powiedziałbym że użycie jej tutaj to główny powód dla nieresponsywności dialogu. Ma on ciągle tylko maksymalnie 80% szerokości viewportu więc na telefonie ma bardzo bardzo mało miejsca. Dobry film wyjaśniający dlaczego nie powinno się korzystać z viewportowych jednostek w ten sposób: https://youtu.be/veEqYQlfNx8?t=449. vh jest już częstsze przy layoutach - najczęściej przy min-h-screen => min-height: 100vh ale z tego samego powodu co vw, działa słabo na telefonach. W przypadku dialogów multistepów mamy sm:max-h-[90vh] więc operujemy na vh tylko na ekranach szerszych niż 640px więc działa już to lepiej (plus 90 to więcej niż 80).

Cały dialog jest nieresponsywny. Zerknij w to jak są zrobione dialogi od multistepów (np. dialog tworzenia nowego wydarzenia). Ten dialog, z historią wysyłek, powinien tak samo wypełniać na telefonie cały ekran jak właśnie wszystkie multistepy. W trakcie robienia tego upewnij się też że sama tabela nie overflowuje i nie ucieka z całego dialogu (tak jak jest teraz) - choć nie jest ona w dialogu to mimo swojej szerokości tablica listy uczestników też nie overflowuje więc też mógłbyś na nią zerknąć.

Comment on lines +29 to +47
{targetMail !== null && <MailHistoryPopup email={targetMail} />}
{emailForHistory !== null && (
<MailHistoryPopup email={emailForHistory} />
)}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To trzeba jakoś przerobić. Z taką implementacją (którą ja robiłem, sory XD) po wejściu na stronę z listą maili:

  • fetchuje się cała lista emaili dla wydarzenia (array typu EventMail[] z getEventEmails, endpoint .../{eventId}/emails),
  • dla każdego maila wywoływany jest dodatkowy fetch z endpointu na pojedynczy email (typ SingleEventEmail z getSingleEventEmail, endpoint .../{eventId}/emails/{emailId}).

Gdy zostanie wdrożony nowy edytor maili będzie to robiło całkiem ogromny niepotrzebny payload z serwera. Na SingleEventEmail jest to czego nie ma na EventEmail:

  • content czyli HTML emaila,
  • participants czyli historia wysyłki, a dokładniej array uczestników którzy otrzymali tego maila wraz z meta gdzie są dane wysyłki, więc dokładnie to co jest wykorzystywane w tabeli,
  • a po wdrożeniu nowego edytora dodatkowo schema czyli struktura całego dokumentu z blokami do edytora (jebitny JSON).

Założeniem endpointu dla wszystkich emaili jest to, że właśnie nie zwraca tych ogromnych stringów bo nie są potrzebne w samej liście, tylko przy edycji. Aktualna implementacja fetchuje zarówno wszystkie maile jak i dodatkowe dane dla każdego z maili, totalnie psując to założenie.

  • Postaraj się wymyśleć sposób w jaki można by to było ogarnąć bez ingerencji backendu - na teraz myślę że najprościej byłoby robić fetch po SingleEventEmail w samej tabeli z historią przez useQuery na wzór tego jak jest to robione w zrefaktorowanej tabeli uczestników (participants-loader.tsx), ale byłoby fajnie gdyby się udało robić to serversideowo.
  • Jak się nie uda to poprosimy backend aby na endpoincie ze wszystkimi mailami było też info o historii wysyłki. Wciąż zwiększy to payload no ale bez content i schema przynajmniej.

<SelectGroup>
<SelectLabel>Status</SelectLabel>
<SelectItem value="all">Wszystkie</SelectItem>
<SelectItem value="sent">Wysłane</SelectItem>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Żeby było spójnie z tym co w columns.tsx

Suggested change
<SelectItem value="sent">Wysłane</SelectItem>
<SelectItem value="sent">Wysłano</SelectItem>

@maciejkrol18 maciejkrol18 changed the title refactor: email history search engine refactor: email history search bar Feb 27, 2026
@AmeliaSroczynska
Copy link
Member

Czy filtrowanie nie lepiej by było zrobić tak jak w liście uczestników żeby było spójnie? Czyli ikonka przed nazwą kolumny
image

Ewentualnie może jakoś oznaczyć ten aktualny dropdown, że pozwala na wybór statusu, bo dopóki go nie rozwinęłam to nie domyśliłam się do czego jest

@AmeliaSroczynska
Copy link
Member

A przy okazji testowania sobie znalazłam ciekawy błąd, który by można było od razu rozwiązać.
Jeśli status to "Oczekujące" to data i godzina zawsze jest taka
image

I przy okazji v2 - kiedy pokazuje się "Nieudane"? Bo u mnie wszędzie gdzie się nie udało to pokazuje się "Oczekujące"

* Removed unnecessary min-width style from ScrollArea for better layout consistency.
…nality

* Introduced translations for the EmailHistoryTable in both English and Polish.
* Updated EmailHistoryToolbar to utilize translations for placeholders, labels, and tooltips, enhancing localization support.
@Skiperpol Skiperpol linked an issue Mar 1, 2026 that may be closed by this pull request
* Updated the Polish translation for 'sent' from 'Wysłane' to 'Wysłano' for improved accuracy.
…r experience

* Updated MailHistoryPopup to include responsive height and display the number of recipients.
* Improved EmailHistoryToolbar by adjusting input styling for better readability.
* Removed unused type reference for SingleEventEmail in template-entry component.
* Updated date and time formatting in email columns to handle default date case, returning "-" for "01.01.1970".
* Updated date and time formatting logic in email columns to return "-" for "01.01.1970" only when the email status is "pending". This improves clarity in the email history display.
…slations

* Added a status filter button to the EmailHistoryTable for improved filtering of email statuses.
* Introduced new translations for the filter menu and recipients count in both English and Polish.
* Updated EmailHistoryToolbar and MailHistoryPopup to reflect changes in filtering functionality and display recipient count.
@Skiperpol
Copy link
Member Author

Zostało mi ogarnięcie fetchowania

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wyszukiwarka w historii maili

3 participants