Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PBE-3749] Implement ThreadList state and UI #5441

Open
wants to merge 35 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
b83a7bc
[PBE-3749] Update ThreadsApi to match the definition.
Oct 9, 2024
9ac769b
[PBE-3749] Register "notification.thread_message_new" EventType.
Oct 10, 2024
c5187ae
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 11, 2024
e338150
[PBE-3749] Implement initial state-management for 'Query Threads'.
Oct 11, 2024
ce4ab6d
[PBE-3749] Implement ThreadList component.
Oct 14, 2024
8d30835
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 14, 2024
fdb1ac1
[PBE-3749] Implement 'Threads' tab in compose sample app.
Oct 14, 2024
13400dc
[PBE-3749] FIx pagination logic and add a threshold.
Oct 14, 2024
7a44105
[PBE-3749] Add queryThreads preconditions checks.
Oct 14, 2024
7ccf42b
[PBE-3749] Revert ktlint commit.
Oct 14, 2024
7bf4d3f
[PBE-3749] Remove redundant state update in ThreadListController.
Oct 14, 2024
c058190
[PBE-3749] Add handling for different ChatEvents.
Oct 15, 2024
8486cde
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 15, 2024
361e754
[PBE-3749] Remove redundant coroutine creation and docs.
Oct 15, 2024
2e8c1b1
[PBE-3749] Fix detekt and spotless.
Oct 15, 2024
fbc9b3d
Revert "[PBE-3749] Implement 'Threads' tab in compose sample app."
Oct 15, 2024
cd01294
Revert "Revert "[PBE-3749] Implement 'Threads' tab in compose sample …
Oct 15, 2024
b856073
Revert "[PBE-3749] Implement 'Threads' tab in compose sample app."
Oct 15, 2024
76e5f54
[PBE-3749] Hide threads-related public apis.
Oct 15, 2024
6fc64d8
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 17, 2024
b88eca7
[PBE-3749] Fix PR remarks related DTOs.
Oct 17, 2024
b91a89c
[PBE-3749] Fix wrong composable preview.
Oct 17, 2024
3560186
[PBE-3749] Use inheritScope to create ThreadListController coroutine …
Oct 17, 2024
de906ea
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 17, 2024
71ed93c
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 21, 2024
60204d5
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 22, 2024
27c308e
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 22, 2024
ecbb061
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 23, 2024
266550d
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 23, 2024
2ce1a14
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 24, 2024
f653f97
Merge branch 'refs/heads/develop' into feature/threads_v2
Oct 25, 2024
10278c6
[PBE-3749] Suppress LongMethod warning.
Oct 25, 2024
5c7c963
Merge branch 'refs/heads/develop' into feature/threads_v2
Nov 5, 2024
e153761
Merge branch 'refs/heads/develop' into feature/threads_v2
Nov 5, 2024
aec80bb
Merge branch 'refs/heads/develop' into feature/threads_v2
Nov 6, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 63 additions & 8 deletions stream-chat-android-client/api/stream-chat-android-client.api
Original file line number Diff line number Diff line change
Expand Up @@ -477,24 +477,33 @@ public final class io/getstream/chat/android/client/api/models/QueryThreadsReque
public fun <init> (Z)V
public fun <init> (ZI)V
public fun <init> (ZII)V
public fun <init> (ZIII)V
public fun <init> (ZIIII)V
public fun <init> (ZIIIILjava/lang/String;)V
public synthetic fun <init> (ZIIIILjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (ZIILjava/lang/String;)V
public fun <init> (ZIILjava/lang/String;I)V
public fun <init> (ZIILjava/lang/String;ILjava/lang/String;)V
public fun <init> (ZIILjava/lang/String;ILjava/lang/String;I)V
public fun <init> (ZIILjava/lang/String;ILjava/lang/String;ILio/getstream/chat/android/models/User;)V
public fun <init> (ZIILjava/lang/String;ILjava/lang/String;ILio/getstream/chat/android/models/User;Ljava/lang/String;)V
public synthetic fun <init> (ZIILjava/lang/String;ILjava/lang/String;ILio/getstream/chat/android/models/User;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Z
public final fun component2 ()I
public final fun component3 ()I
public final fun component4 ()I
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()I
public final fun component6 ()Ljava/lang/String;
public final fun copy (ZIIIILjava/lang/String;)Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;ZIIIILjava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;
public final fun component7 ()I
public final fun component8 ()Lio/getstream/chat/android/models/User;
public final fun component9 ()Ljava/lang/String;
public final fun copy (ZIILjava/lang/String;ILjava/lang/String;ILio/getstream/chat/android/models/User;Ljava/lang/String;)Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;ZIILjava/lang/String;ILjava/lang/String;ILio/getstream/chat/android/models/User;Ljava/lang/String;ILjava/lang/Object;)Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;
public fun equals (Ljava/lang/Object;)Z
public final fun getLimit ()I
public final fun getMemberLimit ()I
public final fun getNext ()Ljava/lang/String;
public final fun getParticipantLimit ()I
public final fun getPrev ()Ljava/lang/String;
public final fun getReplyLimit ()I
public final fun getUser ()Lio/getstream/chat/android/models/User;
public final fun getUserId ()Ljava/lang/String;
public final fun getWatch ()Z
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
Expand Down Expand Up @@ -1303,6 +1312,11 @@ public abstract interface class io/getstream/chat/android/client/events/HasUnrea
public abstract fun getUnreadChannels ()I
}

