From 4f48f3ecaf622ac87e58710fa5cdc7f6fa02717c Mon Sep 17 00:00:00 2001 From: ralina Date: Tue, 2 Jun 2026 20:13:20 +0300 Subject: [PATCH] fixed all --- .../designsystem/components/UserView.kt | 2 + .../mobile/feature/events/CreateEventView.kt | 2 +- .../events/PendingEventDetailContent.kt | 14 ++++--- .../feature/friends/FriendActionCallbacks.kt | 2 +- .../feature/friends/FriendProfileScreen.kt | 6 +-- .../feature/friends/FriendsComponents.kt | 24 +++++++----- .../mobile/feature/friends/FriendsScreen.kt | 6 +-- .../friends/mobile/feature/main/MainView.kt | 10 +++-- .../mobile/feature/profile/ProfileScreen.kt | 8 ++-- .../feature/wishplaces/WishPlacesSection.kt | 2 - ...nfiguration.kt => AndroidConfiguration.kt} | 0 .../presentation/ArchiveEventsViewModel.kt | 4 +- .../auth/data/remote/AuthenticatedClient.kt | 2 +- .../data/repository/AuthRepositoryImpl.kt | 2 +- .../mobile/feature/auth/di/AuthModule.kt | 2 +- .../auth/presentation/login/LoginViewModel.kt | 6 +-- .../register/RegisterViewModel.kt | 6 +-- .../calendar/data/remote/dto/BusyDayDto.kt | 2 +- .../usecase/GetAcceptedEventsUseCaseImpl.kt | 2 +- .../usecase/GetArchivedEventsUseCaseImpl.kt | 2 +- .../mobile/feature/events/di/EventsModule.kt | 2 +- .../usecase/GetArchivedEventsUseCase.kt | 2 +- .../createevent/CreateEventViewModel.kt | 16 ++++---- .../eventdetail/EventDetailViewModel.kt | 2 +- .../pendingevents/PendingEventViewModel.kt | 2 +- .../feature/friends/di/FriendsModule.kt | 22 ++++++++++- .../presentation/friends/FriendsViewModel.kt | 39 ++++++++++++++----- .../friendsProfile/FriendProfileViewModel.kt | 2 +- .../{MainEvent.kt => MainViewAction.kt} | 0 .../main/presentation/MainViewModel.kt | 12 +++--- .../data/repository/ProfileRepositoryImpl.kt | 4 +- .../presentation/edit/EditProfileViewModel.kt | 2 +- .../presentation/profile/ProfileViewModel.kt | 2 +- .../data/remote/dto/WishPlaceDto.kt | 2 +- .../presentation/WishPlacesEvent.kt | 2 +- .../{Configuration.kt => IOSConfiguration.kt} | 0 .../friends/mobile/di/IOSKoinInitializer.kt | 10 +++-- 37 files changed, 140 insertions(+), 85 deletions(-) rename shared/src/androidMain/kotlin/friends/mobile/core/config/{Configuration.kt => AndroidConfiguration.kt} (100%) rename shared/src/commonMain/kotlin/friends/mobile/feature/main/presentation/{MainEvent.kt => MainViewAction.kt} (100%) rename shared/src/iosMain/kotlin/friends/mobile/core/config/{Configuration.kt => IOSConfiguration.kt} (100%) diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/designsystem/components/UserView.kt b/composeApp/src/androidMain/kotlin/friends/mobile/designsystem/components/UserView.kt index 42deb19..51a9bce 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/designsystem/components/UserView.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/designsystem/components/UserView.kt @@ -1,3 +1,5 @@ +@file:Suppress("MatchingDeclarationName") + package friends.mobile.designsystem.components import androidx.compose.foundation.background diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/CreateEventView.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/CreateEventView.kt index 9b00dc9..f475498 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/CreateEventView.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/CreateEventView.kt @@ -26,6 +26,7 @@ import androidx.compose.material.icons.filled.Group import androidx.compose.material.icons.filled.LocationOn import androidx.compose.material.icons.filled.PersonOff import androidx.compose.material.icons.filled.RadioButtonUnchecked +import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -34,7 +35,6 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Scaffold import androidx.compose.material3.Text -import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/PendingEventDetailContent.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/PendingEventDetailContent.kt index 573e449..c3ca47a 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/PendingEventDetailContent.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/events/PendingEventDetailContent.kt @@ -28,8 +28,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.unit.dp import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import friends.mobile.R import friends.mobile.designsystem.components.ButtonFactory import friends.mobile.designsystem.components.LoadingView @@ -188,7 +188,11 @@ private fun EventDetailsSection(event: Event) { } if (!event.location.isNullOrEmpty()) { - DetailRow(icon = Icons.Default.LocationOn, label = stringResource(R.string.label_location), value = event.location!!) + DetailRow( + icon = Icons.Default.LocationOn, + label = stringResource(R.string.label_location), + value = event.location!!, + ) } } } @@ -287,9 +291,9 @@ private fun ParticipantCard(participant: EventParticipant) { ) Text( text = when (participant.status) { - ParticipationStatus.INVITED -> stringResource(R.string.pending_status) - else -> participant.status.name.lowercase().replaceFirstChar { it.uppercase() } - }, + ParticipationStatus.INVITED -> stringResource(R.string.pending_status) + else -> participant.status.name.lowercase().replaceFirstChar { it.uppercase() } + }, style = DesignTheme.Typography.bodySmallest, color = statusColor, ) diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendActionCallbacks.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendActionCallbacks.kt index 0456ca3..2568fd6 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendActionCallbacks.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendActionCallbacks.kt @@ -5,4 +5,4 @@ internal data class FriendActionCallbacks( val onAcceptRequest: (String) -> Unit, val onRejectRequest: (String) -> Unit, val onRemoveFriend: (String) -> Unit, -) \ No newline at end of file +) diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendProfileScreen.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendProfileScreen.kt index b0f5968..118cca6 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendProfileScreen.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendProfileScreen.kt @@ -29,26 +29,26 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.compose.ui.res.stringResource import friends.mobile.R -import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.designsystem.components.ButtonFactory import friends.mobile.designsystem.components.Dimension import friends.mobile.designsystem.components.ErrorBanner import friends.mobile.designsystem.components.LoadingView import friends.mobile.designsystem.components.UserView +import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.feature.friends.domain.model.User import friends.mobile.feature.friends.presentation.friendsProfile.FriendProfileAction import friends.mobile.feature.friends.presentation.friendsProfile.FriendProfileEvent import friends.mobile.feature.friends.presentation.friendsProfile.FriendProfileViewModel import friends.mobile.feature.friends.presentation.friendsProfile.FriendProfileViewState import friends.mobile.feature.friends.presentation.friendsProfile.FriendshipStatus -import friends.mobile.feature.wishplaces.domain.model.WishPlace import friends.mobile.feature.wishplaces.WishPlaceDetailBottomSheet import friends.mobile.feature.wishplaces.WishPlacesMode import friends.mobile.feature.wishplaces.WishPlacesSection +import friends.mobile.feature.wishplaces.domain.model.WishPlace import kotlinx.coroutines.flow.collectLatest import org.koin.androidx.compose.koinViewModel diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsComponents.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsComponents.kt index 30b185d..c2ca4d5 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsComponents.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsComponents.kt @@ -20,6 +20,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Group import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -31,14 +32,13 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import androidx.compose.material3.MaterialTheme -import androidx.compose.ui.res.stringResource import friends.mobile.R -import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.designsystem.components.IndicatorFactory +import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.feature.friends.domain.model.User import friends.mobile.feature.friends.presentation.friends.RequestTab @@ -233,8 +233,7 @@ fun TabSelector( .weight(1f) .clip(RoundedCornerShape(DesignTheme.CornerRadius.capsule)) .background( - if (isSelected) MaterialTheme.colorScheme.surface - else Color.Transparent + if (isSelected) { MaterialTheme.colorScheme.surface } else { Color.Transparent } ) .clickable { localSelected = tab @@ -249,14 +248,19 @@ fun TabSelector( RequestTab.INCOMING -> stringResource(R.string.friends_tab_incoming) RequestTab.OUTGOING -> stringResource(R.string.friends_tab_outgoing) }, - style = if (isSelected) DesignTheme.Typography.bodySmall.copy(fontWeight = FontWeight.SemiBold) - else DesignTheme.Typography.bodySmall, - color = if (isSelected) MaterialTheme.colorScheme.onSurface - else MaterialTheme.colorScheme.onSurfaceVariant, + style = if (isSelected) { + DesignTheme.Typography.bodySmall.copy(fontWeight = FontWeight.SemiBold) + } else { + DesignTheme.Typography.bodySmall + }, + color = if (isSelected) { + MaterialTheme.colorScheme.onSurface + } else { + MaterialTheme.colorScheme.onSurfaceVariant + }, ) } } } } } - diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsScreen.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsScreen.kt index d90e21b..10f6667 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsScreen.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/friends/FriendsScreen.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState @@ -22,14 +23,13 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.compose.material3.MaterialTheme import androidx.compose.ui.res.stringResource +import androidx.lifecycle.compose.collectAsStateWithLifecycle import friends.mobile.R -import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.designsystem.components.ErrorBanner import friends.mobile.designsystem.components.LoadingView import friends.mobile.designsystem.components.SearchBar +import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.feature.friends.domain.model.User import friends.mobile.feature.friends.presentation.friends.FriendsAction import friends.mobile.feature.friends.presentation.friends.FriendsEvent diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/main/MainView.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/main/MainView.kt index 60bc49e..e850a13 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/main/MainView.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/main/MainView.kt @@ -41,6 +41,7 @@ import androidx.compose.material3.TimePicker import androidx.compose.material3.TimePickerDefaults import androidx.compose.material3.TimePickerLayoutType import androidx.compose.material3.TimePickerState +import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.material3.rememberDatePickerState import androidx.compose.material3.rememberTimePickerState import androidx.compose.runtime.Composable @@ -60,18 +61,17 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel -import androidx.compose.material3.pulltorefresh.PullToRefreshBox import friends.mobile.R import friends.mobile.designsystem.components.ErrorBanner import friends.mobile.designsystem.theme.DesignTheme import friends.mobile.feature.events.domain.model.Event -import friends.mobile.feature.main.presentation.MainViewAction as MainEventAction import friends.mobile.feature.main.presentation.MainViewModel import friends.mobile.feature.main.presentation.MainViewState import kotlinx.coroutines.launch import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale +import friends.mobile.feature.main.presentation.MainViewAction as MainEventAction @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -441,7 +441,11 @@ private fun EventCard( ) { val tintColor = if (isPending) Color(0xFFFF9800) else MaterialTheme.colorScheme.tertiary val badgeIcon = if (isPending) Icons.Default.Schedule else Icons.Default.CheckCircle - val badgeText = if (isPending) stringResource(R.string.main_section_pending) else stringResource(R.string.main_section_active) + val badgeText = if (isPending) { + stringResource(R.string.main_section_pending) + } else { + stringResource(R.string.main_section_active) + } Column( modifier = Modifier diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/profile/ProfileScreen.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/profile/ProfileScreen.kt index 39a8714..59b815a 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/profile/ProfileScreen.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/profile/ProfileScreen.kt @@ -7,21 +7,20 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.pulltorefresh.PullToRefreshBox -import friends.mobile.feature.calendar.BusyDaysView -import androidx.compose.ui.res.stringResource import friends.mobile.R import friends.mobile.designsystem.components.ButtonFactory import friends.mobile.designsystem.components.Dimension @@ -29,6 +28,7 @@ import friends.mobile.designsystem.components.ErrorBanner import friends.mobile.designsystem.components.LoadingView import friends.mobile.designsystem.components.UserView import friends.mobile.designsystem.theme.DesignTheme +import friends.mobile.feature.calendar.BusyDaysView import friends.mobile.feature.profile.domain.model.Profile import friends.mobile.feature.profile.presentation.profile.ProfileAction import friends.mobile.feature.profile.presentation.profile.ProfileEvent diff --git a/composeApp/src/androidMain/kotlin/friends/mobile/feature/wishplaces/WishPlacesSection.kt b/composeApp/src/androidMain/kotlin/friends/mobile/feature/wishplaces/WishPlacesSection.kt index a7c483c..d83f205 100644 --- a/composeApp/src/androidMain/kotlin/friends/mobile/feature/wishplaces/WishPlacesSection.kt +++ b/composeApp/src/androidMain/kotlin/friends/mobile/feature/wishplaces/WishPlacesSection.kt @@ -81,7 +81,6 @@ fun WishPlacesSection( WishPlacesContentBody( places = current.places, mode = mode, - userId = userId, onPlaceClick = { selectedPlace = it }, onDeletePlace = { viewModel.obtainEvent(WishPlacesEvent.ArchivePlace(userId = userId, id = it)) }, ) @@ -156,7 +155,6 @@ private fun WishPlacesLoadingContent() { private fun WishPlacesContentBody( places: List, mode: WishPlacesMode, - userId: String, onPlaceClick: (WishPlace) -> Unit, onDeletePlace: (String) -> Unit, ) { diff --git a/shared/src/androidMain/kotlin/friends/mobile/core/config/Configuration.kt b/shared/src/androidMain/kotlin/friends/mobile/core/config/AndroidConfiguration.kt similarity index 100% rename from shared/src/androidMain/kotlin/friends/mobile/core/config/Configuration.kt rename to shared/src/androidMain/kotlin/friends/mobile/core/config/AndroidConfiguration.kt diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/archive/presentation/ArchiveEventsViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/archive/presentation/ArchiveEventsViewModel.kt index 0b7a665..9f0d56c 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/archive/presentation/ArchiveEventsViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/archive/presentation/ArchiveEventsViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.archive.presentation +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.events.domain.usecase.GetArchivedEventsUseCase import kotlinx.coroutines.launch @@ -58,4 +58,4 @@ class ArchiveEventsViewModel : BaseViewModel( private fun onLoginClick() { val currentState = viewState as? LoginViewState.Content ?: return - + if (currentState.username.isBlank()) { viewAction = LoginAction.ShowMessage("Username cannot be empty") return @@ -39,7 +39,7 @@ class LoginViewModel : BaseViewModel( viewModelScope.launch { val username = currentState.username val password = currentState.password - + viewState = LoginViewState.Loading when (val result = loginUseCase(username, password)) { diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/auth/presentation/register/RegisterViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/auth/presentation/register/RegisterViewModel.kt index c10947f..b237089 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/auth/presentation/register/RegisterViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/auth/presentation/register/RegisterViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.auth.presentation.register +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.auth.domain.usecase.RegisterUseCase import kotlinx.coroutines.launch @@ -27,7 +27,7 @@ class RegisterViewModel : BaseViewModel> { return repository.getAcceptedEvents() } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/data/usecase/GetArchivedEventsUseCaseImpl.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/data/usecase/GetArchivedEventsUseCaseImpl.kt index 29f801c..892a91d 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/data/usecase/GetArchivedEventsUseCaseImpl.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/data/usecase/GetArchivedEventsUseCaseImpl.kt @@ -12,4 +12,4 @@ internal class GetArchivedEventsUseCaseImpl( override suspend fun invoke(): ResultWrapper> { return repository.getArchivedEvents() } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/di/EventsModule.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/di/EventsModule.kt index 7717eeb..cc27609 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/di/EventsModule.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/di/EventsModule.kt @@ -82,7 +82,7 @@ val eventsModule = module { GetArchivedEventsUseCaseImpl(repository = get()) } - factory< GetAcceptedEventsUseCase> { + factory { GetAcceptedEventsUseCaseImpl(repository = get()) } diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/domain/usecase/GetArchivedEventsUseCase.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/domain/usecase/GetArchivedEventsUseCase.kt index 3ef54b1..7e0c422 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/domain/usecase/GetArchivedEventsUseCase.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/domain/usecase/GetArchivedEventsUseCase.kt @@ -5,4 +5,4 @@ import friends.mobile.feature.events.domain.model.Event interface GetArchivedEventsUseCase { suspend operator fun invoke(): ResultWrapper> -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/createevent/CreateEventViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/createevent/CreateEventViewModel.kt index b946aed..f68c391 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/createevent/CreateEventViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/createevent/CreateEventViewModel.kt @@ -1,10 +1,10 @@ package friends.mobile.feature.events.presentation.createevent +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ApiError import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.events.domain.usecase.CheckFriendsAvailabilityUseCase import friends.mobile.feature.events.domain.usecase.CheckUserAvailabilityUseCase @@ -15,10 +15,10 @@ import org.koin.core.component.inject class CreateEventViewModel( private val selectedDate: String, ) : BaseViewModel< - CreateEventViewState, - CreateEventAction, - CreateEventEvent, - >( + CreateEventViewState, + CreateEventAction, + CreateEventEvent, + >( initState = CreateEventViewState.Loading, screenName = AnalyticsEvent.LAUNCH_CREATE_EVENT, ) { @@ -158,7 +158,7 @@ class CreateEventViewModel( isOwnerAvailable: Boolean, ): Boolean { return title.isNotBlank() && - selectedFriendIds.isNotEmpty() && - isOwnerAvailable + selectedFriendIds.isNotEmpty() && + isOwnerAvailable } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/eventdetail/EventDetailViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/eventdetail/EventDetailViewModel.kt index 212e06e..cf25957 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/eventdetail/EventDetailViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/eventdetail/EventDetailViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.events.presentation.eventdetail +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.events.domain.usecase.GetEventDetailUseCase import kotlinx.coroutines.launch diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/pendingevents/PendingEventViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/pendingevents/PendingEventViewModel.kt index 4f9a0f6..fd841aa 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/pendingevents/PendingEventViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/events/presentation/pendingevents/PendingEventViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.events.presentation.pendingevents +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.events.domain.usecase.AcceptEventUseCase import friends.mobile.feature.events.domain.usecase.DeclineEventUseCase diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/friends/di/FriendsModule.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/friends/di/FriendsModule.kt index b4ef28b..25f4000 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/friends/di/FriendsModule.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/friends/di/FriendsModule.kt @@ -4,9 +4,27 @@ import friends.mobile.core.di.QualifierAuthClient import friends.mobile.feature.friends.data.mapper.UserDtoMapper import friends.mobile.feature.friends.data.remote.FriendsApi import friends.mobile.feature.friends.data.repository.FriendsRepositoryImpl -import friends.mobile.feature.friends.data.usecase.* +import friends.mobile.feature.friends.data.usecase.AcceptFriendRequestUseCaseImpl +import friends.mobile.feature.friends.data.usecase.CancelFriendRequestUseCaseImpl +import friends.mobile.feature.friends.data.usecase.GetFriendStatusUseCaseImpl +import friends.mobile.feature.friends.data.usecase.GetFriendsUseCaseImpl +import friends.mobile.feature.friends.data.usecase.GetIncomingFriendRequestsUseCaseImpl +import friends.mobile.feature.friends.data.usecase.GetOutgoingFriendRequestsUseCaseImpl +import friends.mobile.feature.friends.data.usecase.RejectFriendRequestUseCaseImpl +import friends.mobile.feature.friends.data.usecase.RemoveFriendUseCaseImpl +import friends.mobile.feature.friends.data.usecase.SearchUserUseCaseImpl +import friends.mobile.feature.friends.data.usecase.SendFriendRequestUseCaseImpl import friends.mobile.feature.friends.domain.repository.FriendsRepository -import friends.mobile.feature.friends.domain.usecase.* +import friends.mobile.feature.friends.domain.usecase.AcceptFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.CancelFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.GetFriendStatusUseCase +import friends.mobile.feature.friends.domain.usecase.GetFriendsUseCase +import friends.mobile.feature.friends.domain.usecase.GetIncomingFriendRequestsUseCase +import friends.mobile.feature.friends.domain.usecase.GetOutgoingFriendRequestsUseCase +import friends.mobile.feature.friends.domain.usecase.RejectFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.RemoveFriendUseCase +import friends.mobile.feature.friends.domain.usecase.SearchUserUseCase +import friends.mobile.feature.friends.domain.usecase.SendFriendRequestUseCase import friends.mobile.feature.friends.presentation.friends.FriendsViewModel import friends.mobile.feature.friends.presentation.friendsProfile.FriendProfileViewModel import org.koin.core.qualifier.named diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/friends/presentation/friends/FriendsViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/friends/presentation/friends/FriendsViewModel.kt index 11652e4..e8777f6 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/friends/presentation/friends/FriendsViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/friends/presentation/friends/FriendsViewModel.kt @@ -1,14 +1,26 @@ package friends.mobile.feature.friends.presentation.friends +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel -import friends.mobile.feature.friends.domain.usecase.* +import friends.mobile.feature.friends.domain.usecase.AcceptFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.CancelFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.GetFriendsUseCase +import friends.mobile.feature.friends.domain.usecase.GetIncomingFriendRequestsUseCase +import friends.mobile.feature.friends.domain.usecase.GetOutgoingFriendRequestsUseCase +import friends.mobile.feature.friends.domain.usecase.RejectFriendRequestUseCase +import friends.mobile.feature.friends.domain.usecase.SearchUserUseCase +import friends.mobile.feature.friends.domain.usecase.SendFriendRequestUseCase import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.* +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.transformLatest import kotlinx.coroutines.launch import org.koin.core.component.inject @@ -71,7 +83,7 @@ class FriendsViewModel : BaseViewModel { @@ -108,11 +120,18 @@ class FriendsViewModel : BaseViewModel when (result) { is ResultWrapper.Success -> { - val baseContent = (viewState as? FriendsViewState.Content) ?: FriendsViewState.Content(currentTab = tab) + val baseContent = (viewState as? FriendsViewState.Content) + ?: FriendsViewState.Content(currentTab = tab) viewState = when (tab) { - RequestTab.FRIENDS -> baseContent.copy(friendsList = result.data, currentTab = tab, isTabLoading = false) - RequestTab.INCOMING -> baseContent.copy(incomingRequests = result.data, currentTab = tab, isTabLoading = false) - RequestTab.OUTGOING -> baseContent.copy(outgoingRequests = result.data, currentTab = tab, isTabLoading = false) + RequestTab.FRIENDS -> baseContent.copy( + friendsList = result.data, currentTab = tab, isTabLoading = false + ) + RequestTab.INCOMING -> baseContent.copy( + incomingRequests = result.data, currentTab = tab, isTabLoading = false + ) + RequestTab.OUTGOING -> baseContent.copy( + outgoingRequests = result.data, currentTab = tab, isTabLoading = false + ) } } is ResultWrapper.Error -> { @@ -120,7 +139,9 @@ class FriendsViewModel : BaseViewModel( + MainViewState, + MainAction, + MainViewAction, + >( initState = MainViewState.Loading, screenName = AnalyticsEvent.LAUNCH_HOME, ) { @@ -108,4 +108,4 @@ class MainViewModel : BaseViewModel< viewState = MainViewState.Error(message = getErrorMessage(userError)) } } -} \ No newline at end of file +} diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/data/repository/ProfileRepositoryImpl.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/data/repository/ProfileRepositoryImpl.kt index 148c91e..2a38068 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/data/repository/ProfileRepositoryImpl.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/data/repository/ProfileRepositoryImpl.kt @@ -27,7 +27,9 @@ internal class ProfileRepositoryImpl( is ResultWrapper.Error -> { if (result.error.code == NO_CONNECTION_ERROR_CODE) { cacheStorage.getProfile()?.let { ResultWrapper.Success(it) } ?: result - } else result + } else { + result + } } } } diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/edit/EditProfileViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/edit/EditProfileViewModel.kt index f02f78f..c2cf8da 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/edit/EditProfileViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/edit/EditProfileViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.profile.presentation.edit +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.profile.domain.usecase.UpdateProfileUseCase import kotlinx.coroutines.launch diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/profile/ProfileViewModel.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/profile/ProfileViewModel.kt index 554e89f..39d90f1 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/profile/ProfileViewModel.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/profile/presentation/profile/ProfileViewModel.kt @@ -1,9 +1,9 @@ package friends.mobile.feature.profile.presentation.profile +import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.domain.model.ResultWrapper import friends.mobile.core.domain.model.getErrorMessage import friends.mobile.core.domain.model.mapApiErrorToUserFriendly -import friends.mobile.core.analytics.AnalyticsEvent import friends.mobile.core.viewmodel.BaseViewModel import friends.mobile.feature.profile.domain.usecase.GetMeUseCase import kotlinx.coroutines.launch diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/data/remote/dto/WishPlaceDto.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/data/remote/dto/WishPlaceDto.kt index 34a8b09..d7a5790 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/data/remote/dto/WishPlaceDto.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/data/remote/dto/WishPlaceDto.kt @@ -14,4 +14,4 @@ data class WishPlaceDto( @SerialName("status") val status: String, @SerialName("created_at") val createdAt: String, @SerialName("visited_event_id") val visitedEventId: String? = null -) \ No newline at end of file +) diff --git a/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/presentation/WishPlacesEvent.kt b/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/presentation/WishPlacesEvent.kt index 2e097a6..c7088b9 100644 --- a/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/presentation/WishPlacesEvent.kt +++ b/shared/src/commonMain/kotlin/friends/mobile/feature/wishplaces/presentation/WishPlacesEvent.kt @@ -17,4 +17,4 @@ sealed class WishPlacesEvent { val userId: String, val id: String, ) : WishPlacesEvent() -} \ No newline at end of file +} diff --git a/shared/src/iosMain/kotlin/friends/mobile/core/config/Configuration.kt b/shared/src/iosMain/kotlin/friends/mobile/core/config/IOSConfiguration.kt similarity index 100% rename from shared/src/iosMain/kotlin/friends/mobile/core/config/Configuration.kt rename to shared/src/iosMain/kotlin/friends/mobile/core/config/IOSConfiguration.kt diff --git a/shared/src/iosMain/kotlin/friends/mobile/di/IOSKoinInitializer.kt b/shared/src/iosMain/kotlin/friends/mobile/di/IOSKoinInitializer.kt index 21f4a0e..c7798f2 100644 --- a/shared/src/iosMain/kotlin/friends/mobile/di/IOSKoinInitializer.kt +++ b/shared/src/iosMain/kotlin/friends/mobile/di/IOSKoinInitializer.kt @@ -8,8 +8,10 @@ import org.koin.dsl.module fun initKoinIOS(analyticsService: AnalyticsService) = CommonKmp.initKoin( configuration = createConfiguration(isDebug = true), appDeclaration = { - modules(module { - single { analyticsService } - }) + modules( + module { + single { analyticsService } + } + ) }, -) \ No newline at end of file +)