From 91eb45eebc2f35651289598ceb8c300ba6d4eb71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Anio=C5=82?= <33483514+tom-aniol@users.noreply.github.com> Date: Fri, 24 Apr 2020 10:37:05 +0200 Subject: [PATCH 001/119] Updated partners: Hotwax, NetSteps, Retail Insight --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0855fdce53..34c87d3cdb 100644 --- a/README.md +++ b/README.md @@ -932,7 +932,7 @@ Vue Storefront is a Community effort brought to You by our great Core Team and s HotWax @@ -1003,18 +1003,18 @@ Vue Storefront is a Community effort brought to You by our great Core Team and s - + - + From a925c3f7e496954f0a11fc7fee045ba5ea257b1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Anio=C5=82?= <33483514+tom-aniol@users.noreply.github.com> Date: Mon, 4 May 2020 10:11:16 +0200 Subject: [PATCH 002/119] Partners: Update Wagento + Add Retail Insights --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0855fdce53..121bb19896 100644 --- a/README.md +++ b/README.md @@ -425,7 +425,7 @@ Vue Storefront is a Community effort brought to You by our great Core Team and s Wagento @@ -1003,10 +1003,10 @@ Vue Storefront is a Community effort brought to You by our great Core Team and s - + From 14df356f8a2f569bd29fe1222328831ed39c9089 Mon Sep 17 00:00:00 2001 From: Degi Date: Thu, 21 May 2020 00:57:02 +0900 Subject: [PATCH 003/119] [Docs] Removed cookbook/theme removing outdated --- docs/guide/cookbook/theme.md | 64 ------------------------------------ 1 file changed, 64 deletions(-) diff --git a/docs/guide/cookbook/theme.md b/docs/guide/cookbook/theme.md index 1d199b4f5c..80d98960f0 100644 --- a/docs/guide/cookbook/theme.md +++ b/docs/guide/cookbook/theme.md @@ -2143,67 +2143,3 @@ In general, the theme upgrade might be a tedious process for you but it's worth


