defmodule Notion.Object do
@moduledoc """
Convenience and utliity functions for various object definitions used by the Notion API.
Rich text, file and Emoji objects:
https://developers.notion.com/reference/rich-text
https://developers.notion.com/reference/file-object
https://developers.notion.com/reference/emoji-object
"""
@doc """
simple text rich text object
"""
def plain_text(content) when is_bitstring(content) do
%{
type: "text",
text: %{
content: content,
link: nil
}
}
end
@doc """
URL or link rich text object
"""
def url(url_string) when is_bitstring(url_string) do
url(url_string, url_string)
end
def url(url_string, content, color \\ "default")
when is_bitstring(url_string) and is_bitstring(content) do
%{
type: "text",
text: %{
content: content,
link: %{
url: url_string
}
},
annotations: %{
color: color
},
plain_text: content,
href: url_string
}
end
@doc """
Emoji objects contain emoji data for page icons.
must be a single emoji
"""
def emoji_object(emoji_character) when is_bitstring(emoji_character) do
%{
type: "emoji",
emoji: emoji_character
}
end
@doc """
Sort object is exclusively used by the Search API endpoint
direction must be one of "ascending" and "descending".
https://developers.notion.com/reference/post-search
"""
def sort(direction) when is_bitstring(direction) do
%{
direction: direction,
timestamp: "last_edited_time"
}
end
@doc """
Sort ascending object to be used by the Search API endpoint
https://developers.notion.com/reference/post-search
"""
def sort_ascending(), do: sort("ascending")
@doc """
Sort descending object to be used by the Search API endpoint
https://developers.notion.com/reference/post-search
"""
def sort_descending(), do: sort("descending")
@doc """
filter object is used by the Search API endpoint to filter the
results based on the provided criteria.
page_or_database must be either "page" or "database"
https://developers.notion.com/reference/post-search
"""
def filter(page_or_database) do
%{
property: "object",
value: page_or_database
}
end
@doc """
Filter by page object to be optionally used by the Search API endpoint
https://developers.notion.com/reference/post-search
"""
def filter_by_page(), do: filter("page")
@doc """
Filter by database object to be optionally used by the Search API endpoint
https://developers.notion.com/reference/post-search
"""
def filter_by_database(), do: filter("database")
end