From 7c2289098e79341758b1e740f5e0df5c5e7972ba Mon Sep 17 00:00:00 2001 From: Jordan Hewitt Date: Fri, 28 Jun 2024 17:04:30 -0700 Subject: [PATCH] working on getting input to respond correctly. --- app/(tabs)/_layout.tsx | 58 ++++++------ app/(tabs)/index.tsx | 151 ++++++++++++++++++++++++++++--- app/(tabs)/product-editor.tsx | 7 +- components/LengthInput.tsx | 6 +- components/ProductEditor.tsx | 1 - components/ProductEditorItem.tsx | 14 ++- components/ProductTile.tsx | 10 +- lib/product.ts | 12 +++ 8 files changed, 206 insertions(+), 53 deletions(-) diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index f579bd6..a3fb5d5 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -1,37 +1,43 @@ import { Tabs } from 'expo-router'; -import React from 'react'; import { Colors } from '@/constants/Colors'; import { useColorScheme } from '@/hooks/useColorScheme'; import { TabBarIcon } from '@/components/navigation/TabBarIcon'; +import { Provider } from 'react-redux'; +import { products as fixtures } from "@/__fixtures__/initialProducts" +import { setupStore } from '../store'; export default function TabLayout() { const colorScheme = useColorScheme(); - + const store = setupStore({ + products: fixtures + }); return ( - - ( - - ), - }} - /> - ( - - ), - }} - /> - + + + ( + + ), + }} + /> + ( + + ), + }} + /> + + ); } diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx index e1b6827..671f3cd 100644 --- a/app/(tabs)/index.tsx +++ b/app/(tabs)/index.tsx @@ -1,36 +1,165 @@ -import { Image, StyleSheet, Platform, ImageBackground } from 'react-native'; +import { Image, StyleSheet, Platform, ImageBackground, View, Text, Button, TextInputKeyPressEventData } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; -import { MeasurementInput } from '@/components/LengthInput'; -import { setupStore, useAppDispatch } from '../store'; +import { useAppSelector } from '../store'; import { selectProducts } from '@/features/product/productSlice'; -import { Product } from '@/lib/product'; +import { Product, dimensions_t } from '@/lib/product'; import { ProductTile } from '@/components/ProductTile'; -import { Measure, area, length } from 'enheter'; +import { useEffect, useState } from 'react'; +import { TextInput, TouchableHighlight } from 'react-native-gesture-handler'; export default function HomeScreen() { - const products = useAppDispatch(selectProducts); + const products = useAppSelector(selectProducts); + const [activeProduct, setActiveProduct] = useState(null as Product | null); + const [price, setPrice] = useState("0.00"); + const [length, setLength] = useState("0"); + const [width, setWidth] = useState("0"); + const [units, setUnits] = useState("in" as "ft" | "in"); function calculatePrice() { - + if (!activeProduct) { + setPrice("0.00"); + return; + } + const l = Number.parseInt(length); + const w = Number.parseInt(width); + console.log("l=%d, w=%d", l, w); + const u = units; + const d : dimensions_t = activeProduct.area ? {l, w, u} : {l, u}; + const p = activeProduct.priceFor(d); + console.log("set price %s", p); + const s = p.toLocaleString(undefined, { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + }) + setPrice(s); } - const selectProduct = (product : Product) => { + const onProductSelected = (product: Product) => { + setActiveProduct(product); + calculatePrice(); + } + const onUnitPressed = (u : "ft" | "in") => { + setUnits(u); + calculatePrice(); + } + + const onLengthChanged = (value : string) => { + setLength(value); + calculatePrice(); + } + + const onWidthChanged = (width : string) => { + setWidth(width); + calculatePrice(); } return ( - - + + + $ { price } + + + + {activeProduct ? ( + + + {units} + {activeProduct.area && + + ( calculatePrice()} + onChangeText={setWidth} + inputMode='decimal' + style={styles.widthInput} + /> + {units} + ) + } + + ) : (Please choose a product)} + + +