* show a spinner while log is being fetched: while calling the api and while
streaming the log
* show when log doesn't exists
* show error when fetching the log fails (with retry button)
* show when there're no lines.
* Use AbortController to signal fetch to stop when component is destroyed
* Remove polling and just schedule a new fetch at the end of the current one
when not aborted.
* Consider all the tasks from the current level + 1 when fetching the parents
tasks
* Exclude the child level when computing the parent row needed to create an edge
that don't overlaps with the tasks of greater level.
Add a tasks graph display in addition to the list display. A button will let the
user choose between the two display formats (defaulting to the tasks graph).
Since the graph is a DAG with many edges it's quite difficult to organize the
tasks and the edges without any overlap.
The current implementation uses a simpler approach where tasks are distributed
horizontally by their level and tasks at the same level are distributed in a way
that there's always space for an edge also if the child is some levels below.
In this way edges may overlap and in this case they will appear as a single
edge.
The user, when hovering over a task, will see the connections with the other
tasks since the related edges becomes bolder.
looks like v-click-outside doesn't work on mobile (tested with chrome and
firefox on android) since the dropdown menu is closed also when clicking a menu
entry.
If we do a router.push to the login view the previous component will receive
anyway the error and set the global error after the login view is mounted (!!!)
and so the main app will show the global error instead of the login view.
Not sure how to avoid this. As a really ugly workaround just return an empty
response on 401 so the components (since they are currently assumong the
response is always define) will throw an exception and not set the global error.
remove the use of http server sent events, just use the streaming api
handle line feeds by rewriting the current line. This isn't perfect since it
won't handle subtle cases where the colors are change between lines but will
work in all standard cases
Now commands that writes a progess will work correctly without adding a new line
every time and users will see the progress in realtime.