From ec8e385927562a6ee7c812627b330d58f4c55d6f Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Thu, 17 Jun 2021 14:22:50 +0530 Subject: [PATCH] feat: Added new docs --- .../docs/Flutter/stream_chat/messages.mdx | 119 ++++++++++++++++++ .../paginating_channel_messages.mdx | 6 - .../stream_chat/paginating_channels.mdx | 35 ++++++ .../docs/Flutter/stream_chat/slow_mode.mdx | 9 ++ 4 files changed, 163 insertions(+), 6 deletions(-) delete mode 100644 docusaurus/docs/Flutter/stream_chat/paginating_channel_messages.mdx create mode 100644 docusaurus/docs/Flutter/stream_chat/paginating_channels.mdx diff --git a/docusaurus/docs/Flutter/stream_chat/messages.mdx b/docusaurus/docs/Flutter/stream_chat/messages.mdx index 90aa8a00..22224fbd 100644 --- a/docusaurus/docs/Flutter/stream_chat/messages.mdx +++ b/docusaurus/docs/Flutter/stream_chat/messages.mdx @@ -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 Stream’s 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. \ No newline at end of file diff --git a/docusaurus/docs/Flutter/stream_chat/paginating_channel_messages.mdx b/docusaurus/docs/Flutter/stream_chat/paginating_channel_messages.mdx deleted file mode 100644 index 25311929..00000000 --- a/docusaurus/docs/Flutter/stream_chat/paginating_channel_messages.mdx +++ /dev/null @@ -1,6 +0,0 @@ ---- -id: paginating_channel_messages -sidebar_position: 15 -title: Paginating Channel Messages ---- - diff --git a/docusaurus/docs/Flutter/stream_chat/paginating_channels.mdx b/docusaurus/docs/Flutter/stream_chat/paginating_channels.mdx new file mode 100644 index 00000000..bf348aaf --- /dev/null +++ b/docusaurus/docs/Flutter/stream_chat/paginating_channels.mdx @@ -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 you’re 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. + +Notes: + +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. \ No newline at end of file diff --git a/docusaurus/docs/Flutter/stream_chat/slow_mode.mdx b/docusaurus/docs/Flutter/stream_chat/slow_mode.mdx index 9cd50efd..15ca5ad2 100644 --- a/docusaurus/docs/Flutter/stream_chat/slow_mode.mdx +++ b/docusaurus/docs/Flutter/stream_chat/slow_mode.mdx @@ -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. + +Note: SLOW MODE is in the works for the Flutter SDK +