summaryrefslogtreecommitdiff
path: root/lib/login-session
diff options
context:
space:
mode:
Diffstat (limited to 'lib/login-session')
-rw-r--r--lib/login-session/table/login-sessions-table-columns.tsx90
-rw-r--r--lib/login-session/table/login-sessions-table-toolbar-actions.tsx26
-rw-r--r--lib/login-session/table/login-sessions-table.tsx3
3 files changed, 66 insertions, 53 deletions
diff --git a/lib/login-session/table/login-sessions-table-columns.tsx b/lib/login-session/table/login-sessions-table-columns.tsx
index e3d8bc2f..5d2389be 100644
--- a/lib/login-session/table/login-sessions-table-columns.tsx
+++ b/lib/login-session/table/login-sessions-table-columns.tsx
@@ -193,51 +193,51 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<Extende
},
],
},
- {
- id: "actions",
- cell: function Cell({ row }) {
- const session = row.original
+ // {
+ // id: "actions",
+ // cell: function Cell({ row }) {
+ // const session = row.original
- return (
- <DropdownMenu>
- <DropdownMenuTrigger asChild>
- <Button
- aria-label="Open menu"
- variant="ghost"
- className="flex size-8 p-0 data-[state=open]:bg-muted"
- >
- <Ellipsis className="size-4" aria-hidden="true" />
- </Button>
- </DropdownMenuTrigger>
- <DropdownMenuContent align="end" className="w-40">
- <DropdownMenuItem
- onSelect={() => setRowAction({ type: "view", row })}
- >
- <Eye className="mr-2 size-4" aria-hidden="true" />
- 상세 보기
- </DropdownMenuItem>
- <DropdownMenuItem
- onSelect={() => setRowAction({ type: "viewSecurity", row })}
- >
- <Shield className="mr-2 size-4" aria-hidden="true" />
- 보안 정보
- </DropdownMenuItem>
- {session.isCurrentlyActive && (
- <DropdownMenuItem
- onSelect={() => setRowAction({ type: "forceLogout", row })}
- className="text-red-600"
- >
- <LogOut className="mr-2 size-4" aria-hidden="true" />
- 강제 로그아웃
- <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
- </DropdownMenuItem>
- )}
- </DropdownMenuContent>
- </DropdownMenu>
- )
- },
- enableSorting: false,
- enableHiding: false,
- },
+ // return (
+ // <DropdownMenu>
+ // <DropdownMenuTrigger asChild>
+ // <Button
+ // aria-label="Open menu"
+ // variant="ghost"
+ // className="flex size-8 p-0 data-[state=open]:bg-muted"
+ // >
+ // <Ellipsis className="size-4" aria-hidden="true" />
+ // </Button>
+ // </DropdownMenuTrigger>
+ // <DropdownMenuContent align="end" className="w-40">
+ // <DropdownMenuItem
+ // onSelect={() => setRowAction({ type: "view", row })}
+ // >
+ // <Eye className="mr-2 size-4" aria-hidden="true" />
+ // 상세 보기
+ // </DropdownMenuItem>
+ // <DropdownMenuItem
+ // onSelect={() => setRowAction({ type: "viewSecurity", row })}
+ // >
+ // <Shield className="mr-2 size-4" aria-hidden="true" />
+ // 보안 정보
+ // </DropdownMenuItem>
+ // {session.isCurrentlyActive && (
+ // <DropdownMenuItem
+ // onSelect={() => setRowAction({ type: "forceLogout", row })}
+ // className="text-red-600"
+ // >
+ // <LogOut className="mr-2 size-4" aria-hidden="true" />
+ // 강제 로그아웃
+ // <DropdownMenuShortcut>⌘⌫</DropdownMenuShortcut>
+ // </DropdownMenuItem>
+ // )}
+ // </DropdownMenuContent>
+ // </DropdownMenu>
+ // )
+ // },
+ // enableSorting: false,
+ // enableHiding: false,
+ // },
]
} \ No newline at end of file
diff --git a/lib/login-session/table/login-sessions-table-toolbar-actions.tsx b/lib/login-session/table/login-sessions-table-toolbar-actions.tsx
index 36665bc0..2c8781a3 100644
--- a/lib/login-session/table/login-sessions-table-toolbar-actions.tsx
+++ b/lib/login-session/table/login-sessions-table-toolbar-actions.tsx
@@ -8,6 +8,8 @@ import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip
import { ExtendedLoginSession } from "../validation"
import { exportTableToExcel } from "@/lib/export_all"
+import { useTransition } from "react"
+import { useRouter } from "next/navigation"
interface LoginSessionsTableToolbarActionsProps {
table: Table<ExtendedLoginSession>
@@ -16,6 +18,15 @@ interface LoginSessionsTableToolbarActionsProps {
export function LoginSessionsTableToolbarActions({
table,
}: LoginSessionsTableToolbarActionsProps) {
+
+ const router = useRouter()
+ const [isPending, startTransition] = useTransition()
+
+ const handleRefresh = () => {
+ startTransition(() => {
+ router.refresh() // ✅ 서버 컴포넌트만 새로고침 (더 빠르고 부드러움)
+ })
+ }
return (
<div className="flex items-center gap-2">
<Tooltip>
@@ -44,18 +55,23 @@ export function LoginSessionsTableToolbarActions({
<Button
variant="outline"
size="sm"
- onClick={() => window.location.reload()}
+ onClick={handleRefresh}
+ disabled={isPending} // 로딩 중 비활성화
>
- <RotateCcw className="mr-2 size-4" aria-hidden="true" />
- 새로고침
+ <RotateCcw
+ className={`mr-2 size-4 ${isPending ? 'animate-spin' : ''}`}
+ aria-hidden="true"
+ />
+ {isPending ? '새로고침 중...' : '새로고침'}
</Button>
</TooltipTrigger>
<TooltipContent>
<p>데이터 새로고침</p>
</TooltipContent>
</Tooltip>
+
- <Tooltip>
+ {/* <Tooltip>
<TooltipTrigger asChild>
<Button
variant="outline"
@@ -72,7 +88,7 @@ export function LoginSessionsTableToolbarActions({
<TooltipContent>
<p>보안 분석 리포트 생성</p>
</TooltipContent>
- </Tooltip>
+ </Tooltip> */}
</div>
)
} \ No newline at end of file
diff --git a/lib/login-session/table/login-sessions-table.tsx b/lib/login-session/table/login-sessions-table.tsx
index 43568f41..c81efc37 100644
--- a/lib/login-session/table/login-sessions-table.tsx
+++ b/lib/login-session/table/login-sessions-table.tsx
@@ -10,7 +10,6 @@ import type {
import { useDataTable } from "@/hooks/use-data-table"
import { DataTable } from "@/components/data-table/data-table"
import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar"
-import { useFeatureFlags } from "@/components/data-table/feature-flags-provider"
import { getLoginSessions } from "../service"
import { LoginSessionsTableToolbarActions } from "./login-sessions-table-toolbar-actions"
@@ -26,8 +25,6 @@ interface LoginSessionsTableProps {
}
export function LoginSessionsTable({ promises }: LoginSessionsTableProps) {
- const { featureFlags } = useFeatureFlags()
-
const [{ data, pageCount }] = React.use(promises)
const [rowAction, setRowAction] =