export default store()

in customer-ui/src/store/index.js [22:117]


export default store(function () {
  const Store = createStore({
    state: {
      menuItems: [],
      orderItems: [],
      status : '',
      userName: '',
      userPhotoUrl: '',
      orders: []
    },
    getters: {
      userIsLoggedIn(state) {
        return state.userName != '';
      }
    },
    mutations: {
      setMenuItems(state, menuItems) {
        state.menuItems = menuItems;
      },
      setInventoryCounts(state, inventoryCounts) {
        const newMenuItems = JSON.parse(JSON.stringify(state.menuItems));
        for (let inventoryCount of inventoryCounts) {
          const menuItem = newMenuItems.find(m => m.id == inventoryCount.id);
          if (menuItem) {
            menuItem.inventory = inventoryCount.inventory;
          }
        }
        state.menuItems = newMenuItems;
      },
      addDishToOrder(state, dishId) {
        const dish = state.menuItems.find(d => d.id==dishId);
        if (dish) {
          state.orderItems.push({...dish, quantity: 1});
        }
      },
      deleteItem(state, index) {
        state.orderItems.splice(index, 1);
      },
      setOrder(state, {orderItems, status}) {
        state.orderItems = orderItems.splice(0);
        state.status = status;
      },
      setUser(state, {userName, userPhotoUrl}) {
        state.userName = userName;
        state.userPhotoUrl = userPhotoUrl;
      },
      setOrders(state, orders) {
        state.orders = orders;
      }
    },
    actions: {
      async loadMenu(context) {
        const menuItems = await Server.getMenuItems();
        context.commit('setMenuItems', menuItems);
        const inventoryCounts = await Server.getInventoryCounts();
        context.commit('setInventoryCounts', inventoryCounts);
      },
      async placeOrder(context, {name, email, address, city, state, zip}) {
        // TODO: Check if the user is logged in.
        const idToken = await Firebase.getToken();
        const orderNumber = await Server.placeOrder(
          idToken, name, email, address, city, state, zip, context.state.orderItems
        );
        return orderNumber;
      },
      async logIn(context) {
        try {
          const user = await Firebase.logIn();
          context.commit('setUser', {userName: user.displayName, userPhotoUrl: user.photoURL});
        }
        catch (ex) {
          console.log(ex)
        }
      },
      async logOut(context) {
        try {
          Firebase.logOut();
          context.commit('setUser', {userName: '', userPhotoUrl: ''});
        }
        catch (ex) {
          console.log(ex)
        }
      },
      async loadOrders(context) {
        const token = await Firebase.getToken();
        const orders = await Server.getOrders(token);
        context.commit('setOrders', orders);
      }
    },
    // enable strict mode (adds overhead!)
    // for dev mode and --debug builds only
    strict: process.env.DEBUGGING
  })

  return Store
})