Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import wottrich.github.io.smartchecklist.uisupport.di.supportModule
import wottrich.github.io.smartchecklist.datasource.injection.databaseModule
import wottrich.github.io.smartchecklist.di.taskModule
import wottrich.github.io.smartchecklist.intent.di.intentExtensionsModule
import wottrich.github.io.smartchecklist.quicklychecklist.di.quicklyChecklistModule

/**
* @author Wottrich
Expand Down Expand Up @@ -35,7 +34,6 @@ object AppModule {
taskModule,
supportModule,
newChecklistModule,
quicklyChecklistModule,

//Database
databaseModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,7 @@ val featureHomeModules = module {
factory { SimpleChecklistModelMapper() }
factory { GetChecklistDrawerUseCase(get(), get()) }
factory { ObserveSimpleSelectedChecklistModelUseCase(get(), get()) }
viewModel {
ChecklistSettingsViewModel(
getSelectedChecklistUseCase = get(),
shareChecklistAsTextUseCase = get(),
)
}
viewModelOf(::ChecklistSettingsViewModel)
viewModelOf(::DeleteChecklistBottomSheetViewModel)
viewModel { HomeDrawerViewModel(get(), get(), get(), get()) }
viewModel {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ class GetChecklistDrawerUseCase(
) : FlowableUseCase<UseCase.None, List<HomeDrawerChecklistItemModel>>() {
override suspend fun execute(params: UseCase.None): Flow<Result<List<HomeDrawerChecklistItemModel>>> {
return checklistRepository.observeAllChecklistsWithTask().mapNotNull {
val checklists = it.map { newChecklistWithNewTasks ->
val checklists = it.filter { embedded ->
embedded.checklist.parentUuid == null
}.map { newChecklistWithNewTasks ->
mapper.mapToHomeDrawerChecklistItemModelMapper(newChecklistWithNewTasks)
}
Result.success(checklists)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import wottrich.github.io.smartchecklist.baseui.StyledText
import wottrich.github.io.smartchecklist.baseui.TextTwoLine
import wottrich.github.io.smartchecklist.baseui.ui.fonts.robotoFontFamily
import wottrich.github.io.smartchecklist.baseui.ui.pallet.SmartChecklistTheme

/**
Expand Down Expand Up @@ -148,6 +149,7 @@ fun TextStateComponent(
modifier = modifier,
text = textState.text,
color = textState.color.copy(alpha = textState.alpha),
fontFamily = robotoFontFamily,
fontWeight = textState.fontWeight,
textAlign = textState.textAlign,
style = textState.style
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class ChecklistDatasourceImpl(
Checklist(
uuid = it.uuid,
name = it.name,
parentUuid = it.parentUuid,
isSelected = it.isSelected
)
},
Expand Down Expand Up @@ -120,6 +121,7 @@ class ChecklistDatasourceImpl(
Checklist(
uuid = dto.uuid,
name = dto.name,
parentUuid = dto.parentUuid,
isSelected = dto.isSelected
)
}
Expand All @@ -139,13 +141,15 @@ class ChecklistDatasourceImpl(
Checklist(
uuid = this.uuid,
name = this.name,
parentUuid = this.parentUuid,
isSelected = this.isSelected
)

private fun Checklist.mapToDTO() =
ChecklistDTO(
uuid = this.uuid,
name = this.name,
parentUuid = this.parentUuid,
isSelected = this.isSelected
)
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package wottrich.github.io.smartchecklist.coroutines

import wottrich.github.io.smartchecklist.coroutines.UseCase
import wottrich.github.io.smartchecklist.coroutines.base.Result

fun successEmptyResult(): Result<UseCase.Empty> = Result.success(UseCase.Empty())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class AddNewChecklistUseCaseImpl(
) : AddNewChecklistUseCase() {
override suspend fun execute(params: NewChecklistModel): Result<Long?> {
return try {
val checklist = Checklist(uuid = params.uuid, name = params.name)
val checklist = Checklist(uuid = params.uuid, parentUuid = params.parentUuid, name = params.name)
Result.success(checklistRepository.insertChecklist(checklist))
} catch (ex: Exception) {
Result.failure(ex)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package wottrich.github.io.smartchecklist.di

import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.androidx.viewmodel.dsl.viewModelOf
import org.koin.core.module.Module
import org.koin.core.module.dsl.factoryOf
import org.koin.dsl.bind
import org.koin.dsl.module
import wottrich.github.io.smartchecklist.domain.repository.TaskRepository
Expand All @@ -15,6 +17,7 @@ import wottrich.github.io.smartchecklist.domain.usecase.ChangeTaskStatusUseCase
import wottrich.github.io.smartchecklist.domain.usecase.DeleteTaskUseCase
import wottrich.github.io.smartchecklist.domain.usecase.GetSortItemListUseCase
import wottrich.github.io.smartchecklist.domain.usecase.GetTasksFromSelectedChecklistUseCase
import wottrich.github.io.smartchecklist.domain.usecase.GetTasksSortedUseCase
import wottrich.github.io.smartchecklist.domain.usecase.GetTasksUseCase
import wottrich.github.io.smartchecklist.domain.usecase.ObserveChecklistWithTasksUseCase
import wottrich.github.io.smartchecklist.domain.usecase.ObserveSortItemSelectedUseCase
Expand All @@ -37,6 +40,7 @@ val taskModule = module {
}

private fun Module.injectUseCases() {
factoryOf(::GetTasksSortedUseCase)
factory { GetTasksFromSelectedChecklistUseCase(get()) }
factory { InsertNewTaskUseCase(get()) }
factory { ChangeTaskStatusUseCase(get()) }
Expand All @@ -51,18 +55,7 @@ private fun Module.injectUseCases() {
}

private fun Module.injectViewModels() {
viewModel {
TaskComponentViewModel(
observeSortItemSelectedUseCase = get(),
observeSelectedChecklistUuidUseCase = get(),
getTasksFromSelectedChecklistUseCase = get(),
insertNewTaskUseCase = get(),
changeTaskStatusUseCase = get(),
deleteTaskUseCase = get(),
sortTasksBySelectedSortUseCase = get(),
reverseTasksIfNeededUseCase = get()
)
}
viewModelOf(::TaskComponentViewModel)
viewModel {
CompletableCountBottomSheetViewModel(
getSelectedChecklistUseCase = get(),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package wottrich.github.io.smartchecklist.domain.model

sealed class ChecklistComponentState {
data object Loading : ChecklistComponentState()
data class Success(val data: TaskComponentModel) : ChecklistComponentState()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package wottrich.github.io.smartchecklist.domain.model

class ChecklistSectionWithTasks {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package wottrich.github.io.smartchecklist.domain.model

import wottrich.github.io.smartchecklist.datasource.data.model.Checklist
import wottrich.github.io.smartchecklist.datasource.data.model.ChecklistSectionWithTask
import wottrich.github.io.smartchecklist.presentation.task.model.BaseTaskListItem

data class TaskComponentModel(
val checklist: Checklist,
val tasks: List<BaseTaskListItem>,
val sectionChecklists: List<ChecklistSectionWithTask>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package wottrich.github.io.smartchecklist.domain.usecase

import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import wottrich.github.io.smartchecklist.coroutines.FlowableUseCase
import wottrich.github.io.smartchecklist.coroutines.UseCase
import wottrich.github.io.smartchecklist.coroutines.base.Result
import wottrich.github.io.smartchecklist.domain.model.ChecklistComponentState
import wottrich.github.io.smartchecklist.domain.model.SortItemType
import wottrich.github.io.smartchecklist.domain.model.TaskComponentModel

class GetTasksSortedUseCase(
private val observeSortItemSelectedUseCase: ObserveSortItemSelectedUseCase,
private val observeChecklistWithTasksUseCase: ObserveChecklistWithTasksUseCase,
private val sortTasksBySelectedSortUseCase: SortTasksBySelectedSortUseCase,
) : FlowableUseCase<UseCase.None, ChecklistComponentState>() {
override suspend fun execute(params: UseCase.None): Flow<Result<ChecklistComponentState>> {
return combine(
observeChecklistWithTasksUseCase(),
observeSortItemSelectedUseCase()
) { resultChecklist, resultSortItem ->
val checklist = resultChecklist.getOrNull()
val sortItem = resultSortItem.getOrNull() ?: SortItemType.UNSELECTED_SORT
if (checklist != null) {
Result.success(
ChecklistComponentState.Success(
TaskComponentModel(
checklist = checklist.checklist,
tasks = sortTasksBySelectedSortUseCase(
SortTasksBySelectedSortUseCase.Params(
selectedSortItem = sortItem,
tasks = checklist.tasks
)
).getOrNull().orEmpty(),
sectionChecklists = checklist.checklistSectionEmbedded
)
)
)
} else {
Result.success(ChecklistComponentState.Loading)
}
}.distinctUntilChanged()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class SortTasksBySelectedSortUseCase :
uncompletedTasks + BaseTaskListItem.SectionItem(R.string.task_sort_completed_task_item) + completedTasks
}

SortItemType.UNSELECTED_SORT -> taskItems
SortItemType.UNSELECTED_SORT -> taskItems.reversed()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ interface TaskComponentViewModelAction {
fun sendAction(action: Action)

sealed class Action {
object AddTask : Action()
data object AddTask : Action()
data object AddSection : Action()
data class ChangeTaskStatus(val task: Task) : Action()
data class DeleteTask(val task: Task) : Action()
data class OnTextChanged(val text: String) : Action()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package wottrich.github.io.smartchecklist.presentation.state

import wottrich.github.io.smartchecklist.domain.model.SortItemType
import wottrich.github.io.smartchecklist.domain.model.TaskComponentModel

data class TaskComponentUiState(
val taskName: String = "",
val checklist: TaskComponentModel? = null,
val showSectionButton: Boolean = false,
val selectedSortItem: SortItemType = SortItemType.UNSELECTED_SORT
)
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ import androidx.compose.ui.Modifier
import kotlinx.coroutines.flow.Flow
import org.koin.androidx.compose.getViewModel
import wottrich.github.io.smartchecklist.datasource.data.model.Task
import wottrich.github.io.smartchecklist.domain.model.TaskComponentModel
import wottrich.github.io.smartchecklist.presentation.action.TaskComponentViewModelAction
import wottrich.github.io.smartchecklist.presentation.task.model.BaseTaskListItem
import wottrich.github.io.smartchecklist.presentation.state.TaskComponentUiState
import wottrich.github.io.smartchecklist.presentation.ui.checklistinformationheader.ChecklistInformationHeaderComponent
import wottrich.github.io.smartchecklist.presentation.viewmodel.TaskComponentViewModel
import wottrich.github.io.smartchecklist.presentation.viewmodel.TaskComponentViewModelUiEffect
Expand Down Expand Up @@ -56,31 +57,37 @@ fun TaskContentComponent(
TaskEditHeaderVisibility(
showHeaderComponent = showHeaderComponent,
taskName = state.taskName,
showSectionButton = state.showSectionButton,
onTextFieldValueChange = {
viewModel.sendAction(TaskComponentViewModelAction.Action.OnTextChanged(it))
},
onAddItem = {
viewModel.sendAction(TaskComponentViewModelAction.Action.AddTask)
},
onAddSection = {
viewModel.sendAction(TaskComponentViewModelAction.Action.AddSection)
}
)
Divider()
AnimatedVisibility(visible = !showHeaderComponent) {
ChecklistInformationHeaderComponent(onTaskCounterClicked = onTaskCounterClicked)
}
Divider()
TaskList(
tasks = viewModel.tasks,
showDeleteIcon = showDeleteIcon,
onCheckChange = {
viewModel.sendAction(
TaskComponentViewModelAction.Action.ChangeTaskStatus(it)
)
onUpdateClicked(it)
},
onDeleteTask = {
viewModel.sendAction(TaskComponentViewModelAction.Action.DeleteTask(it))
}
)
state.checklist?.let {
TaskList(
tasks = it,
showDeleteIcon = showDeleteIcon,
onCheckChange = {
viewModel.sendAction(
TaskComponentViewModelAction.Action.ChangeTaskStatus(it)
)
onUpdateClicked(it)
},
onDeleteTask = {
viewModel.sendAction(TaskComponentViewModelAction.Action.DeleteTask(it))
}
)
}
}
}

Expand All @@ -98,25 +105,41 @@ private fun Effects(
}
}

@Composable
private fun Screen(
showHeaderComponent: Boolean,
state: TaskComponentUiState,
onTextFieldValueChange: (String) -> Unit,
onAddItem: () -> Unit,
onAddSection: () -> Unit,
onTaskCounterClicked: () -> Unit,
) {

}

@Composable
private fun ColumnScope.TaskEditHeaderVisibility(
showHeaderComponent: Boolean,
taskName: String,
showSectionButton: Boolean,
onTextFieldValueChange: (String) -> Unit,
onAddItem: () -> Unit,
onAddSection: () -> Unit,
) {
AnimatedVisibility(visible = showHeaderComponent) {
TaskEditHeaderComponent(
textFieldValue = taskName,
showSectionButton = showSectionButton,
onTextFieldValueChange = onTextFieldValueChange,
onAddItem = onAddItem
onAddItem = onAddItem,
onAddSection = onAddSection
)
}
}

@Composable
private fun TaskList(
tasks: List<BaseTaskListItem>,
tasks: TaskComponentModel,
showDeleteIcon: Boolean,
onCheckChange: (Task) -> Unit,
onDeleteTask: (Task) -> Unit
Expand Down
Loading