actions/duplicate-page/duplicate-page.mjs
import utils from "../../common/utils.mjs"; import notion from "../../notion.app.mjs"; import base from "../common/base-page-builder.mjs"; export default { ...base, key: "notion-duplicate-page", name: "Duplicate Page", description: "Create a new page copied from an existing page block. [See the documentation](https://developers.notion.com/reference/post-page)", version: "0.0.21", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { notion, pageId: { propDefinition: [ notion, "pageId", ], description: "Select a page to copy or provide a page ID", }, title: { propDefinition: [ notion, "title", ], description: "The new page title", }, parentId: { propDefinition: [ notion, "pageId", ], label: "Parent Page ID", description: "Select a parent page for the new page being created, or provide the ID of a parent page", }, }, async run({ $ }) { const block = await this.notion.retrieveBlock(this.pageId); block.children = await this.notion.retrieveBlockChildren(block); const formattedChildren = await this.formatChildBlocks(block); const pageBlock = await this.notion.retrievePage(this.pageId); const { cover, icon, } = pageBlock; const title = this.title ? this.title : this.notion.extractPageTitle(pageBlock); const page = { parent: { page_id: this.parentId, }, properties: { title: utils.buildTextProperty(title), }, cover: this.isFile(cover) ? null : cover, icon: this.isFile(icon) ? null : icon, children: formattedChildren, }; const results = await this.notion.createPage(page); const pageName = this.notion.extractPageTitle(results); $.export("$summary", `Successfully created page "[${pageName}](${results.url})"`); return results; }, };