mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-14 23:16:49 +00:00
61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
import { getTextContent, getDateValue } from 'notion-utils'
|
|
import { NotionAPI } from 'notion-client'
|
|
|
|
async function getPageProperties (id, block, schema, authToken) {
|
|
const rawProperties = Object.entries(block?.[id]?.value?.properties || [])
|
|
const excludeProperties = ['date', 'select', 'multi_select', 'person']
|
|
const properties = {}
|
|
for (let i = 0; i < rawProperties.length; i++) {
|
|
const [key, val] = rawProperties[i]
|
|
properties.id = id
|
|
if (schema[key]?.type && !excludeProperties.includes(schema[key].type)) {
|
|
properties[schema[key].name] = getTextContent(val)
|
|
} else {
|
|
switch (schema[key]?.type) {
|
|
case 'date': {
|
|
const dateProperty = getDateValue(val)
|
|
delete dateProperty.type
|
|
properties[schema[key].name] = dateProperty
|
|
break
|
|
}
|
|
case 'select':
|
|
case 'multi_select': {
|
|
const selects = getTextContent(val)
|
|
if (selects[0]?.length) {
|
|
properties[schema[key].name] = selects.split(',')
|
|
}
|
|
break
|
|
}
|
|
case 'person': {
|
|
const rawUsers = val.flat()
|
|
const users = []
|
|
const api = new NotionAPI({ authToken })
|
|
|
|
for (let i = 0; i < rawUsers.length; i++) {
|
|
if (rawUsers[i][0][1]) {
|
|
const userId = rawUsers[i][0]
|
|
const res = await api.getUsers(userId)
|
|
const resValue =
|
|
res?.recordMapWithRoles?.notion_user?.[userId[1]]?.value
|
|
const user = {
|
|
id: resValue?.id,
|
|
first_name: resValue?.given_name,
|
|
last_name: resValue?.family_name,
|
|
profile_photo: resValue?.profile_photo
|
|
}
|
|
users.push(user)
|
|
}
|
|
}
|
|
properties[schema[key].name] = users
|
|
break
|
|
}
|
|
default:
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return properties
|
|
}
|
|
|
|
export { getPageProperties as default }
|