Skip to content

SunnyDayDev/arch-mvi

Repository files navigation

statusImage coverageImage statusImage jitpackImage

arch-mvi

Kotlin MVI framework

Status

In progress. README is lean and will be updated later.

Integration

// build.gradle.kts

implementation("dev.sunnyday.arch-mvi:mvi-core:$version")
implementation("dev.sunnyday.arch-mvi:mvi-kit-coroutine:$version")
// Somewhere in the code

import dev.sunnyday.arch.mvi.coroutine.setupFactories
import dev.sunnyday.arch.mvi.MviKit

fun initMvi() {
  MviKit.setupFactories()
}

Usage

fun startFeature(featureCoroutineScope: CoroutineScope): MviFeature<State, InputEvent> {
    // null can be skipped, just showed that they are 
    val starter = MviKit.withParentCoroutine(featureCoroutineScope)
        .createFeatureStarter<State, InputEvent, Event, SideEffect>(
            initialStateProvider = { State("initial") },
            initialEventsProvider = null,
            initialInputEventsProvider = null,
            initialSideEffectsProvider = null,
            stateMachineInstanceFactory = { // this: StateMachineInstanceFactory.FactoryScope -> // with createStateMachine method
                createStateMachine(
                    reducer = FeatureReducer(),
                    stateTransitionListener = null,
                )
            },
            featureInstanceFactory = { // this: FeatureInstanceFactory.FactoryScope -> // with createFeature method
                createFeature(
                    eventHandler = FeatureInputEventHandler(),
                    sideEffectHandler = FeatureSideEffectHandler(),
                    onReadyCallback = null,
                )
            }
        )

    return starter.start()
}

// Or minimal, even without EventHandler
fun startFeature(): MviFeature<State, Event> {
    val starter = MviKit.createFeatureStarter<State, Event, Event, SideEffect>(
        initialStateProvider = { State("initial") },
        stateMachineInstanceFactory = {
            createStateMachine(
                reducer = FeatureReducer(),
            )
        },
        featureInstanceFactory = {
            createFeature(
                sideEffectHandler = FeatureSideEffectHandler(),
            )
        }
    )

    return starter.start()
}

A state machine or feature can be instantiated independently using own MviKit's factory method.

About

Kotlin MVI framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published