my-attempt-with-notion-api
by Yohann Legrand
Add a new task in Notion
// Menu: New task// Description: Add a new task in Notionconst { newTask, getProperties, syncProperties } = await lib("notion-tasks")let taskName = await arg({placeholder: "Task name",hint: `Type "sync" to sync`,})if (taskName === "sync") {try {await syncProperties()notify({title: "✅ Notion sync",message: "Tasks properties successfully cached locally",})} catch (err) {notify({title: "⛔️ Notion sync",message: "Something went wrong",})console.error(err)}taskName = await arg("Task name")}const { statusOptions, dayOptions, tagOptions } = getProperties()const status = await arg("Status",statusOptions.map((opt) => opt.name))const day = await arg("Day",dayOptions.map((opt) => opt.name))const tag = await arg("Tag",tagOptions.map((opt) => opt.name))try {await newTask(taskName, status, day, tag)send("HIDE_APP")notify({title: "✅ New task added",message: `${taskName} for ${day} (${status})`,})} catch (err) {send("HIDE_APP")notify({title: "⛔️ New task",message: `Something went wrong`,})console.error(err)}
const notionToken = await env("NOTION_USER_TOKEN")const databaseId = "06d55db47a994f429132d5d8fd9edd2a"const tasksDb = await db("tasks", {properties: {statusOptions: [],dayOptions: [],tagOptions: [],},})export const getProperties = () => tasksDb.propertiesexport async function syncProperties() {const { data } = await get(`https://api.notion.com/v1/databases/${databaseId}`,{headers: {Authorization: `Bearer ${notionToken}`,"Content-Type": "application/json","Notion-Version": "2021-05-13",},})const {Status: {select: { options: statusOptions },},Day: {multi_select: { options: dayOptions },},Tag: {multi_select: { options: tagOptions },},} = data.propertiestasksDb.properties = { statusOptions, dayOptions, tagOptions }await tasksDb.write()}export async function newTask(taskName, status, day, tag) {return await post("https://api.notion.com/v1/pages",{parent: { database_id: databaseId },properties: {Name: {title: [{ text: { content: taskName } }],},Status: {select: { name: status },},Day: {multi_select: [{ name: day }],},Tag: {multi_select: [{ name: tag }],},},},{headers: {Authorization: `Bearer ${notionToken}`,"Content-Type": "application/json","Notion-Version": "2021-05-13",},})}