public abstract interface class io/getstream/chat/android/client/events/HasUnreadThreadCounts {
public abstract fun getUnreadThreadMessages ()I
public abstract fun getUnreadThreads ()I
}

public abstract interface class io/getstream/chat/android/client/events/HasWatcherCount {
public abstract fun getWatcherCount ()I
}
Expand Down Expand Up @@ -1848,6 +1862,35 @@ public final class io/getstream/chat/android/client/events/NotificationRemovedFr
public fun toString ()Ljava/lang/String;
}

public final class io/getstream/chat/android/client/events/NotificationThreadMessageNewEvent : io/getstream/chat/android/client/events/CidEvent, io/getstream/chat/android/client/events/HasChannel, io/getstream/chat/android/client/events/HasMessage, io/getstream/chat/android/client/events/HasUnreadThreadCounts {
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Channel;Ljava/util/Date;Ljava/lang/String;II)V
public final fun component1 ()Ljava/lang/String;
public final fun component10 ()I
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Ljava/lang/String;
public final fun component5 ()Lio/getstream/chat/android/models/Message;
public final fun component6 ()Lio/getstream/chat/android/models/Channel;
public final fun component7 ()Ljava/util/Date;
public final fun component8 ()Ljava/lang/String;
public final fun component9 ()I
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Channel;Ljava/util/Date;Ljava/lang/String;II)Lio/getstream/chat/android/client/events/NotificationThreadMessageNewEvent;
public static synthetic fun copy$default (Lio/getstream/chat/android/client/events/NotificationThreadMessageNewEvent;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Message;Lio/getstream/chat/android/models/Channel;Ljava/util/Date;Ljava/lang/String;IIILjava/lang/Object;)Lio/getstream/chat/android/client/events/NotificationThreadMessageNewEvent;
public fun equals (Ljava/lang/Object;)Z
public fun getChannel ()Lio/getstream/chat/android/models/Channel;
public fun getChannelId ()Ljava/lang/String;
public fun getChannelType ()Ljava/lang/String;
public fun getCid ()Ljava/lang/String;
public fun getCreatedAt ()Ljava/util/Date;
public fun getMessage ()Lio/getstream/chat/android/models/Message;
public fun getRawCreatedAt ()Ljava/lang/String;
public fun getType ()Ljava/lang/String;
public fun getUnreadThreadMessages ()I
public fun getUnreadThreads ()I
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class io/getstream/chat/android/client/events/PollClosedEvent : io/getstream/chat/android/client/events/CidEvent, io/getstream/chat/android/client/events/HasPoll {
public fun <init> (Ljava/lang/String;Ljava/util/Date;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Poll;)V
public final fun component1 ()Ljava/lang/String;
Expand Down Expand Up @@ -2513,7 +2556,7 @@ public abstract interface class io/getstream/chat/android/client/persistance/rep
public abstract fun createRepositoryFactory (Lio/getstream/chat/android/models/User;)Lio/getstream/chat/android/client/persistance/repository/factory/RepositoryFactory;
}

