Rebrand from MyCrib to Casera
- Rename Kotlin package from com.example.mycrib to com.example.casera - Update Android app name, namespace, and application ID - Update iOS bundle identifiers and project settings - Rename iOS directories (MyCribTests -> CaseraTests, etc.) - Update deep link schemes from mycrib:// to casera:// - Update app group identifiers - Update subscription product IDs - Update all UI strings and branding 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.Image
|
||||
@@ -16,20 +16,20 @@ import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.example.mycrib.ui.screens.AddResidenceScreen
|
||||
import com.example.mycrib.ui.screens.EditResidenceScreen
|
||||
import com.example.mycrib.ui.screens.EditTaskScreen
|
||||
import com.example.mycrib.ui.screens.ForgotPasswordScreen
|
||||
import com.example.mycrib.ui.screens.HomeScreen
|
||||
import com.example.mycrib.ui.screens.LoginScreen
|
||||
import com.example.mycrib.ui.screens.RegisterScreen
|
||||
import com.example.mycrib.ui.screens.ResetPasswordScreen
|
||||
import com.example.mycrib.ui.screens.ResidenceDetailScreen
|
||||
import com.example.mycrib.ui.screens.ResidencesScreen
|
||||
import com.example.mycrib.ui.screens.TasksScreen
|
||||
import com.example.mycrib.ui.screens.VerifyEmailScreen
|
||||
import com.example.mycrib.ui.screens.VerifyResetCodeScreen
|
||||
import com.example.mycrib.viewmodel.PasswordResetViewModel
|
||||
import com.example.casera.ui.screens.AddResidenceScreen
|
||||
import com.example.casera.ui.screens.EditResidenceScreen
|
||||
import com.example.casera.ui.screens.EditTaskScreen
|
||||
import com.example.casera.ui.screens.ForgotPasswordScreen
|
||||
import com.example.casera.ui.screens.HomeScreen
|
||||
import com.example.casera.ui.screens.LoginScreen
|
||||
import com.example.casera.ui.screens.RegisterScreen
|
||||
import com.example.casera.ui.screens.ResetPasswordScreen
|
||||
import com.example.casera.ui.screens.ResidenceDetailScreen
|
||||
import com.example.casera.ui.screens.ResidencesScreen
|
||||
import com.example.casera.ui.screens.TasksScreen
|
||||
import com.example.casera.ui.screens.VerifyEmailScreen
|
||||
import com.example.casera.ui.screens.VerifyResetCodeScreen
|
||||
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import org.jetbrains.compose.resources.painterResource
|
||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||
@@ -38,24 +38,24 @@ import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.toRoute
|
||||
import com.example.mycrib.ui.screens.MainScreen
|
||||
import com.example.mycrib.ui.screens.ProfileScreen
|
||||
import com.example.mycrib.ui.theme.MyCribTheme
|
||||
import com.example.mycrib.ui.theme.ThemeManager
|
||||
import com.example.mycrib.navigation.*
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.Residence
|
||||
import com.example.mycrib.models.TaskCategory
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.models.TaskFrequency
|
||||
import com.example.mycrib.models.TaskPriority
|
||||
import com.example.mycrib.models.TaskStatus
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.AuthApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.ui.screens.MainScreen
|
||||
import com.example.casera.ui.screens.ProfileScreen
|
||||
import com.example.casera.ui.theme.MyCribTheme
|
||||
import com.example.casera.ui.theme.ThemeManager
|
||||
import com.example.casera.navigation.*
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.Residence
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskPriority
|
||||
import com.example.casera.models.TaskStatus
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.AuthApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
|
||||
import mycrib.composeapp.generated.resources.Res
|
||||
import mycrib.composeapp.generated.resources.compose_multiplatform
|
||||
import casera.composeapp.generated.resources.Res
|
||||
import casera.composeapp.generated.resources.compose_multiplatform
|
||||
|
||||
@Composable
|
||||
@Preview
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
class Greeting {
|
||||
private val platform = getPlatform()
|
||||
@@ -1,4 +1,4 @@
|
||||
//package com.mycrib.android
|
||||
//package com.casera.android
|
||||
//
|
||||
//import android.os.Bundle
|
||||
//import androidx.activity.ComponentActivity
|
||||
@@ -10,8 +10,8 @@
|
||||
//import androidx.navigation.compose.NavHost
|
||||
//import androidx.navigation.compose.composable
|
||||
//import androidx.navigation.compose.rememberNavController
|
||||
//import com.example.mycrib.ui.screens.*
|
||||
//import com.example.mycrib.ui.theme.MyCribTheme
|
||||
//import com.example.casera.ui.screens.*
|
||||
//import com.example.casera.ui.theme.MyCribTheme
|
||||
//
|
||||
//class MainActivity : ComponentActivity() {
|
||||
// override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib
|
||||
package com.example.casera
|
||||
|
||||
interface Platform {
|
||||
val name: String
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import com.example.mycrib.network.*
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.network.*
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
/**
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.example.mycrib.cache
|
||||
package com.example.casera.cache
|
||||
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import com.example.mycrib.models.FeatureBenefit
|
||||
import com.example.mycrib.models.Promotion
|
||||
import com.example.mycrib.models.SubscriptionStatus
|
||||
import com.example.mycrib.models.UpgradeTriggerData
|
||||
import com.example.casera.models.FeatureBenefit
|
||||
import com.example.casera.models.Promotion
|
||||
import com.example.casera.models.SubscriptionStatus
|
||||
import com.example.casera.models.UpgradeTriggerData
|
||||
|
||||
object SubscriptionCache {
|
||||
val currentSubscription = mutableStateOf<SubscriptionStatus?>(null)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.models
|
||||
package com.example.casera.models
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.navigation
|
||||
package com.example.casera.navigation
|
||||
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.cache.DataCache
|
||||
import com.example.mycrib.cache.DataPrefetchManager
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.*
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.cache.DataCache
|
||||
import com.example.casera.cache.DataPrefetchManager
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.*
|
||||
import com.example.casera.storage.TokenStorage
|
||||
|
||||
/**
|
||||
* Unified API Layer that manages all network calls and cache operations.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.plugins.contentnegotiation.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
/**
|
||||
* API Environment Configuration
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
sealed class ApiResult<out T> {
|
||||
data class Success<T>(val data: T) : ApiResult<T>()
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.ErrorResponse
|
||||
import com.example.casera.models.ErrorResponse
|
||||
import io.ktor.client.call.body
|
||||
import io.ktor.client.statement.HttpResponse
|
||||
import kotlinx.serialization.json.Json
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.network
|
||||
package com.example.casera.network
|
||||
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.models.*
|
||||
import io.ktor.client.*
|
||||
import io.ktor.client.call.*
|
||||
import io.ktor.client.request.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.platform
|
||||
package com.example.casera.platform
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.example.mycrib.repository
|
||||
package com.example.casera.repository
|
||||
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.LookupsApi
|
||||
import com.example.mycrib.network.SubscriptionApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.mycrib.storage.TaskCacheStorage
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.LookupsApi
|
||||
import com.example.casera.network.SubscriptionApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import com.example.casera.storage.TaskCacheStorage
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Platform-specific task cache manager interface for persistent storage.
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
import com.example.mycrib.models.CustomTask
|
||||
import com.example.casera.models.CustomTask
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.decodeFromString
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Cross-platform theme storage for persisting theme selection.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Platform-specific token manager interface for persistent storage.
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.storage
|
||||
package com.example.casera.storage
|
||||
|
||||
/**
|
||||
* Token storage that provides a unified interface for accessing platform-specific
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.ContractorCreateRequest
|
||||
import com.example.mycrib.models.ContractorUpdateRequest
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.ContractorCreateRequest
|
||||
import com.example.casera.models.ContractorUpdateRequest
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
|
||||
@Composable
|
||||
fun AddNewTaskDialog(
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import com.example.mycrib.models.MyResidencesResponse
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.casera.models.MyResidencesResponse
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
|
||||
@Composable
|
||||
fun AddNewTaskWithResidenceDialog(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -9,12 +9,12 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.MyResidencesResponse
|
||||
import com.example.mycrib.models.TaskCategory
|
||||
import com.example.mycrib.models.TaskCreateRequest
|
||||
import com.example.mycrib.models.TaskFrequency
|
||||
import com.example.mycrib.models.TaskPriority
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.MyResidencesResponse
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskCreateRequest
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskPriority
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
@@ -6,7 +6,7 @@ import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
/**
|
||||
* Handles ApiResult states automatically with loading, error dialogs, and success content.
|
||||
@@ -127,7 +127,7 @@ fun <T> ApiResult<T>.HandleErrors(
|
||||
|
||||
LaunchedEffect(this) {
|
||||
if (this@HandleErrors is ApiResult.Error) {
|
||||
errorMessage = com.example.mycrib.util.ErrorMessageParser.parse((this@HandleErrors as ApiResult.Error).message)
|
||||
errorMessage = com.example.casera.util.ErrorMessageParser.parse((this@HandleErrors as ApiResult.Error).message)
|
||||
showErrorDialog = true
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.TaskCompletionCreateRequest
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.platform.ImageData
|
||||
import com.example.mycrib.platform.rememberImagePicker
|
||||
import com.example.mycrib.platform.rememberCameraPicker
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.TaskCompletionCreateRequest
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.platform.ImageData
|
||||
import com.example.casera.platform.rememberImagePicker
|
||||
import com.example.casera.platform.rememberCameraPicker
|
||||
import kotlinx.datetime.*
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.TextFieldValue
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.ResidenceApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.ResidenceApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components
|
||||
package com.example.casera.ui.components
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -12,11 +12,11 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.ResidenceUser
|
||||
import com.example.mycrib.models.ResidenceShareCode
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.ResidenceApi
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.models.ResidenceUser
|
||||
import com.example.casera.models.ResidenceShareCode
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.ResidenceApi
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.auth
|
||||
package com.example.casera.ui.components.auth
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.auth
|
||||
package com.example.casera.ui.components.auth
|
||||
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Card
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.backgroundSecondary
|
||||
|
||||
/**
|
||||
* CompactCard - Smaller card with reduced padding
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.Card
|
||||
@@ -9,9 +9,9 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.mycrib.ui.theme.backgroundSecondary
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.backgroundSecondary
|
||||
|
||||
/**
|
||||
* StandardCard - Consistent card component matching iOS design
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -8,7 +8,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* StandardEmptyState - Consistent empty state component
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.common
|
||||
package com.example.casera.ui.components.common
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.dialogs
|
||||
package com.example.casera.ui.components.dialogs
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.border
|
||||
@@ -20,7 +20,7 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.ui.theme.*
|
||||
import com.example.casera.ui.theme.*
|
||||
|
||||
/**
|
||||
* ThemePickerDialog - Shows all available themes in a grid
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -14,9 +14,9 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.Document
|
||||
import com.example.mycrib.models.DocumentCategory
|
||||
import com.example.mycrib.models.DocumentType
|
||||
import com.example.casera.models.Document
|
||||
import com.example.casera.models.DocumentCategory
|
||||
import com.example.casera.models.DocumentType
|
||||
|
||||
@Composable
|
||||
fun DocumentCard(document: Document, isWarrantyCard: Boolean = false, onClick: () -> Unit) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.documents
|
||||
package com.example.casera.ui.components.documents
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.Document
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.casera.models.Document
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,11 +1,11 @@
|
||||
package com.example.mycrib.ui.components.forms
|
||||
package com.example.casera.ui.components.forms
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* FormSection - Groups related form fields with optional header/footer
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.forms
|
||||
package com.example.casera.ui.components.forms
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
@@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* FormTextField - Standardized text field for forms
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.residence
|
||||
package com.example.casera.ui.components.residence
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -12,10 +12,10 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskCompletionResponse
|
||||
import com.example.mycrib.models.TaskCompletion
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.network.APILayer
|
||||
import com.example.casera.models.TaskCompletionResponse
|
||||
import com.example.casera.models.TaskCompletion
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.network.APILayer
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
/**
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -23,8 +23,8 @@ import coil3.compose.AsyncImage
|
||||
import coil3.compose.AsyncImagePainter
|
||||
import coil3.compose.SubcomposeAsyncImage
|
||||
import coil3.compose.SubcomposeAsyncImageContent
|
||||
import com.example.mycrib.models.TaskCompletionImage
|
||||
import com.example.mycrib.network.ApiClient
|
||||
import com.example.casera.models.TaskCompletionImage
|
||||
import com.example.casera.network.ApiClient
|
||||
|
||||
@Composable
|
||||
fun PhotoViewerDialog(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -8,7 +8,7 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
|
||||
// MARK: - Edit Task Button
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.models.TaskCategory
|
||||
import com.example.mycrib.models.TaskPriority
|
||||
import com.example.mycrib.models.TaskFrequency
|
||||
import com.example.mycrib.models.TaskStatus
|
||||
import com.example.mycrib.models.TaskCompletion
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.models.TaskCategory
|
||||
import com.example.casera.models.TaskPriority
|
||||
import com.example.casera.models.TaskFrequency
|
||||
import com.example.casera.models.TaskStatus
|
||||
import com.example.casera.models.TaskCompletion
|
||||
import org.jetbrains.compose.ui.tooling.preview.Preview
|
||||
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.background
|
||||
@@ -19,8 +19,8 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.models.TaskColumn
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.casera.models.TaskColumn
|
||||
import com.example.casera.models.TaskDetail
|
||||
|
||||
@OptIn(ExperimentalFoundationApi::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.components.task
|
||||
package com.example.casera.ui.components.task
|
||||
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
|
||||
@Composable
|
||||
fun AddDocumentScreen(
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
|
||||
@Composable
|
||||
fun AddResidenceScreen(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -12,17 +12,17 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddNewTaskWithResidenceDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.CompleteTaskDialog
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.task.TaskCard
|
||||
import com.example.mycrib.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.viewmodel.TaskCompletionViewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.AddNewTaskWithResidenceDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.CompleteTaskDialog
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.task.TaskCard
|
||||
import com.example.casera.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.TaskCompletionViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -265,7 +265,7 @@ fun AllTasksScreen(
|
||||
},
|
||||
isLoading = createTaskState is ApiResult.Loading,
|
||||
errorMessage = if (createTaskState is ApiResult.Error) {
|
||||
com.example.mycrib.util.ErrorMessageParser.parse((createTaskState as ApiResult.Error).message)
|
||||
com.example.casera.util.ErrorMessageParser.parse((createTaskState as ApiResult.Error).message)
|
||||
} else null
|
||||
)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -17,11 +17,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddContractorDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.AddContractorDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -20,15 +20,15 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddContractorDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.ContractorViewModel
|
||||
import com.example.mycrib.models.ContractorSummary
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.casera.ui.components.AddContractorDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.ContractorViewModel
|
||||
import com.example.casera.models.ContractorSummary
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -16,17 +16,17 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import androidx.compose.foundation.Image
|
||||
import coil3.compose.AsyncImage
|
||||
import coil3.compose.rememberAsyncImagePainter
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.ui.components.documents.ErrorState
|
||||
import com.example.mycrib.ui.components.documents.formatFileSize
|
||||
import com.example.casera.ui.components.documents.ErrorState
|
||||
import com.example.casera.ui.components.documents.formatFileSize
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import androidx.compose.foundation.lazy.grid.GridCells
|
||||
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -18,13 +18,13 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import coil3.compose.AsyncImage
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.platform.ImageData
|
||||
import com.example.mycrib.platform.rememberImagePicker
|
||||
import com.example.mycrib.platform.rememberCameraPicker
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.platform.ImageData
|
||||
import com.example.casera.platform.rememberImagePicker
|
||||
import com.example.casera.platform.rememberCameraPicker
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -239,7 +239,7 @@ fun DocumentFormScreen(
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
Text(
|
||||
"Failed to load residences: ${com.example.mycrib.util.ErrorMessageParser.parse((residencesState as ApiResult.Error).message)}",
|
||||
"Failed to load residences: ${com.example.casera.util.ErrorMessageParser.parse((residencesState as ApiResult.Error).message)}",
|
||||
color = MaterialTheme.colorScheme.error
|
||||
)
|
||||
}
|
||||
@@ -596,7 +596,7 @@ fun DocumentFormScreen(
|
||||
)
|
||||
) {
|
||||
Text(
|
||||
com.example.mycrib.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
com.example.casera.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
modifier = Modifier.padding(12.dp),
|
||||
color = MaterialTheme.colorScheme.onErrorContainer
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -11,11 +11,11 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.documents.DocumentsTabContent
|
||||
import com.example.mycrib.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.casera.ui.components.documents.DocumentsTabContent
|
||||
import com.example.casera.ui.subscription.UpgradeFeatureScreen
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
import com.example.casera.models.*
|
||||
|
||||
enum class DocumentTab {
|
||||
WARRANTIES, DOCUMENTS
|
||||
@@ -36,7 +36,7 @@ fun DocumentsScreen(
|
||||
// Check if screen should be blocked (limit=0)
|
||||
val isBlocked = SubscriptionHelper.isDocumentsBlocked()
|
||||
// Get current count for checking when adding
|
||||
val currentCount = (documentsState as? com.example.mycrib.network.ApiResult.Success)?.data?.size ?: 0
|
||||
val currentCount = (documentsState as? com.example.casera.network.ApiResult.Success)?.data?.size ?: 0
|
||||
|
||||
var selectedCategory by remember { mutableStateOf<String?>(null) }
|
||||
var selectedDocType by remember { mutableStateOf<String?>(null) }
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.DocumentViewModel
|
||||
import com.example.casera.viewmodel.DocumentViewModel
|
||||
|
||||
@Composable
|
||||
fun EditDocumentScreen(
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.models.Residence
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.models.Residence
|
||||
|
||||
@Composable
|
||||
fun EditResidenceScreen(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -12,11 +12,11 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.*
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.*
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -286,7 +286,7 @@ fun EditTaskScreen(
|
||||
// Error message
|
||||
if (updateTaskState is ApiResult.Error) {
|
||||
Text(
|
||||
text = com.example.mycrib.util.ErrorMessageParser.parse((updateTaskState as ApiResult.Error).message),
|
||||
text = com.example.casera.util.ErrorMessageParser.parse((updateTaskState as ApiResult.Error).message),
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
style = MaterialTheme.typography.bodySmall
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -13,11 +13,11 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.PasswordResetViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -43,14 +43,14 @@ fun ForgotPasswordScreen(
|
||||
// Handle automatic navigation to next step
|
||||
LaunchedEffect(currentStep) {
|
||||
when (currentStep) {
|
||||
com.example.mycrib.viewmodel.PasswordResetStep.VERIFY_CODE -> onNavigateToVerify()
|
||||
com.example.mycrib.viewmodel.PasswordResetStep.RESET_PASSWORD -> onNavigateToReset()
|
||||
com.example.casera.viewmodel.PasswordResetStep.VERIFY_CODE -> onNavigateToVerify()
|
||||
com.example.casera.viewmodel.PasswordResetStep.RESET_PASSWORD -> onNavigateToReset()
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
|
||||
val errorMessage = when (forgotPasswordState) {
|
||||
is ApiResult.Error -> com.example.mycrib.util.ErrorMessageParser.parse((forgotPasswordState as ApiResult.Error).message)
|
||||
is ApiResult.Error -> com.example.casera.util.ErrorMessageParser.parse((forgotPasswordState as ApiResult.Error).message)
|
||||
else -> ""
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -15,10 +15,10 @@ import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -21,15 +21,15 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.AuthViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.AuthViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@Composable
|
||||
fun LoginScreen(
|
||||
onLoginSuccess: (com.example.mycrib.models.User) -> Unit,
|
||||
onLoginSuccess: (com.example.casera.models.User) -> Unit,
|
||||
onNavigateToRegister: () -> Unit,
|
||||
onNavigateToForgotPassword: () -> Unit = {},
|
||||
viewModel: AuthViewModel = viewModel { AuthViewModel() }
|
||||
@@ -57,7 +57,7 @@ fun LoginScreen(
|
||||
}
|
||||
|
||||
val errorMessage = when (loginState) {
|
||||
is ApiResult.Error -> com.example.mycrib.util.ErrorMessageParser.parse((loginState as ApiResult.Error).message)
|
||||
is ApiResult.Error -> com.example.casera.util.ErrorMessageParser.parse((loginState as ApiResult.Error).message)
|
||||
else -> ""
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -11,10 +11,10 @@ import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import androidx.navigation.toRoute
|
||||
import com.example.mycrib.navigation.*
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.Residence
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.casera.navigation.*
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.Residence
|
||||
import com.example.casera.storage.TokenStorage
|
||||
|
||||
@Composable
|
||||
fun MainScreen(
|
||||
@@ -22,7 +22,7 @@ fun MainScreen(
|
||||
onResidenceClick: (Int) -> Unit,
|
||||
onAddResidence: () -> Unit,
|
||||
onNavigateToEditResidence: (Residence) -> Unit,
|
||||
onNavigateToEditTask: (com.example.mycrib.models.TaskDetail) -> Unit,
|
||||
onNavigateToEditTask: (com.example.casera.models.TaskDetail) -> Unit,
|
||||
onAddTask: () -> Unit
|
||||
) {
|
||||
var selectedTab by remember { mutableStateOf(0) }
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -15,18 +15,18 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.ui.components.dialogs.ThemePickerDialog
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.mycrib.ui.theme.ThemeManager
|
||||
import com.example.mycrib.viewmodel.AuthViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.storage.TokenStorage
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.subscription.UpgradePromptDialog
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.ui.components.dialogs.ThemePickerDialog
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
import com.example.casera.ui.theme.ThemeManager
|
||||
import com.example.casera.viewmodel.AuthViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.storage.TokenStorage
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.subscription.UpgradePromptDialog
|
||||
import androidx.compose.runtime.getValue
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@@ -66,7 +66,7 @@ fun ProfileScreen(
|
||||
LaunchedEffect(Unit) {
|
||||
val token = TokenStorage.getToken()
|
||||
if (token != null) {
|
||||
val authApi = com.example.mycrib.network.AuthApi()
|
||||
val authApi = com.example.casera.network.AuthApi()
|
||||
when (val result = authApi.getCurrentUser(token)) {
|
||||
is ApiResult.Success -> {
|
||||
firstName = result.data.firstName ?: ""
|
||||
@@ -95,7 +95,7 @@ fun ProfileScreen(
|
||||
errorMessage = ""
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
errorMessage = com.example.mycrib.util.ErrorMessageParser.parse((updateState as ApiResult.Error).message)
|
||||
errorMessage = com.example.casera.util.ErrorMessageParser.parse((updateState as ApiResult.Error).message)
|
||||
isLoading = false
|
||||
successMessage = ""
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -14,11 +14,11 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.AuthViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.AuthViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -14,12 +14,12 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||
import androidx.compose.ui.text.input.VisualTransformation
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.auth.RequirementItem
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.PasswordResetViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.auth.RequirementItem
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -43,12 +43,12 @@ fun ResetPasswordScreen(
|
||||
)
|
||||
|
||||
val errorMessage = when (resetPasswordState) {
|
||||
is ApiResult.Error -> com.example.mycrib.util.ErrorMessageParser.parse((resetPasswordState as ApiResult.Error).message)
|
||||
is ApiResult.Error -> com.example.casera.util.ErrorMessageParser.parse((resetPasswordState as ApiResult.Error).message)
|
||||
else -> ""
|
||||
}
|
||||
|
||||
val isLoading = resetPasswordState is ApiResult.Loading
|
||||
val isSuccess = currentStep == com.example.mycrib.viewmodel.PasswordResetStep.SUCCESS
|
||||
val isSuccess = currentStep == com.example.casera.viewmodel.PasswordResetStep.SUCCESS
|
||||
|
||||
// Password validation
|
||||
val hasLetter = newPassword.any { it.isLetter() }
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -14,26 +14,26 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.AddNewTaskDialog
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.CompleteTaskDialog
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.ManageUsersDialog
|
||||
import com.example.mycrib.ui.components.common.InfoCard
|
||||
import com.example.mycrib.ui.components.residence.PropertyDetailItem
|
||||
import com.example.mycrib.ui.components.residence.DetailRow
|
||||
import com.example.mycrib.ui.components.task.TaskCard
|
||||
import com.example.mycrib.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.viewmodel.TaskCompletionViewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.mycrib.models.Residence
|
||||
import com.example.mycrib.models.TaskDetail
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.mycrib.ui.subscription.UpgradePromptDialog
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.cache.DataCache
|
||||
import com.example.casera.ui.components.AddNewTaskDialog
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.CompleteTaskDialog
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.ManageUsersDialog
|
||||
import com.example.casera.ui.components.common.InfoCard
|
||||
import com.example.casera.ui.components.residence.PropertyDetailItem
|
||||
import com.example.casera.ui.components.residence.DetailRow
|
||||
import com.example.casera.ui.components.task.TaskCard
|
||||
import com.example.casera.ui.components.task.DynamicTaskKanbanView
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.viewmodel.TaskCompletionViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
import com.example.casera.models.Residence
|
||||
import com.example.casera.models.TaskDetail
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import com.example.casera.ui.subscription.UpgradePromptDialog
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.cache.DataCache
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -653,7 +653,7 @@ fun ResidenceDetailScreen(
|
||||
shape = RoundedCornerShape(12.dp)
|
||||
) {
|
||||
Text(
|
||||
text = "Error loading tasks: ${com.example.mycrib.util.ErrorMessageParser.parse((tasksState as ApiResult.Error).message)}",
|
||||
text = "Error loading tasks: ${com.example.casera.util.ErrorMessageParser.parse((tasksState as ApiResult.Error).message)}",
|
||||
color = MaterialTheme.colorScheme.onErrorContainer,
|
||||
modifier = Modifier.padding(16.dp)
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -12,12 +12,12 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.repository.LookupsRepository
|
||||
import com.example.mycrib.models.Residence
|
||||
import com.example.mycrib.models.ResidenceCreateRequest
|
||||
import com.example.mycrib.models.ResidenceType
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.repository.LookupsRepository
|
||||
import com.example.casera.models.Residence
|
||||
import com.example.casera.models.ResidenceCreateRequest
|
||||
import com.example.casera.models.ResidenceType
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -294,7 +294,7 @@ fun ResidenceFormScreen(
|
||||
// Error message
|
||||
if (operationState is ApiResult.Error) {
|
||||
Text(
|
||||
text = com.example.mycrib.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
text = com.example.casera.util.ErrorMessageParser.parse((operationState as ApiResult.Error).message),
|
||||
color = MaterialTheme.colorScheme.error,
|
||||
style = MaterialTheme.typography.bodySmall
|
||||
)
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
@@ -20,15 +20,15 @@ import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.ApiResultHandler
|
||||
import com.example.mycrib.ui.components.JoinResidenceDialog
|
||||
import com.example.mycrib.ui.components.common.StatItem
|
||||
import com.example.mycrib.ui.components.residence.TaskStatChip
|
||||
import com.example.mycrib.viewmodel.ResidenceViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.mycrib.utils.SubscriptionHelper
|
||||
import com.example.mycrib.ui.subscription.UpgradePromptDialog
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.casera.ui.components.ApiResultHandler
|
||||
import com.example.casera.ui.components.JoinResidenceDialog
|
||||
import com.example.casera.ui.components.common.StatItem
|
||||
import com.example.casera.ui.components.residence.TaskStatChip
|
||||
import com.example.casera.viewmodel.ResidenceViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
import com.example.casera.utils.SubscriptionHelper
|
||||
import com.example.casera.ui.subscription.UpgradePromptDialog
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
@@ -10,15 +10,15 @@ import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.CompleteTaskDialog
|
||||
import com.example.mycrib.ui.components.ErrorDialog
|
||||
import com.example.mycrib.ui.components.task.TaskCard
|
||||
import com.example.mycrib.ui.components.task.TaskPill
|
||||
import com.example.mycrib.ui.utils.getIconFromName
|
||||
import com.example.mycrib.ui.utils.hexToColor
|
||||
import com.example.mycrib.viewmodel.TaskCompletionViewModel
|
||||
import com.example.mycrib.viewmodel.TaskViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.CompleteTaskDialog
|
||||
import com.example.casera.ui.components.ErrorDialog
|
||||
import com.example.casera.ui.components.task.TaskCard
|
||||
import com.example.casera.ui.components.task.TaskPill
|
||||
import com.example.casera.ui.utils.getIconFromName
|
||||
import com.example.casera.ui.utils.hexToColor
|
||||
import com.example.casera.viewmodel.TaskCompletionViewModel
|
||||
import com.example.casera.viewmodel.TaskViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -32,14 +32,14 @@ fun TasksScreen(
|
||||
val completionState by taskCompletionViewModel.createCompletionState.collectAsState()
|
||||
var expandedColumns by remember { mutableStateOf(setOf<String>()) }
|
||||
var showCompleteDialog by remember { mutableStateOf(false) }
|
||||
var selectedTask by remember { mutableStateOf<com.example.mycrib.models.TaskDetail?>(null) }
|
||||
var selectedTask by remember { mutableStateOf<com.example.casera.models.TaskDetail?>(null) }
|
||||
var showErrorDialog by remember { mutableStateOf(false) }
|
||||
var errorMessage by remember { mutableStateOf("") }
|
||||
|
||||
// Show error dialog when tasks fail to load
|
||||
LaunchedEffect(tasksState) {
|
||||
if (tasksState is ApiResult.Error) {
|
||||
errorMessage = com.example.mycrib.util.ErrorMessageParser.parse((tasksState as ApiResult.Error).message)
|
||||
errorMessage = com.example.casera.util.ErrorMessageParser.parse((tasksState as ApiResult.Error).message)
|
||||
showErrorDialog = true
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -16,11 +16,11 @@ import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.AuthViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.AuthViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -48,7 +48,7 @@ fun VerifyEmailScreen(
|
||||
onVerifySuccess()
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
errorMessage = com.example.mycrib.util.ErrorMessageParser.parse((verifyState as ApiResult.Error).message)
|
||||
errorMessage = com.example.casera.util.ErrorMessageParser.parse((verifyState as ApiResult.Error).message)
|
||||
isLoading = false
|
||||
}
|
||||
is ApiResult.Loading -> {
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.screens
|
||||
package com.example.casera.ui.screens
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
@@ -14,11 +14,11 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.ui.components.HandleErrors
|
||||
import com.example.mycrib.ui.components.auth.AuthHeader
|
||||
import com.example.mycrib.ui.components.common.ErrorCard
|
||||
import com.example.mycrib.viewmodel.PasswordResetViewModel
|
||||
import com.example.mycrib.network.ApiResult
|
||||
import com.example.casera.ui.components.HandleErrors
|
||||
import com.example.casera.ui.components.auth.AuthHeader
|
||||
import com.example.casera.ui.components.common.ErrorCard
|
||||
import com.example.casera.viewmodel.PasswordResetViewModel
|
||||
import com.example.casera.network.ApiResult
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -40,13 +40,13 @@ fun VerifyResetCodeScreen(
|
||||
|
||||
// Handle automatic navigation to next step
|
||||
LaunchedEffect(currentStep) {
|
||||
if (currentStep == com.example.mycrib.viewmodel.PasswordResetStep.RESET_PASSWORD) {
|
||||
if (currentStep == com.example.casera.viewmodel.PasswordResetStep.RESET_PASSWORD) {
|
||||
onNavigateToReset()
|
||||
}
|
||||
}
|
||||
|
||||
val errorMessage = when (verifyCodeState) {
|
||||
is ApiResult.Error -> com.example.mycrib.util.ErrorMessageParser.parse((verifyCodeState as ApiResult.Error).message)
|
||||
is ApiResult.Error -> com.example.casera.util.ErrorMessageParser.parse((verifyCodeState as ApiResult.Error).message)
|
||||
else -> ""
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.subscription
|
||||
package com.example.casera.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -13,9 +13,9 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
@Composable
|
||||
fun FeatureComparisonDialog(
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.subscription
|
||||
package com.example.casera.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
@@ -13,9 +13,9 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
/**
|
||||
* Full inline paywall screen for upgrade prompts.
|
||||
@@ -252,26 +252,26 @@ private fun SubscriptionProductsSection(
|
||||
) {
|
||||
// Monthly Option
|
||||
SubscriptionProductCard(
|
||||
productId = "com.example.mycrib.pro.monthly",
|
||||
productId = "com.example.casera.pro.monthly",
|
||||
name = "MyCrib Pro Monthly",
|
||||
price = "$4.99/month",
|
||||
description = "Billed monthly",
|
||||
savingsBadge = null,
|
||||
isSelected = false,
|
||||
isProcessing = isProcessing,
|
||||
onSelect = { onProductSelected("com.example.mycrib.pro.monthly") }
|
||||
onSelect = { onProductSelected("com.example.casera.pro.monthly") }
|
||||
)
|
||||
|
||||
// Annual Option
|
||||
SubscriptionProductCard(
|
||||
productId = "com.example.mycrib.pro.annual",
|
||||
productId = "com.example.casera.pro.annual",
|
||||
name = "MyCrib Pro Annual",
|
||||
price = "$39.99/year",
|
||||
description = "Billed annually",
|
||||
savingsBadge = "Save 33%",
|
||||
isSelected = false,
|
||||
isProcessing = isProcessing,
|
||||
onSelect = { onProductSelected("com.example.mycrib.pro.annual") }
|
||||
onSelect = { onProductSelected("com.example.casera.pro.annual") }
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.example.mycrib.ui.subscription
|
||||
package com.example.casera.ui.subscription
|
||||
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -11,9 +11,9 @@ import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.Dialog
|
||||
import com.example.mycrib.cache.SubscriptionCache
|
||||
import com.example.mycrib.ui.theme.AppRadius
|
||||
import com.example.mycrib.ui.theme.AppSpacing
|
||||
import com.example.casera.cache.SubscriptionCache
|
||||
import com.example.casera.ui.theme.AppRadius
|
||||
import com.example.casera.ui.theme.AppSpacing
|
||||
|
||||
@Composable
|
||||
fun UpgradePromptDialog(
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user