import { DetailedHTMLProps, HTMLAttributes, ReactNode, TdHTMLAttributes } from "react";
import { twMerge } from "tailwind-merge";
import { Skeleton } from "../Skeleton";
export type TableContainerProps = {
children: ReactNode;
isRounded?: boolean;
className?: string;
} & DetailedHTMLProps, HTMLDivElement>;
export const TableContainer = ({
children,
className,
isRounded = true,
...props
}: TableContainerProps): JSX.Element => (
{children}
);
// main parent table
export type TableProps = {
className?: string;
children: ReactNode;
};
export const Table = ({ children, className }: TableProps): JSX.Element => (
);
// table head
export type THeadProps = {
children: ReactNode;
className?: string;
};
export const THead = ({ children, className }: THeadProps): JSX.Element => (
{children}
);
export type TFootProps = {
children: ReactNode;
className?: string;
};
export const TFoot = ({ children, className }: TFootProps): JSX.Element => (
{children}
);
// table rows
export type TrProps = {
children: ReactNode;
className?: string;
isHoverable?: boolean;
isSelectable?: boolean;
} & HTMLAttributes;
export const Tr = ({
children,
className,
isHoverable,
isSelectable,
...props
}: TrProps): JSX.Element => (
{children}
);
// table head columns
export type ThProps = {
children?: ReactNode;
className?: string;
};
export const Th = ({ children, className }: ThProps): JSX.Element => (
{children}
|
);
// table body
export type TBodyProps = {
children: ReactNode;
className?: string;
};
export const TBody = ({ children, className }: TBodyProps): JSX.Element => (
{children}
);
// table body columns
export type TdProps = {
children?: ReactNode;
className?: string;
} & TdHTMLAttributes;
export const Td = ({ children, className, ...props }: TdProps): JSX.Element => (
{children}
|
);
export type TBodyLoader = {
rows?: number;
columns: number;
className?: string;
// unique key for mapping
innerKey: string;
};
export const TableSkeleton = ({
rows = 3,
columns,
innerKey,
className
}: TBodyLoader): JSX.Element => (
<>
{Array.apply(0, Array(rows)).map((_x, i) => (
{Array.apply(0, Array(columns)).map((_y, j) => (
|
|
))}
))}
>
);