CI / changes (push) Successful in 11s
CI / commitlint (push) Has been skipped
CI / openapi (push) Has been skipped
CI / web (push) Successful in 1m0s
CI / go (push) Successful in 1m14s
CI / bird2 (push) Successful in 19s
CI / release (push) Successful in 4m22s
Updated .mcp.json and .cursor/mcp.json to include reui configuration for HTTP API integration, specifying the URL and necessary headers. Modified components.json to enhance the @reui registry with authorization headers, improving security and access to resources.
117 lines
3.1 KiB
TypeScript
117 lines
3.1 KiB
TypeScript
import type { ReactNode } from 'react'
|
|
import type { Table } from '@tanstack/react-table'
|
|
|
|
import { cn } from '@evobgp/ui/lib/utils'
|
|
|
|
import { DataGridToolbar } from '@/components/data-grid-toolbar'
|
|
import { PanelCard, panelCardContentFlushClassName, panelCardFooterClassName, panelCardInsetClassName } from '@/components/panel-card'
|
|
import { DataGridPagination } from '@/components/reui/data-grid/data-grid-pagination'
|
|
import { DataGrid, DataGridContainer } from '@/components/reui/data-grid/data-grid'
|
|
import { DataGridTable } from '@/components/reui/data-grid/data-grid-table'
|
|
import {
|
|
DATA_GRID_MESSAGES_RU,
|
|
DATA_GRID_PAGINATION_RU,
|
|
DATA_GRID_TABLE_CLASS_NAMES,
|
|
DATA_GRID_TABLE_LAYOUT,
|
|
} from '@/lib/data-grid-defaults'
|
|
|
|
interface DataGridShellProps<TData extends object> {
|
|
table: Table<TData>
|
|
recordCount: number
|
|
isLoading?: boolean
|
|
emptyMessage?: ReactNode
|
|
showPagination?: boolean
|
|
tableLayout?: typeof DATA_GRID_TABLE_LAYOUT
|
|
className?: string
|
|
onRowClick?: (row: TData) => void
|
|
}
|
|
|
|
export function DataGridShell<TData extends object>({
|
|
table,
|
|
recordCount,
|
|
isLoading = false,
|
|
emptyMessage,
|
|
showPagination = true,
|
|
tableLayout = DATA_GRID_TABLE_LAYOUT,
|
|
className,
|
|
onRowClick,
|
|
}: DataGridShellProps<TData>) {
|
|
return (
|
|
<DataGrid
|
|
table={table}
|
|
recordCount={recordCount}
|
|
isLoading={isLoading}
|
|
emptyMessage={emptyMessage ?? DATA_GRID_MESSAGES_RU.emptyMessage}
|
|
loadingMessage={DATA_GRID_MESSAGES_RU.loadingMessage}
|
|
tableLayout={tableLayout}
|
|
tableClassNames={DATA_GRID_TABLE_CLASS_NAMES}
|
|
className={className}
|
|
onRowClick={onRowClick}
|
|
>
|
|
<DataGridContainer border={false}>
|
|
<DataGridTable />
|
|
</DataGridContainer>
|
|
{showPagination ? (
|
|
<div className={cn(panelCardFooterClassName, panelCardInsetClassName)}>
|
|
<DataGridPagination {...DATA_GRID_PAGINATION_RU} />
|
|
</div>
|
|
) : null}
|
|
</DataGrid>
|
|
)
|
|
}
|
|
|
|
interface DataGridCardProps {
|
|
title?: string
|
|
description?: string
|
|
actions?: ReactNode
|
|
children: ReactNode
|
|
className?: string
|
|
}
|
|
|
|
export function DataGridCard({ title, description, actions, children, className }: DataGridCardProps) {
|
|
return (
|
|
<PanelCard
|
|
title={title}
|
|
description={description}
|
|
actions={actions}
|
|
className={className}
|
|
contentClassName={panelCardContentFlushClassName}
|
|
>
|
|
{children}
|
|
</PanelCard>
|
|
)
|
|
}
|
|
|
|
interface DataGridSectionProps<TData extends object> extends DataGridShellProps<TData> {
|
|
searchValue: string
|
|
onSearchChange: (value: string) => void
|
|
searchPlaceholder?: string
|
|
toolbarFilters?: ReactNode
|
|
toolbarActions?: ReactNode
|
|
beforeGrid?: ReactNode
|
|
}
|
|
|
|
export function DataGridSection<TData extends object>({
|
|
searchValue,
|
|
onSearchChange,
|
|
searchPlaceholder,
|
|
toolbarFilters,
|
|
toolbarActions,
|
|
beforeGrid,
|
|
...shellProps
|
|
}: DataGridSectionProps<TData>) {
|
|
return (
|
|
<>
|
|
<DataGridToolbar
|
|
searchValue={searchValue}
|
|
onSearchChange={onSearchChange}
|
|
searchPlaceholder={searchPlaceholder}
|
|
filters={toolbarFilters}
|
|
actions={toolbarActions}
|
|
/>
|
|
{beforeGrid}
|
|
<DataGridShell {...shellProps} />
|
|
</>
|
|
)
|
|
}
|