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
5 changes: 2 additions & 3 deletions app/src/main/java/com/theuhooi/totonoi/core/ui/TotonoiApp.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.theuhooi.totonoi.core.ui

import android.os.Handler
import android.os.Looper
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
Expand Down Expand Up @@ -51,7 +49,8 @@ fun TotonoiApp() {
onCoolBathTimeChange = viewModel::onCoolBathTimeChange,
onRelaxationTimeChange = viewModel::onRelaxationTimeChange,
onDescriptionChange = viewModel::onDescriptionChange,
onAddSaunaSetClick = viewModel::onAddSaunaSetClick
onAddSaunaSetClick = viewModel::onAddSaunaSetClick,
onDeleteSaunaSetClick = viewModel::onDeleteSaunaSetClick
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ fun SakatsuInputScreen(
onCoolBathTimeChange: (index: Int, coolBathTime: String) -> Unit,
onRelaxationTimeChange: (index: Int, relaxationTime: String) -> Unit,
onDescriptionChange: (String) -> Unit,
onAddSaunaSetClick: () -> Unit
onAddSaunaSetClick: () -> Unit,
onDeleteSaunaSetClick: (setIndex: Int) -> Unit,
) {
LogCompositions(tag = "SakatsuInputScreen")
if (uiState.isCompleteSave) {
Expand Down Expand Up @@ -96,7 +97,8 @@ fun SakatsuInputScreen(
onCoolBathTimeChange = onCoolBathTimeChange,
onRelaxationTimeChange = onRelaxationTimeChange,
onDescriptionChange = onDescriptionChange,
onAddSaunaSetClick = onAddSaunaSetClick
onAddSaunaSetClick = onAddSaunaSetClick,
onDeleteSaunaSetClick = onDeleteSaunaSetClick
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@
package com.theuhooi.totonoi.feature.sakatsu.sakatsu_input

import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand All @@ -19,10 +19,12 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.google.android.material.datepicker.MaterialDatePicker
import com.theuhooi.totonoi.R
import com.theuhooi.totonoi.core.ui.components.LogCompositions

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun SakatsuInputSections(
facilityName: String?,
Expand All @@ -36,6 +38,7 @@ fun SakatsuInputSections(
onRelaxationTimeChange: (saunaSetIndex: Int, relaxationTime: String) -> Unit,
onDescriptionChange: (String) -> Unit,
onAddSaunaSetClick: () -> Unit,
onDeleteSaunaSetClick: (setIndex: Int) -> Unit,
modifier: Modifier = Modifier
) {
LogCompositions(tag = "SakatsuInputSections")
Expand Down Expand Up @@ -68,18 +71,30 @@ fun SakatsuInputSections(
)
}
items(saunaSetList.size) {
SaunaSetSection(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp),
index = it,
saunaTime = saunaSetList[it].saunaTime,
coolBathTime = saunaSetList[it].coolBathTime,
relaxationTime = saunaSetList[it].relaxationTime,
onSaunaTimeChange = onSaunaTimeChange,
onCoolBathTimeChange = onCoolBathTimeChange,
onRelaxationTimeChange = onRelaxationTimeChange
)
Column(modifier = Modifier.animateItemPlacement()) {
SaunaSetSection(
modifier = Modifier
.fillMaxWidth()
.padding(top = 16.dp),
index = it,
saunaTime = saunaSetList[it].saunaTime,
coolBathTime = saunaSetList[it].coolBathTime,
relaxationTime = saunaSetList[it].relaxationTime,
onSaunaTimeChange = onSaunaTimeChange,
onCoolBathTimeChange = onCoolBathTimeChange,
onRelaxationTimeChange = onRelaxationTimeChange
)
if (it != 0) {
Text(
modifier = Modifier
.padding(top = 4.dp)
.clickable(onClick = { onDeleteSaunaSetClick(it) }),
text = stringResource(id = R.string.sakatsu_input_delete_sauna_set),
color = MaterialTheme.colorScheme.error,
fontSize = 12.sp
)
}
}
}
item {
Text(
Expand All @@ -102,6 +117,7 @@ fun SakatsuInputSections(
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun FacilityNameSection(
facilityName: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,16 @@ import androidx.lifecycle.viewModelScope
import com.theuhooi.totonoi.data.entity.SaunaSetDto
import com.theuhooi.totonoi.data.usecase.RegisterSakatsuUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.delay
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import javax.inject.Inject
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import java.time.Instant
import java.time.LocalDateTime
import java.time.ZoneId
import javax.inject.Inject

@HiltViewModel
class SakatsuInputViewModel @Inject constructor(
Expand Down Expand Up @@ -96,6 +95,16 @@ class SakatsuInputViewModel @Inject constructor(
}
}

fun onDeleteSaunaSetClick(setIndex: Int) {
_uiState.update { currentState ->
val resultSaunaSetUiStateList = currentState.saunaSetUiStateList.toMutableList()
resultSaunaSetUiStateList.removeAt(setIndex)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removeAtって見つからない場合、throwしなかったでしたっけ

currentState.copy(
saunaSetUiStateList = resultSaunaSetUiStateList
)
}
}

fun onSaveButtonClick() {
// facilityNameが空の場合はsave buttonが押せないがfail safeとして
val facilityName = uiState.value.facilityName ?: return
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
<string name="sakatsu_input_cool_bath_label">水風呂💧</string>
<string name="sakatsu_input_relaxation_label">休憩🍃</string>
<string name="sakatsu_input_add_sauna_set">新しいセットを追加</string>
<string name="sakatsu_input_delete_sauna_set">セットを削除</string>
<string name="sakatsu_input_comment">コメント</string>

<!-- talkback -->
Expand Down