- - -## 3. How `default` theme works -_Theme_ is the face of your store. Face is what makes people recognize you as you. That works just the same for your store. However, your _theme_ shows not only looks and feels of your store's identity, but also represents how features such as _UI_, _widgets_ and _components_ are arranged and interconnected just the same as your face helps connect _eyes_, _nose_, _ears_ and _brain_ under the skin. - -Online stores should demand many features in common and they deal with similar types of requests from their customers to fulfill their desire : _Purchase_. They are divided and placed under the `core` folder to be dealt with. - -We already got our hands dirty to place all the core business logic in place and created the `default` theme as the best practice to show how they are intertwined behind the scene and make it work seamlessly out of the box. - -In this recipe, we will walk through how `default` theme works in cooperation with other core parts of the `app` such as `modules`, `filters`, `stores` and so on. -
-Among methodologies for this recipe, we will use the one inspired by [_Chaos Monkey_](https://en.wikipedia.org/wiki/Chaos_engineering); One that creates various errors on purpose, and ___see___ why it was needed to prevent such errors in the first place. - -#### Sidetalk (If you are busy dev, please skip this) -Why we don't make a recipe for solution to a problem, but a recipe for a problem itself? Read this quote from _Aristotle_ and please ask me again -:::tip QUOTE -_He who sees things grow from their beginning will have the best view of them_ - -___- Aristotle___ -::: -You are not the core developers who built the ___Vue Storefront___ from its beginning so you don't know the _why_ and _how_ and the history of what happened to each corner of the code base. (even if you are core developers, I bet you really don't know _every_ detail ;)) Yet, that's fine until you just take advantage of the platform and things work as `docs` dictates. It becomes, however, problems when things get in unexpected ways. -
-In attempts to reduce such frustration, one might need to simulate _How things grew from the beginning_. Creating problems on purpose and an attempt to solve them may help you understand why things were there in the first place. Think of it as _Hadron Collider_ of ___Vue Storefront___. Now time's up, Let's turn on the _particle accelerator_. - -### 1. Preparation -- You need [Vue Storefront](https://github.com/DivanteLtd/vue-storefront) app [working](/guide/cookbook/setup.html). - -### 2. Recipe -1. Open your editor and go to `./src/themes/default/index.js` - - - -### 3. Peep into the kitchen (what happens internally) -### 4. Chef's secret (protip) -#### Secret 1. What is `amp` here and there? -#### Secret 2. - -
-
-
- - - - -## 4. Execuse me, but can I use your theme if I may? -### 1. Preparation -### 2. Recipe -### 3. Peep into the kitchen (what happens internally) -### 4. Chef's secret (protip) -
-
-
- - - -## 5. Integrate with 3rd party CSS frameworks - -### 1. Preparation -### 2. Recipe -### 3. Peep into the kitchen (what happens internally) -### 4. Chef's secret (protip) -
-
-
\ No newline at end of file From 34052754fc60d8ab57da50843cbc84a8f0240633 Mon Sep 17 00:00:00 2001 From: Degi Date: Thu, 21 May 2020 01:40:04 +0900 Subject: [PATCH 004/119] [Docs] Updated cookbook/theme R2 introduction --- docs/guide/cookbook/theme.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/guide/cookbook/theme.md b/docs/guide/cookbook/theme.md index 80d98960f0..18a33e0ad8 100644 --- a/docs/guide/cookbook/theme.md +++ b/docs/guide/cookbook/theme.md @@ -394,7 +394,23 @@ Theme is what customers get first impression from your shop. You will be majorly

-## 2. How to upgrade theme one from another + +## 2. How to upgrade theme from 1.11 to 1.12 +Here comes again! We've got a lot of stuff packed in one package full of gift to you. This time, however, is different from the past in that we came up with the whole new approach to _Vue Storefront_ by building it up from scratch and gave it a new name _Capybara_. Now that the former _default_ theme is no more default but the _Capybara_ replaces it taking the role of base theme. + +In this recipe, we will take a look at how to upgrade from `1.11` to `1.12` seamlessly with respect to themes. Changes made to your theme on `1.11` will not be taken into consideration since it's not reasonable but we will look around the difference of the both themes so you can figure out the best way to morph the oldies(`1.11`) to the goodies(`1.12`). + +### 1. Preparation + - You have a [Vue Storefront `1.11` App installed](#_3-how-to-upgrade-theme-from-1-10-to-1-11) on your machine. +### 2. Recipe +### 3. Peep into the kitchen (what happens internally) +### 4. Chef's secret (protip) +
+
+
+ + +## 3. How to upgrade theme from 1.10 to 1.11 When you are already running your _Vue Storefront_ shop on production, chances are that you have made at least a few changes for your _theme_ even if you don't have developers resource. Hope you have made such changes to your child theme based on `default` theme so that normal upgrade won't make a huge impact in negative way for your shop. Sometimes, however, an upgrade so huge that you can't make a smooth conversion from one to another may take place. Helping you in such a case keep headaches at bay, we will show you the example where `1.10` to `1.11` upgrade affects how a theme works and fix broken pieces. From 9a3126194a13d2da687c502aee8eb46b712110db Mon Sep 17 00:00:00 2001 From: Degi Date: Thu, 21 May 2020 01:48:49 +0900 Subject: [PATCH 005/119] [Docs] Updated cookbook/theme R2 introduction + preps --- docs/guide/cookbook/theme.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/guide/cookbook/theme.md b/docs/guide/cookbook/theme.md index 18a33e0ad8..14c8788080 100644 --- a/docs/guide/cookbook/theme.md +++ b/docs/guide/cookbook/theme.md @@ -396,12 +396,14 @@ Theme is what customers get first impression from your shop. You will be majorly ## 2. How to upgrade theme from 1.11 to 1.12 -Here comes again! We've got a lot of stuff packed in one package full of gift to you. This time, however, is different from the past in that we came up with the whole new approach to _Vue Storefront_ by building it up from scratch and gave it a new name _Capybara_. Now that the former _default_ theme is no more default but the _Capybara_ replaces it taking the role of base theme. +Here comes again! We've got a lot of stuff packed in one package full of gift to you. This time, however, is different from the past in that we came up with the whole new approach to _Vue Storefront_ by building it up from scratch and gave it a new name [_Capybara_](https://github.com/DivanteLtd/vsf-capybara). _Capybara_ is built on [Storefront UI Design System](https://www.storefrontui.io/) which employs modular approach to its smallest chunk. How versatile is that! Now that the former _default_ theme is no more default but the _Capybara_ replaces it taking the role of base theme. In this recipe, we will take a look at how to upgrade from `1.11` to `1.12` seamlessly with respect to themes. Changes made to your theme on `1.11` will not be taken into consideration since it's not reasonable but we will look around the difference of the both themes so you can figure out the best way to morph the oldies(`1.11`) to the goodies(`1.12`). ### 1. Preparation - - You have a [Vue Storefront `1.11` App installed](#_3-how-to-upgrade-theme-from-1-10-to-1-11) on your machine. + - You have a [_Vue Storefront_ `1.11` App installed](#_3-how-to-upgrade-theme-from-1-10-to-1-11) on your machine. + - You have pulled `1.12` commmits from the [_Vue Storefront_ git repository](https://github.com/DivanteLtd/vue-storefront). + ### 2. Recipe ### 3. Peep into the kitchen (what happens internally) ### 4. Chef's secret (protip) From 193c632dc9b355a731eaaca5967786b824ac31b4 Mon Sep 17 00:00:00 2001 From: Degi Date: Sat, 23 May 2020 13:52:46 +0900 Subject: [PATCH 006/119] [Docs] Updated cookbook/theme R2 recipe --- docs/guide/cookbook/theme.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/guide/cookbook/theme.md b/docs/guide/cookbook/theme.md index 14c8788080..f1a542a9ba 100644 --- a/docs/guide/cookbook/theme.md +++ b/docs/guide/cookbook/theme.md @@ -405,6 +405,17 @@ In this recipe, we will take a look at how to upgrade from `1.11` to `1.12` seam - You have pulled `1.12` commmits from the [_Vue Storefront_ git repository](https://github.com/DivanteLtd/vue-storefront). ### 2. Recipe +1. Pull `1.11.3` tag to the `1.11` VSF app as follows : +```bash +git fetch +git checkout tags/v1.11.3 -b recipe # this checkouts to v1.11.3 tag and create a _recipe_ branch for this tutorial. +``` +As of now, we use `1.11.3` in lieu of `1.12` which also takes _Capybara_ as the default theme. + +2. + + + ### 3. Peep into the kitchen (what happens internally) ### 4. Chef's secret (protip)
From 3a2552458b6b2644cf5f6ccddaab28e8fb0be5cd Mon Sep 17 00:00:00 2001 From: Degi Date: Mon, 15 Jun 2020 12:24:46 +0900 Subject: [PATCH 007/119] [Docs] Updated cookbook/setup & cookbook/theme - 1.12 --- docs/.vuepress/config.js | 4 +- docs/guide/cookbook/checklist.md | 57 +++++++++- docs/guide/cookbook/setup.md | 172 ++++++++++++++++++++++++++++--- docs/guide/cookbook/theme.md | 57 ++++++++-- 4 files changed, 263 insertions(+), 27 deletions(-) diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index 79e1dd2739..b597f37497 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -156,7 +156,9 @@ module.exports = { 'archives/modules', 'archives/extensions', 'archives/components', - 'archives/vuex' + 'archives/vuex', + 'archives/cookbook', + 'archives/graphql' ], }, ], diff --git a/docs/guide/cookbook/checklist.md b/docs/guide/cookbook/checklist.md index 0036144e66..0899fd0d64 100644 --- a/docs/guide/cookbook/checklist.md +++ b/docs/guide/cookbook/checklist.md @@ -845,4 +845,59 @@ Vue Storefront contains some pretty useful config variables that are sometimes m
-
\ No newline at end of file +
+ +## 16. Quite handy features in config file properties + +Vue Storefront contains some pretty useful config variables that are sometimes missed but can be pretty useful (worth mentioning two times!) : + +- `dynamicConfigReload` - by default the config files are processed by [`node-config`](https://github.com/lorenwest/node-config) only during the build process; whenever you modify the config file, it must be then re-compiled and bundled into `app.js`. However, with this mode on, the [`core/scripts/server.ts`](https://github.com/DivanteLtd/vue-storefront/blob/77efcdc40a1a69191f8d96c381535517e801820d/core/scripts/server.ts#L271) reloads the config file with each request. This might be very useful for the scalability purposes and to pass some dynamic information during the build process. By modifying the `dynamicConfigExclude` and `dynamicConfigInclude` arrays you may change which particular sections of the config file are provided to the user browser and which are not. The config is passed via `window.__INITIAL_STATE__`. + +- `useExactUrlsNoProxy` - when set to `true`, the strings set in the product properties: `thumbnail`, `image` ... are used for the ` +
+ +## 17. Cloudflare Autopurge +You might use CDN not only to serve dist & assets directory but also SSR Output. In this case, you would want to dynamicly purge cache in Cloudflare when it is being purged in Varnish. +There is a 3rd party module just for that! Install the module at [here](https://github.com/new-fantastic/vsf-cloudflare) + + +
+
+ +## 18. VSF Cache Varnish +By default VSF is able to cache SSR Output in the Redis Cache. This module will Cache Redis Output in the Varnish. So Node.js server is not being used even to load output from Redis. It makes our app's first load even faster! Follow the instruction [here](https://github.com/new-fantastic/vsf-cache-varnish) + + +
+
+ + +## 19. VSF Cache NGINX +By default VSF is able to cache SSR Output in the Redis Cache. This module will Cache Redis Output in the NGINX. So Node.js server is not being used even to load output from Redis. It makes our app's first load even faster! Follow the instruction [here](https://github.com/new-fantastic/vsf-cache-nginx) + + +
+
+ +## 20. Vue Storefront 1 config validator for Magento 1 and Magento 2 + +There is a simple PHP CLI tool to check whether your Vue Storefront PWA configuration matches the structure of your Magento site. You can rest assured whether your VSF works seamlessly with Magento 1 or Magento 2. Please follow the install [here](https://github.com/yireo/vsf-config-validator) + + +
+
+ +## 21. A sample theme to start with + +This [sample theme](https://github.com/yireo-training/vsf-yireo-theme) can help you start with a Webpack configuration to allow for simple parent/child theming. + + +
+
+ +## 22. Optimized Webpack configuration for Vue Storefront 1 development +The default Webpack configuration of Vue Storefront 1 allows for fully testing all features. However, because of various reasons, this leads to a slow transpilation time and therefore a bad developer experience. This [repository](https://github.com/yireo-training/vsf1-local-webpack) contains a separate Webpack \ No newline at end of file diff --git a/docs/guide/cookbook/setup.md b/docs/guide/cookbook/setup.md index b00c072442..c658f016ff 100644 --- a/docs/guide/cookbook/setup.md +++ b/docs/guide/cookbook/setup.md @@ -20,6 +20,12 @@ Then, why so? In modern computer engineering, products are so complex with an en Luckily, we already have been through all this for you, got our hands dirty. All you need is run a set of docker commands to get you up and running from scratch. Without further ado, let's get started! +:::tip UPDATE +From VSF `1.12` on, + 1. `CLI` is the main method to install _Vue Storefront_ infrastructure. (which is easier, hassle-free, and intuitive) + 2. Bleeding-edge `vsf-capybara` is default theme while original `default` theme remains to be chosen at your discretion. +::: + ### 1. Preparation - You need [`docker`](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04) and [`docker-compose`](https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-18-04) installed. @@ -129,21 +135,93 @@ You will see 4 containers are running, which is : | Redis | :6379 | -4. Now that backend part is done, let's work on frontend part, that is download [**Vue Storefront**](https://github.com/DivanteLtd/vue-storefront) +4. Now that backend part is done, let's work on frontend part, install `@vue-storefront/cli` +```bash +yarn add global @vue-storefront/cli +``` +5. Run the `init` command in a directory where you want to install _Vue Storefront_ as follows : ```bash -git clone https://github.com/DivanteLtd/vue-storefront.git vue-storefront -cd vue-storefront +vsf init vue-storefront # [vue-storefront] is the directory where the app is going to be installed. +``` + +6. Choose your target version from below (Picked _Stable versions_ in this recipe) : + +```bash +dex@ubuntu:~/code$ vsf init vue-storefront + ✔ Check avalilable versions +? Which version of Vue Storefront you'd like to install? (Use arrow keys) +❯ Stable versions (recommended for production) + Release Candidates + In development branches (could be unstable!) ``` -5. Prepare the config file at `./config/local.json`. There is `default.json` file in the same folder which is a default set of configuration. Copy it as follows : +7. Then pick `1.12` version for the install from below : +```bash + ✔ Check avalilable versions +? Which version of Vue Storefront you'd like to install? Stable versions (recommended for production) +? Select specific version (Use arrow keys) +❯ v1.12.0 + v1.11.4 + v1.11.3 + v1.11.2 + v1.11.1 + v1.11.0 + v1.10.6 +``` +8. Select a theme you want to start with (This time `Capybara` for the recipe) : +```bash + ✔ Check available versions +? Which version of Vue Storefront you'd like to install? Stable version (recommended for production) +? Select specific version v1.12.0 +? Select theme for Vue Storefront +❯ Capybara - based on Storefront UI + Default +``` +:::tip INFO +Capybara is built on top of [Storefront UI](https://www.storefrontui.io/). Worth checking it out! +::: + +Then, `Stable version` as follows : +```bash + ✔ Check available versions +? Which version of Vue Storefront you'd like to install? Stable version (recommended for production) +? Select specific version v1.12.0 +? Select theme for Vue Storefront Capybara - based on Storefront UI +? Select theme version (Use arrow keys) +❯ Stable version (recommended for production) + In development branch (could be unstable!) + +``` + +8. Now wrap it up by choosing `Manual installation` from the next step : +```bash + ✔ Check avalilable versions +? Which version of Vue Storefront you'd like to install? Stable versions (recommended for production) +? Select specific version v1.12.0 +? Would you like to use friendly installer or install Vue Storefront manually? + Installer (MacOS/Linux only) +❯ Manual installation +``` + +Then the `cli` will copy all the necessary files to the designated folder. + +Let's `cd` to the folder. + +:vhs: You may also watch it in [bash playback :movie_camera:](https://asciinema.org/a/i4lHsWZHDDWvDjkdFEb8zQa0m) + +:::warning +Friendly `Installer` among options above is deprecated yet it is supported. +::: + +9. Prepare the config file at `./config/local.json`. There is `default.json` file in the same folder which is a default set of configuration. Copy it as follows : ```bash cp config/default.json config/local.json ``` Then fix the value as you need it in the `local.json` file. In `local.json`, you may change values for information of backend family. But if you followed this recipe verbatim, you don't have to, because it's already there with the default value. Should you study the contents, please see to [Chef's secret](#secret-1-study-in-local-json) -6. Finally run the following Docker command : +10. Finally run the following Docker command : ```bash docker-compose up -d ``` @@ -190,21 +268,21 @@ info fsevents@1.2.4: The platform "linux" is incompatible with this module. :vhs: You may also watch it in [bash playback :movie_camera:](https://asciinema.org/a/JZYI9ZE6DHeC7N2keBNoFUWjQ) -7. In order to verify, run `docker ps`, there should be another container added to the list. +11. In order to verify, run `docker ps`, there should be another container added to the list. ```bash CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -88d758bc24d0 vuestorefront_app "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3000->3000/tcp vuestorefront_app_1 +88d758bc24d0 vuestorefront_app "docker-entrypoint.s…" 2 minutes ago Up 2 minutes vuestorefront_app_1 de560221fdaf vuestorefrontapi_kibana "/bin/bash /usr/loca…" 8 hours ago Up 23 minutes 0.0.0.0:5601->5601/tcp vuestorefrontapi_kibana_1 5576cd9963a1 vuestorefrontapi_app "docker-entrypoint.s…" 8 hours ago Up 23 minutes 0.0.0.0:8080->8080/tcp vuestorefrontapi_app_1 88f5db9486da vuestorefrontapi_es1 "/bin/bash bin/es-do…" 8 hours ago Up 24 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch d46c1e0a22af redis:4-alpine "docker-entrypoint.s…" 8 hours ago Up 24 minutes 0.0.0.0:6379->6379/tcp vuestorefrontapi_redis_1 ``` -8. Open your browser and visit [http://localhost:3000/](http://localhost:3000/) +12. Open your browser and visit [http://localhost:3000/](http://localhost:3000/) After compiling, *Voila!* -![vs_home_intro_borderline](../images/home-vuestorefront.png) +![vs_home_intro_borderline](../images/home_capybara.png) ### 3. Peep into the kitchen (what happens internally) We used `docker-compose` for setting up the entire environment of Vue Storefront. It was more than enough to launch the machines behind for running the shop. @@ -1336,20 +1414,82 @@ At [`vue-storefront/config/default.json`](https://github.com/DivanteLtd/vue-stor
-## 2. Using Installer +## 2. User-friendly installation using installer (Deprecated) +:::warning +This recipe is deprecated, and installer may not be supported at any version without prior notice. Please use it at your own peril. +::: + We made it one step further where you just need to answer a series of questions to set up the whole bunch of architecture. + ### 1. Preparation ### 2. Recipe -### 3. Peep into the kitchen (what happens internally) -### 4. Chef's secret (protip) -
-
-
+1. If you're MacOS or Linux user now you're able to install with pretty nice CLI installer :) + +```bash +git clone https://github.com/DivanteLtd/vue-storefront.git vue-storefront +cd vue-storefront +yarn +yarn installer +``` + +It will take some time for installation and during the last step you will be asked some questions. First one is + +``` +Would you like to use https://demo.vuestorefront.io as the backend? +``` + +2. If you answer `Yes`, you will have remote backend at `https://demo.vuestorefront.io`. Otherwise, you will need to install `vue-storefront-api`. + +2-1. Using Vue Storefront demo as a backend + +In this case you don't need to run Docker and you will be asked one additional question: + +``` +? Please provide path for images endpoint (https://demo.vuestorefront.io/img/) +``` + +You can simply proceed and as a result you will have a `vue-storefront` folder inside your project root and Storefront application running on `http://localhost:3000`. All images will be also hosted at `https://demo.vuestorefront.io/img/`. + +2-2. Installing the vue-storefront-api locally + +If you answer `No` on the previous question, please be sure the Docker is running, otherwise you might get an error. You will be asked some more questions immediately: + +``` +? Would you like to use https://demo.vuestorefront.io as the backend? No +? Please provide Git path (if it's not globally installed) git +? Please provide path for installing backend locally ../vue-storefront-api +? Choose path for images endpoint http://localhost:8080/img/ +``` + +As for images endpoint: you can choose between `https://demo.vuestorefront.io/img/` again or host your images on localhost. + +After you answered all the questions, the installation process will start (it might take some time to install all dependencies). When it's finished, you will get the following message: + +``` +┌────────────────────────────────────────────────────────────────┐ +│ Congratulations! │ +│ │ +│ You've just successfully installed vue-storefront. │ +│ All required servers are running in background │ +│ │ +│ Storefront: http://localhost:3000 │ +│ Backend: http://localhost:8080 │ +│ │ +│ Logs: /Users/natalia/Desktop/work/test/vue-storefront/var/log/ │ +│ │ +│ Good Luck! │ +└────────────────────────────────────────────────────────────────┘ +``` + +Your project should contain 2 folders at this moment: `vue-storefront` and `vue-storefront-api`. Vue Storefront should be running on `http://localhost:3000`: + +![Storefront screenshot](../images/storefront.png) + ## 3. Manual Installation -Sometimes we need to know the inside of the perfect machine so that we can prepare for the fails of imperfection within. + ### 1. Preparation ### 2. Recipe ### 3. Peep into the kitchen (what happens internally) diff --git a/docs/guide/cookbook/theme.md b/docs/guide/cookbook/theme.md index f1a542a9ba..a6a1efec19 100644 --- a/docs/guide/cookbook/theme.md +++ b/docs/guide/cookbook/theme.md @@ -384,39 +384,78 @@ In this chapter, we are going to cover : ## 0. Introduction Theme is what customers get first impression from your shop. You will be majorly discouraged if your customers underestimate your shop by looks and feels of the first impression due to poorly designed theme when you had pearls and golds in value for your customers on your shop. Great products, meticulously calibrated technology backing your store, are abysmally depreciated which impact your sales in result. We are here to help you get away with such disasters by guiding you in wrapping your head around how to deal with `theme` in _Vue Storefront_ context. Are you ready? a _Picaso_? - + ## 2. How to upgrade theme from 1.11 to 1.12 -Here comes again! We've got a lot of stuff packed in one package full of gift to you. This time, however, is different from the past in that we came up with the whole new approach to _Vue Storefront_ by building it up from scratch and gave it a new name [_Capybara_](https://github.com/DivanteLtd/vsf-capybara). _Capybara_ is built on [Storefront UI Design System](https://www.storefrontui.io/) which employs modular approach to its smallest chunk. How versatile is that! Now that the former _default_ theme is no more default but the _Capybara_ replaces it taking the role of base theme. +Here comes again! We've got a lot of stuff packed in one package full of gift to you. This time, however, is different from the past in that we came up with the whole new approach to _Vue Storefront_ by building it up from scratch and gave it a new name [_Capybara_](https://github.com/DivanteLtd/vsf-capybara). _Capybara_ is built on [Storefront UI Design System](https://www.storefrontui.io/) which employs modular approach to its smallest chunks. How versatile is that! Now that the former _default_ theme is no more default but the _Capybara_ replaces it taking the role of base theme. -In this recipe, we will take a look at how to upgrade from `1.11` to `1.12` seamlessly with respect to themes. Changes made to your theme on `1.11` will not be taken into consideration since it's not reasonable but we will look around the difference of the both themes so you can figure out the best way to morph the oldies(`1.11`) to the goodies(`1.12`). +In this recipe, we will take a look at how to upgrade from `1.11` to `1.12` seamlessly with respect to themes. Changes made to your theme on `1.11` will not be taken into consideration since we will not use `default` theme but `capybara` for this recipe. ### 1. Preparation - You have a [_Vue Storefront_ `1.11` App installed](#_3-how-to-upgrade-theme-from-1-10-to-1-11) on your machine. - You have pulled `1.12` commmits from the [_Vue Storefront_ git repository](https://github.com/DivanteLtd/vue-storefront). ### 2. Recipe -1. Pull `1.11.3` tag to the `1.11` VSF app as follows : +1. Pull `v1.12.0` tag to the `1.11` VSF app as follows : ```bash git fetch -git checkout tags/v1.11.3 -b recipe # this checkouts to v1.11.3 tag and create a _recipe_ branch for this tutorial. +git checkout tags/v1.12.0 -b recipe # this checkouts to v1.12.0 tag and create a [recipe] branch for this tutorial. ``` -As of now, we use `1.11.3` in lieu of `1.12` which also takes _Capybara_ as the default theme. -2. +2. Change directory to `src/themes` as follows : +```bash +cd src +mkdir themes && cd themes +``` + + +3. Add `git` `submodule` into `themes` folder as follows : +```bash +git submodule add https://github.com/DivanteLtd/vsf-capybara capybara +``` + +Now files are ready. + +:::tip +If you go to root `./config` folder and open `local.json`, then you will notice `theme` node is set to `capybara` by default as follows : +```json + "theme": "@vue-storefront/theme-capybara", +``` +::: + +4. Run the app then you will see the screen as below : +```bash +docker-compose up -d +``` + +![vs_home_intro_borderline](../images/home_capybara.png) ### 3. Peep into the kitchen (what happens internally) +In this recipe, we have checked out to `v1.12.0` and install `vsf-capybara` theme as a submodule to `themes` folder. And that's all it takes, it's that simple to adapt your application to new theme eco-system. + +_Capybara_ theme is based on [_Storefront UI_](https://www.storefrontui.io/) and it's completely different approach from other plain themes since it's kinda an eCommerce version of _Bootstrap_ in CSS framework. All the frequently used components have been divided into their chunks in the smallest meaningful size so that users can compose those components whatever way they want it to please their purposes. Easier, Organized, Planned, all the brighter sides of modular system have been implemented into it. You can follow the best practices made by core teams by looking at how _Capybara_ is structured. + +That said, you had to say good-bye to your old `1.11` theme. [_Start building your own theme_ recipe](#_1-start-building-your-own-theme) may help you achieve complete migration of theme's customized parts in that _say good-bye_. + ### 4. Chef's secret (protip)

