-
Notifications
You must be signed in to change notification settings - Fork 49
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #237 from joreilly/circuit_updates
Circuit updates
- Loading branch information
Showing
20 changed files
with
264 additions
and
274 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
48 changes: 48 additions & 0 deletions
48
common/src/commonMain/kotlin/dev/johnoreilly/common/countrylist/CountryListPresenter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package dev.johnoreilly.common.countrylist | ||
|
||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.collectAsState | ||
import androidx.compose.runtime.getValue | ||
import com.slack.circuit.runtime.CircuitContext | ||
import com.slack.circuit.runtime.Navigator | ||
import com.slack.circuit.runtime.presenter.Presenter | ||
import com.slack.circuit.runtime.screen.Screen | ||
import dev.johnoreilly.common.screens.CountryListScreen | ||
import dev.johnoreilly.common.screens.NetworkListScreen | ||
import dev.johnoreilly.common.getCountryName | ||
import dev.johnoreilly.common.repository.CityBikesRepository | ||
import dev.johnoreilly.common.viewmodel.Country | ||
import me.tatarka.inject.annotations.Assisted | ||
import me.tatarka.inject.annotations.Inject | ||
|
||
|
||
@Inject | ||
class CountryListPresenterFactory( | ||
private val presenterFactory: (Navigator) -> CountryListPresenter, | ||
) : Presenter.Factory { | ||
override fun create(screen: Screen, navigator: Navigator, context: CircuitContext): Presenter<*>? { | ||
return when (screen) { | ||
CountryListScreen -> presenterFactory(navigator) | ||
else -> null | ||
} | ||
} | ||
} | ||
|
||
@Inject | ||
class CountryListPresenter( | ||
@Assisted private val navigator: Navigator, | ||
private val cityBikesRepository: CityBikesRepository | ||
) : Presenter<CountryListScreen.State> { | ||
@Composable | ||
override fun present(): CountryListScreen.State { | ||
val groupedNetworkList by cityBikesRepository.groupedNetworkList.collectAsState() | ||
val countryCodeList = groupedNetworkList.keys.toList() | ||
val countryList = countryCodeList.map { countryCode -> Country(countryCode, getCountryName(countryCode)) } | ||
.sortedBy { it.displayName } | ||
return CountryListScreen.State(countryList) { event -> | ||
when (event) { | ||
is CountryListScreen.Event.CountryClicked -> navigator.goTo(NetworkListScreen(event.countryCode)) | ||
} | ||
} | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...ev/johnoreilly/common/ui/CountryListUI.kt → ...eilly/common/countrylist/CountryListUI.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
49 changes: 49 additions & 0 deletions
49
common/src/commonMain/kotlin/dev/johnoreilly/common/di/SharedUiComponent.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package dev.johnoreilly.common.di | ||
|
||
import com.slack.circuit.foundation.Circuit | ||
import com.slack.circuit.runtime.presenter.Presenter | ||
import com.slack.circuit.runtime.ui.Ui | ||
import dev.johnoreilly.common.screens.CountryListUiFactory | ||
import dev.johnoreilly.common.screens.NetworkListUiFactory | ||
import dev.johnoreilly.common.screens.StationListUiFactory | ||
import dev.johnoreilly.common.countrylist.CountryListPresenterFactory | ||
import dev.johnoreilly.common.networklist.NetworkListPresenterFactory | ||
import dev.johnoreilly.common.stationlist.StationListPresenterFactory | ||
import me.tatarka.inject.annotations.IntoSet | ||
import me.tatarka.inject.annotations.Provides | ||
|
||
interface SharedUiComponent { | ||
@IntoSet | ||
@Provides | ||
fun bindCountryListPresenterFactory(factory: CountryListPresenterFactory): Presenter.Factory = factory | ||
|
||
@IntoSet | ||
@Provides | ||
fun bindCountryListUiFactory(factory: CountryListUiFactory): Ui.Factory = factory | ||
|
||
@IntoSet | ||
@Provides | ||
fun bindNetworkListPresenterFactory(factory: NetworkListPresenterFactory): Presenter.Factory = factory | ||
|
||
@IntoSet | ||
@Provides | ||
fun bindNetworkListUiFactory(factory: NetworkListUiFactory): Ui.Factory = factory | ||
|
||
@IntoSet | ||
@Provides | ||
fun bindStationListPresenterFactory(factory: StationListPresenterFactory): Presenter.Factory = factory | ||
|
||
@IntoSet | ||
@Provides | ||
fun bindStationListUiFactory(factory: StationListUiFactory): Ui.Factory = factory | ||
|
||
@Provides | ||
fun provideCircuit( | ||
uiFactories: Set<Ui.Factory>, | ||
presenterFactories: Set<Presenter.Factory> | ||
): Circuit = Circuit.Builder() | ||
.addUiFactories(uiFactories) | ||
.addPresenterFactories(presenterFactories) | ||
.build() | ||
|
||
} |
47 changes: 47 additions & 0 deletions
47
common/src/commonMain/kotlin/dev/johnoreilly/common/networklist/NetworkListPresenter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package dev.johnoreilly.common.networklist | ||
|
||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.collectAsState | ||
import androidx.compose.runtime.getValue | ||
import com.slack.circuit.runtime.CircuitContext | ||
import com.slack.circuit.runtime.Navigator | ||
import com.slack.circuit.runtime.presenter.Presenter | ||
import com.slack.circuit.runtime.screen.Screen | ||
import dev.johnoreilly.common.screens.NetworkListScreen | ||
import dev.johnoreilly.common.screens.StationListScreen | ||
import dev.johnoreilly.common.getCountryName | ||
import dev.johnoreilly.common.repository.CityBikesRepository | ||
import me.tatarka.inject.annotations.Assisted | ||
import me.tatarka.inject.annotations.Inject | ||
|
||
@Inject | ||
class NetworkListPresenterFactory( | ||
private val presenterFactory: (NetworkListScreen, Navigator) -> NetworkListPresenter | ||
) : Presenter.Factory { | ||
override fun create(screen: Screen, navigator: Navigator, context: CircuitContext): Presenter<*>? { | ||
return when (screen) { | ||
is NetworkListScreen -> presenterFactory(screen, navigator) | ||
else -> null | ||
} | ||
} | ||
} | ||
|
||
@Inject | ||
class NetworkListPresenter( | ||
@Assisted private val screen: NetworkListScreen, | ||
@Assisted private val navigator: Navigator, | ||
private val cityBikesRepository: CityBikesRepository | ||
) : Presenter<NetworkListScreen.State> { | ||
@Composable | ||
override fun present(): NetworkListScreen.State { | ||
val groupedNetworkList by cityBikesRepository.groupedNetworkList.collectAsState() | ||
val networkList = groupedNetworkList[screen.countryCode]?.sortedBy { it.city } ?: emptyList() | ||
val oountryName = getCountryName(screen.countryCode) | ||
return NetworkListScreen.State(screen.countryCode, oountryName, networkList) { event -> | ||
when (event) { | ||
is NetworkListScreen.Event.NetworkClicked -> navigator.goTo(StationListScreen(event.networkId)) | ||
NetworkListScreen.Event.BackClicked -> navigator.pop() | ||
} | ||
} | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...ev/johnoreilly/common/ui/NetworkListUI.kt → ...eilly/common/networklist/NetworkListUI.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.