Skip to content

Commit

Permalink
feat(ui): implemented basic table component
Browse files Browse the repository at this point in the history
  • Loading branch information
akhilmhdh committed Jan 23, 2023
1 parent 054acc6 commit e67d68a
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 0 deletions.
41 changes: 41 additions & 0 deletions frontend/src/components/v2/Table/Table.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import type { Meta, StoryObj } from '@storybook/react';

import { Table, TableContainer, TBody, Td, Th, THead, Tr } from './Table';

const meta: Meta<typeof Table> = {
title: 'Components/Table',
component: Table,
tags: ['v2'],
argTypes: {}
};

export default meta;
type Story = StoryObj<typeof Table>;

export const Basic: Story = {
render: (args) => (
<TableContainer>
<Table {...args}>
<THead>
<Tr>
<Th>Head#1</Th>
<Th>Head#2</Th>
<Th>Head#3</Th>
</Tr>
</THead>
<TBody>
<Tr>
<Td>Row#1</Td>
<Td>Row#2</Td>
<Td>Row#3</Td>
</Tr>
<Tr>
<Td>Row#1</Td>
<Td>Row#2</Td>
<Td>Row#3</Td>
</Tr>
</TBody>
</Table>
</TableContainer>
)
};
93 changes: 93 additions & 0 deletions frontend/src/components/v2/Table/Table.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { ReactNode } from 'react';
import { twMerge } from 'tailwind-merge';

export type TableContainerProps = {
children: ReactNode;
isRounded?: boolean;
className?: string;
};

export const TableContainer = ({
children,
className,
isRounded = true
}: TableContainerProps): JSX.Element => (
<div
className={twMerge(
'overflow-x-auto shadow-md relative border border-solid border-mineshaft-700',
isRounded && 'rounded-md',
className
)}
>
{children}
</div>
);

// main parent table
export type TableProps = {
className?: string;
children: ReactNode;
};

export const Table = ({ children, className }: TableProps): JSX.Element => (
<table
className={twMerge(
'bg-bunker-800 p-2 roun text-gray-300 w-full text-sm text-left rounded-md',
className
)}
>
{children}
</table>
);

// table head
export type THeadProps = {
children: ReactNode;
className?: string;
};

export const THead = ({ children, className }: THeadProps): JSX.Element => (
<thead className={twMerge('text-xs bg-bunker text-bunker-300 uppercase', className)}>
{children}
</thead>
);

// table rows
export type TrProps = {
children: ReactNode;
className?: string;
};

export const Tr = ({ children, className }: TrProps): JSX.Element => (
<tr className={twMerge('border border-solid border-mineshaft-700', className)}>{children}</tr>
);

// table head columns
export type ThProps = {
children: ReactNode;
className?: string;
};

export const Th = ({ children, className }: ThProps): JSX.Element => (
<th className={twMerge('px-6 py-3 font-medium', className)}>{children}</th>
);

// table body
export type TBodyProps = {
children: ReactNode;
className?: string;
};

export const TBody = ({ children, className }: TBodyProps): JSX.Element => (
<tbody className={twMerge(className)}>{children}</tbody>
);

// table body columns
export type TdProps = {
children: ReactNode;
className?: string;
};

export const Td = ({ children, className }: TdProps): JSX.Element => (
<td className={twMerge('text-left px-6 py-3', className)}>{children}</td>
);
10 changes: 10 additions & 0 deletions frontend/src/components/v2/Table/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export type {
TableContainerProps,
TableProps,
TBodyProps,
TdProps,
THeadProps,
ThProps,
TrProps
} from './Table';
export { Table, TableContainer, TBody, Td, Th, THead, Tr } from './Table';
1 change: 1 addition & 0 deletions frontend/src/components/v2/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ export * from './Modal';
export * from './Select';
export * from './Spinner';
export * from './Switch';
export * from './Table';
export * from './TextArea';

0 comments on commit e67d68a

Please sign in to comment.