From 8014def1a8da3397d78d1162f9e1b8c3f22d0322 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 26 Dec 2020 10:51:46 +0530 Subject: add transactions and quantities - backend exposes endpoints to perform transactions - frontend introduces a new page to "checkout" cart --- frontend/src/Main.elm | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) (limited to 'frontend/src/Main.elm') diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm index bf1583c..f1883a1 100644 --- a/frontend/src/Main.elm +++ b/frontend/src/Main.elm @@ -4,6 +4,7 @@ import Browser import Browser.Navigation as Nav import Cart import Catalog +import Checkout import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) @@ -43,6 +44,7 @@ type Route | CatalogPage | CartPage | ProductPage Int + | CheckoutPage | NotFoundPage @@ -54,9 +56,8 @@ parseRoute = , P.map CatalogPage (P.s "catalog") , P.map CartPage (P.s "cart") , P.map SignupPage (P.s "signup") + , P.map CheckoutPage (P.s "checkout") , P.map ProductPage (P.s "product" P.int) - - --, P.map ProductPage (P.s "product" int) ] @@ -69,6 +70,7 @@ type alias Model = , productModel : Product.Model , signupModel : Signup.Model , cartModel : Cart.Model + , checkoutModel : Checkout.Model } @@ -92,8 +94,11 @@ init flags url key = cart = Cart.init + + checkout = + Checkout.init in - ( Model key url start login catalog product signup cart, Cmd.none ) + ( Model key url start login catalog product signup cart checkout, Cmd.none ) @@ -108,6 +113,7 @@ type Msg | ProductMessage Product.Msg | SignupMessage Signup.Msg | CartMessage Cart.Msg + | CheckoutMessage Checkout.Msg | LogoutPressed | LogoutSuccess (Result Http.Error ()) @@ -127,7 +133,7 @@ update msg model = ( model, tryLogout ) LogoutSuccess _ -> - ( model, Nav.replaceUrl model.key "/login" ) + ( { model | loginModel = Login.init }, Nav.replaceUrl model.key "/login" ) UrlChanged url -> let @@ -155,6 +161,16 @@ update msg model = in ( { model | location = CartPage }, cmd ) + Just CheckoutPage -> + let + _ = + Debug.log "err" "loading checkout page ..." + + cmd = + Cmd.map CheckoutMessage Checkout.fetchAmount + in + ( { model | location = CheckoutPage }, cmd ) + Just p -> ( { model | location = p }, Cmd.none ) @@ -205,6 +221,16 @@ update msg model = in ( { model | cartModel = cmn }, Cmd.map CartMessage cmd ) + CheckoutMessage cm -> + let + ( cmn, cmd ) = + Checkout.update cm model.checkoutModel + + _ = + Debug.log "err" "received checkout message ..." + in + ( { model | checkoutModel = cmn }, Cmd.map CheckoutMessage cmd ) + ProductMessage pm -> let ( pmn, cmd ) = @@ -292,6 +318,11 @@ view model = , body = pageWrap model (Html.map CartMessage (Cart.view model.cartModel)) } + CheckoutPage -> + { title = "Checkout" + , body = pageWrap model (Html.map CheckoutMessage (Checkout.view model.checkoutModel)) + } + ProductPage item -> { title = "Product " ++ String.fromInt item , body = pageWrap model (Html.map ProductMessage (Product.view model.productModel)) -- cgit v1.2.3