public abstract interface class io/getstream/chat/android/client/plugin/Plugin : io/getstream/chat/android/client/plugin/DependencyResolver, io/getstream/chat/android/client/plugin/listeners/ChannelMarkReadListener, io/getstream/chat/android/client/plugin/listeners/CreateChannelListener, io/getstream/chat/android/client/plugin/listeners/DeleteChannelListener, io/getstream/chat/android/client/plugin/listeners/DeleteMessageListener, io/getstream/chat/android/client/plugin/listeners/DeleteReactionListener, io/getstream/chat/android/client/plugin/listeners/EditMessageListener, io/getstream/chat/android/client/plugin/listeners/FetchCurrentUserListener, io/getstream/chat/android/client/plugin/listeners/GetMessageListener, io/getstream/chat/android/client/plugin/listeners/HideChannelListener, io/getstream/chat/android/client/plugin/listeners/MarkAllReadListener, io/getstream/chat/android/client/plugin/listeners/QueryChannelListener, io/getstream/chat/android/client/plugin/listeners/QueryChannelsListener, io/getstream/chat/android/client/plugin/listeners/QueryMembersListener, io/getstream/chat/android/client/plugin/listeners/SendAttachmentListener, io/getstream/chat/android/client/plugin/listeners/SendGiphyListener, io/getstream/chat/android/client/plugin/listeners/SendMessageListener, io/getstream/chat/android/client/plugin/listeners/SendReactionListener, io/getstream/chat/android/client/plugin/listeners/ShuffleGiphyListener, io/getstream/chat/android/client/plugin/listeners/ThreadQueryListener, io/getstream/chat/android/client/plugin/listeners/TypingEventListener {
public abstract interface class io/getstream/chat/android/client/plugin/Plugin : io/getstream/chat/android/client/plugin/DependencyResolver, io/getstream/chat/android/client/plugin/listeners/ChannelMarkReadListener, io/getstream/chat/android/client/plugin/listeners/CreateChannelListener, io/getstream/chat/android/client/plugin/listeners/DeleteChannelListener, io/getstream/chat/android/client/plugin/listeners/DeleteMessageListener, io/getstream/chat/android/client/plugin/listeners/DeleteReactionListener, io/getstream/chat/android/client/plugin/listeners/EditMessageListener, io/getstream/chat/android/client/plugin/listeners/FetchCurrentUserListener, io/getstream/chat/android/client/plugin/listeners/GetMessageListener, io/getstream/chat/android/client/plugin/listeners/HideChannelListener, io/getstream/chat/android/client/plugin/listeners/MarkAllReadListener, io/getstream/chat/android/client/plugin/listeners/QueryChannelListener, io/getstream/chat/android/client/plugin/listeners/QueryChannelsListener, io/getstream/chat/android/client/plugin/listeners/QueryMembersListener, io/getstream/chat/android/client/plugin/listeners/QueryThreadsListener, io/getstream/chat/android/client/plugin/listeners/SendAttachmentListener, io/getstream/chat/android/client/plugin/listeners/SendGiphyListener, io/getstream/chat/android/client/plugin/listeners/SendMessageListener, io/getstream/chat/android/client/plugin/listeners/SendReactionListener, io/getstream/chat/android/client/plugin/listeners/ShuffleGiphyListener, io/getstream/chat/android/client/plugin/listeners/ThreadQueryListener, io/getstream/chat/android/client/plugin/listeners/TypingEventListener {
public abstract fun getErrorHandler ()Lio/getstream/chat/android/client/errorhandler/ErrorHandler;
public abstract fun onAttachmentSendRequest (Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Message;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onChannelMarkReadPrecondition (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -2552,6 +2595,9 @@ public abstract interface class io/getstream/chat/android/client/plugin/Plugin :
public abstract fun onQueryChannelsRequest (Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryChannelsResult (Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryMembersResult (Lio/getstream/result/Result;Ljava/lang/String;Ljava/lang/String;IILio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryThreadsPrecondition (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryThreadsRequest (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryThreadsResult (Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSendReactionPrecondition (Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/Reaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSendReactionRequest (Ljava/lang/String;Lio/getstream/chat/android/models/Reaction;ZLio/getstream/chat/android/models/User;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onSendReactionResult (Ljava/lang/String;Lio/getstream/chat/android/models/Reaction;ZLio/getstream/chat/android/models/User;Lio/getstream/result/Result;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -2603,6 +2649,9 @@ public final class io/getstream/chat/android/client/plugin/Plugin$DefaultImpls {
public static fun onQueryChannelsRequest (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onQueryChannelsResult (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryChannelsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onQueryMembersResult (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/result/Result;Ljava/lang/String;Ljava/lang/String;IILio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onQueryThreadsPrecondition (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onQueryThreadsRequest (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onQueryThreadsResult (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onSendReactionPrecondition (Lio/getstream/chat/android/client/plugin/Plugin;Lio/getstream/chat/android/models/User;Lio/getstream/chat/android/models/Reaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onSendReactionRequest (Lio/getstream/chat/android/client/plugin/Plugin;Ljava/lang/String;Lio/getstream/chat/android/models/Reaction;ZLio/getstream/chat/android/models/User;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static fun onSendReactionResult (Lio/getstream/chat/android/client/plugin/Plugin;Ljava/lang/String;Lio/getstream/chat/android/models/Reaction;ZLio/getstream/chat/android/models/User;Lio/getstream/result/Result;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
Expand Down Expand Up @@ -2683,6 +2732,12 @@ public abstract interface class io/getstream/chat/android/client/plugin/listener
public abstract fun onQueryMembersResult (Lio/getstream/result/Result;Ljava/lang/String;Ljava/lang/String;IILio/getstream/chat/android/models/FilterObject;Lio/getstream/chat/android/models/querysort/QuerySorter;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public abstract interface class io/getstream/chat/android/client/plugin/listeners/QueryThreadsListener {
public abstract fun onQueryThreadsPrecondition (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryThreadsRequest (Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun onQueryThreadsResult (Lio/getstream/result/Result;Lio/getstream/chat/android/client/api/models/QueryThreadsRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}

public abstract interface class io/getstream/chat/android/client/plugin/listeners/SendAttachmentListener {
public abstract fun onAttachmentSendRequest (Ljava/lang/String;Ljava/lang/String;Lio/getstream/chat/android/models/Message;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ import io.getstream.chat.android.models.Option
import io.getstream.chat.android.models.Poll
import io.getstream.chat.android.models.PollConfig
import io.getstream.chat.android.models.PushMessage
import io.getstream.chat.android.models.QueryThreadsResult
import io.getstream.chat.android.models.Reaction
import io.getstream.chat.android.models.SearchMessagesResult
import io.getstream.chat.android.models.Thread
Expand Down Expand Up @@ -3257,7 +3258,31 @@ internal constructor(
public fun queryThreads(
query: QueryThreadsRequest,
): Call<List<Thread>> {
return queryThreadsResult(query).map { it.threads }
}

/**
* Query threads matching [query] request.
*
* @param query [QueryThreadsRequest] with query parameters to get matching users.
*/
@CheckResult
@InternalStreamChatApi
public fun queryThreadsResult(query: QueryThreadsRequest): Call<QueryThreadsResult> {
return api.queryThreads(query)
.doOnStart(userScope) {
plugins.forEach { plugin ->
plugin.onQueryThreadsRequest(query)
}
}
.doOnResult(userScope) { result ->
plugins.forEach { plugin ->
plugin.onQueryThreadsResult(result, query)
}
}
.precondition(plugins) {
onQueryThreadsPrecondition(query)
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import io.getstream.chat.android.models.Mute
import io.getstream.chat.android.models.Option
import io.getstream.chat.android.models.Poll
import io.getstream.chat.android.models.PollConfig
import io.getstream.chat.android.models.QueryThreadsResult
import io.getstream.chat.android.models.Reaction
import io.getstream.chat.android.models.SearchMessagesResult
import io.getstream.chat.android.models.Thread
Expand Down Expand Up @@ -474,7 +475,7 @@ internal interface ChatApi {
* @param query [QueryThreadsRequest] with query parameters to get matching users.
*/
@CheckResult
fun queryThreads(query: QueryThreadsRequest): Call<List<Thread>>
fun queryThreads(query: QueryThreadsRequest): Call<QueryThreadsResult>

/**
* Get a thread by [messageId].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,30 @@

package io.getstream.chat.android.client.api.models

import io.getstream.chat.android.models.User

/**
* Query threads request.
*
* @property watch If true, all the channels corresponding to threads returned in response will be watched.
* Defaults to true.
* @property replyLimit The number of latest replies to fetch per thread. Defaults to 2.
* @property participantLimit The number of thread participants to request per thread. Defaults to 100.
* @property memberLimit The number of members to request per thread. Defaults to 100.
* @property limit The number of threads to return. Defaults to 10.
* @property limit The number of threads to return. Defaults to 10.
* @property memberLimit The number of members to request per thread. Defaults to 100.
* @property next The next pagination token. This token can be used to fetch the next page of threads.
* @property participantLimit The number of thread participants to request per thread. Defaults to 100.
* @property prev The previous pagination token. This token can be used to fetch the previous page of threads.
* @property replyLimit The number of latest replies to fetch per thread. Defaults to 2.
* @property user The user for which the threads are queried. Defaults to null.
* @property userId The user ID for which the threads are queried. Defaults to null.
*/
public data class QueryThreadsRequest @JvmOverloads constructor(
public val watch: Boolean = true,
public val replyLimit: Int = 2,
public val participantLimit: Int = 100,
public val memberLimit: Int = 100,
public val limit: Int = 10,
public val memberLimit: Int = 100,
public val next: String? = null,
public val participantLimit: Int = 100,
public val prev: String? = null,
public val replyLimit: Int = 2,
public val user: User? = null,
public val userId: String? = null,
)
Loading
Loading