Refactored multiple components, including PanelCard, SettingsCard, and DataGridShell, to replace Card with Frame for better organization and presentation. Enhanced the DataGridToolbar to support optional ReUI filters and improved the overall structure of the KPI stat grid. Updated .gitignore to include .env.local for local environment configurations, ensuring better management of environment variables.
122 lines
3.2 KiB
TypeScript
122 lines
3.2 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,
|
|
} 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 { FrameFooter } from '@/components/reui/frame'
|
|
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 ? (
|
|
<FrameFooter className={cn(panelCardFooterClassName)}>
|
|
<DataGridPagination {...DATA_GRID_PAGINATION_RU} />
|
|
</FrameFooter>
|
|
) : 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} />
|
|
</>
|
|
)
|
|
}
|