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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions foliage/.gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
*.iml
.gradle
/local.properties
/.kotlin
/.idea/caches
/.idea/libraries
/.idea/modules.xml
Expand Down
42 changes: 23 additions & 19 deletions foliage/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ plugins {
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)

id("com.apollographql.apollo")
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.apollo)
}

android {
Expand Down Expand Up @@ -45,37 +45,41 @@ android {

apollo {
service("service") {
packageName.set("sapling.foliage")
packageName.set("sapling.foliage.gql")
schemaFile.set(file("src/main/graphql/sapling/foliage/service/schema.graphqls"))
introspection {
endpointUrl.set("http://localhost:3000/gql")
// TODO: Use setting or env to control schema source
endpointUrl.set("https://sapling.geigr.dev/gql")
}
}
}

dependencies {
implementation(libs.play.services.code.scanner)
implementation(libs.androidx.material)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.lifecycle.viewmodel.compose)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.material)
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.material3)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.preference.ktx)
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.material3)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.apollo.runtime)
implementation(libs.apollo.api)
implementation(libs.apollo.runtime)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.lifecycle.viewmodel.compose)
implementation(libs.play.services.code.scanner)
implementation(libs.zhanghai.preferences)
implementation(platform(libs.androidx.compose.bom))

testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.ui.test.junit4)
// testImplementation(libs.junit)
// androidTestImplementation(libs.androidx.junit)
// androidTestImplementation(libs.androidx.espresso.core)
// androidTestImplementation(platform(libs.androidx.compose.bom))
// androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
query InventoryQuery {
items {
product {
name
ean
}

cost
createdAt
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,18 @@ The `Int` scalar type represents non-fractional whole numeric values.
"""
scalar Int

type Item {
itemId: Int!

ean: EAN!

createdAt: DateTime!

cost: Int

product: Product!
}

type Product {
ean: EAN!

Expand All @@ -40,6 +52,8 @@ type Product {
tags: [Tag!]!

groups: [Tag!]!

items: [Item!]!
}

type RootMutation {
Expand All @@ -48,12 +62,16 @@ type RootMutation {
register(username: String!, password: String!): User!

insertProduct(ean: EAN!, name: String!): Product!

insertItem(ean: EAN!, cost: Int!): Item!
}

type RootQuery {
product(ean: EAN!): Product

products: [Product!]!

items: [Item!]!
}

type Session {
Expand Down
10 changes: 10 additions & 0 deletions foliage/app/src/main/java/sapling/foliage/Apollo.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package sapling.foliage

import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import com.apollographql.apollo.ApolloClient
import me.zhanghai.compose.preference.defaultPreferenceFlow

fun apolloClient(serverUrl: String?): ApolloClient =
ApolloClient.Builder().serverUrl(serverUrl ?: "https://sapling.geigr.dev/gql")
.build()
46 changes: 46 additions & 0 deletions foliage/app/src/main/java/sapling/foliage/Foliage.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package sapling.foliage

import android.content.SharedPreferences
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import kotlinx.coroutines.flow.asStateFlow
import me.zhanghai.compose.preference.ProvidePreferenceLocals
import me.zhanghai.compose.preference.defaultPreferenceFlow
import sapling.foliage.ui.components.Inventory
import sapling.foliage.ui.components.MainNavbar
import sapling.foliage.ui.components.Settings
import sapling.foliage.ui.components.ShoppingTourList
import sapling.foliage.ui.screens.InventoryScreen
import sapling.foliage.ui.screens.SettingsScreen
import sapling.foliage.ui.screens.ShoppingScreen
import sapling.foliage.ui.theme.FoliageTheme

@Composable
fun FoliageApp() {
FoliageTheme {
ProvidePreferenceLocals {
val navController = rememberNavController()
Column(
verticalArrangement = Arrangement.Bottom,
modifier = Modifier.fillMaxSize()
) {
NavHost(
navController = navController,
startDestination = ShoppingTourList,
modifier = Modifier.weight(1f)
) {
composable<ShoppingTourList> { ShoppingScreen() }
composable<Inventory> { InventoryScreen() }
composable<Settings> { SettingsScreen() }
}
MainNavbar(navController = navController)
}
}
}
}
23 changes: 0 additions & 23 deletions foliage/app/src/main/java/sapling/foliage/GraphQLClient.kt

This file was deleted.

26 changes: 0 additions & 26 deletions foliage/app/src/main/java/sapling/foliage/GraphQLViewModel.kt

This file was deleted.

33 changes: 0 additions & 33 deletions foliage/app/src/main/java/sapling/foliage/GraphQlScreen.kt

This file was deleted.

35 changes: 2 additions & 33 deletions foliage/app/src/main/java/sapling/foliage/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,45 +4,14 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.ui.Modifier
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import sapling.foliage.ui.components.Inventory
import sapling.foliage.ui.components.MainNavbar
import sapling.foliage.ui.components.Settings
import sapling.foliage.ui.components.ShoppingTourList
import sapling.foliage.ui.screens.InventoryScreen
import sapling.foliage.ui.screens.SettingsScreen
import sapling.foliage.ui.screens.ShoppingScreen
import sapling.foliage.ui.theme.FoliageTheme


class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
FoliageTheme {
val navController = rememberNavController()
Column(
verticalArrangement = Arrangement.Bottom,
modifier = Modifier.fillMaxSize()
) {
NavHost(
navController = navController,
startDestination = ShoppingTourList,
modifier = Modifier.weight(1f)
) {
composable<ShoppingTourList> { ShoppingScreen() }
composable<Inventory> { InventoryScreen() }
composable<Settings> { GraphQLScreen() }
}
MainNavbar(navController = navController)
}
}
FoliageApp()
}
}
}
19 changes: 0 additions & 19 deletions foliage/app/src/main/java/sapling/foliage/ViewModelFactory.kt

This file was deleted.

Loading