Added a new handleChange function to the SearchFiltersForm to update the
query on input change. Updated the SearchInput to handle search submissions
more effectively by allowing the closing of filters based on user interaction.
This improves the overall user experience when applying search filters.
Currently if a link does not open a new window, when the user clicks on the link
nothing happend. So we add `allow-popups` directive to allow this behavior.
Previously we expect the task retrieve endpoint could return a 404 when a task
does not exist but it is not possible (dce87f8) so instead we put a timeout to
stop to poll the task after a given delay.
We are now sending messages through celery. As now the sent is async,
we must inform the user of the sending progress. So now a toast is displayed
when the user send the message then this one is updated according to the
task status.
Before, sending was done synchronously on the api/send POST call. Now
we just build the MIME message and mark the message for sending, and
queue the actual SMTP (or internal) sending for the worker. We use
this opportunity to add fine-grained delivery statuses for each
recipient, something that traditional email systems are unable to do!
Expanding on that, this (too large) PR adds an initial Elasticsearch
index of threads. It also overhauls the build and CI system, using
Poetry instead of Pip.
* ✨(backend) use ThreadAccess instead of direct mailbox link
Remove the direct link to a mailbox on Thread model. It is now possible to
define two types of roles for each thread (Reader and Editor) for a mailbox.
When creating a new thread, a new access to the sender's mailbox is created
with the Editor role.
It is now possible to delegate a thread to another mailbox with the Reader or
Editor role. So it is possible to forward a thread to another internal user
and avoid mail forwarding.
* ✨(backend) change MailboxAccess permission into roles
Enhance access on mailbox and thread with role everywhere!
* improve doc
* enhance tests
* lint
Currently the button to delete a draft message simply mark it
as trashed that is weird for a draft message. So now we use the
message destroy api endpoint to delete this kind of message
The api allows us to filter threads through filters. We are using this new
feature to build dynamic folders (All threads, Drafts, Send and Trash).
Furthermore we update the MessageForm logic to stick with the new draft
logic (First create a draft message then send the message)
We have a new route to update thread/message properties so the `read` endpoint
has been removed in favor of a `flag` endpoint. We update the frontend logic
to consume this new endpoint.