Index
A
- access tokens
- refreshing, with axios interceptor / Refreshing access tokens with axios interceptors
- removing / Finishing up
- accordion component
- building / Building an accordion component
- accordion behavior, defining / Defining the accordion behavior
- styling / Styling the accordion component
- account page
- building / Building a my account page
- OrderList component, building / Building the OrderList component
- dates, formatting with reusable date filter / Formatting dates with a reusable date filter
- linking / Linking to the my account page
- actions / Actions
- admin panel
- accessing / Linking to the admin panel
- logout bug, fixing / Fixing a logout bug
- bug, fixing by product variant selection / Fixing a bug by selecting a product variant
- admin panel components
- building / Building the admin panel components
- nested route definitions, configuring / Configuring nested route definitions
- refactoring, for re-use / Refactoring components for reuse
- product list component / Product list component
- product form component, creating / Creating a product form component
- add variant modal component, creating / Creating an add variant modal component
- API
- data, fetching / Fetching data from an API
- API requests
- debouncing / Debouncing API requests to limit how often they fire
- application
- preparing, for deployment / Preparing the application for deployment
- apps configuration
- finalizing / Finalizing the apps configuration
- app service
- creating / Creating an app service
- app service plan
- about / Creating an app service
- creating / Creating an app service
- argument destructuring / Creating an action
- ASP.NET Core
- features / ASP.NET Core – what's new?
- middleware pipeline / Middleware pipeline
- application startup / Application startup
- dependency injection (DI) / DI is a first-class citizen
- installing / Installing ASP.NET Core
- reference / Installing ASP.NET Core
- authentication endpoint
- extending, with user roles / Extending the authentication endpoint with user roles
- axios interceptor
- used, for refreshing access tokens / Refreshing access tokens with axios interceptors
- Azure
- resource group, creating / Creating a subscription and resource group
- database, creating / Creating a database
- environment variables, configuring / Configuring environment variables
- logging, enabling / Enabling logging in Azure
- Azure account
- registering for / Registering for an Azure account
- Azure app service Git deployments
- disabling / Disabling Azure app service Git deployments
- Azure App Services
- HTTPS, forcing on / Forcing HTTPS connections only
- Azure environment
- setting up / Setting up an Azure environment
- Azure portal
- reference / Registering for an Azure account
- Azure resources / Understanding Azure subscriptions and resources
- Azure subscriptions
- about / Understanding Azure subscriptions and resources
- creating / Creating a subscription and resource group
B
- backend dependencies
- installing / Installing backend tools and dependencies
- backend setup, Vue application
- refactoring / Refactoring the backend setup
- feature folder structure, refactoring to / Refactoring to a feature folder structure
- backend tools
- installing / Installing backend tools and dependencies
- ASP.NET Core, installing / Installing ASP.NET Core
- PostgreSQL, installing / Installing PostgreSQL
- IDE, selecting / Choosing and installing an IDE
- IDE, installing / Choosing and installing an IDE
- Bootstrap / What is Bootstrap-Vue?, Updating the webpack vendor configuration
- Bootstrap-Vue / Choosing a UX framework, What is Bootstrap-Vue?, Updating the webpack vendor configuration
- browser reliant elements
- rendering / Conditionally rendering elements that rely on the browser
- range filter component, fixing / Fixing the range filter component
- checkout form component, fixing / Fixing the checkout form component
- page transition animations, fixing in router / Fixing page transition animations in the router
- store subscription, fixing to persist cart items to local storage / Fixing the store subscription to persist cart items to local storage
- Bulma
- reference / Choosing a UX framework
C
- cart summary component
- building / Building a cart summary component
- catalog page
- filters component, adding to / Adding the filters component to the catalog page
- template, updating / Updating the catalog page template
- filter behavior, adding / Adding the catalog page filter behavior
- components, tidying / Tidying up our existing components
- filtering logic, testing / Testing the completed filtering logic
- checkout components
- building / Building the checkout components
- cart summary component, building / Building a cart summary component
- checkout form component, building / Building a checkout form component
- checkout success component, building / Building a checkout success component
- checkout form component
- building / Building a checkout form component
- client-side validation / First look at client-side validation
- delivery address form fields, finishing / Finishing the delivery address form fields
- payment information, capturing / Capturing payment information
- Stripe elements / Initializing Stripe elements
- form input state, validating / Validating form input state
- payment details, verifying with Stripe / Verifying payment details with Stripe
- order, submitting to API / Submitting the order to the API
- basic Bootstrap styling, adding to Stripe elements / Adding basic Bootstrap styling to Stripe elements
- CI/CD pipeline
- building / Building a CI/CD pipeline
- VSTS build setup / Setting up a VSTS build
- CI, enabling / Enabling CI
- VSTS release setup / Setting up a VSTS release
- VSTS release build / Setting up a VSTS release
- client
- filtering / Filtering on the client
- libraries, installing / Installing additional dependencies
- accordion component, building / Building an accordion component
- filters component, building / Building the filters component
- filters component, adding to catalog page / Adding the filters component to the catalog page
- filters component, refactoring / Refactoring the filters component
- client-side role-based authorization / Client-side role-based authorization
- client-side routes
- role checks, adding / Adding role checks to client-side routes
- client-side routing / Client-side routing
- client-side sorting
- about / Client-side sorting
- sort component, building / Building a sort component
- sort component, adding to catalog page / Adding the sort component to the catalog page
- client-side validation / Getting started with Stripe and client-side validation
- client-specific boot logic, SSR
- defining / Defining the client-specific boot logic
- client-side store, hydrating / Hydrating the client-side store
- shopping cart data, loading from local storage / Loading shopping cart data from local storage
- component data, pre-fetching / Pre-fetching component data
- promises, dealing with / Remembering our promises
- client app
- authentication / Authentication and user registration in the client app
- user registration / Authentication and user registration in the client app
- Vuex state properties, for authentication / Vuex state properties for authentication
- Vuex mutations, for managing authentication state / Vuex mutations for managing authentication state
- Vuex authentication getters / Vuex authentication getters
- Vuex register / Vuex login, register, and logout actions
- Vuex logout actions / Vuex login, register, and logout actions
- Vuex login / Vuex login, register, and logout actions
- authentication modal component / Authentication modal component
- login form component / Login form component
- register form component / Register form component
- auth navigation item component / Auth navigation item component
- CLI tools
- versus SPA templates / ASP.NET Core SPA templates versus CLI tools
- component behavior
- about / Component behavior
- state / State
- props / Props
- methods / Methods
- computed properties / Computed properties
- watchers / Watchers
- lifecycle hooks / Lifecycle hooks
- component composition / Component composition
- component presentation
- about / Component presentation
- directives / Directives
- parent-child component, communication / Parent-child component communication
- components
- about / Thinking in components, What is a component?
- UI, composing / UI composition
- accordion template structure, defining / Defining the accordion template structure
- conditional rendering / Conditional rendering
- ConEmu
- about / Installing a Terminal Emulator on Windows (optional)
- reference / Installing a Terminal Emulator on Windows (optional)
- continuous deployment
- about / Continuous deployment
- enabling / Enabling CD
- continuous integration / Continuous integration
- currency filter
- creating / Creating a currency filter
- custom input controls
- building / Building custom input controls
- custom type ahead control
- building / Building a custom typeahead control
D
- data
- fetching, from API / Fetching data from an API
- database
- setting up / Setting up the database
- context, creating / Creating a database context
- context, registering for DI / Registering the database context for DI
- creating / Creating the database
- initial migration, creating / Creating an initial migration
- creating, on application startup / Creating and seeding the database on start-up
- seeding, on application startup / Creating and seeding the database on start-up
- data model
- extending / Extending the existing data model
- database, dropping / Dropping the existing database
- new entities, adding / Adding new/updating existing entities
- updated entities, adding / Adding new/updating existing entities
- DbContext class, updating / Updating the DbContext class
- migration, creating to reflect model changes / Creating a migration to reflect the model changes
- applications seed data, updating / Updating the application's seed data
- DbContext / Refreshing JWT access tokens
- dependency injection (DI) / Application startup
- deployment
- application, preparing for / Preparing the application for deployment
- directives
- about / Directives
- attribute, binding with v-bind / Attribute binding with v-bind
- conditional display, with v-show / Conditional display with v-show
- control flow, with v-if and v-else / Control flow with v-if and v-else
- lists, rendering with v-for / Rendering lists with v-for
- event handling, with v-on / Event handling with v-on
- form input binding, with v-model / Form input binding with v-model
- dotnet CLI
- project, scaffolding / Scaffolding a project with the dotnet CLI
E
- EF Core
- about / EF Core – what's new?
- relationships, configuring / Configuring relationships
- global query filters / Global query filters
- compiled queries / Compiled queries
- in-memory provider, for testing / In-memory provider for testing
- Entity Framework (EF) / Application startup
F
- filters component
- building / Building the filters component
- template, scaffolding / Scaffolding the filters component template
- brand filter, adding / Adding a brand filter
- price filter, adding / Adding a price filter
- screen size filter, adding / Adding a screen size filter
- OS filters, adding / Adding the remaining color, OS, and feature filters
- feature filters, adding / Adding the remaining color, OS, and feature filters
- color filters, adding / Adding the remaining color, OS, and feature filters
- behavior, scaffolding / Scaffolding the filters component behavior
- computed properties, defining / Defining the filters component computed properties
- methods, defining / Defining the filters component methods
- styling / Styling the filters component
- adding, to catalog page / Adding the filters component to the catalog page
- refactoring / Refactoring the filters component
- duplication, highlighting / Highlighting duplication in our existing implementation
- common multi-select filter component, extracting / Extracting a common multi-select filter component
- common range filter component, extracting / Extracting a common range filter component
- range filter components, rendering / Rendering the new multi-select and range filter components
- multi-select components, rendering / Rendering the new multi-select and range filter components
- testing / Testing that everything still works
- Font Awesome / Installing additional dependencies
- frontend dependencies
- installing / Installing frontend tools and dependencies
- frontend setup, Vue application
- refactoring / Refactoring the frontend setup
- TypeScript, removing / Removing TypeScript
- default components, replacing / Replacing the default components
- frontend tools
- installing / Installing frontend tools and dependencies
- Node, installing / Installing Node and npm
- Node Package Manager (npm), installing / Installing Node and npm
- Vue, installing / Installing Vue
- npm, versus Yarn / npm or Yarn?
G
- getters / Getters
- Git deployments
- configuring / Configuring Git deployments
- Google Chrome
- reference / Choosing a web browser
H
- Hot Module Replacement / Bundle splitting
- HTTPS
- forcing, on Azure App Services / Forcing HTTPS connections only
- hydrating / Hydrating the client-side store
I
- IDE
- selecting / Choosing and installing an IDE
- installing / Choosing and installing an IDE
- interceptor function / Adding refresh token support to the frontend
J
- JavaScriptServices middleware / The easy way – Nuxt.js
- JSON Web Token (JWT) / Understanding refresh tokens
- JWT authentication
- adding, to API / Adding JWT authentication to the API
- using / Why JWTs?
- configuring / Configuring JWT authentication
- issuing / Issuing JWTs
- user role support, adding / Adding user role support
- testing / Testing JWT authentication
- user registration / User registration
L
- libraries
- installing / Installing additional dependencies
- Font Awesome, installing / Installing Font Awesome
- npm packages, installing / Installing additional npm packages
- lifecycle hooks / Lifecycle hooks
- lodash / Debouncing API requests to limit how often they fire
- logging
- enabling, in Azure / Enabling logging in Azure
M
- multi-select control
- building / Building a multi-select control
- multiple database providers
- configuring / Configuring multiple database providers
- mutation / Mutations
N
- Navbar component / Adding application-wide layout elements
- Node
- installing / Installing Node and npm
- reference / Installing Node and npm
- Node Package Manager (npm)
- installing / Installing Node and npm
- versus Yarn / npm or Yarn?
- npm packages
- installing, for SSR / Installing npm packages required for SSR
- NProgress / Updating the webpack vendor configuration
- Nuxt.js / The easy way – Nuxt.js
O
- order list API endpoint
- adding / Adding an order list API endpoint
- orders and payments
- processing / Processing orders and payments
- order object, persisting / Persisting the order object
- total order price, calculating / Calculating the total order price
- payment, processing with Stripe / Processing the payment with Stripe
- owned entity types
- in EF Core 2.0 / Owned entity types in EF Core 2.0
- need for / Why use owned entity types?
- about / Why use owned entity types?
- defining / Defining an owned type
- configuring / Configuring owned types
P
- page, Vuex
- updating / Updating existing pages to use Vuex
- catalog page, refactoring / Refactoring the catalog page
- product details page, refactoring / Refactoring the product details page
- account page, refactoring / Refactoring the account page
- orders admin page, refactoring / Refactoring the orders admin page
- products admin page, refactoring / Refactoring the products admin page
- create product admin page, refactoring / Refactoring the create product admin page
- parent-child component
- communication / Parent-child component communication
- post-publish build steps
- tweaking / Tweaking the post-publish build steps
- PostgreSQL
- installing / Installing PostgreSQL
- reference / Installing PostgreSQL
- product details component
- variant, adding / Adding variants to the product details component
- variants, adding / Adding variants to the product details component
- product details page
- finishing / Finishing the product details page
- gallery component, creating / Creating the gallery component
- productivity tools
- about / Productivity tools
- VS Code extensions, installing / Installing VS Code extensions
- Vue.js Chrome devtools extension, installing / Installing the Vue.js Chrome devtools extension
- Terminal Emulator, installing on Windows / Installing a Terminal Emulator on Windows (optional)
- products
- removing, from cart / Removing products from the cart
- products, adding to cart
- about / Adding products to the cart
- mutations, creating / Creating the mutations
- actions, creating / Creating an action
- products, persisting to database
- about / Persisting new products to the database
- slug generator, creating / Creating a slug generator
- API endpoint, creating / Creating the API endpoint
- products list
- displaying / Displaying a list of products
- props / Props
R
- refresh tokens
- about / Understanding refresh tokens
- need for / What are refresh tokens?, Why use refresh tokens?
- adding, to backend / Adding refresh token support to the backend
- AppUser model, extending / Extending the AppUser model
- generating / Generating refresh tokens
- JWT access tokens, refreshing / Refreshing JWT access tokens
- finishing up / Finishing up
- adding, to frontend / Adding refresh token support to the frontend
- router configuration, extracting into files / Extracting router configuration into separate files
- register form component
- fixing / Fixing the register form component
- remote validation, with Vee-Validate
- about / Remote validation with Vee-Validate
- app, making aware of custom validation rule / Making our app aware of the new custom validation rule
- validation API endpoint, creating / Creating the validation API endpoint
- role checks
- adding, to client-side routes / Adding role checks to client-side routes
S
- search bar component
- creating / Creating a search bar component
- API requests triggering, watchers used / Triggering API requests using watchers
- server
- filtering / Filtering on the server
- controller actions, updating / Updating controller actions to support filtering
- filtering logic, testing / Testing our filtering logic
- server-rendered application
- testing / Testing our server-rendered application
- server-side payment processing
- about / Server-side payment processing
- orders, adding to data model / Adding orders to the data model
- owned entity types, in EF Core 2.0 / Owned entity types in EF Core 2.0
- orders migration, creating / Creating the orders migration
- Stripe.net NuGet package, installing / Installing and configuring the Stripe.net NuGet package
- Stripe.net NuGet package, configuring / Installing and configuring the Stripe.net NuGet package
- orders and payments, processing / Processing orders and payments
- server-side rendering (SSR) / ASP.NET Core SPA templates versus CLI tools
- Server-Side Rendering (SSR)
- need for / Why use SSR in the first place?
- search engine optimization (SEO) / Search engine optimization
- performance / Performance
- functions / How does SSR work?
- application, preparing / Preparing the application for SSR
- npm packages, installing / Installing npm packages required for SSR
- Vuex actions, adding / Adding Vuex actions and mutations for all API requests
- mutations, adding for API requests / Adding Vuex actions and mutations for all API requests
- existing pages, updating for Vuex / Updating existing pages to use Vuex
- user authentication state, persisting / Changing the way we persist user authentication state
- setting up / Setting up and configuring SSR
- configuring / Setting up and configuring SSR
- shared boot logic, defining / Defining the shared boot logic
- client-specific boot logic, defining / Defining the client-specific boot logic
- server-specific boot logic, defining / Defining the server-specific boot logic
- webpack, configuring for client/server boot files / Making webpack aware of the client/server boot files
- enabling / Enabling SSR
- server-side role-based authorization / Server-side role-based authorization
- server-specific boot logic, SSR
- defining / Defining the server-specific boot logic
- deleting / Deleting the old boot file
- shadow property / Defining an owned type
- shopping cart
- building, options / Evaluating our options
- persisting to database approach / Persisting to the database
- persisting to session state approach / Persisting to session state
- persisting to local storage / Persisting to local storage
- products, removing from / Removing products from the cart
- items, updating / Updating cart items
- getter, adding to display cart total / Adding a getter to display the cart total
- persisting, to local storage / Persisting the cart to local storage
- shopping cart page
- creating / Creating a shopping cart page
- CartItem component, creating / Creating a CartItem component
- list of cart items, displaying / Displaying the list of cart items
- cart summary component, creating / Creating a cart summary component
- UX, improving with add to cart feedback / Improving the UX with add to cart feedback
- single-file components (SFCs) / What is a component?, ASP.NET Core SPA templates versus CLI tools
- source maps / Production bundles
- SPA templates
- versus CLI tools / ASP.NET Core SPA templates versus CLI tools
- Stripe
- using / Why use Stripe?
- PCI compliance / Simple PCI compliance
- integration / Easy integration
- dashboard / Excellent dashboard
- initiating / Getting started with Stripe and client-side validation
- account, registering / Registering for a Stripe account
- JavaScript library / Including the Stripe checkout JavaScript library
- VeeValidate npm package, installing for client-side validation / Installing VeeValidate for client-side validation
- Stripe.net NuGet package
- installing / Installing and configuring the Stripe.net NuGet package
- configuring / Installing and configuring the Stripe.net NuGet package, Configuring Stripe
T
- table splitting / Why use owned entity types?
- taghelper / Enabling SSR
- Terminal Emulator
- installing, on Windows / Installing a Terminal Emulator on Windows (optional)
U
- UI
- composing, with components / UI composition
- UI elements
- hiding, based on role / Hiding UI elements based on role
- UI state / State
- user authentication state, SSR
- persisting / Changing the way we persist user authentication state
- persisting, to local storage / Changing our approach of persisting state to local storage
- persisting, to local state / Changing our approach of persisting state to local storage
- storing, in cookies / Storing authentication state in cookies
- User Experience (UX)
- improving / Improving the existing UX
- framework, selecting / Choosing a UX framework
- Bootstrap-Vue / What is Bootstrap-Vue?
- npm modules, installing / Installing additional required dependencies
- webpack configuration, modifying to SASS / Modifying the webpack configuration to support SASS
- webpack vendor configuration, updating / Updating the webpack vendor configuration
- vendor bundle, building / Rebuilding the vendor bundle
- application wide layout elements, adding / Adding application-wide layout elements
- application wide styles, adding / Adding application-wide styles
- product list, styling / Styling the product list and product details components
- product details components, styling / Styling the product list and product details components
- data, fetching / Fetching data before navigation
- page loading indicator, adding / Adding a page loading indicator
- transition, adding on page change / Adding a transition on page change
- user roles
- authentication endpoint, extending with / Extending the authentication endpoint with user roles
V
- Vee-Validate
- remote validation / Remote validation with Vee-Validate
- Vetur / Installing VS Code extensions
- VS Code
- about / Choosing and installing an IDE
- reference / Choosing and installing an IDE
- VS Code extensions
- installing / Installing VS Code extensions
- VSTS
- about / Getting started with VSTS
- team services project setup / Setting up a team services project
- VSTS account
- creating / Creating a VSTS account
- Vue
- installing / Installing Vue
- Vue.js
- basics / Introduction to Vue
- Vue instance / The Vue instance
- reactivity / Reactivity
- Vue.js Chrome devtools extension
- installing / Installing the Vue.js Chrome devtools extension
- Vue component inheritance
- about / Vue component inheritance
- form input base component, defining / Defining a form input base component
- inheritance, from base component / Inheriting from a base component
- Vue instance
- about / The Vue instance
- attaching, to DOM / Attaching to the DOM
- data properties, defining / Defining data properties
- data, rendering into DOM with expressions / Rendering data into the DOM using expressions
- component trees, building / Building component trees
- Vuex
- about / Introduction to Vuex
- features / What is Vuex?
- working / How does Vuex work?
- mutations / Mutations
- actions / Actions
- getters / Getters
- installing / Installing and configuring Vuex
- configuring / Installing and configuring Vuex
- Vuex actions, SSR
- defining / Defining additional Vuex actions
- Vuex documentation
- reference / What is Vuex?
- Vuex mutations, SSR
- defining / Defining the additional Vuex mutations
- store state properties, defining / Defining the additional store state properties
- Vuex state properties
- for authentication / Vuex state properties for authentication
- Vuex store
- defining / Putting it all together
W
- watchers / Watchers
- web browser
- selecting / Choosing a web browser
- webpack
- about / Installing Vue, An introduction to webpack, What is webpack?
- working / How does it work?
- configuration / Basic webpack configuration
- bundle, splitting / Bundle splitting
- production bundles / Production bundles
- webpack, SSR
- configuring, for client/server boot files / Making webpack aware of the client/server boot files
- shared webpack configuration object, defining / Defining a shared webpack configuration object
- client- and server-specific webpack configuration objects, defining / Defining client- and server-specific webpack configuration objects
- vendor webpack configuration, updating for SSR libraries / Updating the vendor webpack configuration to include SSR libraries
- Windows
- Terminal Emulator, installing / Installing a Terminal Emulator on Windows (optional)
Y
- Yarn
- versus Node Package Manager (npm) / npm or Yarn?
- reference / npm or Yarn?
- installing / npm or Yarn?