docs/CompositionObjects/Text.md
# Text
A Text object must have a ([TextType](#TextType)). A text object cannot be sent to slack as a stand alone object. It is usually a composition of another object, perhaps a [section](https://github.com/IyiKuyoro/slack-block-msg-kit/blob/master/docs/Blocks/Section.md) or a [Button](https://github.com/IyiKuyoro/slack-block-msg-kit/blob/master/docs/BlockElements/ButtonElement.md).
## Table of Content
- [Text](#Text)
- [Table of Content](#Table-of-Content)
- [Importing the Text Class](#Importing-the-Text-Class)
- [Creating a Text](#Creating-a-Text)
- [Adding an Emoji](#Adding-an-Emoji)
- [Render text verbatim](#Render-text-verbatim)
- [Common Gatchas](#Common-Gatchas)
- [TextType](#TextType)
- [Importing the TextType enum](#Importing-the-TextType-enum)
## Importing the Text Class
There are two ways of importing the Text class.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
```
or
```javascript
import { Text, TextType } from 'slack-block-msg-kit';
```
## Creating a Text
To create a [Text](https://api.slack.com/reference/messaging/composition-objects#text), we must choose the way the text is to be rendered which is typically denoted as the [TextType](#TextType). Below is an example on how to create an instance of the text object.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.plainText, 'There is a simple plain text.');
```
Perhaps you want your text to be read in the markdown format. No worries, simply change the text type to mrkdwn.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.mrkdwn, '*This text would be rendered in bold.*');
```
## Adding an Emoji
You can create text objects with emojis. There are two ways to enable the addition of emojis to your text.
The first requires you adding a third boolean parameter to the constructor. Keep in mind however, that you cannot use emojis if the text type is mrkdwn.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.plain_text, '*This text would be rendered in bold.*', true);
```
The second way of adding emojis via a method (**allowEmoji()**).
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.plainText, 'There is a simple plain text.');
text.allowEmoji();
```
## Render text verbatim
You can also render the text as is on slack without converting special characters and links. There are two ways of doing this.
The first; pass a fourth boolean parameter with represents verbatim. Keep in mind however, that verbatim cannot be used with plain_text, and as such cannot be paired with emoji.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.mrkdwn, '*This text would be rendered in bold.*', false, true);
```
The second way is by calling a method (**displayVerbatim**). We recommend you use this method.
```javascript
import Text, { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
const text = new Text(TextType.mrkdwn, 'There is a simple plain text.');
text.displayVerbatim();
```
## Common Gatchas
- You cannot have emojis in a markdown type.
- You cannot render plain_text verbatim.
## TextType
There are two available text types:
- markdown - (mrkdwn)
- plain text - (plainText)
## Importing the TextType enum
There are two ways of importing the TextType class.
```javascript
import { TextType } from 'slack-block-msg-kit/CompositionObjects/Text';
```
or
```javascript
import { TextType } from 'slack-block-msg-kit';
```