Last active
July 1, 2021 00:27
-
-
Save aceslick911/202c766ce0dda1a9d662818f499552ad to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const resolveInOneSec = async () => { | |
| return await new Promise(resolve => { | |
| setTimeout(() => { | |
| resolve(true); | |
| console.log("RESOLVED"); | |
| }, 1000) | |
| }); | |
| }; | |
| const BCGServices = { | |
| UI_READY: resolveInOneSec, | |
| BASKET_READY: resolveInOneSec, | |
| INVENTORY_READY: resolveInOneSec, | |
| BASKET_CLEARED: resolveInOneSec, | |
| UPDATE_CART: resolveInOneSec, | |
| UPDATE_BILL: resolveInOneSec, | |
| PROCESS_DISCOUNT_RULES: resolveInOneSec, | |
| PROCESS_DISCOUNT_RULE: resolveInOneSec, | |
| PROCESS_DISCOUNT_RULE_FOR_BASKET: resolveInOneSec, | |
| CHECK_DISCOUNT_RULE_ON_ITEM: resolveInOneSec, | |
| MARK_DISCOUNT_NOTAPPLY_FOR_ITEM: resolveInOneSec, | |
| MARK_DISCOUNT_DOESAPPLY_FOR_ITEM: resolveInOneSec, | |
| CALCULATE_LINE_ITEMS: resolveInOneSec, | |
| BILL_IS_READY: resolveInOneSec, | |
| } | |
| const BCGContext = { | |
| discountRules: [], | |
| productInventory: [], | |
| basket: { | |
| lineItems: [], | |
| discountsApplied: [], | |
| totalCost: 0, | |
| totalDiscounts: 0, | |
| amountDue: 0, | |
| discountInfo: "" | |
| }, | |
| uiState: { | |
| websiteName: "BCG Checkout" | |
| }, | |
| } | |
| const BCGCheckout = Machine/*<typeof BCGContext, any>*/({ | |
| id: 'bcg-checkout', | |
| initial: 'start', | |
| context: BCGContext, | |
| states: { | |
| start: { | |
| on: { | |
| LOAD_SHOPPING_ASSETS: { | |
| target: 'prepareShopppingAssets.UserInterface', | |
| } | |
| } | |
| }, | |
| prepareShopppingAssets: { | |
| type: 'parallel', | |
| states: { | |
| UserInterface: { | |
| initial: 'loadingUI', | |
| states: { | |
| loadingUI: { | |
| id: 'ui-ready', | |
| after:{ | |
| 1000:'UI_READY' | |
| }, | |
| on:{ | |
| UI_READY:'done', | |
| } | |
| }, | |
| done: { | |
| type: "final", | |
| } | |
| } | |
| }, | |
| ShoppingBasket: { | |
| initial: 'loadingBasket', | |
| states: { | |
| loadingBasket: { | |
| id: 'basket-ready', | |
| after:{ | |
| 1000:'BASKET_READY' | |
| }, | |
| on:{ | |
| BASKET_READY:'done', | |
| } | |
| }, | |
| done: { | |
| type: "final", | |
| } | |
| } | |
| }, | |
| Products: { | |
| initial: 'loadingInventory', | |
| states: { | |
| loadingInventory: { | |
| id: 'inventory-ready', | |
| after:{ | |
| 1000:'INVENTORY_READY' | |
| }, | |
| on:{ | |
| INVENTORY_READY:'done', | |
| } | |
| }, | |
| done: { | |
| type: "final", | |
| } | |
| } | |
| } | |
| }, | |
| onDone: { | |
| target: '#UIActive', | |
| }, | |
| }, | |
| shopping: { | |
| id: 'shopping', | |
| type: 'parallel', | |
| states: { | |
| uIActive: { | |
| id: 'UIActive', | |
| initial:'shoppingReady', | |
| states: { | |
| shoppingReady:{ | |
| }, | |
| basketCleared: { | |
| id: 'basket-cleared', | |
| after:{ | |
| 1000:'BASKET_CLEARED' | |
| }, | |
| on:{ | |
| BASKET_CLEARED:'#shopping.updatingShopping', | |
| } | |
| }, | |
| purchasing: { | |
| states: { | |
| paymentProcessing: { | |
| on:{ | |
| PAYMENT_ACCEPTED:{ | |
| target:'shoppingComplete' | |
| }, | |
| PAYMENT_FAILED:{ | |
| target:'paymentFailed' | |
| } | |
| } | |
| }, | |
| paymentFailed: {}, | |
| shoppingComplete: { | |
| type: "final" | |
| }, | |
| } | |
| }, | |
| abandonBasket: { | |
| }, | |
| }, | |
| on: { | |
| // BASKET_UPDATED: { | |
| // target: '#showingProducts.bcgShoppingReady', | |
| // }, | |
| ADD_ITEM_TO_BASKET: { | |
| target: ['#shopping.updatingShopping','..updatingShopping.calculatingBill'], | |
| }, | |
| REMOVE_ITEM_FROM_BASKET: { | |
| target: ['#shopping.updatingShopping','..updatingShopping.calculatingBill'], | |
| }, | |
| CLEAR_BASKET: { | |
| target: '#basket-cleared', | |
| }, | |
| GO_TO_CHECKOUT: { | |
| target: ['#shopping.updatingShopping','..updatingShopping.calculatingBill'], | |
| }, | |
| }, | |
| }, | |
| updatingShopping: { | |
| initial: 'waitingForCartChanges', | |
| //type: 'parallel', | |
| states: { | |
| waitingForCartChanges: { | |
| on:{ | |
| CART_UPDATED:{ | |
| target:"calculatingBill", | |
| } | |
| } | |
| }, | |
| calculatingBill: { | |
| initial: 'processingDiscountRules', | |
| states: { | |
| processingDiscountRules: { | |
| after:{ | |
| 1000:'PROCESS_DISCOUNT_RULES' | |
| }, | |
| on:{ | |
| PROCESS_DISCOUNT_RULES:'processingDiscountRule', | |
| } | |
| }, | |
| processingDiscountRule: { | |
| after:{ | |
| 1000:'PROCESS_DISCOUNT_RULE' | |
| }, | |
| on:{ | |
| PROCESS_DISCOUNT_RULE:'checkingBasketItems', | |
| } | |
| }, | |
| checkingBasketItems: { | |
| after:{ | |
| 1000:'PROCESS_DISCOUNT_RULE_FOR_BASKET' | |
| }, | |
| on:{ | |
| PROCESS_DISCOUNT_RULE_FOR_BASKET:'checkingBasketItem', | |
| } | |
| }, | |
| checkingBasketItem: { | |
| after:{ | |
| 1000:'CHECK_DISCOUNT_RULE_ON_ITEM' | |
| }, | |
| on:{ | |
| CHECK_DISCOUNT_RULE_ON_ITEM:'skippedDiscountRule', | |
| } | |
| }, | |
| skippedDiscountRule: { | |
| after:{ | |
| 1000:'MARK_DISCOUNT_NOTAPPLY_FOR_ITEM' | |
| }, | |
| on:{ | |
| MARK_DISCOUNT_NOTAPPLY_FOR_ITEM:'applyDiscountRule', | |
| } | |
| }, | |
| applyDiscountRule: { | |
| after:{ | |
| 1000:'MARK_DISCOUNT_DOESAPPLY_FOR_ITEM' | |
| }, | |
| on:{ | |
| MARK_DISCOUNT_DOESAPPLY_FOR_ITEM:'calculatingLineItems', | |
| } | |
| }, | |
| calculatingLineItems: { | |
| after:{ | |
| 1000:'CALCULATE_LINE_ITEMS' | |
| }, | |
| on:{ | |
| CALCULATE_LINE_ITEMS:'calculationsDone', | |
| } | |
| }, | |
| calculationsDone: { | |
| after:{ | |
| 1000:'BILL_IS_READY' | |
| }, | |
| on:{ | |
| BILL_IS_READY:'done', | |
| } | |
| }, | |
| done: { | |
| type: "final" | |
| }, | |
| }, | |
| onDone: { | |
| target: 'waitingForCartChanges', | |
| }, | |
| }, | |
| }, | |
| onDone: { | |
| actions: assign({ | |
| basket: (context, event) => event.data | |
| }), | |
| target: '#UIActive', | |
| }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| // { | |
| // services: BCGServices | |
| // } | |
| ); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment