From c8e61ed4aa79bc5558f5e4950d49da024dd3c421 Mon Sep 17 00:00:00 2001 From: Khairul Hidayat Date: Sat, 16 Nov 2024 23:50:02 +0700 Subject: [PATCH] feat: add group --- .../containers/interactive-session.tsx | 5 +- frontend/components/ui/button.tsx | 11 ++ frontend/components/ui/grid-view.tsx | 40 ++++-- frontend/components/ui/pressable.tsx | 1 + frontend/hooks/useQueryParams.ts | 38 +++++ frontend/pages/auth/login.tsx | 1 + frontend/pages/hosts/components/form.tsx | 32 +++-- frontend/pages/hosts/components/host-item.tsx | 36 +++-- frontend/pages/hosts/components/host-list.tsx | 115 ++++++++++++--- frontend/pages/hosts/hooks/query.ts | 28 +++- frontend/pages/hosts/page.tsx | 136 ++++++++++++++++-- frontend/pages/hosts/schema/form.ts | 7 +- frontend/pages/hosts/schema/query.ts | 6 + frontend/pages/server/page.tsx | 1 + frontend/pages/terminal/new-session-page.tsx | 40 ++++++ frontend/pages/terminal/page.tsx | 4 +- server/app/hosts/repository.go | 24 +++- server/app/hosts/router.go | 58 +++++++- server/app/hosts/schema.go | 10 +- server/app/ws/stats/ssh.go | 8 +- server/app/ws/stats/stats.go | 2 +- server/app/ws/term/term.go | 2 +- server/models/host.go | 1 + server/utils/config.go | 14 +- 24 files changed, 534 insertions(+), 86 deletions(-) create mode 100644 frontend/hooks/useQueryParams.ts create mode 100644 frontend/pages/hosts/schema/query.ts create mode 100644 frontend/pages/terminal/new-session-page.tsx diff --git a/frontend/components/containers/interactive-session.tsx b/frontend/components/containers/interactive-session.tsx index 02d951d..811d457 100644 --- a/frontend/components/containers/interactive-session.tsx +++ b/frontend/components/containers/interactive-session.tsx @@ -52,10 +52,9 @@ const InteractiveSession = ({ type, params }: InteractiveSessionProps) => { ) : ( ); - - default: - throw new Error("Unknown interactive session type"); } + + return null; }; export default InteractiveSession; diff --git a/frontend/components/ui/button.tsx b/frontend/components/ui/button.tsx index ea9a991..a65f521 100644 --- a/frontend/components/ui/button.tsx +++ b/frontend/components/ui/button.tsx @@ -1,5 +1,6 @@ import React from "react"; import { GetProps, Button as BaseButton, Spinner } from "tamagui"; +import Icons from "./icons"; type ButtonProps = GetProps & { isDisabled?: boolean; @@ -16,4 +17,14 @@ const Button = ({ icon, isLoading, isDisabled, ...props }: ButtonProps) => { ); }; +export const BackButton = (props: GetProps) => ( + ); + +type HostsActionsProps = { + selected: string[]; + parentId?: string | null; + onClear: () => void; +}; + +const actionMode = { + CUT: 1, +}; + +const HostsActions = ({ + selected, + parentId = null, + onClear, +}: HostsActionsProps) => { + const [curMode, setCurMode] = useState(0); + const move = useMoveHost(); + + const onReset = () => { + setCurMode(0); + onClear(); + }; + + const onMoveAction = () => { + move.mutate({ parentId, hostId: selected }, { onSuccess: onReset }); + }; + + return ( + <> + {curMode === actionMode.CUT ? ( +