├── demo.gif ├── demo-ios.gif ├── iosApp ├── iosApp │ ├── Assets.xcassets │ │ ├── Contents.json │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ ├── Components │ │ ├── LoadingView.swift │ │ ├── ViewModelWrapper.swift │ │ ├── ErrorView.swift │ │ └── EmptyView.swift │ ├── Resources │ │ └── Localizable.strings │ ├── System │ │ └── IOSLocalProperties.swift │ ├── Features │ │ ├── Home │ │ │ └── HomeView.swift │ │ ├── Users │ │ │ └── List │ │ │ │ ├── UserListView.swift │ │ │ │ ├── UserListModel.swift │ │ │ │ └── UserItemView.swift │ │ └── Posts │ │ │ ├── Detail │ │ │ ├── PostDetailModel.swift │ │ │ ├── CommentItemView.swift │ │ │ └── PostDetailView.swift │ │ │ └── List │ │ │ ├── PostListModel.swift │ │ │ ├── PostListView.swift │ │ │ └── PostItemView.swift │ ├── iOSApp.swift │ └── Info.plist └── iosApp.xcodeproj │ ├── project.xcworkspace │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── project.pbxproj ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── shared ├── src │ ├── commonMain │ │ └── kotlin │ │ │ └── dev │ │ │ └── eduayuso │ │ │ └── kmcs │ │ │ ├── presentation │ │ │ ├── UIEffect.kt │ │ │ ├── UIEvent.kt │ │ │ ├── UIState.kt │ │ │ └── ViewModel.kt │ │ │ ├── domain │ │ │ ├── entities │ │ │ │ ├── IEntity.kt │ │ │ │ ├── TagEntity.kt │ │ │ │ ├── UserEntity.kt │ │ │ │ ├── CommentEntity.kt │ │ │ │ └── PostEntity.kt │ │ │ ├── interactors │ │ │ │ ├── type │ │ │ │ │ ├── Resource.kt │ │ │ │ │ ├── UseCase.kt │ │ │ │ │ ├── UseCaseOut.kt │ │ │ │ │ ├── UseCaseIn.kt │ │ │ │ │ └── UseCaseInOut.kt │ │ │ │ ├── impl │ │ │ │ │ ├── GetPostListInteractor.kt │ │ │ │ │ ├── GetUserListInteractor.kt │ │ │ │ │ ├── GetPostDetailInteractor.kt │ │ │ │ │ └── GetPostCommentsInteractor.kt │ │ │ │ └── UseCases.kt │ │ │ └── repository │ │ │ │ ├── IUsersRepository.kt │ │ │ │ └── IPostsRepository.kt │ │ │ ├── di │ │ │ ├── Module.kt │ │ │ ├── KoinViewModels.kt │ │ │ └── Koin.kt │ │ │ ├── executor │ │ │ ├── IExecutorScope.kt │ │ │ ├── MainDispatcher.kt │ │ │ └── MainIOExecutor.kt │ │ │ ├── data │ │ │ ├── LocalProperties.kt │ │ │ ├── model │ │ │ │ ├── LoginDto.kt │ │ │ │ ├── TagResponse.kt │ │ │ │ ├── LocationResponse.kt │ │ │ │ ├── UserResponse.kt │ │ │ │ ├── CommentResponse.kt │ │ │ │ └── PostReponse.kt │ │ │ ├── source │ │ │ │ └── remote │ │ │ │ │ ├── UsersRemoteDataSource.kt │ │ │ │ │ ├── PostsRemoteDataSource.kt │ │ │ │ │ └── ApiClient.kt │ │ │ ├── repository │ │ │ │ ├── UsersRepository.kt │ │ │ │ └── PostsRepository.kt │ │ │ └── DataMapper.kt │ │ │ ├── util │ │ │ └── Validator.kt │ │ │ ├── features │ │ │ ├── users │ │ │ │ └── list │ │ │ │ │ ├── UserListContract.kt │ │ │ │ │ └── UserListViewModel.kt │ │ │ └── posts │ │ │ │ ├── list │ │ │ │ ├── PostListContract.kt │ │ │ │ └── PostListViewModel.kt │ │ │ │ └── detail │ │ │ │ ├── PostDetailContract.kt │ │ │ │ └── PostDetailViewModel.kt │ │ │ └── AppConstants.kt │ ├── androidMain │ │ └── kotlin │ │ │ └── dev │ │ │ └── eduayuso │ │ │ └── kmcs │ │ │ ├── executor │ │ │ └── MainDispatcher.kt │ │ │ └── di │ │ │ └── Module.kt │ ├── iosMain │ │ └── kotlin │ │ │ └── dev │ │ │ └── eduayuso │ │ │ └── kmcs │ │ │ ├── di │ │ │ └── Module.kt │ │ │ └── executor │ │ │ └── MainDispatcher.kt │ └── commonTest │ │ └── kotlin │ │ └── dev │ │ └── eduayuso │ │ └── kmcs │ │ ├── IntegrationTestCase.kt │ │ ├── data │ │ ├── repository │ │ │ ├── UsersRepositoryTest.kt │ │ │ └── PostsRepositoryTest.kt │ │ ├── MockedResponses.kt │ │ └── HttpMock.kt │ │ ├── di │ │ └── KoinTest.kt │ │ ├── UnitTestCase.kt │ │ └── features │ │ └── posts │ │ └── PostListViewModelTest.kt └── build.gradle.kts ├── androidApp ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ └── drawable │ │ │ ├── ic_baseline_tag_24.xml │ │ │ ├── ic_baseline_image_24.xml │ │ │ ├── ic_baseline_message_24.xml │ │ │ ├── ic_baseline_thumb_up_24.xml │ │ │ ├── ic_baseline_group_24.xml │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ └── dev │ │ │ └── eduayuso │ │ │ └── kmcs │ │ │ └── android │ │ │ ├── system │ │ │ └── AndroidLocalProperties.kt │ │ │ ├── navigation │ │ │ ├── Routes.kt │ │ │ ├── NavigationBar.kt │ │ │ └── NavigationGraph.kt │ │ │ ├── components │ │ │ ├── LoadingView.kt │ │ │ ├── ErrorView.kt │ │ │ ├── EmptyView.kt │ │ │ └── TopBarView.kt │ │ │ ├── App.kt │ │ │ ├── MainActivity.kt │ │ │ └── features │ │ │ ├── users │ │ │ └── list │ │ │ │ ├── UserItemView.kt │ │ │ │ └── UserListView.kt │ │ │ ├── home │ │ │ └── HomeView.kt │ │ │ └── posts │ │ │ ├── list │ │ │ ├── PostItemView.kt │ │ │ └── PostListView.kt │ │ │ └── detail │ │ │ └── PostDetailView.kt │ │ └── AndroidManifest.xml └── build.gradle.kts ├── .gitignore ├── gradle.properties ├── settings.gradle.kts ├── README.md ├── gradlew.bat └── gradlew /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eduayuso/kmm-mvi-compose-swiftui/HEAD/demo.gif -------------------------------------------------------------------------------- /demo-ios.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eduayuso/kmm-mvi-compose-swiftui/HEAD/demo-ios.gif -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eduayuso/kmm-mvi-compose-swiftui/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /shared/src/commonMain/kotlin/dev/eduayuso/kmcs/presentation/UIEffect.kt: -------------------------------------------------------------------------------- 1 | package dev.eduayuso.kmcs.presentation 2 | 3 | interface UIEffect -------------------------------------------------------------------------------- /shared/src/commonMain/kotlin/dev/eduayuso/kmcs/presentation/UIEvent.kt: -------------------------------------------------------------------------------- 1 | package dev.eduayuso.kmcs.presentation 2 | 3 | interface UIEvent -------------------------------------------------------------------------------- /shared/src/commonMain/kotlin/dev/eduayuso/kmcs/presentation/UIState.kt: -------------------------------------------------------------------------------- 1 | package dev.eduayuso.kmcs.presentation 2 | 3 | interface UIState -------------------------------------------------------------------------------- /shared/src/commonMain/kotlin/dev/eduayuso/kmcs/domain/entities/IEntity.kt: -------------------------------------------------------------------------------- 1 | package dev.eduayuso.kmcs.domain.entities 2 | 3 | interface IEntity -------------------------------------------------------------------------------- /androidApp/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 |