@@ -493,7 +532,7 @@ There are many features added/removed/enhanced with `1.11`. This recipe deals wi - [Related](#_27-product-related-is-ready-to-transform) - Reviews - [Reviews](#_28-reviews-is-fixed-too) - - SearchPanel + - SearchPanel - [SearchPanel](#_29-searchpanel-has-parts-to-update) - [SidebarMenu](#_30-sidebarmenu-wants-to-update-too) - SidebarMenu From f51c3b6be3c4c4e2d0f2065622f1c297ebf2cfcf Mon Sep 17 00:00:00 2001 From: Degi Date: Mon, 15 Jun 2020 12:31:30 +0900 Subject: [PATCH 008/119] [Docs] Archived cookbook/setup, basics/graphql, added img --- docs/guide/archives/cookbook.md | 1330 +++++++++++++++++++++++++++ docs/guide/archives/graphql.md | 71 ++ docs/guide/images/home_capybara.png | Bin 0 -> 696894 bytes 3 files changed, 1401 insertions(+) create mode 100644 docs/guide/archives/cookbook.md create mode 100644 docs/guide/archives/graphql.md create mode 100644 docs/guide/images/home_capybara.png diff --git a/docs/guide/archives/cookbook.md b/docs/guide/archives/cookbook.md new file mode 100644 index 0000000000..e33ed712f7 --- /dev/null +++ b/docs/guide/archives/cookbook.md @@ -0,0 +1,1330 @@ +# Cookbook + +:::danger REMINDER +This document is _archived_ and _NOT_ relevant with the latest version which is `1.12` at the time of writing. Please keep in mind this document is supposed to help you maintain legacy product, not the fresh installation. +::: + +## Install + +In this chapter, we will cover : + +[[toc]] + + +### 0. Introduction +Now you are definitely interested in **Vue Storefront**. That's why you are here. You've come across the line. You made a choice. You will have something in return, which is great. Be it developers, entrepreneurs or even marketing managers that they may want to try something new for better products in hopes of enhancing their clients or customers' experience. You chose the right path. We will explore anything you need to get you started at all with [**Vue Storefront** infrastructure](https://github.com/DivanteLtd). + + +### 1. Install with Docker +Docker has been arguably the most sought-after, brought to the market which took the community by storm ever since its introduction. Although it's yet controversial whether it's the best choice among its peers, I have never seen such an unanimous enthusiasm over one tech product throughout the whole developers community. + +Then, why so? In modern computer engineering, products are so complex with an endless list of dependencies intertwined with each other. Building such dependencies in place for every occasion where it's required is one hell of a job, not to mention glitches from all the version variation. That's where Docker steps in to make you achieve **infrastructure automation**. This concept was conceived to help you focus on your business logic rather than having you stuck with hassles of lower level tinkering. + +Luckily, we already have been through all this for you, got our hands dirty. All you need is run a set of docker commands to get you up and running from scratch. Without further ado, let's get started! + + +#### 1. Preparation +- You need [`docker`](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04) and [`docker-compose`](https://www.digitalocean.com/community/tutorials/how-to-install-docker-compose-on-ubuntu-18-04) installed. + +- You need [`git`](https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-18-04) installed. + +:::tip NOTE +We will walk you with docker on *Linux*. (Specifically *Ubuntu 18.04* if needed) + +There is only one bias for Docker before using it; *Run it on Linux*. Docker is native Linux, was created using a Linux technology; LXC (linux container) in the first place. Even though there were many attempts made to make it available to other platforms as it does on Linux, and it has definitely been on a progress, however, using Docker on Linux is the solidest way to deal with the technology. + +That being sad, there are tips for using other platforms for docker at [Chef's Secrets](#_4-chef-s-secret-protip) as well. +::: + +#### 2. Recipe +1. First, start with backend, download [**Vue Storefront API**](https://github.com/DivanteLtd/vue-storefront-api) from github. +```bash +git clone https://github.com/DivanteLtd/vue-storefront-api.git vue-storefront-api +cd vue-storefront-api +``` + +2. Copy `./config/default.json` to `./config/local.json` +```bash +cp config/default.json config/local.json +``` +Then edit `local.json` to your need. +We will look into this in greater detail at [Chef's secret](#_4-chef-s-secret-protip) +:::tip TIP +This step can be skipped if you are OK with values of `default.json` since it follows the [files load order](https://github.com/lorenwest/node-config/wiki/Configuration-Files#file-load-order) of [node-config](https://github.com/lorenwest/node-config) + +::: + +3. Run the following Docker command : +```bash +docker-compose -f docker-compose.yml -f docker-compose.nodejs.yml up -d +``` + +Then the result would look something like this : +```bash +Building app +Step 1/8 : FROM node:10-alpine + ---> 9dfa73010b19 +Step 2/8 : ENV VS_ENV prod + ---> Using cache + ---> 4d0a83421665 +Step 3/8 : WORKDIR /var/www + ---> Using cache + ---> e3871c8db7f3 +Step 4/8 : RUN apk add --no-cache curl git + ---> Using cache + ---> 49e996f0f6cb +Step 5/8 : COPY package.json ./ + ---> 14ed18d76efc +Step 6/8 : RUN apk add --no-cache --virtual .build-deps ca-certificates wget && yarn install --no-cache && apk del .build-deps + ---> Running in 3d6f91acc2fe +fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz +fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz +(1/2) Installing wget (1.20.3-r0) +(2/2) Installing .build-deps (0) +Executing busybox-1.29.3-r10.trigger +OK: 22 MiB in 26 packages +yarn install v1.16.0 +info No lockfile found. +[1/4] Resolving packages... +warning @babel/node > @babel/polyfill@7.4.4: 🚨 As of Babel 7.4.0, this +package has been deprecated in favor of directly +including core-js/stable (to polyfill ECMAScript +features) and regenerator-runtime/runtime +(needed to use transpiled generator functions): + + > import "core-js/stable"; + > import "regenerator-runtime/runtime"; +warning eslint > file-entry-cache > flat-cache > circular-json@0.3.3: CircularJSON is in maintenance only, flatted is its successor. +[2/4] Fetching packages... + +# ... abridged + + +``` +:vhs: You may also watch it in [bash playback :movie_camera:](https://asciinema.org/a/7XT5CWP4ynrPItattiP3on6wS) + +:::tip TIP +`-f` flag allows you to use the following docker-compose file. Without this flag, it will use the default file that is `docker-compose.yml` + +`-d` flag allows you to run the command in `detach mode` which means *running background*. +::: +3. In order to verify, run `docker ps` to show which containers are up +```bash +docker ps +``` + +Then, +```bash +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +53a47d5a6440 vuestorefrontapi_kibana "/bin/bash /usr/loca…" 31 seconds ago Up 29 seconds 0.0.0.0:5601->5601/tcp vuestorefrontapi_kibana_1 +7d8f6328601b vuestorefrontapi_app "docker-entrypoint.s…" 31 seconds ago Up 27 seconds 0.0.0.0:8080->8080/tcp vuestorefrontapi_app_1 +165ae945dbe5 vuestorefrontapi_es1 "/bin/bash bin/es-do…" 8 days ago Up 30 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch +8dd144746cef redis:4-alpine "docker-entrypoint.s…" 11 days ago Up 31 seconds 0.0.0.0:6379->6379/tcp vuestorefrontapi_redis_1 +``` +The ports number will be used later in the frontend configuration. In fact, they are already set in as default values. + +You will see 4 containers are running, which is : +| Container | Port | +|------------------------|---------------------| +| Vue Storefront API app | :8080 | +| Elasticsearch | :9200 | +| Kibana | :5601 | +| Redis | :6379 | + + +4. Now that backend part is done, let's work on frontend part, that is download [**Vue Storefront**](https://github.com/DivanteLtd/vue-storefront) + +```bash +git clone https://github.com/DivanteLtd/vue-storefront.git vue-storefront +cd vue-storefront +``` + +5. Prepare the config file at `./config/local.json`. There is `default.json` file in the same folder which is a default set of configuration. Copy it as follows : +```bash +cp config/default.json config/local.json +``` +Then fix the value as you need it in the `local.json` file. +In `local.json`, you may change values for information of backend family. But if you followed this recipe verbatim, you don't have to, because it's already there with the default value. Should you study the contents, please see to [Chef's secret](#secret-1-study-in-local-json) + +6. Finally run the following Docker command : +```bash +docker-compose up -d +``` +The result should be something like this : +```bash +Building app +Step 1/8 : FROM node:10-alpine + ---> 9dfa73010b19 +Step 2/8 : ENV VS_ENV prod + ---> Using cache + ---> 4d0a83421665 +Step 3/8 : WORKDIR /var/www + ---> Using cache + ---> e3871c8db7f3 +Step 4/8 : COPY package.json ./ + ---> 0eab68a8f13a +Step 5/8 : COPY yarn.lock ./ + ---> ac1f5e4a1831 +Step 6/8 : RUN apk add --no-cache --virtual .build-deps ca-certificates wget git && yarn install --no-cache && apk del .build-deps + ---> Running in 1ca7bc7782e3 +fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz +fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz +(1/9) Installing ca-certificates (20190108-r0) +(2/9) Installing wget (1.20.3-r0) +(3/9) Installing nghttp2-libs (1.35.1-r0) +(4/9) Installing libssh2 (1.8.2-r0) +(5/9) Installing libcurl (7.64.0-r2) +(6/9) Installing expat (2.2.6-r0) +(7/9) Installing pcre2 (10.32-r1) +(8/9) Installing git (2.20.1-r0) +(9/9) Installing .build-deps (0) +Executing busybox-1.29.3-r10.trigger +Executing ca-certificates-20190108-r0.trigger +OK: 22 MiB in 25 packages +yarn install v1.16.0 +[1/5] Validating package.json... +[2/5] Resolving packages... +[3/5] Fetching packages... +info fsevents@1.2.4: The platform "linux" is incompatible with this module. + +# ... abridged + +``` + +:vhs: You may also watch it in [bash playback :movie_camera:](https://asciinema.org/a/JZYI9ZE6DHeC7N2keBNoFUWjQ) + +7. In order to verify, run `docker ps`, there should be another container added to the list. +```bash +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +88d758bc24d0 vuestorefront_app "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:3000->3000/tcp vuestorefront_app_1 +de560221fdaf vuestorefrontapi_kibana "/bin/bash /usr/loca…" 8 hours ago Up 23 minutes 0.0.0.0:5601->5601/tcp vuestorefrontapi_kibana_1 +5576cd9963a1 vuestorefrontapi_app "docker-entrypoint.s…" 8 hours ago Up 23 minutes 0.0.0.0:8080->8080/tcp vuestorefrontapi_app_1 +88f5db9486da vuestorefrontapi_es1 "/bin/bash bin/es-do…" 8 hours ago Up 24 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch +d46c1e0a22af redis:4-alpine "docker-entrypoint.s…" 8 hours ago Up 24 minutes 0.0.0.0:6379->6379/tcp vuestorefrontapi_redis_1 + +``` +8. Open your browser and visit [http://localhost:3000/](http://localhost:3000/) + +After compiling, *Voila!* + +![vs_home_intro_borderline](../images/home-vuestorefront.png) + +#### 3. Peep into the kitchen (what happens internally) +We used `docker-compose` for setting up the entire environment of Vue Storefront. It was more than enough to launch the machines behind for running the shop. + +It was possible because `docker` encapsulated the whole bunch of infrastructure into a linear set of declarative definition for the desired state. + +We had 2 steps of `docker-compose` one of which is for backend **Vue Storefront API**, the other for frontend **Vue Storefront**. + +The first `docker-compose` had two `yml` files for input. The first input file `docker-compose.yml` describe its base requirement all but **Vue Storefront API** itself; that is, **Elasticsearch** as data store, **Redis** for cache and **Kibana** for helping you grab your data visually (a pair of Elasticsearch). +```yaml +# docker-compose.yml +version: '3.0' +services: + es1: + container_name: elasticsearch + build: docker/elasticsearch/ + volumes: + - ./docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro + - ./docker/elasticsearch/data:/usr/share/elasticsearch/data + ports: + - '9200:9200' + - '9300:9300' + environment: + ES_JAVA_OPTS: "-Xmx512m -Xms512m" + + kibana: + build: docker/kibana/ + volumes: + - ./docker/kibana/config/:/usr/share/kibana/config:ro + ports: + - '5601:5601' + depends_on: + - es1 + + redis: + image: 'redis:4-alpine' + ports: + - '6379:6379' + +volumes: + esdat1: +``` +:::tip NOTE +Once a term explained, it will be ignored thereafter for consecutive occurrence. +::: +`version` denotes which version of `docker-compose` this file uses. + +`services` describe containers. It codifies how they should run. In other words, it codifies option flags used with `docker run ...` + +`es1` contains information of data store *Elasticsearch* container. +- `build` denotes build path of container. +- `volumes` contains the mount path of volumes shared between host and container as *host:container* +- `ports` connect ports between host and container as in *host:container* +- `environment` allows you to add environment variables. `Xmx512m` means JVM will take up to maximum 512MB memory. `Xms512m` means minimum memory. Combining them, there will be no memory resize, it will just stick to 512MB from start to end throughout its life cycle. + +`kibana` contains information of *Kibana* application container. +- `depends_on` creates dependency for a container of other containers. So, this container is dependent on `es1` that's just described above. +- `volumes` mean volumes shared, `:ro` creates the volume in `read-only` mode for the container. + +`redis` contains information of *Redis* cache application container. + +- `image` node contains the name of image this container is based on. + +`volumes` in top level can be used as a reference to be used across multiple services(containers). +
+
+ +The second input file `docker-compose.nodejs.yml` deals with **Vue Storefront API** node application. +```yaml +version: '3.0' +services: + app: + # image: divante/vue-storefront-api:latest + build: + context: . + dockerfile: docker/vue-storefront-api/Dockerfile + depends_on: + - es1 + - redis + env_file: docker/vue-storefront-api/default.env + environment: + VS_ENV: dev + volumes: + - './config:/var/www/config' + - './ecosystem.json:/var/www/ecosystem.json' + - './migrations:/var/www/migrations' + - './package.json:/var/www/package.json' + - './babel.config.js:/var/www/babel.config.js' + - './scripts:/var/www/scripts' + - './src:/var/www/src' + - './var:/var/www/var' + tmpfs: + - /var/www/dist + ports: + - '8080:8080' +``` +`app` contains information of *Vue Storefront API* application. +- `build` is path for build information. If the value is string, it's a plain path. When it's object, you may have a few options to add. `context` is relative path or git repo url where `Dockerfile` is located. `dockerfile` node may change the path/name of `Dockerfile`. [more info](https://docs.docker.com/compose/compose-file/#build) +- `depends_on` tells us this container is based on `es1` and `redis` containers we created above. +- `env_file` helps you add environment values from files. It's relative path from the `docker-compose` file that is in the process, in this case, it's `docker-compose.nodejs.yml` +- `environment` is to set `VS_ENV` as `dev` so that environment will be setup for developer mode. +- `tmpfs` denotes temporary volumes that are only available to host memory. Unlike `volumes`, this `tmpfs` will be gone once the container stops. This option is only available to *Linux*. + +
+
+ +The second `docker-compose` step handles **Vue Storefront** frontend. +``` yaml +version: '2.0' +services: + app: + # image: divante/vue-storefront:latest + build: + context: . + dockerfile: docker/vue-storefront/Dockerfile + env_file: docker/vue-storefront/default.env + environment: + VS_ENV: dev + network_mode: host + volumes: + - './babel.config.js:/var/www/babel.config.js' + - './config:/var/www/config' + - './core:/var/www/core' + - './ecosystem.json:/var/www/ecosystem.json' + - './.eslintignore:/var/www/.eslintignore' + - './.eslintrc.js:/var/www/.eslintrc.js' + - './lerna.json:/var/www/lerna.json' + - './tsconfig.json:/var/www/tsconfig.json' + - './tsconfig-build.json:/var/www/tsconfig-build.json' + - './shims.d.ts:/var/www/shims.d.ts' + - './package.json:/var/www/package.json' + - './src:/var/www/src' + - './var:/var/www/var' + tmpfs: + - /var/www/dist + ports: + - '3000:3000' +``` +This looks like by and large the same with *Vue Storefront API* with a few changes. + +`app` service describes options for *Vue Storefront* frontend application. +- `network_mode` allows you to modify values for `--network` option of docker client. `host` option allows your designated container to open to host network. For example, if you bind your container in host's `80` port, then the container will be accessible at host's `:80` from the internet. In other words, the container is not isolated. [more info](https://docs.docker.com/network/host/) + +If you take a closer look inside `Dockerfile`s, you will notice they install all the dependencies of the project from `package.json` not to mention required OS features including `git`, `wget` and certificates. You don't have to worry what to do because we made it do for you. + +Next, you might want to import your goods data. Please jump to [Data imports](./data-import.md) if you don't want to stop. + +#### 4. Chef's secret (protip) +##### Secret 1. Study in `local.json` for *Vue Storefront API* +Starting point of customization is `default.json` or its copy `local.json` where the platform seeks configuration values. +:::tip NOTE +If you want to modify `default.json`, don't edit it directly but copy the whole file into `local.json` and start editing it in that file. Why it should be done that way is explained later at [Secret 3. Why use node-config?](#secret-3-why-use-node-config) +::: +We have 2 `local.json` files, one of which is for backend here, and we will look at [Secret 2](#secret-2-study-in-local-json-for-vue-storefront), the other for frontend . + +At [`vue-storefront-api/config/default.json`](https://github.com/DivanteLtd/vue-storefront-api/blob/master/config/default.json) for **backend** : +```json + "server": { + "host": "localhost", + "port": 8080, + "searchEngine": "elasticsearch" + }, +``` +- This is where your API backend is defined. The server will listen `server.host`:`server.port` unless it's defined otherwise in environment variables. + +- `server.searchEngine` is used in the integration with `graphql` so please don't change it. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/graphql/resolvers.js#L6) +```json + "orders": { + "useServerQueue": false + }, + "catalog": { + "excludeDisabledProducts": false + }, +``` +- `orders.useServerQueue` allows you to use queue process when `order` API is used to create an order. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/order.js#L65) + +- `catalog.excludeDisabledProducts` allows you to skip disabled products when importing products using `mage2vs`. +[jump to code](https://github.com/DivanteLtd/mage2vuestorefront/blob/master/src/adapters/magento/product.js#L166) + +```json + "elasticsearch": { + "host": "localhost", + "port": 9200, + "protocol": "http", + "user": "elastic", + "password": "changeme", + "min_score": 0.01, + "indices": [ + "vue_storefront_catalog", + "vue_storefront_catalog_de", + "vue_storefront_catalog_it" + ], + "indexTypes": [ + "product", + "category", + "cms", + "attribute", + "taxrule", + "review" + ], + "apiVersion": "5.6" + }, +``` +- `elasticsearch` element is used widely across the whole platform. Considering `elasticsearch` works as a data store (database), it's natural. + + - `host`, `port`, `protocol` defines `elasticsearch` connect information. +- `user`, `password` is default credentials of `elasticsearch`. If you changed the credentials of `elasticsearch`, please change this accordingly. [more info](https://www.elastic.co/guide/en/x-pack/current/security-getting-started.html) + - `min_score` sets a `min_score` when building a query for `elasticsearch`. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/graphql/elasticsearch/queryBuilder.js#L172) + :::tip TIP + `min_score` helps you exclude documents with `_score` less than `min_score` value. + ::: + - `indices` may contain one or multiple indexes. Each index acts as a data store for a storefront. You may add entries to the array with arbitrary names or remove entries from it. + :::warning CAUTION ! + However, the index name should match the one you will use for [data pump](data-import.md#_2-2-recipe-b-using-on-premise). + ::: + The default values for `indices` assume you have 2 additional stores(`de`, `it`) plus the default store. + - `indexTypes` contains values for mapping. You can consider it as `table` if you take `indices` as database. + - `apiVersion` defines the `elasticsearch` version it uses. + +```json + "redis": { + "host": "localhost", + "port": 6379, + "db": 0 + }, + "kue": {}, +``` +- `redis` contains `redis` server connect information. +- `kue` contains `kue` application options. [jump to code for options](https://github.com/Automattic/kue/blob/master/lib/kue.js#L88) + +```json + "availableStores": [ + "de", + "it" + ], +``` +- `availableStores` contains additional stores code name. If this value is an empty array, it means you only have one default store. + +```json +"storeViews": { + "multistore": true, + "mapStoreUrlsFor": [ + "de", + "it" + ], + "de": { + "storeCode": "de", + "storeId": 3, + "name": "German Store", + "url": "/de", + "elasticsearch": { + "host": "localhost:8080/api/catalog", + "index": "vue_storefront_catalog_de" + }, + "tax": { + "defaultCountry": "DE", + "defaultRegion": "", + "calculateServerSide": true, + "sourcePriceIncludesTax": false + }, + "i18n": { + "fullCountryName": "Germany", + "fullLanguageName": "German", + "defaultLanguage": "DE", + "defaultCountry": "DE", + "defaultLocale": "de-DE", + "currencyCode": "EUR", + "currencySign": "EUR", + "dateFormat": "HH:mm D-M-YYYY" + } + }, + "it": { + "storeCode": "it", + "storeId": 4, + "name": "Italian Store", + "url": "/it", + "elasticsearch": { + "host": "localhost:8080/api/catalog", + "index": "vue_storefront_catalog_it" + }, + "tax": { + "defaultCountry": "IT", + "defaultRegion": "", + "calculateServerSide": true, + "sourcePriceIncludesTax": false + }, + "i18n": { + "fullCountryName": "Italy", + "fullLanguageName": "Italian", + "defaultCountry": "IT", + "defaultLanguage": "IT", + "defaultLocale": "it-IT", + "currencyCode": "EUR", + "currencySign": "EUR", + "dateFormat": "HH:mm D-M-YYYY" + } + } + }, + +``` +- `storeViews` element contains the whole information of ***additional*** stores. The default store information doesn't exist here, it exists on top level. +- `multistore` is supposed to tell the platform if it has multiple stores to consider. For example, it is used to configure `tax` values of additional store. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/platform/magento2/tax.js#L14) +- `mapStoreUrlsFor` is used for building url routes in frontend. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/lib/multistore.ts#L85) +- `de` element contains detailed information of `de` store. You need to have this kind of element for all the additional stores you added to `availableStores` with `storeCode` as the key. `de` and `it` in the `default.json` exhibits an example you can copy & paste for other stores you need to add. + - `storeCode` denotes store code for the store. + - `storeId` denotes store ID of the store. + - `name` denotes the store name. + - `url` denotes URL for the store. + - `elasticsearch` contains information for the store. This information may override the default one defined above. + - `host` is where your *Elasticsearch* listens on. + - `index` is the name of the index for the store. + - `tax` contains tax information of the store. + - `defaultCountry` is the code name of the country on which tax is calculated for the store. + - `defaultRegion` is default region. + - `calculateServerSide` determines if price is fetched with(`true`)/without(`false`) tax calculated. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/product.js#L48) + - `sourcePriceIncludesTax` determines whether price is stored with tax applied (`true`) or tax calculated on runtime (`false`). [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/platform/magento2/tax.js#L12) + - `i18n` connotes *internationalization*. [more info](https://en.wikipedia.org/wiki/Internationalization_and_localization) + - `fullCountryName` is the full name of the country this `i18n` is applied to. + - `fullLanguageName` is the full name of the language this `i18n` is applied to. + - `defaultCountry` is the abbreviated name of the country this `i18n` is applied to by default. + - `defaultLanguage` is the abbreviated name of the language this `i18n` is applied to by default. + - `defaultLocale` is the default locale this `i18n` uses. + - `currencyCode` is the currency code this store uses. + - `currencySign` is the currency sign this store uses. + - `dateFormat` is the date format this store uses. + + + ```json + "authHashSecret": "__SECRET_CHANGE_ME__", + "objHashSecret": "__SECRET_CHANGE_ME__", + ``` +- `authHashSecret` is used to encode & decode JWT for API use. +- `objHashSecret` is 1) fallback secret hash for `authHashSecret`, 2) used for hashing in tax calculation. + +```json + "cart": { + "setConfigurableProductOptions": false + }, + "tax": { + "defaultCountry": "PL", + "defaultRegion": "", + "calculateServerSide": true, + "alwaysSyncPlatformPricesOver": false, + "usePlatformTotals": true, + "setConfigurableProductOptions": true, + "sourcePriceIncludesTax": false + }, +``` +- `cart` + - `setConfigurableProductOptions` flag determines to show either the parent item or the child item (aka selected option item) in the cart context. `true` shows parent item instead of the option item selected. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/platform/magento2/o2m.js#L94) +- `tax` + - `alwaysSyncPlatformPricesOver` [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/order.js#L49) + - `usePlatformTotals` + These two options are used to determine whether to fetch prices from data source on the fly or not. If you set `alwaysSyncPlatformPricesOver` true, then it skips checking the checksum for cart items based on price. + +```json + "bodyLimit": "100kb", + "corsHeaders": [ + "Link" + ], +``` +- `bodyLimit` limits how big a request can be for your application. +- `corsHeaders` allows you to add entries to `Access-Control-Expose-Headers` + +```json + "platform": "magento2", +``` +- `platform` defines which e-commerce platform is used as a source. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/order.js#L13) + +```json + "registeredExtensions": [ + "mailchimp-subscribe", + "example-magento-api", + "cms-data", + "mail-service" + ], + "extensions": { + "mailchimp": { + "listId": "e06875a7e1", + "apiKey": "a9a3318ea7d30f5c5596bd4a78ae0985-us3", + "apiUrl": "https://us3.api.mailchimp.com/3.0" + }, + "mailService": { + "transport": { + "host": "smtp.gmail.com", + "port": 465, + "secure": true, + "user": "vuestorefront", + "pass": "vuestorefront.io" + }, + "targetAddressWhitelist": ["contributors@vuestorefront.io"], + "secretString": "__THIS_IS_SO_SECRET__" + } + }, +``` +- `registeredExtensions` element contains the list of supported extensions, it bootstraps entry points for those extensions [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/index.js#L45) + +- `extensions` contains additional configuration for extensions. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/tree/master/src/api/extensions) + - `mailchimp` provides `POST`, `DELETE` APIs for *Mailchimp* `subscribe` method. + - `listId` is the ID of list you are publishing. + - `apiKey` is API key you are assigned. + - `apiUrl` is API base url for *Mailchimp* service. + - `mailService` is used to send emails from Vue Storefront via *Gmail*. + - `transport` contains basic information for *Gmail* service. + - `host` is where your mail is sent en route. + - `port` is the port number used for the service. + - `secure` determines to use SSL connection. + - `user` is `username` for the service. + - `pass` is `password` for the service. + - `targetAddressWhitelist` checks if an user confirmed his/her email address *and* source email is white-listed. + - `secretString` is used for hashing. + +```json + "magento2": { + "url": "http://demo-magento2.vuestorefront.io/", + "imgUrl": "http://demo-magento2.vuestorefront.io/media/catalog/product", + "assetPath": "/../var/magento2-sample-data/pub/media", + "magentoUserName": "", + "magentoUserPassword": "", + "httpUserName": "", + "httpUserPassword": "", + "api": { + "url": "http://demo-magento2.vuestorefront.io/rest", + "consumerKey": "byv3730rhoulpopcq64don8ukb8lf2gq", + "consumerSecret": "u9q4fcobv7vfx9td80oupa6uhexc27rb", + "accessToken": "040xx3qy7s0j28o3q0exrfop579cy20m", + "accessTokenSecret": "7qunl3p505rubmr7u1ijt7odyialnih9" + } + }, + "magento1": { + "url": "http://magento-demo.local", + "imgUrl": "http://magento-demo.local/media/catalog/product", + "magentoUserName": "", + "magentoUserPassword": "", + "httpUserName": "", + "httpUserPassword": "", + "api": { + "url": "http://magento-demo.local/vsbridge", + "consumerKey": "", + "consumerSecret": "", + "accessToken": "", + "accessTokenSecret": "" + } + }, +``` +- `magento2` is used to integrate with Magento 2 as a data source. + + - `imgUrl` is base image url. [jump to code](https://github.com/kkdg/vue-storefront-api/blob/master/src/api/img.js#L38) + + - `assetPath` is used for the `media` path. [jump to code](https://github.com/kkdg/vue-storefront-api/blob/master/src/index.js#L22) + + - `api` contains API credentials for integration. + + - `url` is base url for Magento 2 instance. + - `consumerKey` See **TIP** + - `consumerSecret` + - `accessToken` + - `accessTokenSecret` + + + + :::tip TIP + + These 4 nodes above is the required credentials for integration with Magento 2. [how to get them](data-import.html#_2-2-recipe-b-using-on-premise) + + ::: + +`magento1` has just the same structure with `magento2`. + + + +```json + "imageable": { + "namespace": "", + "maxListeners": 512, + "imageSizeLimit": 1024, + "whitelist": { + "allowedHosts": [ + ".*divante.pl", + ".*vuestorefront.io" + ] + }, + "cache": { + "memory": 50, + "files": 20, + "items": 100 + }, + "concurrency": 0, + "counters": { + "queue": 2, + "process": 4 + }, + "simd": true, + "keepDownloads": true + }, +``` +- `imageable` deals with everything you need to configure when it comes to your storefront images, especially product images. + + - `maxListeners` limits maximum listeners to request's socket. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/img.js#L21) + - `imageSizeLimit` limits maximum image size. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/img.js#L56) + - `whitelist` contains a white-list of image source domains + + - `allowedHosts` contains the array of white-list + + :::warning DON'T FORGET + + You should include your source domain in `allowedHosts` or your request for product images will fail. [more info](data-import.html#secret-1-product-image-is-not-synced) + + ::: + + :::tip NOTE + + From `cache` to `simd` they are used to configure [Sharp](https://github.com/lovell/sharp) library. *Sharp* is a popular library for image processing in *Node.js*. [jump to option docs](https://sharp.dimens.io/en/stable/api-utility/#cache) + + ::: + + - `cache` limits `libvips` operation cache from *Sharp*. Values hereunder are default values. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/lib/image.js#L5) + + - `memory` is the maximum memory in MB to use for the cache. + - `files` is the maximum number of files to hold open. + - `items` is the maximum number of operations to cache. + + - `concurrency` is the number of threads for processing each image. + + - `counters` provides access to internal task counters. + + - `queue` is the number of tasks in queue for *libuv* to provide a worker thread. + - `process` limits the number of resize tasks concurrently processed. + + - `simd` to use SIMD vector unit of the CPU in order to enhance the performance. + + + +```json + "entities": { + "category": { + "includeFields": [ "children_data", "id", "children_count", "sku", "name", "is_active", "parent_id", "level", "url_key" ] + }, + "attribute": { + "includeFields": [ "attribute_code", "id", "entity_type_id", "options", "default_value", "is_user_defined", "frontend_label", "attribute_id", "default_frontend_label", "is_visible_on_front", "is_visible", "is_comparable" ] + }, + "productList": { + "sort": "", + "includeFields": [ "type_id", "sku", "product_links", "tax_class_id", "special_price", "special_to_date", "special_from_date", "name", "price", "priceInclTax", "originalPriceInclTax", "originalPrice", "specialPriceInclTax", "id", "image", "sale", "new", "url_key" ], + "excludeFields": [ "configurable_children", "description", "configurable_options", "sgn" ] + }, + "productListWithChildren": { + "includeFields": [ "type_id", "sku", "name", "tax_class_id", "special_price", "special_to_date", "special_from_date", "price", "priceInclTax", "originalPriceInclTax", "originalPrice", "specialPriceInclTax", "id", "image", "sale", "new", "configurable_children.image", "configurable_children.sku", "configurable_children.price", "configurable_children.special_price", "configurable_children.priceInclTax", "configurable_children.specialPriceInclTax", "configurable_children.originalPrice", "configurable_children.originalPriceInclTax", "configurable_children.color", "configurable_children.size", "product_links", "url_key"], + "excludeFields": [ "description", "sgn"] + }, + "product": { + "excludeFields": [ "updated_at", "created_at", "attribute_set_id", "status", "visibility", "tier_prices", "options_container", "msrp_display_actual_price_type", "has_options", "stock.manage_stock", "stock.use_config_min_qty", "stock.use_config_notify_stock_qty", "stock.stock_id", "stock.use_config_backorders", "stock.use_config_enable_qty_inc", "stock.enable_qty_increments", "stock.use_config_manage_stock", "stock.use_config_min_sale_qty", "stock.notify_stock_qty", "stock.use_config_max_sale_qty", "stock.use_config_max_sale_qty", "stock.qty_increments", "small_image"], + "includeFields": null, + "filterFieldMapping": { + "category.name": "category.name.keyword" + } + } + }, +``` +- `entities` is used to integrate with *GraphQL* in **Vue Storefront API**. + - `category` + - `includeFields` contains an array of fields to be added as `sourceInclude` [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/graphql/elasticsearch/category/resolver.js#L10) + - `product` + - `filterFieldMapping` adds a field mapping to apply a filter in a query [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/graphql/elasticsearch/mapping.js#L19) + - `category.name` + +```json + "usePriceTiers": false, + "boost": { + "name": 3, + "category.name": 1, + "short_description": 1, + "description": 1, + "sku": 1, + "configurable_children.sku": 1 + } +``` +- `usePriceTiers` determines whether to use price tiers for customers in groups +- `boost` is used to give weighted values to fields for a query to *Elasticsearch*, the bigger, the heavier. + - `name` field has the value *3* so that matching query with the `name` has the highest priority. + - `category.name` ,`short_description`, `description`, `sku`, `configurable_children.sku ` the rest of fields have the default value; 1. + + +
+
+ +#### Secret 2. Study in `local.json` for *Vue Storefront* + +At [`vue-storefront/config/default.json`](https://github.com/DivanteLtd/vue-storefront/blob/master/config/default.json) for **frontend** : + +```json +"server": { + "host": "localhost", + "port": 3000, + "protocol": "http", + "api": "api", + "devServiceWorker": false, + "useOutputCacheTagging": false, + "useOutputCache": false, + "outputCacheDefaultTtl": 86400, + "availableCacheTags": ["product", "category", "home", "checkout", "page-not-found", "compare", "my-account", "P", "C", "error"], + "invalidateCacheKey": "aeSu7aip", + "dynamicConfigReload": false, + "dynamicConfigContinueOnError": false, + "dynamicConfigExclude": ["ssr", "storeViews", "entities", "localForage", "shipping", "boost", "query"], + "dynamicConfigInclude": [], + "elasticCacheQuota": 4096 +}, +``` + +- `server` contains information of various features related to *frontend* server. + + - `host` is the host address in which your *Vue Storefront* instance starts at. + + - `port` is the port number in which your *Vue Storefront* instance listens to. + + - `protocol` is used for *GraphQL* integration. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/lib/search/adapter/graphql/searchAdapter.ts#L48) + + - `api` determines API mode between `api` and `graphql`. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/resolvers/resolveGraphQL.js#L7) + + :::tip TIP + + You may take a look at [*GraphQL Action Plan*](/guide/basics/graphql.html) guide to help yourself make a decision which mode you should take. + ::: + + - `devServiceWorker` enables *service worker* in `develop` mode. The *service worker* is normally enabled by default for `production` mode, but not for `develop` mode. Setting this flag *true* forces to use *service worker* in `develop` mode too. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/service-worker/registration.js#L5) + :::tip TIP + + You may take a look at [Working with Service Workers](/guide/core-themes/service-workers.html) for better understanding. + ::: + + - `useOutputCacheTagging` determines to allow *Output Cache Tags*. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/server.js#L168) + + - `useOutputCache` determines to allow *Output Cache*. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/server.js#L64) + + - `outputCacheDefaultTtl` defines the default timeout for *Redis Tag Cache*. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/utils/cache-instance.js#L16) + + - `availableCacheTags` contains a list of available cache tags. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/cache.js#L7) + + - `invalidateCacheKey` is the key used for checking validity of invalidation. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/server.js#L66) + :::tip TIP + + You may take a look at [SSR Cache](/guide/basics/ssr-cache.html) in order to grab the idea of *Output Cache* in *Vue Storefront* + ::: + + - `dynamicConfigReload` enables to reload `config.json` on the fly with each server request. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/server.js#L232) + - `dynamicConfigContinueOnError` allows to skip errors during configuration merge on the fly. [jump to code](https://github.com/DivanteLtd/vue-storefront/blob/master/core/scripts/server.js#L240) + - `dynamicConfigExclude` + - `dynamicConfigInclude` + - `elasticCacheQuota` + + +```json +"seo": { + "useUrlDispatcher": true +}, +"console": { + "showErrorOnProduction" : true, + "verbosityLevel": "display-everything" +}, +"redis": { + "host": "localhost", + "port": 6379, + "db": 0 +}, +"graphql":{ + "host": "localhost", + "port": 8080 +}, +"api": { + "url": "http://localhost:8080" +}, +``` + +- `seo` +- `console` +- `redis` +- `graphql` +- `api` + +```json +"elasticsearch": { + "httpAuth": "", + "host": "/api/catalog", + "index": "vue_storefront_catalog", + "min_score": 0.02, + "csrTimeout": 5000, + "ssrTimeout": 1000, + "queryMethod": "GET", + "disableLocalStorageQueriesCache": true, + "searchScoring": { + "attributes": { + "attribute_code": { + "scoreValues": { "attribute_value": { "weight": 1 } } + } + }, + "fuzziness": 2, + "cutoff_frequency": 0.01, + "max_expansions": 3, + "minimum_should_match": "75%", + "prefix_length": 2, + "boost_mode": "multiply", + "score_mode": "multiply", + "max_boost": 100, + "function_min_score": 1 + }, + "searchableAttributes": { + "name": { + "boost": 4 + }, + "sku": { + "boost": 2 + }, + "category.name": { + "boost": 1 + } + } +}, +``` +`elasticsearch` ... + +```json +"ssr": { + "templates": { + "default": "dist/index.html", + "minimal": "dist/index.minimal.html", + "basic": "dist/index.basic.html", + "amp": "dist/index.amp.html" + }, + "executeMixedinAsyncData": true, + "initialStateFilter": ["__DEMO_MODE__", "version", "storeView"], + "useInitialStateFilter": true +}, +``` +- `ssr` + - `templates` + - `default` + +```json +"defaultStoreCode": "", +"storeViews": { + "multistore": false, + "commonCache": false, + "mapStoreUrlsFor": ["de", "it"], + "de": { + "storeCode": "de", + "storeId": 3, + "name": "German Store", + "url": "/de", + "elasticsearch": { + "host": "/api/catalog", + "index": "vue_storefront_catalog_de" + }, + "tax": { + "sourcePriceIncludesTax": false, + "defaultCountry": "DE", + "defaultRegion": "", + "calculateServerSide": true + }, + "i18n": { + "fullCountryName": "Germany", + "fullLanguageName": "German", + "defaultLanguage": "DE", + "defaultCountry": "DE", + "defaultLocale": "de-DE", + "currencyCode": "EUR", + "currencySign": "EUR", + "dateFormat": "HH:mm D-M-YYYY" + } + }, + "it": { + "storeCode": "it", + "storeId": 4, + "name": "Italian Store", + "url": "/it", + "elasticsearch": { + "host": "/api/catalog", + "index": "vue_storefront_catalog_it" + }, + "tax": { + "sourcePriceIncludesTax": false, + "defaultCountry": "IT", + "defaultRegion": "", + "calculateServerSide": true + }, + "i18n": { + "fullCountryName": "Italy", + "fullLanguageName": "Italian", + "defaultCountry": "IT", + "defaultLanguage": "IT", + "defaultLocale": "it-IT", + "currencyCode": "EUR", + "currencySign": "EUR", + "dateFormat": "HH:mm D-M-YYYY" + } + } +}, +``` +- `defaultStoreCode` + +```json +"entities": { + "optimize": true, + "twoStageCaching": true, + "optimizeShoppingCart": true, + "category": { + "includeFields": [ "id", "*.children_data.id", "*.id", "children_count", "sku", "name", "is_active", "parent_id", "level", "url_key", "url_path", "product_count", "path"], + "excludeFields": [ "sgn" ], + "categoriesRootCategorylId": 2, + "categoriesDynamicPrefetchLevel": 2, + "categoriesDynamicPrefetch": true + }, + "attribute": { + "includeFields": [ "attribute_code", "id", "entity_type_id", "options", "default_value", "is_user_defined", "frontend_label", "attribute_id", "default_frontend_label", "is_visible_on_front", "is_visible", "is_comparable", "tier_prices", "frontend_input" ] + }, + "productList": { + "sort": "", + "includeFields": [ "type_id", "sku", "product_links", "tax_class_id", "special_price", "special_to_date", "special_from_date", "name", "price", "priceInclTax", "originalPriceInclTax", "originalPrice", "specialPriceInclTax", "id", "image", "sale", "new", "url_path", "url_key", "status", "tier_prices", "configurable_children.sku", "configurable_children.price", "configurable_children.special_price", "configurable_children.priceInclTax", "configurable_children.specialPriceInclTax", "configurable_children.originalPrice", "configurable_children.originalPriceInclTax" ], + "excludeFields": [ "description", "configurable_options", "sgn", "*.sgn", "msrp_display_actual_price_type", "*.msrp_display_actual_price_type", "required_options" ] + }, + "productListWithChildren": { + "includeFields": [ "type_id", "sku", "name", "tax_class_id", "special_price", "special_to_date", "special_from_date", "price", "priceInclTax", "originalPriceInclTax", "originalPrice", "specialPriceInclTax", "id", "image", "sale", "new", "configurable_children.image", "configurable_children.sku", "configurable_children.price", "configurable_children.special_price", "configurable_children.priceInclTax", "configurable_children.specialPriceInclTax", "configurable_children.originalPrice", "configurable_children.originalPriceInclTax", "configurable_children.color", "configurable_children.size", "configurable_children.id", "configurable_children.tier_prices", "product_links", "url_path", "url_key", "status", "tier_prices"], + "excludeFields": [ "description", "sgn", "*.sgn", "msrp_display_actual_price_type", "*.msrp_display_actual_price_type", "required_options"] + }, + "review": { + "excludeFields": ["review_entity", "review_status"] + }, + "product": { + "excludeFields": [ "*.msrp_display_actual_price_type", "required_options", "updated_at", "created_at", "attribute_set_id", "options_container", "msrp_display_actual_price_type", "has_options", "stock.manage_stock", "stock.use_config_min_qty", "stock.use_config_notify_stock_qty", "stock.stock_id", "stock.use_config_backorders", "stock.use_config_enable_qty_inc", "stock.enable_qty_increments", "stock.use_config_manage_stock", "stock.use_config_min_sale_qty", "stock.notify_stock_qty", "stock.use_config_max_sale_qty", "stock.use_config_max_sale_qty", "stock.qty_increments", "small_image", "sgn", "*.sgn"], + "includeFields": null, + "useDynamicAttributeLoader": true, + "standardSystemFields": [ + "description", + "configurable_options", + "tsk", + "custom_attributes", + "size_options", + "regular_price", + "final_price", + "price", + "color_options", + "id", + "links", + "gift_message_available", + "category_ids", + "sku", + "stock", + "image", + "thumbnail", + "visibility", + "type_id", + "tax_class_id", + "media_gallery", + "url_key", + "url_path", + "max_price", + "minimal_regular_price", + "special_price", + "minimal_price", + "name", + "configurable_children", + "max_regular_price", + "category", + "status", + "priceTax", + "priceInclTax", + "specialPriceTax", + "specialPriceInclTax", + "_score", + "slug", + "errors", + "info", + "erin_recommends", + "special_from_date", + "news_from_date", + "custom_design_from", + "originalPrice", + "originalPriceInclTax", + "parentSku", + "options", + "product_option", + "qty", + "is_configured" + ] + } +}, +"cart": { + "serverMergeByDefault": true, + "serverSyncCanRemoveLocalItems": false, + "serverSyncCanModifyLocalItems": false, + "synchronize": true, + "synchronize_totals": true, + "setCustomProductOptions": true, + "setConfigurableProductOptions": true, + "askBeforeRemoveProduct": true, + "displayItemDiscounts": true, + "minicartCountType": "quantities", + "create_endpoint": "http://localhost:8080/api/cart/create?token={{token}}", + "updateitem_endpoint": "http://localhost:8080/api/cart/update?token={{token}}&cartId={{cartId}}", + "deleteitem_endpoint": "http://localhost:8080/api/cart/delete?token={{token}}&cartId={{cartId}}", + "pull_endpoint": "http://localhost:8080/api/cart/pull?token={{token}}&cartId={{cartId}}", + "totals_endpoint": "http://localhost:8080/api/cart/totals?token={{token}}&cartId={{cartId}}", + "paymentmethods_endpoint": "http://localhost:8080/api/cart/payment-methods?token={{token}}&cartId={{cartId}}", + "shippingmethods_endpoint": "http://localhost:8080/api/cart/shipping-methods?token={{token}}&cartId={{cartId}}", + "shippinginfo_endpoint": "http://localhost:8080/api/cart/shipping-information?token={{token}}&cartId={{cartId}}", + "collecttotals_endpoint": "http://localhost:8080/api/cart/collect-totals?token={{token}}&cartId={{cartId}}", + "deletecoupon_endpoint": "http://localhost:8080/api/cart/delete-coupon?token={{token}}&cartId={{cartId}}", + "applycoupon_endpoint": "http://localhost:8080/api/cart/apply-coupon?token={{token}}&cartId={{cartId}}&coupon={{coupon}}" +}, +"products": { + "useShortCatalogUrls": false, + "useMagentoUrlKeys": true, + "setFirstVarianAsDefaultInURL": false, + "configurableChildrenStockPrefetchStatic": false, + "configurableChildrenStockPrefetchDynamic": false, + "configurableChildrenStockPrefetchStaticPrefetchCount": 8, + "filterUnavailableVariants": false, + "listOutOfStockProducts": true, + "preventConfigurableChildrenDirectAccess": true, + "alwaysSyncPlatformPricesOver": false, + "clearPricesBeforePlatformSync": false, + "waitForPlatformSync": false, + "setupVariantByAttributeCode": true, + "endpoint": "http://localhost:8080/api/product", + "defaultFilters": ["color", "size", "price", "erin_recommends"], + "systemFilterNames": ["sort"], + "filterFieldMapping": { + "category.name": "category.name.keyword" + }, + "colorMappings": { + "Melange graphite": "#eeeeee" + }, + "sortByAttributes": { + "Latest": "updated_at", + "Price: Low to high":"final_price", + "Price: High to low":"final_price:desc" + }, + "gallery": { + "variantsGroupAttribute": "color", + "mergeConfigurableChildren": true, + "imageAttributes": ["image","thumbnail","small_image"], + "width": 600, + "height": 744 + }, + "filterAggregationSize": { + "default": 10, + "size": 10, + "color": 10 + } +}, +"orders": { + "directBackendSync": true, + "endpoint": "http://localhost:8080/api/order", + "payment_methods_mapping": { + }, + "offline_orders": { + "automatic_transmission_enabled": false, + "notification" : { + "enabled": true, + "title" : "Order waiting!", + "message": "Click here to confirm the order that you made offline.", + "icon": "/assets/logo.png" + } + } +}, +"localForage": { + "defaultDrivers": { + "user": "LOCALSTORAGE", + "cmspage": "LOCALSTORAGE", + "cmsblock": "LOCALSTORAGE", + "carts": "LOCALSTORAGE", + "orders": "LOCALSTORAGE", + "wishlist": "LOCALSTORAGE", + "categories": "LOCALSTORAGE", + "attributes": "LOCALSTORAGE", + "products": "INDEXEDDB", + "elasticCache": "LOCALSTORAGE", + "claims": "LOCALSTORAGE", + "syncTasks": "LOCALSTORAGE", + "ordersHistory": "LOCALSTORAGE", + "checkoutFieldValues": "LOCALSTORAGE" + } +}, +"reviews": { + "create_endpoint": "http://localhost:8080/api/review/create" +}, +"users": { + "autoRefreshTokens": true, + "endpoint": "http://localhost:8080/api/user", + "history_endpoint": "http://localhost:8080/api/user/order-history?token={{token}}", + "resetPassword_endpoint": "http://localhost:8080/api/user/reset-password", + "changePassword_endpoint": "http://localhost:8080/api/user/change-password?token={{token}}", + "login_endpoint": "http://localhost:8080/api/user/login", + "create_endpoint": "http://localhost:8080/api/user/create", + "me_endpoint": "http://localhost:8080/api/user/me?token={{token}}", + "refresh_endpoint": "http://localhost:8080/api/user/refresh" +}, +"stock": { + "synchronize": true, + "allowOutOfStockInCart": true, + "endpoint": "http://localhost:8080/api/stock" +}, +"images": { + "useExactUrlsNoProxy": false, + "baseUrl": "https://demo.vuestorefront.io/img/", + "productPlaceholder": "/assets/placeholder.jpg" +}, +"install": { + "is_local_backend": true, + "backend_dir": "../vue-storefront-api" +}, +"demomode": false, +"tax": { + "defaultCountry": "US", + "defaultRegion": "", + "sourcePriceIncludesTax": false, + "calculateServerSide": true, + "userGroupId": null, + "useOnlyDefaultUserGroupId": false, + "deprecatedPriceFieldsSupport": true, + "finalPriceIncludesTax": false +}, +``` + - `tax`: ... + - `defaultCountry` is the code name of the country on which tax is calculated for the store. + - `defaultRegion` is default region. + - `sourcePriceIncludesTax` determines whether price is stored with tax applied (`true`) or tax calculated on runtime (`false`). [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/platform/magento2/tax.js#L12) + - `calculateServerSide` determines if price is fetched with(`true`)/without(`false`) tax calculated. [jump to code](https://github.com/DivanteLtd/vue-storefront-api/blob/master/src/api/product.js#L48) + - `userGroupId`: null, + - `useOnlyDefaultUserGroupId`: false, + - `deprecatedPriceFieldsSupport`: true, + - `finalPriceIncludesTax`: false +```json +"shipping": { + "methods": [ + { + "method_title": "DPD Courier", + "method_code": "flatrate", + "carrier_code": "flatrate", + "amount": 4, + "price_incl_tax": 5, + "default": true, + "offline": true + } + ] +}, +"i18n": { + "defaultCountry": "US", + "defaultLanguage": "EN", + "availableLocale": ["en-US","de-DE","fr-FR","es-ES","nl-NL", "ja-JP", "ru-RU", "it-IT", "pt-BR", "pl-PL", "cs-CZ"], + "defaultLocale": "en-US", + "currencyCode": "USD", + "currencySign": "$", + "currencyDecimal": null, + "currencyGroup": null, + "fractionDigits": 2, + "priceFormat": "{sign}{amount}", + "dateFormat": "HH:mm D/M/YYYY", + "fullCountryName": "United States", + "fullLanguageName": "English", + "bundleAllStoreviewLanguages": true +}, +"mailchimp": { + "endpoint": "http://localhost:8080/api/ext/mailchimp-subscribe/subscribe" +}, +"mailer": { + "endpoint": { + "send": "http://localhost:8080/api/ext/mail-service/send-email", + "token": "http://localhost:8080/api/ext/mail-service/get-token" + }, + "contactAddress": "contributors@vuestorefront.io", + "sendConfirmation": true +}, +"theme": "@vue-storefront/theme-default", +"analytics": { + "id": false +}, +"hotjar": { + "id": false +}, +"cms": { + "endpoint": "http://localhost:8080/api/ext/cms-data/cms{{type}}/{{cmsId}}", + "endpointIdentifier": "http://localhost:8080/api/ext/cms-data/cms{{type}}Identifier/{{cmsIdentifier}}/storeId/{{storeId}}" +}, +"cms_block": { + "max_count": 500 +}, +"cms_page": { + "max_count": 500 +}, +"usePriceTiers": false, +"useZeroPriceProduct": true, +"query": { + "inspirations": { + "filter": [ + { + "key": "category.name", + "value" : { "eq": "Performance Fabrics" } + } + ] + }, + "newProducts": { + "filter": [ + { + "key": "category.name", + "value" : { "eq": "Tees" } + } + ] + }, + "bestSellers": { + "filter": [ + { + "key": "category.name", + "value" : { "eq": "Tees" } + } + ] + } +} + +``` \ No newline at end of file diff --git a/docs/guide/archives/graphql.md b/docs/guide/archives/graphql.md new file mode 100644 index 0000000000..7073a65246 --- /dev/null +++ b/docs/guide/archives/graphql.md @@ -0,0 +1,71 @@ +# GraphQL + +:::danger REMINDER +This document is _archived_ and _NOT_ relevant with the latest version which is `1.12` at the time of writing. Please keep in mind this document is supposed to help you maintain legacy product, not the fresh installation. +::: + +## GraphQL Action Plan (Deprecated) + +Starting with Vue Storefront 1.4.0, we're supporting two ways of getting data from the backend: + +- existing `api` mode, which is using ElasticSearch DSL as a query language +- new `graphql` mode, which is using GraphQL queries. + +You can set the desired API format in the `config/local.json` and `vue-storefront-api` is supporting both of them, however [the default is still set to `api`](https://github.com/DivanteLtd/vue-storefront/blob/4cbf866ca93f917b04461d3ae139a2d26ddf552a/config/default.json#L6). + +We've introduced an abstract [`SearchQuery`](https://github.com/DivanteLtd/vue-storefront/tree/develop/core/store/lib/search) interface with switchable Query Adapters to provide the abstraction layer. This is an ultra-cool feature, especially when you're integrating Vue Storefront with a custom backend application—you're able [to create your own adapter](https://github.com/DivanteLtd/vue-storefront/tree/develop/core/lib/search/adapter) to customize the way data is gathered from the backend. + +From now on the **bodybuilder** package is **deprecated** and you should start using the `SearchQuery` interface to build the search queries that will be translated to GraphQL / API queries. + +Here is an example of how to build the Query: + +```js +export function prepareRelatedQuery(key, sku) { + let relatedProductsQuery = new SearchQuery(); + + relatedProductsQuery = relatedProductsQuery.applyFilter({ + key: key, + value: { in: sku }, + }); + + relatedProductsQuery = relatedProductsQuery + .applyFilter({ key: 'visibility', value: { in: [2, 3, 4] } }) + .applyFilter({ key: 'status', value: { in: [0, 1, 2] } }); // @TODO Check if status 2 (disabled) was set not by occasion here + + if (config.products.listOutOfStockProducts === false) { + relatedProductsQuery = relatedProductsQuery.applyFilter({ + key: 'stock.is_in_stock', + value: { eq: true }, + }); + } + + return relatedProductsQuery; +} + +let relatedProductsQuery = prepareRelatedQuery(key, sku); + +this.$store + .dispatch('product/list', { + query: relatedProductsQuery, + size: 8, + prefetchGroupProducts: false, + updateState: false, + }) + .then(response => { + if (response) { + this.$store.dispatch('product/related', { + key: this.type, + items: response.items, + }); + this.$forceUpdate(); + } + }); +``` + +[More information on how to query the data](https://github.com/DivanteLtd/vue-storefront/blob/develop/docs/guide/data/elastic-queries.md). + +**Bodybuilder** queries are still supported by our backward-compatibility mode, so if you've used bodybuilder in your theme, it's fine as long as you're using the `api` mode for the backend queries. + +The **legacy queries** using bodybuilder will still work - and [here is an example](https://github.com/pkarw/vue-storefront/blob/28feb8e5dc30ec216353ef87a859212379901c57/src/extensions/template/index.js#L36). + +You can also use direct **ApolloQuery** GraphQL queries thanks to `vue-apollo` support. Please find the example [in here](https://github.com/DivanteLtd/vue-storefront/blob/4cbf866ca93f917b04461d3ae139a2d26ddf552a/src/themes/default/components/core/blocks/SearchPanel/SearchPanel.gql.vue#L21). diff --git a/docs/guide/images/home_capybara.png b/docs/guide/images/home_capybara.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9dc6065e050a28a25ecfc97c30cb2c40f024b1 GIT binary patch literal 696894 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�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%0DIlNwIC_Gzy~J0YPm_k*Vaa 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

0Dtx*K=pj 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

$bhCY^1 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