From 300418b9f15925747c898b8da0435ae80c847dce Mon Sep 17 00:00:00 2001 From: ze0s <43699394+zze0s@users.noreply.github.com> Date: Thu, 22 Sep 2022 16:39:05 +0200 Subject: [PATCH] feat(irc): improve list view (#466) * feat(irc): add irc status examples * feat(irc): add dropdown menu to list * feat(irc): update heroicons and add expand button * feat(irc): update heroicons and add expand button --- internal/http/irc.go | 17 ++ internal/irc/service.go | 10 + web/package.json | 2 +- web/src/api/APIClient.ts | 3 +- web/src/components/alerts/ErrorPage.tsx | 4 +- web/src/components/alerts/index.tsx | 5 +- web/src/components/data-table/Cells.tsx | 6 +- web/src/components/emptystates/index.tsx | 2 +- web/src/components/fields/text.tsx | 6 +- web/src/components/inputs/input.tsx | 22 +- web/src/components/inputs/input_wide.tsx | 6 +- web/src/components/inputs/select.tsx | 12 +- web/src/components/inputs/text.tsx | 17 +- web/src/components/modals/index.tsx | 6 +- web/src/components/notifications/Toast.tsx | 6 +- web/src/components/panels/index.tsx | 16 +- web/src/forms/filters/FilterAddForm.tsx | 6 +- web/src/forms/settings/APIKeyAddForm.tsx | 4 +- .../forms/settings/DownloadClientForms.tsx | 14 +- web/src/forms/settings/IndexerForms.tsx | 4 +- web/src/forms/settings/IrcForms.tsx | 28 +- web/src/forms/settings/NotificationForms.tsx | 30 +-- web/src/screens/Base.tsx | 10 +- web/src/screens/Logs.tsx | 16 +- web/src/screens/Settings.tsx | 18 +- web/src/screens/filters/action.tsx | 28 +- web/src/screens/filters/details.tsx | 28 +- web/src/screens/filters/list.tsx | 42 +-- web/src/screens/releases/Filters.tsx | 19 +- web/src/screens/releases/ReleaseTable.tsx | 25 +- web/src/screens/settings/Api.tsx | 22 +- web/src/screens/settings/Feed.tsx | 37 ++- web/src/screens/settings/Irc.tsx | 255 ++++++++++++++++-- web/yarn.lock | 10 +- 34 files changed, 478 insertions(+), 258 deletions(-) diff --git a/internal/http/irc.go b/internal/http/irc.go index 0a45cae..00df374 100644 --- a/internal/http/irc.go +++ b/internal/http/irc.go @@ -19,6 +19,7 @@ type ircService interface { StoreNetwork(ctx context.Context, network *domain.IrcNetwork) error UpdateNetwork(ctx context.Context, network *domain.IrcNetwork) error StoreChannel(networkID int64, channel *domain.IrcChannel) error + RestartNetwork(ctx context.Context, id int64) error } type ircHandler struct { @@ -38,6 +39,7 @@ func (h ircHandler) Routes(r chi.Router) { r.Post("/", h.storeNetwork) r.Put("/network/{networkID}", h.updateNetwork) r.Post("/network/{networkID}/channel", h.storeChannel) + r.Get("/network/{networkID}/restart", h.restartNetwork) r.Get("/network/{networkID}", h.getNetworkByID) r.Delete("/network/{networkID}", h.deleteNetwork) } @@ -69,6 +71,21 @@ func (h ircHandler) getNetworkByID(w http.ResponseWriter, r *http.Request) { h.encoder.StatusResponse(ctx, w, network, http.StatusOK) } +func (h ircHandler) restartNetwork(w http.ResponseWriter, r *http.Request) { + var ( + ctx = r.Context() + networkID = chi.URLParam(r, "networkID") + ) + + id, _ := strconv.Atoi(networkID) + + if err := h.service.RestartNetwork(ctx, int64(id)); err != nil { + h.encoder.Error(w, err) + } + + h.encoder.NoContent(w) +} + func (h ircHandler) storeNetwork(w http.ResponseWriter, r *http.Request) { var data domain.IrcNetwork diff --git a/internal/irc/service.go b/internal/irc/service.go index 33f6a3c..869b23a 100644 --- a/internal/irc/service.go +++ b/internal/irc/service.go @@ -20,6 +20,7 @@ type Service interface { StartHandlers() StopHandlers() StopNetwork(key handlerKey) error + RestartNetwork(ctx context.Context, id int64) error ListNetworks(ctx context.Context) ([]domain.IrcNetwork, error) GetNetworksWithHealth(ctx context.Context) ([]domain.IrcNetworkWithHealth, error) GetNetworkByID(ctx context.Context, id int64) (*domain.IrcNetwork, error) @@ -279,6 +280,15 @@ func (s *service) checkIfNetworkRestartNeeded(network *domain.IrcNetwork) error return nil } +func (s *service) RestartNetwork(ctx context.Context, id int64) error { + network, err := s.repo.GetNetworkByID(ctx, id) + if err != nil { + return err + } + + return s.restartNetwork(*network) +} + func (s *service) restartNetwork(network domain.IrcNetwork) error { // look if we have the network in handlers, if so restart it if existingHandler, found := s.handlers[handlerKey{network.Server, network.NickServ.Account}]; found { diff --git a/web/package.json b/web/package.json index c94aa57..877b986 100644 --- a/web/package.json +++ b/web/package.json @@ -9,7 +9,7 @@ "dependencies": { "@fontsource/inter": "^4.5.11", "@headlessui/react": "^1.6.4", - "@heroicons/react": "^1.0.6", + "@heroicons/react": "^2.0.11", "@hookform/error-message": "^2.0.0", "date-fns": "^2.28.0", "formik": "^2.2.9", diff --git a/web/src/api/APIClient.ts b/web/src/api/APIClient.ts index 93aff5d..644ba5a 100644 --- a/web/src/api/APIClient.ts +++ b/web/src/api/APIClient.ts @@ -139,7 +139,8 @@ export const APIClient = { getNetworks: () => appClient.Get("api/irc"), createNetwork: (network: IrcNetworkCreate) => appClient.Post("api/irc", network), updateNetwork: (network: IrcNetwork) => appClient.Put(`api/irc/network/${network.id}`, network), - deleteNetwork: (id: number) => appClient.Delete(`api/irc/network/${id}`) + deleteNetwork: (id: number) => appClient.Delete(`api/irc/network/${id}`), + restartNetwork: (id: number) => appClient.Get(`api/irc/network/${id}/restart`) }, events: { logs: () => new EventSource(`${sseBaseUrl()}api/events?stream=logs`, { withCredentials: true }) diff --git a/web/src/components/alerts/ErrorPage.tsx b/web/src/components/alerts/ErrorPage.tsx index e228c52..4fe5437 100644 --- a/web/src/components/alerts/ErrorPage.tsx +++ b/web/src/components/alerts/ErrorPage.tsx @@ -1,6 +1,6 @@ import StackTracey from "stacktracey"; import type { FallbackProps } from "react-error-boundary"; -import { RefreshIcon } from "@heroicons/react/solid"; +import { ArrowPathIcon } from "@heroicons/react/24/solid"; export const ErrorPage = ({ error, resetErrorBoundary }: FallbackProps) => { const stack = new StackTracey(error); @@ -73,7 +73,7 @@ export const ErrorPage = ({ error, resetErrorBoundary }: FallbackProps) => { resetErrorBoundary(); }} > - + Reset page state diff --git a/web/src/components/alerts/index.tsx b/web/src/components/alerts/index.tsx index 981b6f0..9c9af9a 100644 --- a/web/src/components/alerts/index.tsx +++ b/web/src/components/alerts/index.tsx @@ -1,5 +1,4 @@ - -import { ExclamationIcon } from "@heroicons/react/solid"; +import { ExclamationTriangleIcon } from "@heroicons/react/24/outline"; interface props { title?: string; @@ -11,7 +10,7 @@ export function AlertWarning({ title, text }: props) {
-