From fb7239b1f508572eb00a0e9cf85c796acbceb5a2 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Wed, 12 Jun 2024 15:34:56 +0300 Subject: [PATCH] Add invite api and title --- .../InviteToFollowMeDialogFragment.kt | 16 +++++++++-- .../InviteToFollowMeViewModel.kt | 28 +++++++++++++++++-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeDialogFragment.kt b/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeDialogFragment.kt index 0fa90df4f..e35f2c3b8 100644 --- a/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeDialogFragment.kt +++ b/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeDialogFragment.kt @@ -6,13 +6,17 @@ import android.view.View import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import dagger.hilt.android.AndroidEntryPoint import org.futo.circles.core.R import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment import org.futo.circles.core.base.fragment.HasLoadingState import org.futo.circles.core.databinding.DialogFragmentInviteToFollowMeBinding import org.futo.circles.core.extensions.navigateSafe +import org.futo.circles.core.extensions.observeResponse +import org.futo.circles.core.extensions.onBackPressed import org.futo.circles.core.extensions.setIsVisible +import org.futo.circles.core.extensions.showSuccess import org.futo.circles.core.feature.room.select.SelectRoomsFragment import org.futo.circles.core.feature.room.select.interfaces.RoomsListener import org.futo.circles.core.feature.room.select.interfaces.SelectRoomsListener @@ -26,6 +30,7 @@ class InviteToFollowMeDialogFragment : ), HasLoadingState, SelectRoomsListener, RoomsListener { override val fragment: Fragment = this + private val args: InviteToFollowMeDialogFragmentArgs by navArgs() private val viewModel by viewModels<InviteToFollowMeViewModel>() private val selectRoomsFragment by lazy { SelectRoomsFragment.create(CircleRoomTypeArg.Circle) } @@ -45,8 +50,10 @@ class InviteToFollowMeDialogFragment : private fun setupViews() { with(binding) { + tvTitle.text = + getString(R.string.select_circles_to_which_you_want_to_invite_format, args.userId) btnInvite.setOnClickListener { - viewModel.invite(selectRoomsFragment.getSelectedRooms()) + viewModel.invite(args.userId, selectRoomsFragment.getSelectedRooms()) startLoading(btnInvite) } fbAddRoom.setOnClickListener { navigateToCreateCircle() } @@ -55,7 +62,12 @@ class InviteToFollowMeDialogFragment : } private fun setupObservers() { - + viewModel.inviteResultLiveData.observeResponse(this, + success = { + showSuccess(getString(R.string.invitation_sent)) + onBackPressed() + } + ) } private fun navigateToCreateCircle() { diff --git a/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeViewModel.kt b/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeViewModel.kt index 6daeedfb1..068076b6c 100644 --- a/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeViewModel.kt +++ b/core/src/main/java/org/futo/circles/core/feature/invite_to_follow/InviteToFollowMeViewModel.kt @@ -2,15 +2,37 @@ package org.futo.circles.core.feature.invite_to_follow import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel +import org.futo.circles.core.base.SingleEventLiveData +import org.futo.circles.core.extensions.Response +import org.futo.circles.core.extensions.launchBg +import org.futo.circles.core.feature.room.invite.ManageInviteRequestsDataSource import org.futo.circles.core.model.SelectableRoomListItem +import org.futo.circles.core.utils.getTimelineRoomFor import javax.inject.Inject @HiltViewModel class InviteToFollowMeViewModel @Inject constructor( - + private val manageInviteRequestsDataSource: ManageInviteRequestsDataSource ) : ViewModel() { - fun invite(selectedRooms: List<SelectableRoomListItem>) { - } + val inviteResultLiveData = SingleEventLiveData<Response<Any>>() + fun invite(userId: String, selectedRooms: List<SelectableRoomListItem>) { + val timelinesIds = selectedRooms.mapNotNull { getTimelineRoomFor(it.id)?.roomId } + launchBg { + timelinesIds.forEach { timelineId -> + try { + manageInviteRequestsDataSource.inviteUser(timelineId, userId) + } catch (t: Throwable) { + inviteResultLiveData.postValue( + Response.Error( + t.message ?: "Failed to invite $userId to $timelineId" + ) + ) + return@launchBg + } + inviteResultLiveData.postValue(Response.Success(Unit)) + } + } + } } \ No newline at end of file -- GitLab