feat: add RTE Table
This commit is contained in:
@@ -4,6 +4,7 @@ import { insertResponseToImageVaultAsset } from "@/utils/imageVault"
|
|||||||
|
|
||||||
import ImageContainer from "../ImageContainer"
|
import ImageContainer from "../ImageContainer"
|
||||||
import Divider from "../TempDesignSystem/Divider"
|
import Divider from "../TempDesignSystem/Divider"
|
||||||
|
import Table, { TBody, TD, TH, THead, TR } from "../TempDesignSystem/Table"
|
||||||
import BiroScript from "../TempDesignSystem/Text/BiroScript"
|
import BiroScript from "../TempDesignSystem/Text/BiroScript"
|
||||||
import Body from "../TempDesignSystem/Text/Body"
|
import Body from "../TempDesignSystem/Text/Body"
|
||||||
import Caption from "../TempDesignSystem/Text/Caption"
|
import Caption from "../TempDesignSystem/Text/Caption"
|
||||||
@@ -375,9 +376,9 @@ export const renderOptions: RenderOptions = {
|
|||||||
) => {
|
) => {
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<table key={node.uid} {...props}>
|
<Table key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
</table>
|
</Table>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -387,11 +388,25 @@ export const renderOptions: RenderOptions = {
|
|||||||
next: RTENext,
|
next: RTENext,
|
||||||
fullRenderOptions: RenderOptions
|
fullRenderOptions: RenderOptions
|
||||||
) => {
|
) => {
|
||||||
|
// Override the styling of p tags inside the thead tag
|
||||||
|
const theadChildPRenderOptions = {
|
||||||
|
...fullRenderOptions,
|
||||||
|
[RTETypeEnum.p]: (
|
||||||
|
node: RTEDefaultNode,
|
||||||
|
embeds: EmbedByUid,
|
||||||
|
next: RTENext,
|
||||||
|
fullRenderOptions: RenderOptions
|
||||||
|
) => (
|
||||||
|
<Body color={"burgundy"} textTransform={"bold"}>
|
||||||
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
|
</Body>
|
||||||
|
),
|
||||||
|
}
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<thead key={node.uid} {...props}>
|
<THead key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, theadChildPRenderOptions)}
|
||||||
</thead>
|
</THead>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -403,9 +418,9 @@ export const renderOptions: RenderOptions = {
|
|||||||
) => {
|
) => {
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<tbody key={node.uid} {...props}>
|
<TBody key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
</tbody>
|
</TBody>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -440,9 +455,9 @@ export const renderOptions: RenderOptions = {
|
|||||||
) => {
|
) => {
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<tr key={node.uid} {...props}>
|
<TR key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
</tr>
|
</TR>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -454,9 +469,9 @@ export const renderOptions: RenderOptions = {
|
|||||||
) => {
|
) => {
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<th key={node.uid} {...props}>
|
<TH key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
</th>
|
</TH>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -468,9 +483,9 @@ export const renderOptions: RenderOptions = {
|
|||||||
) => {
|
) => {
|
||||||
const props = extractPossibleAttributes(node.attrs)
|
const props = extractPossibleAttributes(node.attrs)
|
||||||
return (
|
return (
|
||||||
<td key={node.uid} {...props}>
|
<TD key={node.uid} {...props}>
|
||||||
{next(node.children, embeds, fullRenderOptions)}
|
{next(node.children, embeds, fullRenderOptions)}
|
||||||
</td>
|
</TD>
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
27
components/TempDesignSystem/Table/index.tsx
Normal file
27
components/TempDesignSystem/Table/index.tsx
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import styles from "./table.module.css"
|
||||||
|
|
||||||
|
function Table({ children }: React.PropsWithChildren) {
|
||||||
|
return <table className={styles.table}>{children}</table>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Table
|
||||||
|
|
||||||
|
export function THead({ children }: React.PropsWithChildren) {
|
||||||
|
return <thead className={styles.thead}>{children}</thead>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function TH({ children }: React.PropsWithChildren) {
|
||||||
|
return <th className={styles.th}>{children}</th>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function TD({ children }: React.PropsWithChildren) {
|
||||||
|
return <td className={styles.td}>{children}</td>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function TBody({ children }: React.PropsWithChildren) {
|
||||||
|
return <tbody className={styles.tbody}>{children}</tbody>
|
||||||
|
}
|
||||||
|
|
||||||
|
export function TR({ children }: React.PropsWithChildren) {
|
||||||
|
return <tr className={styles.tr}>{children}</tr>
|
||||||
|
}
|
||||||
26
components/TempDesignSystem/Table/table.module.css
Normal file
26
components/TempDesignSystem/Table/table.module.css
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
.table {
|
||||||
|
border-radius: var(--Corner-radius-Medium);
|
||||||
|
border-collapse: collapse;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thead {
|
||||||
|
background-color: var(--Base-Background-Secondary-Normal, #f7e1d5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tbody {
|
||||||
|
background-color: var(--Base-Surface-Primary-light-Normal, #fff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.tr:not(:last-of-type) {
|
||||||
|
border-bottom: 1px solid var(--Primary-Light-On-Surface-Divider, #f0c1b6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.th {
|
||||||
|
padding: var(--Spacing-x2) var(--Spacing-x3);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.td {
|
||||||
|
padding: var(--Spacing-x3);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user