From 19b76360f4c83f5df7af70e26539cfd162eac058 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Wed, 1 Nov 2023 23:38:42 +0100 Subject: [PATCH] Error handling in bet creation + bet repository --- src/app/build.gradle | 9 +- .../fr/iut/alldev/allin/vo/bet/BetVOTest.kt | 2 +- .../fr/iut/alldev/allin/AllInApplication.kt | 11 +- .../fr/iut/alldev/allin/ext/BetStatusExt.kt | 2 +- .../java/fr/iut/alldev/allin/ext/FieldExt.kt | 6 + .../iut/alldev/allin/{ui => }/theme/Color.kt | 2 +- .../iut/alldev/allin/{ui => }/theme/Icons.kt | 2 +- .../iut/alldev/allin/{ui => }/theme/Theme.kt | 2 +- .../iut/alldev/allin/{ui => }/theme/Type.kt | 2 +- .../fr/iut/alldev/allin/ui/MainActivity.kt | 2 +- .../fr/iut/alldev/allin/ui/bet/BetScreen.kt | 2 +- .../allin/ui/bet/components/BetScreenCard.kt | 2 +- .../ui/bet/components/BetScreenPopularCard.kt | 2 +- .../allin/ui/betcreation/BetCreationScreen.kt | 41 ++++-- .../ui/betcreation/BetCreationViewModel.kt | 118 ++++++++++++++++++ .../components/BetCreationScreenBottomText.kt | 2 +- .../BetCreationScreenDateTimeButton.kt | 2 +- .../BetCreationScreenDateTimeRow.kt | 2 +- .../components/BetCreationScreenFriendLine.kt | 2 +- .../tabs/BetCreationScreenQuestionTab.kt | 8 ++ .../sections/QuestionTabDateTimeSection.kt | 9 ++ .../sections/QuestionTabPrivacySection.kt | 2 +- .../sections/QuestionTabThemePhraseSection.kt | 14 ++- .../components/BetStatusBottomSheetBack.kt | 2 +- .../BetStatusParticipationBottomSheet.kt | 2 +- .../betstatus/components/BetStatusWinner.kt | 2 +- .../betstatus/components/YesNoDetailsLine.kt | 2 +- .../ui/betstatus/components/YesNoStarBar.kt | 2 +- .../BetStatusBottomSheetDisplayBetVisitor.kt | 2 +- .../alldev/allin/ui/core/AllInAlertDialog.kt | 2 +- .../alldev/allin/ui/core/AllInBottomSheet.kt | 2 +- .../iut/alldev/allin/ui/core/AllInButton.kt | 2 +- .../fr/iut/alldev/allin/ui/core/AllInCard.kt | 2 +- .../fr/iut/alldev/allin/ui/core/AllInChip.kt | 2 +- .../alldev/allin/ui/core/AllInCoinCount.kt | 2 +- .../alldev/allin/ui/core/AllInDatePicker.kt | 2 +- .../allin/ui/core/AllInDetailsDrawer.kt | 2 +- .../alldev/allin/ui/core/AllInErrorLine.kt | 28 +++++ .../allin/ui/core/AllInGradientButton.kt | 2 +- .../iut/alldev/allin/ui/core/AllInIconChip.kt | 2 +- .../iut/alldev/allin/ui/core/AllInLoading.kt | 2 +- .../alldev/allin/ui/core/AllInRadioButton.kt | 2 +- .../allin/ui/core/AllInRetractableCard.kt | 2 +- .../iut/alldev/allin/ui/core/AllInRipple.kt | 2 +- .../allin/ui/core/AllInSectionButton.kt | 2 +- .../iut/alldev/allin/ui/core/AllInSections.kt | 2 +- .../alldev/allin/ui/core/AllInSelectionBox.kt | 2 +- .../alldev/allin/ui/core/AllInTextField.kt | 12 +- .../iut/alldev/allin/ui/core/AllInTextIcon.kt | 2 +- .../alldev/allin/ui/core/AllInTimePicker.kt | 2 +- .../alldev/allin/ui/core/AllInTitleInfo.kt | 2 +- .../iut/alldev/allin/ui/core/AllInTooltip.kt | 2 +- .../alldev/allin/ui/core/HighlightedText.kt | 2 +- .../ui/core/PercentagePositionnedElement.kt | 2 +- .../alldev/allin/ui/core/ProfilePicture.kt | 2 +- .../iut/alldev/allin/ui/core/RainbowButton.kt | 2 +- .../fr/iut/alldev/allin/ui/core/StatBar.kt | 2 +- .../allin/ui/core/bet/BetDateTimeChip.kt | 2 +- .../allin/ui/core/bet/BetDateTimeRow.kt | 2 +- .../allin/ui/core/bet/BetProfilePictureRow.kt | 2 +- .../allin/ui/core/bet/BetTitleHeader.kt | 2 +- .../allin/ui/core/topbar/coinCounter.kt | 2 +- .../iut/alldev/allin/ui/core/topbar/topbar.kt | 2 +- .../iut/alldev/allin/ui/login/LoginScreen.kt | 2 +- .../fr/iut/alldev/allin/ui/main/MainScreen.kt | 13 +- .../iut/alldev/allin/ui/navigation/NavHost.kt | 8 +- .../ui/navigation/TopLevelDestination.kt | 10 +- .../allin/ui/navigation/drawer/AllInDrawer.kt | 2 +- .../drawer/components/DrawerCell.kt | 2 +- .../drawer/components/DrawerHeader.kt | 2 +- .../drawer/components/DrawerHeaderStat.kt | 2 +- .../allin/ui/register/RegisterScreen.kt | 2 +- .../allin/ui/register/RegisterViewModel.kt | 18 +-- .../alldev/allin/ui/welcome/WelcomeScreen.kt | 2 +- src/app/src/main/res/values-fr/strings.xml | 2 + src/app/src/main/res/values/strings.xml | 2 + src/data/build.gradle | 5 +- .../alldev/allin/data/di/RepositoryModule.kt | 6 + .../fr/iut/alldev/allin/data/model/bet/Bet.kt | 12 +- .../alldev/allin/data/model/bet/BetFactory.kt | 56 +++++++++ .../alldev/allin/data/model/bet/CustomBet.kt | 20 +++ .../alldev/allin/data/model/bet/MatchBet.kt | 14 +-- .../alldev/allin/data/model/bet/YesNoBet.kt | 14 +-- .../allin/data/repository/BetRepository.kt | 9 ++ .../data/repository/impl/BetRepositoryImpl.kt | 16 +++ 85 files changed, 452 insertions(+), 129 deletions(-) rename src/app/src/main/java/fr/iut/alldev/allin/{ui => }/theme/Color.kt (99%) rename src/app/src/main/java/fr/iut/alldev/allin/{ui => }/theme/Icons.kt (93%) rename src/app/src/main/java/fr/iut/alldev/allin/{ui => }/theme/Theme.kt (99%) rename src/app/src/main/java/fr/iut/alldev/allin/{ui => }/theme/Type.kt (97%) create mode 100644 src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationViewModel.kt create mode 100644 src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInErrorLine.kt create mode 100644 src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/BetFactory.kt create mode 100644 src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/CustomBet.kt create mode 100644 src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt create mode 100644 src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt diff --git a/src/app/build.gradle b/src/app/build.gradle index 7ab7ee3..f2ba1b4 100644 --- a/src/app/build.gradle +++ b/src/app/build.gradle @@ -67,6 +67,7 @@ android { } dependencies { + implementation project(path: ':data') implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' @@ -76,9 +77,6 @@ dependencies { implementation 'androidx.compose.material3:material3:1.2.0-alpha08' implementation "androidx.compose.material:material:1.5.3" implementation "androidx.navigation:navigation-compose:2.7.3" - - implementation project(path: ':data') - implementation 'androidx.compose.material:material-icons-core' implementation 'androidx.compose.material:material-icons-extended' @@ -97,8 +95,11 @@ dependencies { //Hilt implementation "com.google.dagger:hilt-android:$hilt_version" kapt "com.google.dagger:hilt-android-compiler:$hilt_version" - implementation "androidx.hilt:hilt-navigation-compose:1.0.0" + // Smooth Corners implementation 'com.github.racra:smooth-corner-rect-android-compose:v1.0.0' + + //Timber + implementation 'com.jakewharton.timber:timber:5.0.1' } diff --git a/src/app/src/androidTest/java/fr/iut/alldev/allin/vo/bet/BetVOTest.kt b/src/app/src/androidTest/java/fr/iut/alldev/allin/vo/bet/BetVOTest.kt index 177735c..b5fc751 100644 --- a/src/app/src/androidTest/java/fr/iut/alldev/allin/vo/bet/BetVOTest.kt +++ b/src/app/src/androidTest/java/fr/iut/alldev/allin/vo/bet/BetVOTest.kt @@ -8,7 +8,7 @@ import dagger.hilt.android.testing.HiltAndroidTest import fr.iut.alldev.allin.test.TestTags import fr.iut.alldev.allin.test.mock.Bets import fr.iut.alldev.allin.ui.MainActivity -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.vo.bet.factory.toBetVO import fr.iut.alldev.allin.vo.bet.visitor.BetTestVisitor import org.junit.Before diff --git a/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt b/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt index b45771b..d7ab25b 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/AllInApplication.kt @@ -2,6 +2,15 @@ package fr.iut.alldev.allin import android.app.Application import dagger.hilt.android.HiltAndroidApp +import timber.log.Timber @HiltAndroidApp -class AllInApplication : Application() \ No newline at end of file +class AllInApplication : Application(){ + override fun onCreate() { + super.onCreate() + + if(BuildConfig.DEBUG){ + Timber.plant(Timber.DebugTree()) + } + } +} \ No newline at end of file diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ext/BetStatusExt.kt b/src/app/src/main/java/fr/iut/alldev/allin/ext/BetStatusExt.kt index 917fb41..83e1567 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ext/BetStatusExt.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ext/BetStatusExt.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import fr.iut.alldev.allin.R import fr.iut.alldev.allin.data.model.bet.BetStatus -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme fun BetStatus.getTitle(): Int { return when (this) { diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ext/FieldExt.kt b/src/app/src/main/java/fr/iut/alldev/allin/ext/FieldExt.kt index d8a89d6..39f3a88 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ext/FieldExt.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ext/FieldExt.kt @@ -28,6 +28,12 @@ sealed class FieldErrorState( data class AlreadyUsed(val value: String) : FieldErrorState(R.string.FieldError_AlreadyUsed, arrayOf(value)) + data class PastDate(val fieldName: String) + : FieldErrorState(R.string.FieldError_PastDate, arrayOf(fieldName)) + data class DateOrder(val fieldName1: String, val fieldName2: String) + : FieldErrorState(R.string.FieldError_DateOrder, arrayOf(fieldName1, fieldName2)) + + @Composable fun errorResource() = stringResourceOrNull(id = messageId, messageArgs) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Color.kt b/src/app/src/main/java/fr/iut/alldev/allin/theme/Color.kt similarity index 99% rename from src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Color.kt rename to src/app/src/main/java/fr/iut/alldev/allin/theme/Color.kt index 08a453d..21db008 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Color.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/theme/Color.kt @@ -1,4 +1,4 @@ -package fr.iut.alldev.allin.ui.theme +package fr.iut.alldev.allin.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Icons.kt b/src/app/src/main/java/fr/iut/alldev/allin/theme/Icons.kt similarity index 93% rename from src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Icons.kt rename to src/app/src/main/java/fr/iut/alldev/allin/theme/Icons.kt index a1e3c4d..819c5b5 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Icons.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/theme/Icons.kt @@ -1,4 +1,4 @@ -package fr.iut.alldev.allin.ui.theme +package fr.iut.alldev.allin.theme import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Theme.kt b/src/app/src/main/java/fr/iut/alldev/allin/theme/Theme.kt similarity index 99% rename from src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Theme.kt rename to src/app/src/main/java/fr/iut/alldev/allin/theme/Theme.kt index 4525dea..af2f082 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Theme.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/theme/Theme.kt @@ -1,4 +1,4 @@ -package fr.iut.alldev.allin.ui.theme +package fr.iut.alldev.allin.theme import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material.ripple.RippleAlpha diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Type.kt b/src/app/src/main/java/fr/iut/alldev/allin/theme/Type.kt similarity index 97% rename from src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Type.kt rename to src/app/src/main/java/fr/iut/alldev/allin/theme/Type.kt index 204346f..1bc5b6c 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/theme/Type.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/theme/Type.kt @@ -1,4 +1,4 @@ -package fr.iut.alldev.allin.ui.theme +package fr.iut.alldev.allin.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt index 8f9038e..7706c7f 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/MainActivity.kt @@ -13,7 +13,7 @@ import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat import dagger.hilt.android.AndroidEntryPoint import fr.iut.alldev.allin.ui.navigation.AllInNavHost -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @AndroidEntryPoint class MainActivity : ComponentActivity() { diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt index 9e36ca3..42abbdd 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/BetScreen.kt @@ -28,7 +28,7 @@ import fr.iut.alldev.allin.data.model.bet.YesNoBet import fr.iut.alldev.allin.ui.bet.components.BetScreenCard import fr.iut.alldev.allin.ui.bet.components.BetScreenPopularCard import fr.iut.alldev.allin.ui.core.AllInChip -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import java.time.ZonedDateTime private val bets = listOf( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenCard.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenCard.kt index 88e7136..495334f 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenCard.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenCard.kt @@ -22,7 +22,7 @@ import fr.iut.alldev.allin.ui.core.RainbowButton import fr.iut.alldev.allin.ui.core.bet.BetDateTimeRow import fr.iut.alldev.allin.ui.core.bet.BetProfilePictureRow import fr.iut.alldev.allin.ui.core.bet.BetTitleHeader -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @OptIn(ExperimentalComposeUiApi::class, ExperimentalFoundationApi::class) @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenPopularCard.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenPopularCard.kt index 7d9bc4f..6a9a697 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenPopularCard.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/bet/components/BetScreenPopularCard.kt @@ -20,7 +20,7 @@ import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ext.shadow import fr.iut.alldev.allin.ui.core.AllInCard import fr.iut.alldev.allin.ui.core.HighlightedText -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlin.math.ceil @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationScreen.kt index ae6194a..c158b03 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel import fr.iut.alldev.allin.R import fr.iut.alldev.allin.data.model.bet.BetType import fr.iut.alldev.allin.ext.getIcon @@ -19,28 +20,41 @@ import fr.iut.alldev.allin.ext.getTitle import fr.iut.alldev.allin.ui.betcreation.tabs.BetCreationScreenAnswerTab import fr.iut.alldev.allin.ui.betcreation.tabs.BetCreationScreenQuestionTab import fr.iut.alldev.allin.ui.core.* +import fr.iut.alldev.allin.ui.main.MainViewModel import java.time.Instant import java.time.ZoneId import java.time.ZonedDateTime @Composable fun BetCreationScreen( - + viewModel: BetCreationViewModel = hiltViewModel(), + mainViewModel: MainViewModel, ) { val interactionSource = remember { MutableInteractionSource() } - - var theme by remember{ mutableStateOf("") } - var phrase by remember{ mutableStateOf("") } - val (registerDate, setRegisterDate) = remember { mutableStateOf(ZonedDateTime.now()) } - val (betDate, setBetDate) = remember { mutableStateOf(ZonedDateTime.now()) } - var isPublic by remember{ mutableStateOf(true) } val betTypes = remember { BetType.values().toList() } + + var theme by remember{ viewModel.theme } + var phrase by remember{ viewModel.phrase } + val (registerDate, setRegisterDate) = remember { viewModel.registerDate } + val (betDate, setBetDate) = remember { viewModel.betDate } + var isPublic by remember{ viewModel.isPublic } + var selectedBetType by remember{ viewModel.selectedBetType } + + val themeError by remember{ viewModel.themeError } + val phraseError by remember{ viewModel.phraseError } + val registerDateError by remember{ viewModel.registerDateError } + val betDateError by remember{ viewModel.betDateError } + val selectedFriends = remember { mutableListOf() } - var selectedBetType by remember { mutableStateOf(betTypes[0]) } var selectionElements by remember { mutableStateOf(listOf()) } var selectedBetTypeElement by remember { mutableStateOf(null)} val focus = LocalFocusManager.current + val themeFieldName = stringResource(id = R.string.Theme) + val phraseFieldName = stringResource(id = R.string.Bet_Phrase) + val registerDateFieldName = stringResource(id = R.string.End_registration_date) + val betDateFieldName = stringResource(id = R.string.End_bet_date) + LaunchedEffect(key1 = betTypes) { selectionElements = betTypes.map { SelectionElement( @@ -92,6 +106,10 @@ fun BetCreationScreen( setRegisterTimeDialog = { setRegisterTimePicker(it) }, setEndTimeDialog = { setEndTimePicker(it) }, interactionSource = interactionSource, + betThemeError = themeError.errorResource(), + betPhraseError = phraseError.errorResource(), + registerDateError = registerDateError.errorResource(), + betDateError = betDateError.errorResource(), modifier = Modifier .fillMaxSize() .verticalScroll(rememberScrollState()) @@ -111,6 +129,7 @@ fun BetCreationScreen( } ) ) + RainbowButton( text = stringResource(id = R.string.Publish), modifier = Modifier @@ -118,6 +137,12 @@ fun BetCreationScreen( .padding(bottom = 14.dp) .padding(horizontal = 20.dp), onClick = { + viewModel.createBet( + themeFieldName = themeFieldName, + phraseFieldName = phraseFieldName, + registerDateFieldName = registerDateFieldName, + betDateFieldName = betDateFieldName + ){ mainViewModel.loading.value = it } } ) } diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationViewModel.kt new file mode 100644 index 0000000..804f08e --- /dev/null +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/BetCreationViewModel.kt @@ -0,0 +1,118 @@ +package fr.iut.alldev.allin.ui.betcreation + +import androidx.compose.runtime.mutableStateOf +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import fr.iut.alldev.allin.data.model.bet.BetFactory +import fr.iut.alldev.allin.data.model.bet.BetType +import fr.iut.alldev.allin.data.repository.BetRepository +import fr.iut.alldev.allin.ext.FieldErrorState +import kotlinx.coroutines.launch +import java.time.ZonedDateTime +import javax.inject.Inject + +const val THEME_MIN_SIZE = 3 +const val PHRASE_MIN_SIZE = 5 + +@HiltViewModel +class BetCreationViewModel @Inject constructor( + private val betRepository: BetRepository, +) : ViewModel() { + + var hasError = mutableStateOf(false) + var theme = mutableStateOf("") + var phrase = mutableStateOf("") + val registerDate = mutableStateOf(ZonedDateTime.now()) + val betDate = mutableStateOf(ZonedDateTime.now()) + var isPublic = mutableStateOf(true) + var selectedBetType = mutableStateOf(BetType.YES_NO) + + val themeError = mutableStateOf(FieldErrorState.NoError) + val phraseError = mutableStateOf(FieldErrorState.NoError) + val registerDateError = mutableStateOf(FieldErrorState.NoError) + val betDateError = mutableStateOf(FieldErrorState.NoError) + + private fun initErrorField(){ + themeError.value = FieldErrorState.NoError + phraseError.value = FieldErrorState.NoError + registerDateError.value = FieldErrorState.NoError + betDateError.value = FieldErrorState.NoError + hasError.value = false + } + + private fun verifyField( + themeFieldName: String, + phraseFieldName: String, + registerDateFieldName: String, + betDateFieldName: String, + ){ + if(theme.value.length < THEME_MIN_SIZE){ + themeError.value = + FieldErrorState.TooShort(themeFieldName.lowercase(), THEME_MIN_SIZE) + hasError.value = true + } + + if(phrase.value.length < PHRASE_MIN_SIZE){ + phraseError.value = + FieldErrorState.TooShort(phraseFieldName.lowercase(), PHRASE_MIN_SIZE) + hasError.value = true + } + + if(registerDate.value <= ZonedDateTime.now()){ + registerDateError.value = + FieldErrorState.PastDate(registerDateFieldName.lowercase()) + hasError.value = true + } + + if(betDate.value <= ZonedDateTime.now()){ + betDateError.value = + FieldErrorState.PastDate(betDateFieldName.lowercase()) + hasError.value = true + }else if(betDate.value < registerDate.value){ + betDateError.value = + FieldErrorState.DateOrder( + registerDateFieldName.lowercase(), + betDateFieldName.lowercase() + ) + hasError.value = true + } + } + + + fun createBet( + themeFieldName: String, + phraseFieldName: String, + registerDateFieldName: String, + betDateFieldName: String, + setLoading: (Boolean)->Unit + ) { + viewModelScope.launch { + setLoading(true) + + initErrorField() + verifyField( + themeFieldName, + phraseFieldName, + registerDateFieldName, + betDateFieldName, + ) + + if(!hasError.value){ + val bet = BetFactory.createBet( + betType = selectedBetType.value, + theme = theme.value, + phrase = phrase.value, + endRegisterDate = registerDate.value, + endBetDate = betDate.value, + isPublic = isPublic.value, + nameTeam1 = "", + nameTeam2 = "", + possibleAnswers = setOf() + ) + betRepository.createBet(bet) + } + setLoading(false) + } + } +} diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenBottomText.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenBottomText.kt index 6202ba2..dd84545 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenBottomText.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenBottomText.kt @@ -8,7 +8,7 @@ import androidx.compose.ui.draw.alpha import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetCreationScreenBottomText( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeButton.kt index a9c19b0..fde79d6 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeButton.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.ui.core.AllInCard -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetCreationScreenDateTimeButton( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeRow.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeRow.kt index 909bcf3..6699e19 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeRow.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenDateTimeRow.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetCreationScreenDateTimeRow( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenFriendLine.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenFriendLine.kt index 9b0a346..d9c3193 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenFriendLine.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/components/BetCreationScreenFriendLine.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.ui.core.AllInCoinCount import fr.iut.alldev.allin.ui.core.AllInRadioButton import fr.iut.alldev.allin.ui.core.ProfilePicture -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetCreationScreenFriendLine( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/BetCreationScreenQuestionTab.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/BetCreationScreenQuestionTab.kt index ec66911..27accf9 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/BetCreationScreenQuestionTab.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/BetCreationScreenQuestionTab.kt @@ -20,13 +20,17 @@ fun BetCreationScreenQuestionTab( modifier: Modifier = Modifier, nbFriends: Int, betTheme: String, + betThemeError: String?, setBetTheme: (String)->Unit, betPhrase: String, + betPhraseError: String?, setBetPhrase: (String)->Unit, isPublic: Boolean, setIsPublic: (Boolean)->Unit, registerDate: ZonedDateTime, + registerDateError: String?, betDate: ZonedDateTime, + betDateError: String?, selectedFriends: MutableList, setRegisterDateDialog: (Boolean)->Unit, setEndDateDialog: (Boolean)->Unit, @@ -38,8 +42,10 @@ fun BetCreationScreenQuestionTab( Column(modifier){ QuestionTabThemePhraseSection( betTheme = betTheme, + betThemeError = betThemeError, setBetTheme = setBetTheme, betPhrase = betPhrase, + betPhraseError = betPhraseError, setBetPhrase = setBetPhrase, bringIntoViewRequester = bringIntoViewRequester, interactionSource = interactionSource @@ -48,6 +54,8 @@ fun BetCreationScreenQuestionTab( QuestionTabDateTimeSection( registerDate = registerDate.formatToMediumDate(), registerTime = registerDate.formatToTime(), + registerDateError = registerDateError, + betDateError = betDateError, endDate = betDate.formatToMediumDate(), endTime = betDate.formatToTime(), setEndDateDialog = setEndDateDialog, diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabDateTimeSection.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabDateTimeSection.kt index 71cf773..b77c584 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabDateTimeSection.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabDateTimeSection.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.betcreation.components.BetCreationScreenDateTimeRow +import fr.iut.alldev.allin.ui.core.AllInErrorLine import fr.iut.alldev.allin.ui.core.AllInTitleInfo @Composable @@ -20,6 +21,8 @@ internal fun QuestionTabDateTimeSection( setEndDateDialog: (Boolean)->Unit, setRegisterTimeDialog: (Boolean)->Unit, setEndTimeDialog: (Boolean)->Unit, + registerDateError: String?, + betDateError: String?, registerDate: String, registerTime: String, endDate: String, @@ -39,6 +42,9 @@ internal fun QuestionTabDateTimeSection( onClickDate = { setRegisterDateDialog(true) }, onClickTime = { setRegisterTimeDialog(true) }, ) + registerDateError?.let{ + AllInErrorLine(text = it) + } Spacer(modifier = Modifier.height(12.dp)) AllInTitleInfo( text = stringResource(id = R.string.End_bet_date), @@ -53,4 +59,7 @@ internal fun QuestionTabDateTimeSection( onClickDate = { setEndDateDialog(true) }, onClickTime = { setEndTimeDialog(true) }, ) + betDateError?.let{ + AllInErrorLine(text = it) + } } \ No newline at end of file diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabPrivacySection.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabPrivacySection.kt index fe57b88..b4b09c9 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabPrivacySection.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabPrivacySection.kt @@ -18,7 +18,7 @@ import fr.iut.alldev.allin.ui.betcreation.components.BetCreationScreenFriendLine import fr.iut.alldev.allin.ui.core.AllInIconChip import fr.iut.alldev.allin.ui.core.AllInRetractableCard import fr.iut.alldev.allin.ui.core.AllInTitleInfo -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun QuestionTabPrivacySection( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabThemePhraseSection.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabThemePhraseSection.kt index 06fa74f..dd6711e 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabThemePhraseSection.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betcreation/tabs/sections/QuestionTabThemePhraseSection.kt @@ -15,16 +15,18 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R +import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.ui.core.AllInTextField import fr.iut.alldev.allin.ui.core.AllInTitleInfo -import fr.iut.alldev.allin.ui.theme.AllInTheme @OptIn(ExperimentalFoundationApi::class) @Composable internal fun QuestionTabThemePhraseSection( betTheme: String, + betThemeError: String?, setBetTheme: (String)->Unit, betPhrase: String, + betPhraseError: String?, setBetPhrase: (String)->Unit, bringIntoViewRequester: BringIntoViewRequester, interactionSource: MutableInteractionSource @@ -38,12 +40,13 @@ internal fun QuestionTabThemePhraseSection( ) AllInTextField( placeholder = stringResource(id = R.string.Theme_placeholder), - value = betPhrase, - onValueChange = setBetPhrase, + value = betTheme, + onValueChange = setBetTheme, bringIntoViewRequester = bringIntoViewRequester, borderColor = AllInTheme.colors.white, maxChar = 20, placeholderFontSize = 13.sp, + errorText = betThemeError, modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(10.dp)) @@ -56,13 +59,14 @@ internal fun QuestionTabThemePhraseSection( ) AllInTextField( placeholder = stringResource(id = R.string.Bet_Phrase_placeholder), - value = betTheme, + value = betPhrase, borderColor = AllInTheme.colors.white, - onValueChange = setBetTheme, + onValueChange = setBetPhrase, bringIntoViewRequester = bringIntoViewRequester, multiLine = true, maxChar = 100, placeholderFontSize = 13.sp, + errorText = betPhraseError, modifier = Modifier .fillMaxWidth() .height(100.dp) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusBottomSheetBack.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusBottomSheetBack.kt index 2232dca..c316634 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusBottomSheetBack.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusBottomSheetBack.kt @@ -21,7 +21,7 @@ import fr.iut.alldev.allin.ext.getColor import fr.iut.alldev.allin.ext.getTextColor import fr.iut.alldev.allin.ext.getTitle import fr.iut.alldev.allin.ui.betstatus.SHEET_HEIGHT -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetStatusBottomSheetBack( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusParticipationBottomSheet.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusParticipationBottomSheet.kt index 276cb5f..bb36d0e 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusParticipationBottomSheet.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusParticipationBottomSheet.kt @@ -18,7 +18,7 @@ import fr.iut.alldev.allin.ui.core.AllInBottomSheet import fr.iut.alldev.allin.ui.core.AllInButton import fr.iut.alldev.allin.ui.core.AllInCoinCount import fr.iut.alldev.allin.ui.core.topbar.AllInTopBarCoinCounter -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlinx.coroutines.launch @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusWinner.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusWinner.kt index 10611cd..d2c82bf 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusWinner.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/BetStatusWinner.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.ui.core.AllInCoinCount import fr.iut.alldev.allin.ui.core.AllInTextIcon import fr.iut.alldev.allin.ui.core.IconPosition -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetStatusWinner( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoDetailsLine.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoDetailsLine.kt index a454c76..4cecf49 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoDetailsLine.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoDetailsLine.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.tooling.preview.Preview import fr.iut.alldev.allin.ui.core.AllInTextIcon import fr.iut.alldev.allin.ui.core.IconPosition -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun YesNoDetailsLine( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoStarBar.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoStarBar.kt index 1bde716..2d957eb 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoStarBar.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/components/YesNoStarBar.kt @@ -14,7 +14,7 @@ import fr.iut.alldev.allin.R import fr.iut.alldev.allin.data.ext.toPercentageString import fr.iut.alldev.allin.ui.core.PercentagePositionnedElement import fr.iut.alldev.allin.ui.core.StatBar -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun YesNoStatBar( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/visitor/BetStatusBottomSheetDisplayBetVisitor.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/visitor/BetStatusBottomSheetDisplayBetVisitor.kt index 861f5ef..707daca 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/visitor/BetStatusBottomSheetDisplayBetVisitor.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/betstatus/visitor/BetStatusBottomSheetDisplayBetVisitor.kt @@ -36,7 +36,7 @@ import fr.iut.alldev.allin.ui.core.AllInDetailsDrawer import fr.iut.alldev.allin.ui.core.RainbowButton import fr.iut.alldev.allin.ui.core.bet.BetDateTimeRow import fr.iut.alldev.allin.ui.core.bet.BetTitleHeader -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.vo.bet.factory.toBetVO import fr.iut.alldev.allin.vo.bet.visitor.DisplayBetVisitor import java.time.ZonedDateTime diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInAlertDialog.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInAlertDialog.kt index 38953d3..ead31a0 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInAlertDialog.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInAlertDialog.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInAlertDialog( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInBottomSheet.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInBottomSheet.kt index 54a8a1e..43f29ef 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInBottomSheet.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInBottomSheet.kt @@ -7,7 +7,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInButton.kt index 4e976e9..99fe778 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInButton.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInButton( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCard.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCard.kt index 5a07b51..f8433b1 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCard.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCard.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInChip.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInChip.kt index e945e3f..743cfc6 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInChip.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInChip.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCoinCount.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCoinCount.kt index 557b06f..5cc3753 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCoinCount.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInCoinCount.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInCoinCount( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDatePicker.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDatePicker.kt index 2441214..84c30f9 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDatePicker.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDatePicker.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import java.time.ZonedDateTime import java.util.* diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDetailsDrawer.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDetailsDrawer.kt index 1c404d6..f812790 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDetailsDrawer.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInDetailsDrawer.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInDetailsDrawer( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInErrorLine.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInErrorLine.kt new file mode 100644 index 0000000..4565cff --- /dev/null +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInErrorLine.kt @@ -0,0 +1,28 @@ +package fr.iut.alldev.allin.ui.core + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.sp +import fr.iut.alldev.allin.theme.AllInTheme + +@Composable +fun AllInErrorLine(text: String) { + Text( + text = text, + style = AllInTheme.typography.r, + color = Color.Red, + fontSize = 10.sp, + overflow = TextOverflow.Ellipsis + ) +} + +@Preview +@Composable +private fun AllInErrorLinePreview() { + AllInTheme{ + AllInErrorLine("Lorem Ipsum.") + } +} \ No newline at end of file diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInGradientButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInGradientButton.kt index ff46080..e6614a6 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInGradientButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInGradientButton.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.ext.shadow -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInGradientButton( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInIconChip.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInIconChip.kt index f20fbb7..dcc72d5 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInIconChip.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInIconChip.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInLoading.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInLoading.kt index ddbac31..aff1211 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInLoading.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInLoading.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties import androidx.compose.ui.window.DialogWindowProvider -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlin.math.PI import kotlin.math.abs import kotlin.math.max diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRadioButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRadioButton.kt index 6697a6d..8418ca5 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRadioButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRadioButton.kt @@ -6,7 +6,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInRadioButton( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRetractableCard.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRetractableCard.kt index fe683c1..f0ff602 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRetractableCard.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRetractableCard.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInRetractableCard( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRipple.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRipple.kt index 0290310..d6ed0b2 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRipple.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInRipple.kt @@ -4,7 +4,7 @@ import androidx.compose.material.ripple.LocalRippleTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.graphics.Color -import fr.iut.alldev.allin.ui.theme.AllInRippleTheme +import fr.iut.alldev.allin.theme.AllInRippleTheme @Composable fun AllInRipple( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSectionButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSectionButton.kt index ae2f14d..4b7bd10 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSectionButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSectionButton.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSections.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSections.kt index 3f72698..3bf1a86 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSections.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSections.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlinx.coroutines.launch class SectionElement( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSelectionBox.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSelectionBox.kt index d8bd07e..54da3ea 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSelectionBox.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInSelectionBox.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme class SelectionElement( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextField.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextField.kt index 8a904c3..3ba86b1 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextField.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextField.kt @@ -21,7 +21,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlinx.coroutines.launch import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @@ -73,15 +73,7 @@ fun AllInTextField( } }, supportingText = errorText?.let { - { - Text( - text = it, - style = AllInTheme.typography.r, - color = Color.Red, - fontSize = 10.sp, - overflow = TextOverflow.Ellipsis - ) - } + { AllInErrorLine(text = it) } }, visualTransformation = visualTransformation, singleLine = !multiLine, diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextIcon.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextIcon.kt index 9948881..a123b7e 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextIcon.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTextIcon.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme enum class IconPosition{ diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTimePicker.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTimePicker.kt index 4965cd8..71effeb 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTimePicker.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTimePicker.kt @@ -6,7 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import java.util.* @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTitleInfo.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTitleInfo.kt index 503d968..d5b143c 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTitleInfo.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTitleInfo.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTooltip.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTooltip.kt index de394cb..c94613c 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTooltip.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/AllInTooltip.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.graphics.Path import androidx.compose.ui.graphics.Shape import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.* -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape @OptIn(ExperimentalMaterial3Api::class) diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/HighlightedText.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/HighlightedText.kt index 39f1893..ac2c3c3 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/HighlightedText.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/HighlightedText.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.TextUnit -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/PercentagePositionnedElement.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/PercentagePositionnedElement.kt index 52e48a0..8baee1b 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/PercentagePositionnedElement.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/PercentagePositionnedElement.kt @@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun PercentagePositionnedElement( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/ProfilePicture.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/ProfilePicture.kt index 9acd774..420e979 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/ProfilePicture.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/ProfilePicture.kt @@ -21,7 +21,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun ProfilePicture( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/RainbowButton.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/RainbowButton.kt index a376787..b63997d 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/RainbowButton.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/RainbowButton.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun RainbowButton( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/StatBar.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/StatBar.kt index 83d4ccd..4e23bfa 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/StatBar.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/StatBar.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun StatBar( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeChip.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeChip.kt index ac461b6..5365775 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeChip.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeChip.kt @@ -13,7 +13,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetDateTimeChip( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeRow.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeRow.kt index a28cbd9..9bd3e80 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeRow.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetDateTimeRow.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetDateTimeRow( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetProfilePictureRow.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetProfilePictureRow.kt index 4b558f7..ed1ef5a 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetProfilePictureRow.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetProfilePictureRow.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.zIndex import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.ProfilePicture -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetProfilePictureRow( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetTitleHeader.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetTitleHeader.kt index 5dbdf6b..ec18054 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetTitleHeader.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/bet/BetTitleHeader.kt @@ -14,7 +14,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.HighlightedText -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun BetTitleHeader( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/coinCounter.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/coinCounter.kt index 0961116..05fe69c 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/coinCounter.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/coinCounter.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInTopBarCoinCounter( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/topbar.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/topbar.kt index a193606..fe5bf82 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/topbar.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/core/topbar/topbar.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun AllInTopBar( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt index c4d7138..8f80da5 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/login/LoginScreen.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.* -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class) @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/main/MainScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/main/MainScreen.kt index ebb4d6e..d8b29c1 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/main/MainScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/main/MainScreen.kt @@ -19,16 +19,16 @@ import fr.iut.alldev.allin.ui.navigation.Routes import fr.iut.alldev.allin.ui.navigation.TopLevelDestination import fr.iut.alldev.allin.ui.navigation.drawer.AllInDrawer import fr.iut.alldev.allin.ui.navigation.popUpTo -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.vo.bet.factory.toBetVO import kotlinx.coroutines.launch private val topLevelDestinations = listOf( - TopLevelDestination.PUBLIC_BETS, - TopLevelDestination.BET_CREATION, - TopLevelDestination.BET_HISTORY, - TopLevelDestination.FRIENDS, - TopLevelDestination.CURRENT_BETS + TopLevelDestination.PublicBets, + TopLevelDestination.BetCreation, + TopLevelDestination.BetHistory, + TopLevelDestination.Friends, + TopLevelDestination.CurrentBets ) @Composable @@ -125,6 +125,7 @@ fun MainScreen( ) { AllInDrawerNavHost( navController = navController, + mainViewModel = mainViewModel, selectBet = { bet, participate -> setSelectedBet(bet) betStatusDisplayVisitor.participateBottomSheetVisibility.value = participate diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/NavHost.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/NavHost.kt index d7fcdf1..8973504 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/NavHost.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/NavHost.kt @@ -12,12 +12,13 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import fr.iut.alldev.allin.data.model.bet.Bet +import fr.iut.alldev.allin.theme.AllInTheme import fr.iut.alldev.allin.ui.bet.BetScreen import fr.iut.alldev.allin.ui.betcreation.BetCreationScreen import fr.iut.alldev.allin.ui.login.LoginScreen import fr.iut.alldev.allin.ui.main.MainScreen +import fr.iut.alldev.allin.ui.main.MainViewModel import fr.iut.alldev.allin.ui.register.RegisterScreen -import fr.iut.alldev.allin.ui.theme.AllInTheme import fr.iut.alldev.allin.ui.welcome.WelcomeScreen object Routes { @@ -81,6 +82,7 @@ fun AllInNavHost(modifier: Modifier = Modifier, internal fun AllInDrawerNavHost( modifier: Modifier = Modifier, navController: NavHostController, + mainViewModel: MainViewModel, selectBet: (Bet, Boolean) -> Unit, startDestination: String = Routes.PUBLIC_BETS ) { @@ -97,7 +99,9 @@ internal fun AllInDrawerNavHost( ) } composable(route = Routes.BET_CREATION) { - BetCreationScreen() + BetCreationScreen( + mainViewModel = mainViewModel + ) } } } diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/TopLevelDestination.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/TopLevelDestination.kt index 78aa308..ea81957 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/TopLevelDestination.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/TopLevelDestination.kt @@ -8,31 +8,31 @@ sealed class TopLevelDestination( val subtitle: Int, val emoji: Int ) { - object PUBLIC_BETS : TopLevelDestination( + object PublicBets : TopLevelDestination( route = Routes.PUBLIC_BETS, title = R.string.public_bets, subtitle = R.string.public_bets_subtitle, emoji = R.drawable.globe ) - object BET_CREATION : TopLevelDestination( + object BetCreation : TopLevelDestination( route = Routes.BET_CREATION, title = R.string.create_a_bet, subtitle = R.string.create_a_bet_subtitle, emoji = R.drawable.video_game ) - object BET_HISTORY : TopLevelDestination( + object BetHistory : TopLevelDestination( route = Routes.BET_HISTORY, title = R.string.bet_history, subtitle = R.string.bet_history_subtitle, emoji = R.drawable.eyes ) - object FRIENDS : TopLevelDestination( + object Friends : TopLevelDestination( route = Routes.FRIENDS, title = R.string.friends, subtitle = R.string.friends_subtitle, emoji = R.drawable.holding_hands ) - object CURRENT_BETS : TopLevelDestination( + object CurrentBets : TopLevelDestination( route = Routes.CURRENT_BETS, title = R.string.current_bets, subtitle = R.string.current_bets_subtitle, diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/AllInDrawer.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/AllInDrawer.kt index 61449cc..b366c29 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/AllInDrawer.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/AllInDrawer.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.unit.dp import fr.iut.alldev.allin.ui.navigation.TopLevelDestination import fr.iut.alldev.allin.ui.navigation.drawer.components.DrawerCell import fr.iut.alldev.allin.ui.navigation.drawer.components.DrawerHeader -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerCell.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerCell.kt index b2eec5c..5a45382 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerCell.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerCell.kt @@ -17,7 +17,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeader.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeader.kt index e980da0..4deda8d 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeader.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeader.kt @@ -12,7 +12,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.ProfilePicture -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun DrawerHeader( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeaderStat.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeaderStat.kt index 64288dd..346ab6b 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeaderStat.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/navigation/drawer/components/DrawerHeaderStat.kt @@ -5,7 +5,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.tooling.preview.Preview -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @Composable fun DrawerHeaderStat( diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt index 3fe01cc..f2d8b9b 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterScreen.kt @@ -25,7 +25,7 @@ import fr.iut.alldev.allin.ui.core.AllInGradientButton import fr.iut.alldev.allin.ui.core.AllInLoading import fr.iut.alldev.allin.ui.core.AllInPasswordField import fr.iut.alldev.allin.ui.core.AllInTextField -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @OptIn(ExperimentalFoundationApi::class) @Composable diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt index d274c26..6c17b78 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/register/RegisterViewModel.kt @@ -49,20 +49,24 @@ class RegisterViewModel @Inject constructor( passwordFieldName:String ){ if(username.value.length < MIN_USERNAME_SIZE){ - usernameError.value = FieldErrorState.TooShort(usernameFieldName,MIN_USERNAME_SIZE) + usernameError.value = + FieldErrorState.TooShort(usernameFieldName.lowercase(), MIN_USERNAME_SIZE) hasError.value = true } if(password.value.length < MIN_PASSWORD_SIZE){ - passwordError.value = FieldErrorState.TooShort(passwordFieldName, MIN_PASSWORD_SIZE) + passwordError.value = + FieldErrorState.TooShort(passwordFieldName.lowercase(), MIN_PASSWORD_SIZE) hasError.value = true }else if(!password.value.containsCharacter(ALLOWED_SYMBOLS)){ - passwordError.value = FieldErrorState.NoSpecialCharacter(passwordFieldName) + passwordError.value = + FieldErrorState.NoSpecialCharacter(passwordFieldName.lowercase()) hasError.value = true } if(!email.value.isEmail()){ - emailError.value = FieldErrorState.BadFormat(emailFieldName, "john@doe.com") + emailError.value = + FieldErrorState.BadFormat(emailFieldName.lowercase(), "john@doe.com") hasError.value = true } @@ -85,9 +89,9 @@ class RegisterViewModel @Inject constructor( initErrorField() verifyField( - usernameFieldName.lowercase(), - emailFieldName.lowercase(), - passwordFieldName.lowercase() + usernameFieldName, + emailFieldName, + passwordFieldName ) if(!hasError.value) { try { diff --git a/src/app/src/main/java/fr/iut/alldev/allin/ui/welcome/WelcomeScreen.kt b/src/app/src/main/java/fr/iut/alldev/allin/ui/welcome/WelcomeScreen.kt index 0e7a3ce..9941644 100644 --- a/src/app/src/main/java/fr/iut/alldev/allin/ui/welcome/WelcomeScreen.kt +++ b/src/app/src/main/java/fr/iut/alldev/allin/ui/welcome/WelcomeScreen.kt @@ -19,7 +19,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import fr.iut.alldev.allin.R import fr.iut.alldev.allin.ui.core.AllInButton -import fr.iut.alldev.allin.ui.theme.AllInTheme +import fr.iut.alldev.allin.theme.AllInTheme @OptIn(ExperimentalFoundationApi::class) @Composable diff --git a/src/app/src/main/res/values-fr/strings.xml b/src/app/src/main/res/values-fr/strings.xml index e6511ab..978f073 100644 --- a/src/app/src/main/res/values-fr/strings.xml +++ b/src/app/src/main/res/values-fr/strings.xml @@ -18,6 +18,8 @@ Les champs ne sont pas identiques. Le %s doit contenir au moins un caractère spécial : %s. %s est déjà utilisé. + La %s doit être dans le futur. + La %s doit venir après %s. Oui Non Détails diff --git a/src/app/src/main/res/values/strings.xml b/src/app/src/main/res/values/strings.xml index e29d1bd..fcb7010 100644 --- a/src/app/src/main/res/values/strings.xml +++ b/src/app/src/main/res/values/strings.xml @@ -20,6 +20,8 @@ The fields are not identical. The %s must contain at least one special character : %s. %s is already used. + The %s should be in the future. + The %s should come after the %s. Yes No Details diff --git a/src/data/build.gradle b/src/data/build.gradle index 2414151..73c4df5 100644 --- a/src/data/build.gradle +++ b/src/data/build.gradle @@ -54,7 +54,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.12.0' implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'com.google.android.material:material:1.9.0' + // implementation 'com.google.android.material:material:1.9.0' //Tests testImplementation 'junit:junit:4.13.2' @@ -71,4 +71,7 @@ dependencies { debugImplementation "com.squareup.okhttp3:logging-interceptor:4.11.0" api "org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1" implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0" + + //Timber + implementation 'com.jakewharton.timber:timber:5.0.1' } \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt index 2e8b757..7fd8a97 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/di/RepositoryModule.kt @@ -4,7 +4,9 @@ import dagger.Binds import dagger.Module import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent +import fr.iut.alldev.allin.data.repository.BetRepository import fr.iut.alldev.allin.data.repository.UserRepository +import fr.iut.alldev.allin.data.repository.impl.BetRepositoryImpl import fr.iut.alldev.allin.data.repository.impl.UserRepositoryImpl import javax.inject.Singleton @@ -14,4 +16,8 @@ abstract class RepositoryModule { @Singleton @Binds abstract fun provideUserRepository(userRepositoryImpl: UserRepositoryImpl): UserRepository + + @Singleton + @Binds + abstract fun provideBetRepository(betRepositoryImpl: BetRepositoryImpl): BetRepository } \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/Bet.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/Bet.kt index 5475c2f..7110e8c 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/Bet.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/Bet.kt @@ -3,10 +3,10 @@ package fr.iut.alldev.allin.data.model.bet import java.time.ZonedDateTime abstract class Bet( - val theme: String, - val phrase: String, - val endRegisterDate: ZonedDateTime, - val endBetDate: ZonedDateTime, - val isPublic: Boolean, - val betStatus: BetStatus, + open val theme: String, + open val phrase: String, + open val endRegisterDate: ZonedDateTime, + open val endBetDate: ZonedDateTime, + open val isPublic: Boolean, + open val betStatus: BetStatus, ) \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/BetFactory.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/BetFactory.kt new file mode 100644 index 0000000..ea9ec6c --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/BetFactory.kt @@ -0,0 +1,56 @@ +package fr.iut.alldev.allin.data.model.bet + +import java.time.ZonedDateTime + +class BetFactory { + companion object{ + fun createBet( + betType: BetType, + theme: String, + phrase: String, + endRegisterDate: ZonedDateTime, + endBetDate: ZonedDateTime, + isPublic: Boolean, + nameTeam1: String = "", + nameTeam2: String = "", + possibleAnswers: Set = emptySet() + + ): Bet = + when(betType){ + BetType.YES_NO -> { + YesNoBet( + theme = theme, + phrase = phrase, + endRegisterDate = endRegisterDate, + endBetDate = endBetDate, + isPublic = isPublic, + betStatus = BetStatus.WAITING + ) + } + BetType.MATCH -> { + MatchBet( + theme = theme, + phrase = phrase, + endRegisterDate = endRegisterDate, + endBetDate = endBetDate, + isPublic = isPublic, + betStatus = BetStatus.WAITING, + nameTeam1 = nameTeam1, + nameTeam2 = nameTeam2 + ) + + } + BetType.CUSTOM -> { + CustomBet( + theme = theme, + phrase = phrase, + endRegisterDate = endRegisterDate, + endBetDate = endBetDate, + isPublic = isPublic, + betStatus = BetStatus.WAITING, + possibleAnswers = possibleAnswers + ) + } + } + } +} \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/CustomBet.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/CustomBet.kt new file mode 100644 index 0000000..a9f27f0 --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/CustomBet.kt @@ -0,0 +1,20 @@ +package fr.iut.alldev.allin.data.model.bet + +import java.time.ZonedDateTime + +data class CustomBet( + override val theme: String, + override val phrase: String, + override val endRegisterDate: ZonedDateTime, + override val endBetDate: ZonedDateTime, + override val isPublic: Boolean, + override val betStatus: BetStatus, + val possibleAnswers: Set +) : Bet( + theme, + phrase, + endRegisterDate, + endBetDate, + isPublic, + betStatus +) diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/MatchBet.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/MatchBet.kt index 98f08f0..43c21cd 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/MatchBet.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/MatchBet.kt @@ -2,13 +2,13 @@ package fr.iut.alldev.allin.data.model.bet import java.time.ZonedDateTime -class MatchBet( - theme: String, - phrase: String, - endRegisterDate: ZonedDateTime, - endBetDate: ZonedDateTime, - isPublic: Boolean, - betStatus: BetStatus, +data class MatchBet( + override val theme: String, + override val phrase: String, + override val endRegisterDate: ZonedDateTime, + override val endBetDate: ZonedDateTime, + override val isPublic: Boolean, + override val betStatus: BetStatus, val nameTeam1: String, val nameTeam2: String ) : Bet( diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/YesNoBet.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/YesNoBet.kt index 5300eab..f9c09db 100644 --- a/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/YesNoBet.kt +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/model/bet/YesNoBet.kt @@ -2,13 +2,13 @@ package fr.iut.alldev.allin.data.model.bet import java.time.ZonedDateTime -class YesNoBet( - theme: String, - phrase: String, - endRegisterDate: ZonedDateTime, - endBetDate: ZonedDateTime, - isPublic: Boolean, - betStatus: BetStatus +data class YesNoBet( + override val theme: String, + override val phrase: String, + override val endRegisterDate: ZonedDateTime, + override val endBetDate: ZonedDateTime, + override val isPublic: Boolean, + override val betStatus: BetStatus ) : Bet( theme, phrase, diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt new file mode 100644 index 0000000..eb0db7c --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/BetRepository.kt @@ -0,0 +1,9 @@ +package fr.iut.alldev.allin.data.repository + +import fr.iut.alldev.allin.data.model.bet.Bet + +abstract class BetRepository { + abstract suspend fun createBet( + bet: Bet, + ) +} \ No newline at end of file diff --git a/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt new file mode 100644 index 0000000..56a424b --- /dev/null +++ b/src/data/src/main/java/fr/iut/alldev/allin/data/repository/impl/BetRepositoryImpl.kt @@ -0,0 +1,16 @@ +package fr.iut.alldev.allin.data.repository.impl + +import fr.iut.alldev.allin.data.api.AllInApi +import fr.iut.alldev.allin.data.model.bet.Bet +import fr.iut.alldev.allin.data.repository.BetRepository +import timber.log.Timber +import javax.inject.Inject + +class BetRepositoryImpl @Inject constructor( + private val api: AllInApi, +) : BetRepository() { + override suspend fun createBet(bet: Bet) { + // TODO + Timber.d("$bet") + } +} \ No newline at end of file