Semyon Zadorozhnyi
08/26/2021, 12:44 PMSemyon Zadorozhnyi
08/26/2021, 12:47 PMclass TriggerRepositoryImpl: TriggerRepository {
    private val _events = MutableSharedFlow<Event>()
    override fun observeTrigger(): Flow<Unit> = flow {
        // Observe _events and match latest against validTriggerPatterns
        // If there is a match - call emit(Unit)
    }
    override suspend fun addEvent(event: Event) {
        _events.emit(event)
    }
}
val validTriggerPatterns = listOf(
        listOf(Event.ScreenOpen(Screen.Main), Event.ScreenOpen(Screen.Details)),
        listOf(Event.CardCreated, Event.ScreenOpen(Screen.Main))
)Semyon Zadorozhnyi
08/26/2021, 12:57 PMIvan Pavlov
08/26/2021, 3:08 PMrunningReducerunningFoldNick Allen
08/26/2021, 5:55 PMflow {
    val history = ArrayDeque<Event>()
    _events.collect {
        history.addLast(it)
        if (history.size > MAX_PATTERN_SIZE) {
            history.removeFirst()
        }
        if (validTriggerPatterns.any { pattern -> isMatch(history. pattern) } {
            emit(Unit)
        }
    }
}