@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 +14 -0
- package/framework/plugins-graphql.md +74 -0
- package/framework/{plugins.md → plugins-react.md} +14 -21
- package/package.json +1 -1
- package/upgrading.md +1 -1
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
|
-
###
|
|
172
|
+
### Conditionally include a plugin
|
|
173
173
|
|
|
174
|
-
|
|
174
|
+
Provide an ifEnv export in the plugin that will only include the plugin if the
|
|
175
|
+
environment variable is set.
|
|
175
176
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
configuration file.
|
|
177
|
+
```tsx
|
|
178
|
+
export const ifEnv = 'MY_ENV_VARIABLE'
|
|
179
|
+
```
|
|
180
180
|
|
|
181
|
-
|
|
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
|
-
|
|
188
|
-
|
|
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
|
-
|
|
193
|
-
the foundation to allow for a more flexible plugin system in the future.
|
|
186
|
+
### Plugin loading order
|
|
194
187
|
|
|
195
|
-
|
|
196
|
-
|
|
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.
|
|
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
|
|
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
|