폼 전송 TDD추가 및 암호화 적용 중
CI / test (push) Failing after 4m41s
CI / pr_and_merge (push) Has been skipped

This commit is contained in:
2025-12-02 11:02:15 +09:00
parent d0766fca45
commit 3e223a45d4
40 changed files with 1290 additions and 31 deletions
@@ -86,6 +86,7 @@ export function getSectionLayoutConfig(props: SectionBlockProps) {
// 에디터 크롬 없이 실제 랜딩 페이지처럼 블록들을 렌더링하는 컴포넌트
interface PublicPageRendererProps {
blocks: Block[];
projectSlug?: string;
}
const pxToEm = (px: number, base = 16) => `${px / base}em`;
@@ -99,7 +100,7 @@ const convertPxStringToEm = (value?: string | null) => {
return pxToEm(px);
};
export function PublicPageRenderer({ blocks }: PublicPageRendererProps) {
export function PublicPageRenderer({ blocks, projectSlug }: PublicPageRendererProps) {
const sectionBlocks = blocks.filter((b) => b.type === "section");
const rootBlocks = blocks.filter((b) => !b.sectionId && b.type !== "section");
@@ -107,10 +108,6 @@ export function PublicPageRenderer({ blocks }: PublicPageRendererProps) {
const [formMessage, setFormMessage] = useState<string>("");
const renderBlock = (block: Block) => {
if ((block as any).type === "form") {
return null;
}
if (block.type === "text") {
const props = block.props as TextBlockProps;
const tokens = computeTextPublicTokens(props);
@@ -594,6 +591,9 @@ export function PublicPageRenderer({ blocks }: PublicPageRendererProps) {
>
{/* 폼 설정 전체를 서버로 함께 전달하기 위한 hidden 필드 */}
<input type="hidden" name="__config" value={JSON.stringify(props)} />
{projectSlug && projectSlug.trim() !== "" ? (
<input type="hidden" name="__projectSlug" value={projectSlug.trim()} />
) : null}
{hasFields && (
<div className="flex flex-col gap-2 text-xs text-slate-200">
{fields.map((field: any) => (