Share betslips with the Central Hub community and load shared bets from the community feed.
Use CentralHubBetShareProvider when you want to publish a betslip with an optional comment and optional stake visibility.
class CentralHubViewModel : ViewModel(), KoinComponent {
private val betShareProvider: CentralHubBetShareProvider = get()
suspend fun shareBet(
betPayload: BetPayload,
comment: String?,
showStake: Boolean,
) {
betShareProvider.createBetShare(
betPayload = betPayload,
comment = comment,
showStake = showStake,
onSuccess = { /* Handle success */ },
onFailure = { error -> /* Handle error */ },
)
}
}Use CentralHubBetsProvider to load and paginate shared betslips.
The provider supports:
BetShareFilterType.ALL — show every shared bet.BetShareFilterType.FOLLOWERS_BETS — show only bets shared by followed users.BetShareFilterType.MY_SHARED_BETS — show only the signed-in user's shared bets.BetShareFilterType.MY_CONVERSATIONS — show bets where the user has joined the conversation.BetShareFilterType.WINNING_BETS — show only winning bet shares.BetShareSortType.CREATED — sort by creation time.BetShareSortType.COMMENT_COUNT — sort by most commented.BetShareSortType.COPY_COUNT — sort by most copied.class BetsViewModel : ViewModel(), KoinComponent {
private val betsProvider: CentralHubBetsProvider = get()
val betsState = betsProvider.state
fun loadBets(
filterType: BetShareFilterType,
sortType: BetShareSortType,
) {
betsProvider.loadBetShares(filterType, sortType)
}
fun loadMore(
filterType: BetShareFilterType,
sortType: BetShareSortType,
) {
betsProvider.loadMoreBetShares(filterType, sortType)
}
}@Composable
fun BetsFeed(viewModel: BetsViewModel = viewModel()) {
val state by viewModel.betsState.collectAsStateWithLifecycle()
LazyColumn {
items(state.sharedBets) { betShare ->
BetShareCard(betShare)
}
if (!state.allDataLoaded) {
item {
LoadMoreButton {
viewModel.loadMore(
BetShareFilterType.ALL,
BetShareSortType.CREATED,
)
}
}
}
}
}data class BetShare(
val id: String,
val messageId: String?,
val channelId: String?,
val content: String,
val numOfUnreadComments: Int,
val numOfAllComments: Int,
val userFollowersCount: Int?,
val betPayload: BetPayload,
val isMy: Boolean,
val betShareCopyCount: Int,
val user: User,
val createdAt: Long,
val showStake: Boolean,
val comments: List<MessageReply>,
val reactions: List<Reaction>,
)data class CentralHubBetsState(
val sharedBets: List<BetShare>,
val loadingState: LoadingStatus,
val previousPageLoadingStatus: LoadingStatus,
val allDataLoaded: Boolean,
)