feat: Added new docs

This commit is contained in:
Deven Joshi
2021-06-17 14:22:50 +05:30
parent 865c4cbac9
commit ec8e385927
4 changed files with 163 additions and 6 deletions
@@ -4,3 +4,122 @@ sidebar_position: 16
title: Messages
---
Let's dive right into it, the example below shows how to send a simple message using Stream:
```dart
final message = Message(
text: '@Josh I told them I was pesca-pescatarian. Which is one who eats solely fish who eat other fish.'
);
await channel.sendMessage(message);
```
Note how server side SDKs require that you specify `user_id` to indicate who is sending the message.
You can add custom fields to both the message and the attachments.
There's a 5KB limit for the custom fields.
File uploads are uploaded to the CDN so don't count towards this 5KB limit.
A more complex example for creating a message is shown below:
```dart
final message = Message(
text: '@Josh I told them I was pesca-pescatarian. Which is one who eats solely fish who eat other fish.',
attachments: [
Attachment(
type: "image",
assetUrl: "https://bit.ly/2K74TaG",
thumbUrl: "https://bit.ly/2Uumxti",
extraData: {
"myCustomField": 123,
}
),
],
mentionedUsers: [
User(id: "josh")
],
extraData: {
"anotherCustomField": 234,
},
);
await channel.sendMessage(message);
```
By default Streams UI components support the following attachment types:
* Audio
* Video
* Image
* Text
You can specify different types as long as you implement the frontend rendering logic to handle them. Common use cases include:
* Embedding products (photos, descriptions, outbound links, etc.)
* Sharing of a users location
* The React tutorial for Stream Chat explains how to customize the Attachment component.
### Get a Message
You can get a single message by its ID using the `getMessage` call:
```dart
final message = await client.getMessage("message-id");
```
### Update a Message
You can edit a message by calling updateMessage and including a message with an ID the ID field is required when editing a message:
```dart
await client.updateMessage(Message(id: "123", text: "the edited version of my text"));
```
### Partial Update
A partial update can be used to set and unset specific fields when it is necessary to retain additional data fields on the object.
AKA a patch style update.
```dart
// partial update message text
const text = 'the text was partial updated';
const updated = await client.partiallyUpdateMessage(originalMessage.id, {
set: {
text
}
});
// unset color property
await client.partiallyUpdateMessage(originalMessage.id, {
'unset': ['color'],
});
// set nested property
await client.partiallyUpdateMessage(originalMessage.id, {
'set': {
'details.status': 'complete'
},
});
```
### Delete A Message
You can delete a message by calling deleteMessage and including a message with an ID. Messages can be soft deleted or hard deleted. Unless specified via the hard parameter, messages are soft deleted.
```dart
await client.deleteMessage("123");
```
### Soft delete
1. Can be done client-side by users
2. Message is still returned in the message list and all its data is kept as it is
3. Message type is set to "deleted"
4. Reactions and replies are kept in place
### Hard delete
1. Can be done client-side by users but be cautious this action is not recoverable
2. The message is removed from the channel and its data is wiped
3. All reactions are deleted
4. All replies and their reactions are deleted
5. By default messages are soft deleted, this is a great way to keep the channel history consistent.
@@ -1,6 +0,0 @@
---
id: paginating_channel_messages
sidebar_position: 15
title: Paginating Channel Messages
---
@@ -0,0 +1,35 @@
---
id: paginating_channels
sidebar_position: 15
title: Channel Pagination
---
The channel query endpoint allows you to paginate the list of messages, watchers, and members for one channel.
To make sure that you are able to retrieve a consistent list of messages, pagination does not work with simple offset/limit parameters but instead,
it relies on passing the ID of the messages from the previous page.
For example: say that you fetched the first 100 messages from a channel and want to lead the next 100.
To do this you need to make a channel query request and pass the ID of the oldest message if you are paginating in descending order or the ID of the newest message if paginating in ascending order.
Use the `id_lt` parameter to retrieve messages older than the provided ID and `id_gt` to retrieve messages newer than the provided ID.
The terms `id_lt` and `id_gt` stand for ID less than and ID greater than.
ID-based pagination improves performance and prevents issues related to the list of messages changing while youre paginating. If needed, you can also use the inclusive versions of those two parameters: id_lte and id_gte.
```dart
final response = await channel.query(
messagesPagination: PaginationParams(limit: 2, lessThanOrEqual: "123"),
membersPagination: PaginationParams(limit: 2, offset: 0),
watchersPagination: PaginationParams(limit: 2, offset: 0),
);
```
For members and watchers, we use limit and offset parameters.
<b>Notes:</b>
1. Soon we will create friendlier aliases for `id_lt` and `id_gt`. Our best candidates are before_id and after_id,
let us know if you have any feedback or suggestion!
2. The maximum number of messages that can be retrieved at once from the API is 300.
@@ -4,3 +4,12 @@ sidebar_position: 14
title: Slow Mode
---
Slow mode helps reduce noise on a channel by limiting users to a maximum of 1 message per cooldown interval.
The cooldown interval is configurable and can be anything between 1 and 120 seconds. For instance, if you enable slow mode and set the cooldown interval to 30 seconds a user will be able to post at most 1 message every 30 seconds.
Moderators, admins and server-side API calls are not restricted by the cooldown period and can post messages as usual.
Slow mode is disabled by default and can be enabled/disabled by admins and moderators.
<b>Note:</b> SLOW MODE is in the works for the Flutter SDK