Skip to content
Snippets Groups Projects
Table.tsx 1.47 KiB
Newer Older
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
// import './Table.css'

type TableParams = {
  className: string
  columns: string[],
  data: any[][],
  onClick?: (element: React.MouseEvent<HTMLTableRowElement>, index: number) => void
export const Table = ({ className, columns, data, onClick }: TableParams) => {
  const Header = () => {
    return (
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
      <thead>
        <tr >
          {columns.map(column =>
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
            <th
              className="border-b font-medium p-4 first:pl-8 last:pr-8 pt-0 pb-3 
                text-left text-slate-800"
              key={column}>
              {column}
            </th>)}
        </tr>
      </thead>
    );
  };

  const Body = () => {
    return (
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
      <tbody className="bg-white">
        {
          data.map((row, index) => {
            return <tr
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
              className="hover:bg-slate-200 text-slate-500
               hover:text-slate-800 hover:cursor-pointer"
              onClick={(el) => onClick?.(el, index)}
              key={index}>
              {row.map((el, index) => {
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
                return <td
                  className="border-b border-slate-100 
                  p-4 first:pl-8 last:pr-8 text-left"
                  key={index}>
                  {el}
                </td>
  return (
Jacopo Gasparetto's avatar
Jacopo Gasparetto committed
    <div className="w-full bg-slate-100 shadow-lg rounded-xl">
      <table className={"table-auto w-full text-sm mt-8 mb-6"}>
        <Header />
        <Body />
      </table>
    </div>