@graphcommerce/docs 4.12.0-canary.2 → 4.12.0-canary.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## 4.12.0-canary.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`9c3047c2f`](https://github.com/graphcommerce-org/graphcommerce/commit/9c3047c2fc6ea11ef9bd0c5128af883bffccc7e5) - Added GraphQL Injectable documentation ([@paales](https://github.com/paales))
8
+
9
+ ## 4.12.0-canary.3
10
+
11
+ ### Patch Changes
12
+
13
+ - [#1738](https://github.com/graphcommerce-org/graphcommerce/pull/1738) [`163be59f2`](https://github.com/graphcommerce-org/graphcommerce/commit/163be59f2bf0f1573e91da036e56455262c6abd5) - Better clone instructions when upgrading ([@paales](https://github.com/paales))
14
+
15
+ - [#1738](https://github.com/graphcommerce-org/graphcommerce/pull/1738) [`6171ad02c`](https://github.com/graphcommerce-org/graphcommerce/commit/6171ad02c19782b1e1f0eb00ea25ea6b764250b5) - Added topological sorting to plugins and added ifEnv export to plugins to conditionally load plugins ([@paales](https://github.com/paales))
16
+
3
17
  ## 4.12.0-canary.2
4
18
 
5
19
  ### Patch Changes
@@ -0,0 +1,74 @@
1
+ # Plugins GraphQL
2
+
3
+ GraphCommerce's GraphQL plugin system allows you to extend GraphCommerce in a
4
+ plug-and-play manner. Install a new package and the queries will be exdtended at
5
+ the right places.
6
+
7
+ ## What problem are we solving?
8
+
9
+ Without plugins it becomes complex to extend GraphQL queries and you'd probably
10
+ need to overfetch in lots of places by doing additional queries.
11
+
12
+ For example, to render additional attributes on the product listing, it was
13
+ necessary to modify a GraphQL query and know all the points the query is used.
14
+
15
+ The query below is inside the
16
+ [@graphcomemrce/magento-product](https://github.com/graphcommerce-org/graphcommerce/blob/main/packages/magento-product/components/ProductList/ProductList.graphql)
17
+ package and therefor it is not possible to modify:
18
+
19
+ ```graphql
20
+ query ProductList(
21
+ $pageSize: Int = 24
22
+ $currentPage: Int = 1
23
+ $filters: ProductAttributeFilterInput = {}
24
+ $sort: ProductAttributeSortInput = {}
25
+ $search: String = ""
26
+ ) {
27
+ products(
28
+ pageSize: $pageSize
29
+ currentPage: $currentPage
30
+ filter: $filters
31
+ sort: $sort
32
+ search: $search
33
+ ) {
34
+ # Simplified from the original query
35
+ items {
36
+ __typename
37
+ uid
38
+ ...ProductListItem
39
+ }
40
+ }
41
+ }
42
+
43
+ # Fragment used for a ProductListItem used when rendering any listing
44
+ fragment ProductListItem on ProductInterface @injectable {
45
+ uid
46
+ ...ProductLink
47
+ sku
48
+ name
49
+ small_image {
50
+ ...ProductImage
51
+ }
52
+ price_range {
53
+ minimum_price {
54
+ ...ProductListPrice
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ ## How to modify an existing query?
61
+
62
+ Some Fragments inside GraphCommerce have been marked as `@injectable` which
63
+ allows you to inject our own fields in the fragments.
64
+
65
+ ```graphql
66
+ fragment MyCustomFragment on ProductInterface
67
+ @inject(into: ["ProductListItem"]) {
68
+ my_custom_attribute
69
+ }
70
+ ```
71
+
72
+ This will add the field to the `ProductListItem` fragment. After codegen has
73
+ been ran you will see that `my_custom_attribute` is also now present in
74
+ `ProductListItem.gql.ts` and `ProductList.gql.ts`.
@@ -1,6 +1,6 @@
1
- # Plugins
1
+ # Plugins React
2
2
 
3
- GraphCommerce plugin system allows you to extend GraphCommerce in a
3
+ GraphCommerce's React plugin system allows you to extend GraphCommerce in a
4
4
  plug-and-play manner. Install a new package and the code will be added at the
5
5
  right places.
6
6
 
@@ -169,28 +169,21 @@ work for other things such as:
169
169
  - Abstraction between GraphCommerce and Backends? (Magento, BigCommerce,
170
170
  CommerceTools, etc.)
171
171
 
172
- ### Limitations
172
+ ### Conditionally include a plugin
173
173
 
174
- Work is planned to lift these limitations, but for now:
174
+ Provide an ifEnv export in the plugin that will only include the plugin if the
175
+ environment variable is set.
175
176
 
176
- React Refresh doesn't work correctly with Plugins, it will force a page reload
177
- on each file change and will throw an error in the console. To solve this issue,
178
- move your actual plugin outside of the plugin file and only have the plugin be a
179
- configuration file.
177
+ ```tsx
178
+ export const ifEnv = 'MY_ENV_VARIABLE'
179
+ ```
180
180
 
181
- It currently isn't possible to provide a plugin sort order. The project root is
182
- intercepting last, followed by the packages in reverse alphabetical order,
183
- followed by dependencies' dependencies. We don't generate a proper graph at the
184
- moment to figure out the actual dependencies but is an artifact of how we
185
- resolve the dependencies.
181
+ ### When to use a plugin?
186
182
 
187
- There currently isn't a way for the plugin to determine if the plugin should be
188
- activated at all. For example, the code for Google Analytics should only be
189
- added if the user has configured it. This is currently not possible. Of if a
190
- user wants to disable a plugin, this is currently not possible.
183
+ A plugin should be used when a new package is created that influences the
184
+ behavior of other packages.
191
185
 
192
- It is currently is only possible to extend React Components. This however sets
193
- the foundation to allow for a more flexible plugin system in the future.
186
+ ### Plugin loading order
194
187
 
195
- Plugins should be optional for GraphCommerce to function properly. Plugins for
196
- mandatory packages shouldn't exist.
188
+ A plugin is injected later than the dependencies of the package. So if a plugin
189
+ is loaded to early, make sure the package has a dependency on the other package.
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@graphcommerce/docs",
3
3
  "homepage": "https://www.graphcommerce.org/docs",
4
4
  "repository": "github:graphcommerce-org/graphcommerce/docs",
5
- "version": "4.12.0-canary.2",
5
+ "version": "4.12.0-canary.4",
6
6
  "sideEffects": true,
7
7
  "devDependencies": {
8
8
  "@graphcommerce/prettier-config-pwa": "^4.0.7"
package/upgrading.md CHANGED
@@ -38,7 +38,7 @@ dependencies, while keeping your customizations.
38
38
  2. Download a fresh copy of the repository:
39
39
 
40
40
  ```bash
41
- git clone git@github.com:graphcommerce-org/graphcommerce.git upgrade
41
+ git clone -b main --depth 1 https://github.com/graphcommerce-org/graphcommerce.git
42
42
  ```
43
43
 
44
44
  3. Navigate to the /upgrade directory you've just created. Run the following