@udus/notion-renderer
Version:

46 lines (45 loc) • 1.67 kB
JavaScript
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;
};