Skip to content

Commit

Permalink
Create tag on clicking fab in form dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
Faltenreich committed Dec 7, 2023
1 parent e316e64 commit 522bb7b
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import com.faltenreich.diaguard.shared.localization.getString
import com.faltenreich.diaguard.shared.view.DatePickerBottomAppBarItem
import com.faltenreich.diaguard.shared.view.FloatingActionButton
import com.faltenreich.diaguard.shared.view.SearchField
import com.faltenreich.diaguard.tag.list.TagListIntent
import com.faltenreich.diaguard.tag.list.TagListViewModel
import com.faltenreich.diaguard.timeline.TimelineViewModel
import dev.icerock.moko.resources.compose.painterResource
Expand Down Expand Up @@ -178,7 +179,7 @@ fun Screen.bottomAppBarStyle(): BottomAppBarStyle {
is TagListScreen -> BottomAppBarStyle.Visible(
floatingActionButton = {
val viewModel = getViewModel<TagListViewModel>()
FloatingActionButton(onClick = { viewModel.showFormDialog() }) {
FloatingActionButton(onClick = { viewModel.handleIntent(TagListIntent.OpenForm) }) {
Icon(
painter = painterResource(MR.images.ic_add),
contentDescription = getString(MR.strings.tag_new),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.faltenreich.diaguard.tag

import com.faltenreich.diaguard.tag.form.CreateTagUseCase
import com.faltenreich.diaguard.tag.list.GetTagsUseCase
import com.faltenreich.diaguard.tag.list.TagListViewModel
import org.koin.core.module.dsl.singleOf
Expand All @@ -9,6 +10,7 @@ fun tagModule() = module {
singleOf(::TagRepository)

singleOf(::GetTagsUseCase)
singleOf(::CreateTagUseCase)

singleOf(::TagListViewModel)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.faltenreich.diaguard.tag.form

import com.faltenreich.diaguard.shared.datetime.DateTimeFactory
import com.faltenreich.diaguard.tag.TagRepository

class CreateTagUseCase(
private val repository: TagRepository,
private val dateTimeFactory: DateTimeFactory,
) {

operator fun invoke(name: String) {
val now = dateTimeFactory.now()
repository.create(
createdAt = now,
updatedAt = now,
name = name,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ fun TagList(
}
if (viewState.showFormDialog) {
TagFormDialog(
onDismissRequest = viewModel::hideFormDialog,
onDismissRequest = { viewModel.handleIntent(TagListIntent.CloseForm) },
onConfirmRequest = { name ->
viewModel.createTag(name)
viewModel.hideFormDialog()
viewModel.handleIntent(TagListIntent.Submit(name))
viewModel.handleIntent(TagListIntent.CloseForm)
}
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.faltenreich.diaguard.tag.list

sealed interface TagListIntent {

data object OpenForm : TagListIntent

data object CloseForm : TagListIntent

data class Submit(val name: String) : TagListIntent
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@ package com.faltenreich.diaguard.tag.list

import com.faltenreich.diaguard.shared.architecture.ViewModel
import com.faltenreich.diaguard.shared.di.inject
import com.faltenreich.diaguard.tag.form.CreateTagUseCase
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.stateIn

class TagListViewModel(
getTags: GetTagsUseCase = inject(),
private val createTag: CreateTagUseCase = inject(),
) : ViewModel() {

private val tags = getTags()
Expand All @@ -24,15 +26,11 @@ class TagListViewModel(
initialValue = TagListViewState.Loading,
)

fun showFormDialog() {
showFormDialog.value = true
}

fun hideFormDialog() {
showFormDialog.value = false
}

fun createTag(name: String) {

fun handleIntent(intent: TagListIntent) {
when (intent) {
is TagListIntent.OpenForm -> showFormDialog.value = true
is TagListIntent.CloseForm -> showFormDialog.value = false
is TagListIntent.Submit -> createTag(intent.name)
}
}
}

0 comments on commit 522bb7b

Please sign in to comment.