Files
page-builder/src/app/editor/templates/footerTemplate.ts
T
jaybe 48e13d2a75
CI / pr_and_merge (push) Has been skipped
CI / test (push) Failing after 46m46s
CI / test (pull_request) Failing after 43m8s
CI / pr_and_merge (pull_request) Has been skipped
video 블록 및 리펙터링
2025-11-27 10:07:59 +09:00

107 lines
2.5 KiB
TypeScript

"use client";
import type { Block, SectionBlockProps, TextBlockProps } from "@/features/editor/state/editorStore";
export function createFooterTemplateBlocks(opts: {
sectionId: string;
createId: () => string;
}): { blocks: Block[]; lastSelectedId: string } {
const { sectionId, createId } = opts;
const columns: SectionBlockProps["columns"] = [
{ id: `${sectionId}_col_1`, span: 4 },
{ id: `${sectionId}_col_2`, span: 4 },
{ id: `${sectionId}_col_3`, span: 4 },
];
const sectionProps: SectionBlockProps = {
background: "muted",
paddingY: "md",
// 푸터는 상대적으로 낮은 높이와 좁은 최대 폭을 사용한다.
paddingYPx: 64,
maxWidthPx: 1120,
backgroundColorCustom: "#020617",
columns,
} as any;
const sectionBlock: Block = {
id: sectionId,
type: "section",
props: sectionProps,
sectionId: null,
columnId: null,
};
const col1Id = `${sectionId}_col_1`;
const col2Id = `${sectionId}_col_2`;
const col3Id = `${sectionId}_col_3`;
// Col 1: Brand
const brandId = createId();
const brandProps: TextBlockProps = {
text: "MyLanding",
align: "left",
size: "xl",
bold: true,
} as any;
const brandBlock: Block = {
id: brandId,
type: "text",
props: brandProps,
sectionId,
columnId: col1Id,
};
const descId = createId();
const descProps: TextBlockProps = {
text: "더 나은 웹사이트를 위한 최고의 선택.",
align: "left",
size: "sm",
color: "muted",
} as any;
const descBlock: Block = {
id: descId,
type: "text",
props: descProps,
sectionId,
columnId: col1Id,
};
// Col 2: Links
const linksId = createId();
const linksProps: TextBlockProps = {
text: "서비스 소개\n요금제\n고객지원\n문의하기",
align: "center",
size: "sm",
color: "muted",
} as any;
const linksBlock: Block = {
id: linksId,
type: "text",
props: linksProps,
sectionId,
columnId: col2Id,
};
// Col 3: Copyright
const copyrightId = createId();
const copyrightProps: TextBlockProps = {
text: "© 2025 MyLanding.\nAll rights reserved.",
align: "right",
size: "xs",
color: "muted",
} as any;
const copyrightBlock: Block = {
id: copyrightId,
type: "text",
props: copyrightProps,
sectionId,
columnId: col3Id,
};
const blocks: Block[] = [sectionBlock, brandBlock, descBlock, linksBlock, copyrightBlock];
const lastSelectedId = copyrightId;
return { blocks, lastSelectedId };
}