fix(SW-3691): Setup one prettier config for whole repo * Setup prettierrc in root and remove other configs Approved-by: Joakim Jäderberg Approved-by: Linus Flood
299 lines
6.3 KiB
TypeScript
299 lines
6.3 KiB
TypeScript
import type { Meta, StoryObj } from "@storybook/nextjs-vite"
|
|
import { expect } from "storybook/test"
|
|
import { JsonToHtml } from "./JsonToHtml"
|
|
import { RTETypeEnum } from "./types/rte/enums"
|
|
import { RTEImageVaultNode, RTENode } from "./types/rte/node"
|
|
|
|
const meta: Meta<typeof JsonToHtml> = {
|
|
title: "Core Components/JsonToHtml",
|
|
component: JsonToHtml,
|
|
}
|
|
|
|
export default meta
|
|
|
|
type Story = StoryObj<typeof JsonToHtml>
|
|
|
|
const headings: RTENode[] = [
|
|
{
|
|
uid: "heading-1",
|
|
type: RTETypeEnum.h1,
|
|
attrs: { type: "entry" },
|
|
children: [{ text: "Heading 1" }],
|
|
},
|
|
{
|
|
uid: "heading-2",
|
|
type: RTETypeEnum.h2,
|
|
attrs: { type: "entry" },
|
|
children: [{ text: "Heading 2" }],
|
|
},
|
|
{
|
|
uid: "heading-3",
|
|
type: RTETypeEnum.h3,
|
|
attrs: { type: "entry" },
|
|
children: [{ text: "Heading 3" }],
|
|
},
|
|
{
|
|
uid: "heading-4",
|
|
type: RTETypeEnum.h4,
|
|
attrs: { type: "entry" },
|
|
children: [{ text: "Heading 4" }],
|
|
},
|
|
]
|
|
|
|
const paragraph: RTENode = {
|
|
uid: "paragraph",
|
|
attrs: { type: "asset" },
|
|
type: RTETypeEnum.p,
|
|
children: [
|
|
{ text: "This paragraph has " },
|
|
{ text: "bold", bold: true },
|
|
{ text: " and " },
|
|
{ text: "italic", italic: true },
|
|
{ text: " text, plus an inline " },
|
|
{
|
|
type: RTETypeEnum.a,
|
|
attrs: { type: "asset", url: "https://example.com" },
|
|
uid: "link-1",
|
|
children: [{ text: "link" }],
|
|
},
|
|
{ text: "." },
|
|
],
|
|
}
|
|
const list: RTENode = {
|
|
type: RTETypeEnum.ul,
|
|
attrs: { type: "asset" },
|
|
uid: "list-1",
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.li,
|
|
uid: "list-item-1",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "First item" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.li,
|
|
uid: "list-item-2",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Second item" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.li,
|
|
uid: "list-item-3",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Third item" }],
|
|
},
|
|
],
|
|
}
|
|
|
|
const code: RTENode = {
|
|
type: RTETypeEnum.code,
|
|
uid: "code",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
text: `function greet(name: string) {
|
|
return \`Hello, \${name}!\`;
|
|
}`,
|
|
},
|
|
],
|
|
}
|
|
|
|
const blockquote: RTENode = {
|
|
type: RTETypeEnum.blockquote,
|
|
uid: "blockqoute",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Simplicity is the soul of efficiency." }],
|
|
}
|
|
|
|
const horizontalRule: RTENode = {
|
|
type: RTETypeEnum.hr,
|
|
uid: "horizontal-rule",
|
|
attrs: { type: "entry" },
|
|
children: [],
|
|
}
|
|
|
|
const table: RTENode = {
|
|
type: RTETypeEnum.table,
|
|
uid: "table",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.thead,
|
|
uid: "table-header",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.tr,
|
|
uid: "table-header-row-1",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.th,
|
|
uid: "table-head-1",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Head 1" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.th,
|
|
uid: "table-head-2",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Head 2" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.th,
|
|
uid: "table-head-3",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Head 3" }],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
type: RTETypeEnum.tbody,
|
|
uid: "table-body",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.tr,
|
|
uid: "table-row-1",
|
|
attrs: { type: "asset" },
|
|
children: [
|
|
{
|
|
type: RTETypeEnum.td,
|
|
uid: "table-cell-1",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Cell 1" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.td,
|
|
uid: "table-cell-2",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Cell 2" }],
|
|
},
|
|
{
|
|
type: RTETypeEnum.td,
|
|
uid: "table-cell-3",
|
|
attrs: { type: "asset" },
|
|
children: [{ text: "Cell 3" }],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
|
|
const image: RTEImageVaultNode = {
|
|
type: RTETypeEnum.ImageVault,
|
|
uid: "image",
|
|
attrs: {
|
|
type: "entry",
|
|
url: "https://imagevault.scandichotels.com/publishedmedia/77obkq3g4harjm8wyua9/Scandic_Family_Breakfast_2.jpg",
|
|
height: "200px",
|
|
width: "200px",
|
|
fileName: "Scandic_Family_Breakfast_2.jpg",
|
|
imageVaultId: 1,
|
|
title: "Image Title",
|
|
dimensions: { width: 200, height: 200, aspectRatio: 1.5 },
|
|
meta: { alt: "Image Alt", caption: "Image Caption" },
|
|
focalPoint: { x: 50, y: 50 },
|
|
},
|
|
children: [],
|
|
}
|
|
|
|
export const Example: Story = {
|
|
args: {
|
|
nodes: [
|
|
{
|
|
uid: "paragraph",
|
|
attrs: { type: "asset" },
|
|
type: RTETypeEnum.p,
|
|
children: [
|
|
{ text: "This is a kitchen sink of all Rich Text Editor to HTML" },
|
|
],
|
|
},
|
|
...headings,
|
|
paragraph,
|
|
list,
|
|
code,
|
|
blockquote,
|
|
horizontalRule,
|
|
image,
|
|
] satisfies RTENode[],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const Headings: Story = {
|
|
args: {
|
|
nodes: headings,
|
|
embeds: [],
|
|
},
|
|
play: async ({ canvas }) => {
|
|
expect(
|
|
await canvas.findByRole("heading", { name: "Heading 1" })
|
|
).toBeInTheDocument()
|
|
|
|
expect(
|
|
await canvas.findByRole("heading", { name: "Heading 2" })
|
|
).toBeInTheDocument()
|
|
|
|
expect(
|
|
await canvas.findByRole("heading", { name: "Heading 3" })
|
|
).toBeInTheDocument()
|
|
|
|
expect(
|
|
await canvas.findByRole("heading", { name: "Heading 4" })
|
|
).toBeInTheDocument()
|
|
},
|
|
}
|
|
export const Paragraph: Story = {
|
|
args: {
|
|
nodes: [paragraph],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const Code: Story = {
|
|
args: {
|
|
nodes: [code],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const List: Story = {
|
|
args: {
|
|
nodes: [list],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const BlockQuote: Story = {
|
|
args: {
|
|
nodes: [blockquote],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const HorizontalRule: Story = {
|
|
args: {
|
|
nodes: [horizontalRule],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const Table: Story = {
|
|
args: {
|
|
nodes: [table],
|
|
embeds: [],
|
|
},
|
|
}
|
|
|
|
export const Image: Story = {
|
|
args: {
|
|
nodes: [image],
|
|
embeds: [],
|
|
},
|
|
}
|