Added formatting utils to payload
This commit is contained in:
parent
fb2617b910
commit
b44da929f9
|
@ -0,0 +1,96 @@
|
|||
import { isBlockLineBlock, isBlockCueBlock } from "./blocks";
|
||||
import { BreakBlockType } from "./constants";
|
||||
import {
|
||||
type RichTextListNode,
|
||||
type RichTextBlockNode,
|
||||
isBlockNodeSectionBlock,
|
||||
isBlockNodeTranscriptBlock,
|
||||
isBlockNodeBreakBlock,
|
||||
type RichTextNode,
|
||||
isNodeParagraphNode,
|
||||
isNodeListNode,
|
||||
isNodeTextNode,
|
||||
isNodeLinkNode,
|
||||
isNodeBlockNode,
|
||||
isNodeTabNode,
|
||||
type RichTextContent,
|
||||
} from "./rich-text";
|
||||
|
||||
const formatList = (node: RichTextListNode) => {
|
||||
return node.children.map(formatNode).join("\n");
|
||||
};
|
||||
|
||||
const formatBlock = (node: RichTextBlockNode) => {
|
||||
if (isBlockNodeSectionBlock(node)) {
|
||||
return (
|
||||
`\n\n${node.fields.blockName}\n` +
|
||||
formatRichTextContentToString(node.fields.content)
|
||||
);
|
||||
} else if (isBlockNodeTranscriptBlock(node)) {
|
||||
return node.fields.lines
|
||||
.map((block) => {
|
||||
if (isBlockLineBlock(block)) {
|
||||
return `${block.blockName} | ${formatRichTextContentToString(
|
||||
block.content
|
||||
)}`;
|
||||
} else if (isBlockCueBlock(block)) {
|
||||
return formatRichTextContentToString(block.content);
|
||||
}
|
||||
return "";
|
||||
})
|
||||
.join("");
|
||||
} else if (isBlockNodeBreakBlock(node)) {
|
||||
switch (node.fields.type) {
|
||||
case BreakBlockType.space:
|
||||
return "\n\n\n\n\n";
|
||||
case BreakBlockType.dottedLine:
|
||||
return "\n\n\n--------------------\n\n\n";
|
||||
case BreakBlockType.solidLine:
|
||||
return "\n\n\n____________________\n\n\n";
|
||||
case BreakBlockType.sceneBreak:
|
||||
return "\n\n\n * * * \n\n\n";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
||||
const formatNode = (node: RichTextNode): string => {
|
||||
if (isNodeParagraphNode(node)) {
|
||||
return node.children.map(formatNode).join("");
|
||||
} else if (isNodeListNode(node)) {
|
||||
return formatList(node);
|
||||
} else if (isNodeTextNode(node)) {
|
||||
return node.text;
|
||||
} else if (isNodeLinkNode(node)) {
|
||||
return node.children.map(formatNode).join("");
|
||||
} else if (isNodeBlockNode(node)) {
|
||||
return formatBlock(node);
|
||||
} else if (isNodeTabNode(node)) {
|
||||
return "\t";
|
||||
}
|
||||
return "";
|
||||
};
|
||||
|
||||
export const formatRichTextContentToString = (
|
||||
content: RichTextContent
|
||||
): string => content.root.children.map(formatNode).join("\n\n");
|
||||
|
||||
export const formatInlineTitle = ({
|
||||
pretitle,
|
||||
title,
|
||||
subtitle,
|
||||
}: {
|
||||
pretitle?: string | undefined;
|
||||
title: string;
|
||||
subtitle?: string | undefined;
|
||||
}): string => {
|
||||
let result = "";
|
||||
if (pretitle) {
|
||||
result += `${pretitle}: `;
|
||||
}
|
||||
result += title;
|
||||
if (subtitle) {
|
||||
result += ` — ${subtitle}`;
|
||||
}
|
||||
return result;
|
||||
};
|
Loading…
Reference in New Issue