UNPKG

@udus/notion-renderer

Version:
46 lines (45 loc) 1.67 kB
export const splitTitleAndOtherProperties = (properties) => { const title = Object.values(properties).find((value) => isTitleProperty(value)) ?? { id: "", type: "title", title: [] }; const other = Object.fromEntries(Object.entries(properties).filter(([key, value]) => !isTitleProperty(value))); return { title, other }; }; export const extractTitle = (pageOrDatabase) => { if (pageOrDatabase.object === "page") { const { title } = splitTitleAndOtherProperties(pageOrDatabase.properties); return title?.title ?? []; } if (pageOrDatabase.object === "database") { return pageOrDatabase.title; } return []; }; export const isTitleProperty = (property) => property.type === "title"; export const selectPropertyById = (properties, id) => { const name = Object.keys(properties).find((key) => properties[key].id === id); if (name) { const selected = properties[name]; return { [name]: selected }; } return; }; export const selectPropertyByName = (properties, key) => { const selected = properties[key]; if (selected) { return { [key]: selected }; } return; }; export const selectProperties = (properties, selector) => { const selected = selector.reduce((prev, keyOrId) => { const selectedByName = selectPropertyByName(properties, keyOrId); if (selectedByName) { return { ...prev, ...selectedByName }; } const selectedById = selectPropertyById(properties, keyOrId); if (selectedById) { return { ...prev, ...selectedById }; } return { ...prev }; }, {}); return selected; };