@vendure/docs 0.0.0-202601221213 → 0.0.0-202601280949
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/dist/dates.generated.js +113 -113
- package/docs/guides/core-concepts/auth/index.mdx +1 -1
- package/docs/guides/core-concepts/channels/index.mdx +2 -2
- package/docs/guides/core-concepts/collections/index.mdx +1 -1
- package/docs/guides/core-concepts/customers/index.mdx +1 -1
- package/docs/guides/core-concepts/email/index.mdx +1 -1
- package/docs/guides/core-concepts/images-assets/index.mdx +1 -1
- package/docs/guides/core-concepts/money/index.mdx +3 -3
- package/docs/guides/core-concepts/orders/index.mdx +2 -2
- package/docs/guides/core-concepts/payment/index.mdx +2 -2
- package/docs/guides/core-concepts/products/index.mdx +1 -1
- package/docs/guides/core-concepts/promotions/index.mdx +2 -2
- package/docs/guides/core-concepts/shipping/index.mdx +2 -2
- package/docs/guides/deployment/deploy-to-digital-ocean-app-platform/index.mdx +1 -1
- package/docs/guides/deployment/deploy-to-northflank/index.mdx +1 -1
- package/docs/guides/deployment/deploy-to-railway/index.mdx +1 -1
- package/docs/guides/deployment/deploy-to-render/index.mdx +1 -1
- package/docs/guides/deployment/deploying-admin-ui.mdx +1 -1
- package/docs/guides/deployment/getting-data-into-production.mdx +2 -2
- package/docs/guides/deployment/horizontal-scaling.mdx +2 -2
- package/docs/guides/deployment/production-configuration/index.mdx +2 -2
- package/docs/guides/deployment/server-resource-requirements.mdx +1 -1
- package/docs/guides/developer-guide/cache/index.mdx +1 -1
- package/docs/guides/developer-guide/channel-aware/index.mdx +2 -2
- package/docs/guides/developer-guide/cli/index.mdx +2 -2
- package/docs/guides/developer-guide/configuration/index.mdx +2 -2
- package/docs/guides/developer-guide/custom-fields/index.mdx +7 -7
- package/docs/guides/developer-guide/custom-permissions/index.mdx +1 -1
- package/docs/guides/developer-guide/database-entity/index.mdx +6 -6
- package/docs/guides/developer-guide/error-handling/index.mdx +1 -1
- package/docs/guides/developer-guide/events/index.mdx +1 -1
- package/docs/guides/developer-guide/extend-graphql-api/index.mdx +3 -3
- package/docs/guides/developer-guide/has-custom-fields/index.mdx +5 -5
- package/docs/guides/developer-guide/importing-data/index.mdx +3 -3
- package/docs/guides/developer-guide/migrating-from-v1/breaking-api-changes.mdx +2 -2
- package/docs/guides/developer-guide/migrating-from-v1/index.mdx +3 -3
- package/docs/guides/developer-guide/migrations/index.mdx +2 -2
- package/docs/guides/developer-guide/overview/index.mdx +2 -2
- package/docs/guides/developer-guide/plugins/index.mdx +4 -4
- package/docs/guides/developer-guide/rest-endpoint/index.mdx +2 -2
- package/docs/guides/developer-guide/scheduled-tasks/index.mdx +3 -3
- package/docs/guides/developer-guide/stand-alone-scripts/index.mdx +1 -1
- package/docs/guides/developer-guide/strategies-configurable-operations/index.mdx +1 -1
- package/docs/guides/developer-guide/testing/index.mdx +2 -2
- package/docs/guides/developer-guide/the-api-layer/index.mdx +2 -2
- package/docs/guides/developer-guide/the-service-layer/index.mdx +1 -1
- package/docs/guides/developer-guide/translations/index.mdx +1 -1
- package/docs/guides/developer-guide/updating/index.mdx +1 -1
- package/docs/guides/developer-guide/uploading-files/index.mdx +3 -3
- package/docs/guides/extending-the-admin-ui/creating-detail-views/index.mdx +3 -3
- package/docs/guides/extending-the-admin-ui/creating-list-views/index.mdx +3 -3
- package/docs/guides/extending-the-admin-ui/custom-data-table-components/index.mdx +1 -1
- package/docs/guides/extending-the-admin-ui/custom-form-inputs/index.mdx +3 -3
- package/docs/guides/extending-the-admin-ui/custom-timeline-components/index.mdx +1 -1
- package/docs/guides/extending-the-admin-ui/dashboard-widgets/index.mdx +1 -1
- package/docs/guides/extending-the-admin-ui/defining-routes/index.mdx +2 -2
- package/docs/guides/extending-the-admin-ui/getting-started/index.mdx +6 -6
- package/docs/guides/extending-the-admin-ui/nav-menu/index.mdx +1 -1
- package/docs/guides/extending-the-admin-ui/using-other-frameworks/index.mdx +1 -1
- package/docs/guides/extending-the-dashboard/creating-pages/detail-pages.mdx +1 -1
- package/docs/guides/extending-the-dashboard/creating-pages/index.mdx +2 -2
- package/docs/guides/extending-the-dashboard/creating-pages/list-pages.mdx +2 -2
- package/docs/guides/extending-the-dashboard/creating-pages/tabbed-pages.mdx +1 -1
- package/docs/guides/extending-the-dashboard/custom-form-components/index.mdx +4 -4
- package/docs/guides/extending-the-dashboard/customizing-pages/action-bar-items.mdx +1 -1
- package/docs/guides/extending-the-dashboard/customizing-pages/customizing-detail-pages.mdx +2 -2
- package/docs/guides/extending-the-dashboard/customizing-pages/customizing-login-page.mdx +1 -1
- package/docs/guides/extending-the-dashboard/customizing-pages/index.mdx +4 -4
- package/docs/guides/extending-the-dashboard/customizing-pages/page-blocks.mdx +3 -3
- package/docs/guides/extending-the-dashboard/data-fetching/index.mdx +1 -1
- package/docs/guides/extending-the-dashboard/deployment/index.mdx +2 -2
- package/docs/guides/extending-the-dashboard/extending-overview/index.mdx +3 -3
- package/docs/guides/extending-the-dashboard/getting-started/index.mdx +1 -1
- package/docs/guides/extending-the-dashboard/migration/index.mdx +4 -4
- package/docs/guides/extending-the-dashboard/navigation/index.mdx +3 -3
- package/docs/guides/getting-started/graphql-intro/index.mdx +5 -5
- package/docs/guides/getting-started/installation/index.mdx +5 -5
- package/docs/guides/getting-started/try-the-api/index.mdx +2 -2
- package/docs/guides/how-to/cms-integration-plugin/index.mdx +19 -19
- package/docs/guides/how-to/codegen/index.mdx +2 -2
- package/docs/guides/how-to/configurable-products/index.mdx +1 -1
- package/docs/guides/how-to/digital-products/index.mdx +1 -1
- package/docs/guides/how-to/github-oauth-authentication/index.mdx +1 -1
- package/docs/guides/how-to/google-oauth-authentication/index.mdx +3 -3
- package/docs/guides/how-to/multi-vendor-marketplaces/index.mdx +2 -2
- package/docs/guides/how-to/paginated-list/index.mdx +1 -1
- package/docs/guides/how-to/publish-plugin/index.mdx +3 -3
- package/docs/guides/how-to/s3-asset-storage/index.mdx +1 -1
- package/docs/guides/storefront/active-order/index.mdx +4 -4
- package/docs/guides/storefront/checkout-flow/index.mdx +3 -3
- package/docs/guides/storefront/codegen/index.mdx +1 -1
- package/docs/guides/storefront/connect-api/index.mdx +2 -2
- package/docs/guides/storefront/customer-accounts/index.mdx +1 -1
- package/docs/guides/storefront/listing-products/index.mdx +1 -1
- package/docs/guides/storefront/navigation-menu/index.mdx +1 -1
- package/docs/guides/storefront/order-workflow/index.mdx +2 -2
- package/docs/guides/storefront/product-detail/index.mdx +4 -4
- package/docs/reference/admin-ui-api/ui-devkit/admin-ui-extension.mdx +1 -1
- package/docs/reference/core-plugins/admin-ui-plugin/index.mdx +2 -2
- package/docs/reference/core-plugins/dashboard-plugin/index.mdx +1 -1
- package/docs/reference/core-plugins/telemetry-plugin/index.mdx +1 -1
- package/docs/reference/typescript-api/auth/authentication-strategy.mdx +1 -1
- package/docs/reference/typescript-api/common/admin-ui/admin-ui-config.mdx +1 -1
- package/docs/reference/typescript-api/custom-fields/custom-field-type.mdx +1 -1
- package/docs/reference/typescript-api/import-export/import-parser.mdx +1 -1
- package/docs/reference/typescript-api/import-export/importer.mdx +1 -1
- package/docs/reference/typescript-api/import-export/populate.mdx +1 -1
- package/docs/reference/typescript-api/job-queue/default-job-queue-plugin.mdx +1 -1
- package/docs/reference/typescript-api/orders/order-item-price-calculation-strategy.mdx +1 -1
- package/docs/reference/typescript-api/services/asset-service.mdx +1 -1
- package/docs/reference/typescript-api/services/history-service.mdx +1 -1
- package/docs/reference/typescript-api/worker/bootstrap-worker.mdx +1 -1
- package/docs/user-guide/settings/taxes.mdx +1 -1
- package/package.json +2 -2
- package/src/dates.generated.ts +113 -113
|
@@ -60,7 +60,7 @@ For any database schema changes, it is advised to:
|
|
|
60
60
|
|
|
61
61
|
1. Read the changelog breaking changes entries to see what changes to expect
|
|
62
62
|
2. **Important:** Make a backup of your database!
|
|
63
|
-
3. Create a new database migration as described in the [Migrations guide](/
|
|
63
|
+
3. Create a new database migration as described in the [Migrations guide](/developer-guide/migrations/)
|
|
64
64
|
4. Manually check the migration script. In some cases manual action is needed to customize the script in order to correctly migrate your existing data.
|
|
65
65
|
5. Test the migration script against non-production data.
|
|
66
66
|
6. Only when you have verified that the migration works as expected, run it against your production database.
|
|
@@ -3,7 +3,7 @@ title: "Uploading Files"
|
|
|
3
3
|
showtoc: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Vendure handles file uploads with the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec). Internally, we use the [graphql-upload package](https://github.com/jaydenseric/graphql-upload). Once uploaded, a file is known as an [Asset](/
|
|
6
|
+
Vendure handles file uploads with the [GraphQL multipart request specification](https://github.com/jaydenseric/graphql-multipart-request-spec). Internally, we use the [graphql-upload package](https://github.com/jaydenseric/graphql-upload). Once uploaded, a file is known as an [Asset](/core-concepts/images-assets/). Assets are typically used for images, but can represent any kind of binary data such as PDF files or videos.
|
|
7
7
|
|
|
8
8
|
## Upload clients
|
|
9
9
|
|
|
@@ -55,11 +55,11 @@ function UploadFile() {
|
|
|
55
55
|
|
|
56
56
|
## Custom upload mutations
|
|
57
57
|
|
|
58
|
-
How about if you want to implement a custom mutation for file uploads? Let's take an example where we want to allow customers to set an avatar image. To do this, we'll add a [custom field](/
|
|
58
|
+
How about if you want to implement a custom mutation for file uploads? Let's take an example where we want to allow customers to set an avatar image. To do this, we'll add a [custom field](/developer-guide/custom-fields/) to the Customer entity and then define a new mutation in the Shop API.
|
|
59
59
|
|
|
60
60
|
### Configuration
|
|
61
61
|
|
|
62
|
-
Let's define a custom field to associate the avatar `Asset` with the `Customer` entity. To keep everything encapsulated, we'll do all of this in a [plugin](/
|
|
62
|
+
Let's define a custom field to associate the avatar `Asset` with the `Customer` entity. To keep everything encapsulated, we'll do all of this in a [plugin](/developer-guide/plugins/)
|
|
63
63
|
|
|
64
64
|
```ts title="src/plugins/customer-avatar/customer-avatar.plugin.ts"
|
|
65
65
|
import { Asset, LanguageCode, PluginCommonModule, VendurePlugin } from '@vendure/core';
|
|
@@ -13,14 +13,14 @@ in that case you won't be able to use the built-in Angular-specific components.
|
|
|
13
13
|
|
|
14
14
|
## Example: Creating a Product Detail View
|
|
15
15
|
|
|
16
|
-
Let's say you have a plugin which adds a new entity to the database called `ProductReview`. You have already created a [list view](/
|
|
16
|
+
Let's say you have a plugin which adds a new entity to the database called `ProductReview`. You have already created a [list view](/extending-the-admin-ui/creating-list-views/), and
|
|
17
17
|
now you need a detail view which can be used to view and edit individual reviews.
|
|
18
18
|
|
|
19
19
|
### Extend the TypedBaseDetailComponent class
|
|
20
20
|
|
|
21
21
|
The detail component itself is an Angular component which extends the [BaseDetailComponent](/reference/admin-ui-api/list-detail-views/base-detail-component/) or [TypedBaseDetailComponent](/reference/admin-ui-api/list-detail-views/typed-base-detail-component) class.
|
|
22
22
|
|
|
23
|
-
This example assumes you have set up your project to use code generation as described in the [GraphQL code generation guide](/
|
|
23
|
+
This example assumes you have set up your project to use code generation as described in the [GraphQL code generation guide](/how-to/codegen/#codegen-for-admin-ui-extensions).
|
|
24
24
|
|
|
25
25
|
```ts title="src/plugins/reviews/ui/components/review-detail/review-detail.component.ts"
|
|
26
26
|
import { ResultOf } from '@graphql-typed-document-node/core';
|
|
@@ -236,7 +236,7 @@ export default [
|
|
|
236
236
|
|
|
237
237
|
## Supporting custom fields
|
|
238
238
|
|
|
239
|
-
From Vendure v2.2, it is possible for your [custom entities to support custom fields](/
|
|
239
|
+
From Vendure v2.2, it is possible for your [custom entities to support custom fields](/developer-guide/database-entity/#supporting-custom-fields).
|
|
240
240
|
|
|
241
241
|
If you have set up your entity to support custom fields, and you want custom fields to be available in the Admin UI detail view,
|
|
242
242
|
you need to add the following to your detail component:
|
|
@@ -39,14 +39,14 @@ type ProductReviewList implements PaginatedList {
|
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
:::info
|
|
42
|
-
See the [Paginated Lists guide](/
|
|
42
|
+
See the [Paginated Lists guide](/how-to/paginated-list/) for details on how to implement this in your server plugin code.
|
|
43
43
|
:::
|
|
44
44
|
|
|
45
45
|
### Create the list component
|
|
46
46
|
|
|
47
47
|
The list component itself is an Angular component which extends the [BaseListComponent](/reference/admin-ui-api/list-detail-views/base-list-component/) or [TypedBaseListComponent](/reference/admin-ui-api/list-detail-views/typed-base-list-component) class.
|
|
48
48
|
|
|
49
|
-
This example assumes you have set up your project to use code generation as described in the [GraphQL code generation guide](/
|
|
49
|
+
This example assumes you have set up your project to use code generation as described in the [GraphQL code generation guide](/how-to/codegen/#codegen-for-admin-ui-extensions).
|
|
50
50
|
|
|
51
51
|
```ts title="src/plugins/reviews/ui/components/review-list/review-list.component.ts"
|
|
52
52
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
@@ -247,7 +247,7 @@ export default [
|
|
|
247
247
|
|
|
248
248
|
## Supporting custom fields
|
|
249
249
|
|
|
250
|
-
From Vendure v2.2, it is possible for your [custom entities to support custom fields](/
|
|
250
|
+
From Vendure v2.2, it is possible for your [custom entities to support custom fields](/developer-guide/database-entity/#supporting-custom-fields).
|
|
251
251
|
|
|
252
252
|
If you have set up your entity to support custom fields, and you want custom fields to be available in the Admin UI list view,
|
|
253
253
|
you need to add the following to your list component:
|
|
@@ -3,7 +3,7 @@ title: 'Custom DataTable Components'
|
|
|
3
3
|
weight: 6
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The Admin UI list views are powered by a data table component which features sorting, advanced filtering, pagination and more. It will also give you the option of displaying any configured [custom fields](/
|
|
6
|
+
The Admin UI list views are powered by a data table component which features sorting, advanced filtering, pagination and more. It will also give you the option of displaying any configured [custom fields](/developer-guide/custom-fields/) for the entity in question.
|
|
7
7
|
|
|
8
8
|
With Admin UI extensions, you can specify custom components to use in rendering any column of any data table - both custom fields _and_ built-in fields, using either Angular or React components.
|
|
9
9
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
title: 'Custom Form Inputs'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
You can define custom Angular or React components which can be used to render [Custom Fields](/
|
|
5
|
+
You can define custom Angular or React components which can be used to render [Custom Fields](/developer-guide/custom-fields/) you have defined on your entities as well as [configurable args](/reference/typescript-api/configurable-operation-def/config-args/) used by custom [Configurable Operations](/developer-guide/strategies-configurable-operations/#configurable-operations).
|
|
6
6
|
|
|
7
7
|
## For Custom Fields
|
|
8
8
|
|
|
@@ -128,7 +128,7 @@ export default [
|
|
|
128
128
|
|
|
129
129
|
### 3. Register the providers
|
|
130
130
|
|
|
131
|
-
The `providers.ts` is then passed to the `compileUiExtensions()` function as described in the [UI Extensions Getting Started guide](/
|
|
131
|
+
The `providers.ts` is then passed to the `compileUiExtensions()` function as described in the [UI Extensions Getting Started guide](/extending-the-admin-ui/getting-started/):
|
|
132
132
|
|
|
133
133
|
```ts title="src/vendure-config.ts"
|
|
134
134
|
import * as path from 'path';
|
|
@@ -253,7 +253,7 @@ export class RelationReviewInputComponent implements OnInit, FormInputComponent<
|
|
|
253
253
|
|
|
254
254
|
## For ConfigArgs
|
|
255
255
|
|
|
256
|
-
[ConfigArgs](/reference/typescript-api/configurable-operation-def/config-args/) are used by classes which extend [Configurable Operations](/
|
|
256
|
+
[ConfigArgs](/reference/typescript-api/configurable-operation-def/config-args/) are used by classes which extend [Configurable Operations](/developer-guide/strategies-configurable-operations/#configurable-operations) (such as ShippingCalculator or PaymentMethodHandler). These ConfigArgs allow user-input values to be passed to the operation's business logic.
|
|
257
257
|
|
|
258
258
|
They are configured in a very similar way to custom fields, and likewise can use custom form inputs by specifying the `ui` property.
|
|
259
259
|
|
|
@@ -75,5 +75,5 @@ export default [
|
|
|
75
75
|
];
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
Then we need to add the `providers.ts` file to the `uiExtensions` array as described in the [UI Extensions Getting Started guide](/
|
|
78
|
+
Then we need to add the `providers.ts` file to the `uiExtensions` array as described in the [UI Extensions Getting Started guide](/extending-the-admin-ui/getting-started/).
|
|
79
79
|
|
|
@@ -74,7 +74,7 @@ We also need to define an `NgModule` for this component. This is because we will
|
|
|
74
74
|
|
|
75
75
|
### Register the widget
|
|
76
76
|
|
|
77
|
-
Our widget now needs to be registered in our [providers file](/
|
|
77
|
+
Our widget now needs to be registered in our [providers file](/extending-the-admin-ui/getting-started/#providers):
|
|
78
78
|
|
|
79
79
|
```ts title="src/plugins/reviews/ui/providers.ts"
|
|
80
80
|
import { registerDashboardWidget } from '@vendure/admin-ui/core';
|
|
@@ -6,7 +6,7 @@ Routes allow you to mount entirely custom components at a given URL in the Admin
|
|
|
6
6
|
|
|
7
7
|

|
|
8
8
|
|
|
9
|
-
Routes can be defined natively using either **Angular** or **React**. It is also possible to [use other frameworks](/
|
|
9
|
+
Routes can be defined natively using either **Angular** or **React**. It is also possible to [use other frameworks](/extending-the-admin-ui/using-other-frameworks/) in a more limited capacity.
|
|
10
10
|
|
|
11
11
|
## Example: Creating a "Greeter" route
|
|
12
12
|
|
|
@@ -565,7 +565,7 @@ export default [
|
|
|
565
565
|
];
|
|
566
566
|
```
|
|
567
567
|
|
|
568
|
-
A more powerful way to set the breadcrumbs is by using the `getBreadcrumbs` property. This is a function that receives any resolved detail data and returns an array of link/label pairs. An example of its use can be seen in the [Creating detail views guide](/
|
|
568
|
+
A more powerful way to set the breadcrumbs is by using the `getBreadcrumbs` property. This is a function that receives any resolved detail data and returns an array of link/label pairs. An example of its use can be seen in the [Creating detail views guide](/extending-the-admin-ui/creating-detail-views/#route-config).
|
|
569
569
|
|
|
570
570
|
### Dynamically from the component
|
|
571
571
|
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
title: 'Getting Started'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
:::warning
|
|
6
|
-
The Angular-based Admin UI has been replaced by the new [React Admin Dashboard](/
|
|
5
|
+
:::warning[Angular Admin UI Deprecation]
|
|
6
|
+
The Angular-based Admin UI has been replaced by the new [React Admin Dashboard](/extending-the-dashboard/getting-started/). The Angular Admin UI will not be maintained after **July 2026**.
|
|
7
7
|
Until then, we will continue patching critical bugs and security issues. Community contributions will always be merged and released.
|
|
8
8
|
|
|
9
|
-
**For new projects, use the [React Admin Dashboard](/
|
|
9
|
+
**For new projects, use the [React Admin Dashboard](/extending-the-dashboard/getting-started/) instead.**
|
|
10
10
|
|
|
11
11
|
If you want to use the Admin UI and the Dashboard together, both plugins can now be used simultaneously without any special configuration.
|
|
12
12
|
:::
|
|
@@ -282,7 +282,7 @@ Routes allow you to define completely custom views in the Admin UI.
|
|
|
282
282
|
|
|
283
283
|
Your `routes.ts` file exports an array of objects which define new routes in the Admin UI. For example, imagine you have created a plugin which implements a simple content management system. You can define a route for the list of articles, and another for the detail view of an article.
|
|
284
284
|
|
|
285
|
-
For a detailed instructions, see the [Defining Routes guide](/
|
|
285
|
+
For a detailed instructions, see the [Defining Routes guide](/extending-the-admin-ui/defining-routes/).
|
|
286
286
|
|
|
287
287
|
## Dev vs Prod mode
|
|
288
288
|
|
|
@@ -410,7 +410,7 @@ yarn add copyfiles
|
|
|
410
410
|
|
|
411
411
|
## Using other frameworks
|
|
412
412
|
|
|
413
|
-
While the Admin UI natively supports extensions written with Angular or React, it is still possible to create extensions using other front-end frameworks such as Vue or Solid. Note that creating extensions in this way is much more limited, with only the ability to define new routes, and limited access to internal services such as data fetching and notifications. See [UI extensions in other frameworks](/
|
|
413
|
+
While the Admin UI natively supports extensions written with Angular or React, it is still possible to create extensions using other front-end frameworks such as Vue or Solid. Note that creating extensions in this way is much more limited, with only the ability to define new routes, and limited access to internal services such as data fetching and notifications. See [UI extensions in other frameworks](/extending-the-admin-ui/using-other-frameworks/).
|
|
414
414
|
|
|
415
415
|
## IDE Support
|
|
416
416
|
|
|
@@ -461,7 +461,7 @@ Angular uses the concept of modules ([NgModules](https://angular.io/guide/ngmodu
|
|
|
461
461
|
|
|
462
462
|
When creating your UI extensions, you can set your module to be either `lazy` or `shared`. Shared modules are loaded _eagerly_, i.e. their code is bundled up with the main app and loaded as soon as the app loads.
|
|
463
463
|
|
|
464
|
-
As a rule, modules defining new routes should be lazily loaded (so that the code is only loaded once that route is activated), and modules defining [new navigations items](/
|
|
464
|
+
As a rule, modules defining new routes should be lazily loaded (so that the code is only loaded once that route is activated), and modules defining [new navigations items](/extending-the-admin-ui/nav-menu/) and [custom form input](/extending-the-admin-ui/custom-form-inputs/) should be set to `shared`.
|
|
465
465
|
|
|
466
466
|
:::info
|
|
467
467
|
"lazy" modules are equivalent to the new "routes" API, and "shared" modules are equivalent to the new "providers" API. In fact, behind the scenes,
|
|
@@ -10,7 +10,7 @@ access to routes in the app, and can be extended and modified by UI extensions.
|
|
|
10
10
|
|
|
11
11
|
Once you have defined some custom routes, you need some way for the administrator to access them. For this you will use the [addNavMenuItem](/reference/admin-ui-api/nav-menu/add-nav-menu-item/) and [addNavMenuSection](/reference/admin-ui-api/nav-menu/add-nav-menu-section) functions.
|
|
12
12
|
|
|
13
|
-
Let's add a new section to the Admin UI main nav bar containing a link to the "greeter" module from the [Getting Started guide](/
|
|
13
|
+
Let's add a new section to the Admin UI main nav bar containing a link to the "greeter" module from the [Getting Started guide](/extending-the-admin-ui/getting-started/#routes) example:
|
|
14
14
|
|
|
15
15
|
```ts title="src/plugins/greeter/ui/providers.ts"
|
|
16
16
|
import { addNavMenuSection } from '@vendure/admin-ui/core';
|
|
@@ -202,4 +202,4 @@ If your extension does not have a build step, you can still include the UiDevkit
|
|
|
202
202
|
|
|
203
203
|
## Next Steps
|
|
204
204
|
|
|
205
|
-
Now you have created your extension, you need a way for your admin to access it. See [Adding Navigation Items](/
|
|
205
|
+
Now you have created your extension, you need a way for your admin to access it. See [Adding Navigation Items](/extending-the-admin-ui/nav-menu/)
|
|
@@ -5,7 +5,7 @@ title: 'Creating Detail Pages'
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
7
7
|
:::info
|
|
8
|
-
This guide assumes you have a `CmsPlugin` with an `Article` entity, as covered in the [Extending the Dashboard: Plugin Setup](/
|
|
8
|
+
This guide assumes you have a `CmsPlugin` with an `Article` entity, as covered in the [Extending the Dashboard: Plugin Setup](/extending-the-dashboard/extending-overview/#plugin-setup) guide.
|
|
9
9
|
:::
|
|
10
10
|
|
|
11
11
|
Detail pages can be created for any entity which has been exposed via the Admin API. Following the
|
|
@@ -34,7 +34,7 @@ export function TestPage() {
|
|
|
34
34
|
Following this structure ensures that:
|
|
35
35
|
- Your pages look consistent with the rest of the Dashboard
|
|
36
36
|
- Your page content is responsive
|
|
37
|
-
- Your page can be further extended using the [pageBlocks API](/
|
|
37
|
+
- Your page can be further extended using the [pageBlocks API](/extending-the-dashboard/customizing-pages/page-blocks)
|
|
38
38
|
|
|
39
39
|
:::info
|
|
40
40
|
Note that the [ListPage](/reference/dashboard/list-views/list-page) and [DetailPage](/reference/dashboard/detail-views/detail-page)
|
|
@@ -80,7 +80,7 @@ defineDashboardExtension({
|
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
:::info
|
|
83
|
-
For a complete guide to the navigation options available, see the [Navigation guide](/
|
|
83
|
+
For a complete guide to the navigation options available, see the [Navigation guide](/extending-the-dashboard/navigation/)
|
|
84
84
|
:::
|
|
85
85
|
|
|
86
86
|
|
|
@@ -5,10 +5,10 @@ title: 'Creating List Pages'
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
7
7
|
:::info
|
|
8
|
-
This guide assumes you have a `CmsPlugin` with an `Article` entity, as covered in the [Extending the Dashboard: Plugin Setup](/
|
|
8
|
+
This guide assumes you have a `CmsPlugin` with an `Article` entity, as covered in the [Extending the Dashboard: Plugin Setup](/extending-the-dashboard/extending-overview/#plugin-setup) guide.
|
|
9
9
|
:::
|
|
10
10
|
|
|
11
|
-
List pages can be easily created for any query in the Admin API that follows the [PaginatedList pattern](/
|
|
11
|
+
List pages can be easily created for any query in the Admin API that follows the [PaginatedList pattern](/how-to/paginated-list/).
|
|
12
12
|
|
|
13
13
|
For example, the `articles` query of our `CmsPlugin` looks like this:
|
|
14
14
|
|
|
@@ -5,7 +5,7 @@ title: 'Creating Tabbed Pages'
|
|
|
5
5
|
## Setup
|
|
6
6
|
|
|
7
7
|
:::info
|
|
8
|
-
This guide assumes you have a basic understanding of creating custom pages in the Vendure Dashboard, as covered in the [Creating List Pages](/
|
|
8
|
+
This guide assumes you have a basic understanding of creating custom pages in the Vendure Dashboard, as covered in the [Creating List Pages](/extending-the-dashboard/creating-pages/list-pages) and [Creating Detail Pages](/extending-the-dashboard/creating-pages/detail-pages) guides.
|
|
9
9
|
:::
|
|
10
10
|
|
|
11
11
|
Tabbed pages allow you to organize related content into separate tabs within a single page. This is useful
|
|
@@ -84,7 +84,7 @@ Here's how this component will look when rendered in your form:
|
|
|
84
84
|
|
|
85
85
|
## Custom Field Components
|
|
86
86
|
|
|
87
|
-
Let's configure a [custom field](/
|
|
87
|
+
Let's configure a [custom field](/developer-guide/custom-fields/) which uses the `ColorPickerComponent` as its form component.
|
|
88
88
|
|
|
89
89
|
First we need to register the component with the `defineDashboardExtension` function:
|
|
90
90
|
|
|
@@ -138,7 +138,7 @@ export class MyPlugin {}
|
|
|
138
138
|
|
|
139
139
|
## Configurable Operation Components
|
|
140
140
|
|
|
141
|
-
The `ColorPickerComponent` can also be used as a [configurable operation argument](/
|
|
141
|
+
The `ColorPickerComponent` can also be used as a [configurable operation argument](/developer-guide/strategies-configurable-operations/#configurable-operations) component. For example, we can add a color code
|
|
142
142
|
to a shipping calculator:
|
|
143
143
|
|
|
144
144
|
```tsx title="src/plugins/my-plugin/config/custom-shipping-calculator.ts"
|
|
@@ -254,7 +254,7 @@ operation argument.
|
|
|
254
254
|
|
|
255
255
|
You can access validation data for the current field or the whole form by using the `useFormContext` hook.
|
|
256
256
|
|
|
257
|
-
:::note
|
|
257
|
+
:::note[Error Messages]
|
|
258
258
|
Your component does not need to handle standard error messages - the Dashboard will handle them for you.
|
|
259
259
|
|
|
260
260
|
For example, if your custom field specifies a `pattern` property, the Dashboard will automatically display an error message
|
|
@@ -306,7 +306,7 @@ export const ValidatedInputComponent: DashboardFormComponent = ({ value, onChang
|
|
|
306
306
|
}
|
|
307
307
|
```
|
|
308
308
|
|
|
309
|
-
:::tip
|
|
309
|
+
:::tip[Best Practices]
|
|
310
310
|
|
|
311
311
|
1. **Always use Shadcn UI components** from the `@vendure/dashboard` package for consistent styling
|
|
312
312
|
2. **Handle React Hook Form events properly** - call `onChange` and `onBlur` appropriately for custom field components
|
|
@@ -266,7 +266,7 @@ The dashboard provides several button variants you can use:
|
|
|
266
266
|
|
|
267
267
|
To find the `pageId` for your action bar items:
|
|
268
268
|
|
|
269
|
-
1. Enable [Dev Mode](/
|
|
269
|
+
1. Enable [Dev Mode](/extending-the-dashboard/extending-overview/#dev-mode) in the dashboard
|
|
270
270
|
2. Navigate to the page where you want to add your action
|
|
271
271
|
3. The page ID will be shown in the dev mode overlay
|
|
272
272
|
4. Use this ID in your action bar item configuration
|
|
@@ -32,12 +32,12 @@ defineDashboardExtension({
|
|
|
32
32
|
});
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
To learn how to build custom form components, see the [Custom Form Elements guide](/
|
|
35
|
+
To learn how to build custom form components, see the [Custom Form Elements guide](/extending-the-dashboard/custom-form-components/).
|
|
36
36
|
|
|
37
37
|
## Extending the detail query
|
|
38
38
|
|
|
39
39
|
You might want to extend the GraphQL query used to fetch the data for the detail page. For example, to include new
|
|
40
|
-
fields that your plugin has defined so that you can render them in [custom page blocks](/
|
|
40
|
+
fields that your plugin has defined so that you can render them in [custom page blocks](/extending-the-dashboard/customizing-pages/page-blocks).
|
|
41
41
|
|
|
42
42
|
```tsx title="index.tsx"
|
|
43
43
|
import { defineDashboardExtension } from '@vendure/dashboard';
|
|
@@ -44,7 +44,7 @@ This will result in a login page like this:
|
|
|
44
44
|
## Fully custom login pages
|
|
45
45
|
|
|
46
46
|
If you need even more control over the login page, you can also create an
|
|
47
|
-
[unauthenticated route](/
|
|
47
|
+
[unauthenticated route](/extending-the-dashboard/navigation/#unauthenticated-routes) with a completely
|
|
48
48
|
custom layout.
|
|
49
49
|
|
|
50
50
|
```tsx title="index.tsx"
|
|
@@ -4,7 +4,7 @@ title: 'Customizing Pages'
|
|
|
4
4
|
|
|
5
5
|
Existing pages in the Dashboard can be customized in many ways:
|
|
6
6
|
|
|
7
|
-
- [Action bar buttons](/
|
|
8
|
-
- [Page blocks](/
|
|
9
|
-
- [Extend list pages](/
|
|
10
|
-
- [Extend detail pages](/
|
|
7
|
+
- [Action bar buttons](/extending-the-dashboard/customizing-pages/action-bar-items) can be added to the top of the page
|
|
8
|
+
- [Page blocks](/extending-the-dashboard/customizing-pages/page-blocks) can be added at any position, and existing page blocks can be replaced or removed.
|
|
9
|
+
- [Extend list pages](/extending-the-dashboard/customizing-pages/customizing-list-pages) with custom components, data and bulk actions
|
|
10
|
+
- [Extend detail pages](/extending-the-dashboard/customizing-pages/customizing-detail-pages) with custom components and data
|
|
@@ -3,7 +3,7 @@ title: 'Page Blocks'
|
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
In the Dashboard, all pages are built from blocks. Every block has a `pageId` and a `blockId` which uniquely locates it in the
|
|
6
|
-
app (see [Dev Mode](/
|
|
6
|
+
app (see [Dev Mode](/extending-the-dashboard/extending-overview/#dev-mode) section).
|
|
7
7
|
|
|
8
8
|
You can also define your own blocks, which can be added to any page and can even replace the default blocks.
|
|
9
9
|
|
|
@@ -229,12 +229,12 @@ defineDashboardExtension({
|
|
|
229
229
|
|
|
230
230
|
To find the `pageId` and `blockId` values for positioning your blocks:
|
|
231
231
|
|
|
232
|
-
1. Enable [Dev Mode](/
|
|
232
|
+
1. Enable [Dev Mode](/extending-the-dashboard/extending-overview/#dev-mode) in the dashboard
|
|
233
233
|
2. Navigate to the page where you want to add your block
|
|
234
234
|
3. Hover over existing blocks to see their IDs
|
|
235
235
|
4. Use these IDs in your block positioning configuration
|
|
236
236
|
|
|
237
|
-
:::tip
|
|
237
|
+
:::tip[Best Practices]
|
|
238
238
|
|
|
239
239
|
1. **Use descriptive IDs**: Choose clear, unique IDs for your blocks
|
|
240
240
|
2. **Position thoughtfully**: Consider the user experience when placing blocks
|
|
@@ -119,7 +119,7 @@ to a file - by default you can find it at `src/gql/graphql-env.d.ts`.
|
|
|
119
119
|
When you then use the `import { graphql } from '@/gql'` function to define your queries and mutations, you get automatic
|
|
120
120
|
type safety when using the results in your components!
|
|
121
121
|
|
|
122
|
-
When you have the `@/gql` path mapping correctly [set up as per the getting started guide](/
|
|
122
|
+
When you have the `@/gql` path mapping correctly [set up as per the getting started guide](/extending-the-dashboard/getting-started/#installation--setup), you should see that
|
|
123
123
|
your IDE is able to infer the TypeScript type of your queries and mutations, including the correct inputs and return
|
|
124
124
|
types!
|
|
125
125
|
|
|
@@ -51,7 +51,7 @@ export default defineConfig({
|
|
|
51
51
|
|
|
52
52
|
### 2. Add DashboardPlugin to Vendure Config
|
|
53
53
|
|
|
54
|
-
:::info
|
|
54
|
+
:::info[Angular Admin UI compatibility]
|
|
55
55
|
If you want to use the Angular Admin UI and the Dashboard together, both plugins can now be used simultaneously without any special configuration.
|
|
56
56
|
:::
|
|
57
57
|
|
|
@@ -151,7 +151,7 @@ export default defineConfig({
|
|
|
151
151
|
});
|
|
152
152
|
```
|
|
153
153
|
|
|
154
|
-
:::warning
|
|
154
|
+
:::warning[Build-Time Variables]
|
|
155
155
|
Environment variables are resolved at **build time** and embedded as static strings in the final bundles. Ensure these variables are available during the build process, not just at runtime.
|
|
156
156
|
:::
|
|
157
157
|
|
|
@@ -220,6 +220,6 @@ In Dev Mode, hovering any block in the dashboard will allow you to find the corr
|
|
|
220
220
|
|
|
221
221
|
Now that you understand the fundamentals of extending the dashboard, explore these specific guides:
|
|
222
222
|
|
|
223
|
-
- [Creating Pages](/
|
|
224
|
-
- [Customizing Pages](/
|
|
225
|
-
- [Navigation](/
|
|
223
|
+
- [Creating Pages](/extending-the-dashboard/creating-pages/)
|
|
224
|
+
- [Customizing Pages](/extending-the-dashboard/customizing-pages/)
|
|
225
|
+
- [Navigation](/extending-the-dashboard/navigation/)
|
|
@@ -185,7 +185,7 @@ npx vite
|
|
|
185
185
|
|
|
186
186
|
To stop the running dashboard, type `q` and hit enter.
|
|
187
187
|
|
|
188
|
-
:::info
|
|
188
|
+
:::info[Compatibility with the legacy Admin UI]
|
|
189
189
|
If you still need to run the legacy Angular-based Admin UI in parallel with the Dashboard,
|
|
190
190
|
this is totally possible. Both plugins can now be used simultaneously without any special configuration.
|
|
191
191
|
:::
|
|
@@ -16,7 +16,7 @@ Community contributions will always be merged and released.
|
|
|
16
16
|
A recommended approach to migrating is to run both the Admin UI _and_ the new Dashboard in parallel. This allows you to start building
|
|
17
17
|
new features right away with the new Dashboard while maintaining access to existing features that have not yet been migrated.
|
|
18
18
|
|
|
19
|
-
To do so, follow the instructions to [set up the Dashboard](/
|
|
19
|
+
To do so, follow the instructions to [set up the Dashboard](/extending-the-dashboard/getting-started/#installation--setup).
|
|
20
20
|
Both plugins can now be used simultaneously without any special configuration.
|
|
21
21
|
|
|
22
22
|
## AI-Assisted Migration
|
|
@@ -1589,14 +1589,14 @@ It is very likely you'll still need to do _some_ manual cleanup after an AI-assi
|
|
|
1589
1589
|
things like:
|
|
1590
1590
|
|
|
1591
1591
|
- Non-optimum styling choices
|
|
1592
|
-
- Issues with the [tsconfig setup](/
|
|
1592
|
+
- Issues with the [tsconfig setup](/extending-the-dashboard/getting-started/#installation--setup) not being perfectly implemented.
|
|
1593
1593
|
- For more complex repo structures like a monorepo with plugins as separate libs, you may need to manually implement
|
|
1594
1594
|
the initial setup of the config files.
|
|
1595
1595
|
|
|
1596
1596
|
## Manual Migration
|
|
1597
1597
|
|
|
1598
|
-
If you would rather do a full manual migration, you should first follow the [Dashboard Getting Started guide](/
|
|
1599
|
-
and the [Extending the Dashboard guide](http://localhost:3001/
|
|
1598
|
+
If you would rather do a full manual migration, you should first follow the [Dashboard Getting Started guide](/extending-the-dashboard/getting-started/)
|
|
1599
|
+
and the [Extending the Dashboard guide](http://localhost:3001/extending-the-dashboard/extending-overview/).
|
|
1600
1600
|
|
|
1601
1601
|
The remainder of this document details specific features, and how they are now implemented in the new Dashboard.
|
|
1602
1602
|
|
|
@@ -43,7 +43,7 @@ The dashboard comes with several built-in sections:
|
|
|
43
43
|
|
|
44
44
|
### Finding Section IDs & Ordering
|
|
45
45
|
|
|
46
|
-
You can find the available IDs & their order value for all navigation sections and items using [Dev mode](/
|
|
46
|
+
You can find the available IDs & their order value for all navigation sections and items using [Dev mode](/extending-the-dashboard/extending-overview/#dev-mode):
|
|
47
47
|
|
|
48
48
|

|
|
49
49
|
|
|
@@ -158,7 +158,7 @@ Order values are scoped within each placement area. This means:
|
|
|
158
158
|
|
|
159
159
|
This means if you want to add a section between Catalog and Sales in the top area, you might use `order: 250`. If you want to add a section before Settings in the bottom area, you could use `order: 150`.
|
|
160
160
|
|
|
161
|
-
:::note
|
|
161
|
+
:::note[Default Placement]
|
|
162
162
|
If you don't specify a `placement`, sections default to `'top'` placement.
|
|
163
163
|
:::
|
|
164
164
|
|
|
@@ -311,7 +311,7 @@ Common icons for navigation sections:
|
|
|
311
311
|
|
|
312
312
|
## Best Practices
|
|
313
313
|
|
|
314
|
-
:::tip
|
|
314
|
+
:::tip[Navigation Design Guidelines]
|
|
315
315
|
|
|
316
316
|
1. **Use descriptive section names**: Choose clear, concise names that indicate the section's purpose
|
|
317
317
|
2. **Group related functionality**: Keep logically related menu items in the same section
|
|
@@ -50,8 +50,8 @@ Both GraphQL and REST are valid approaches to building an API. These are some of
|
|
|
50
50
|
- **Many resources in a single request**: Very often, a single page in a web app will need to fetch data from multiple resources. For example, a product detail page might need to fetch the product, the product's variants, the product's collections, the product's reviews, and the product's images. With REST, this would require multiple requests. With GraphQL, you can fetch all of this data in a single request.
|
|
51
51
|
- **Static typing**: GraphQL APIs are always defined by a statically typed schema. This means that you can be sure that the data you receive from the API will always be in the format you expect.
|
|
52
52
|
- **Developer tooling**: The schema definition allows for powerful developer tooling. For example, the GraphQL Playground above with auto-complete and full documentation is generated automatically from the schema definition. You can also get auto-complete and type-checking directly in your IDE.
|
|
53
|
-
- **Code generation**: TypeScript types can be generated automatically from the schema definition. This means that you can be sure that your frontend code is always in sync with the API. This end-to-end type safety is extremely valuable, especially when working on large projects or with teams. See the [GraphQL Code Generation guide](/
|
|
54
|
-
- **Extensible**: Vendure is designed with extensibility in mind, and GraphQL is a perfect fit. You can extend the GraphQL API with your own custom queries, mutations, and types. You can also extend the built-in types with your own custom fields, or supply you own custom logic to resolve existing fields. See the [Extend the GraphQL API guide](/
|
|
53
|
+
- **Code generation**: TypeScript types can be generated automatically from the schema definition. This means that you can be sure that your frontend code is always in sync with the API. This end-to-end type safety is extremely valuable, especially when working on large projects or with teams. See the [GraphQL Code Generation guide](/storefront/codegen/)
|
|
54
|
+
- **Extensible**: Vendure is designed with extensibility in mind, and GraphQL is a perfect fit. You can extend the GraphQL API with your own custom queries, mutations, and types. You can also extend the built-in types with your own custom fields, or supply you own custom logic to resolve existing fields. See the [Extend the GraphQL API guide](/developer-guide/extend-graphql-api/)
|
|
55
55
|
|
|
56
56
|
## GraphQL Terminology
|
|
57
57
|
|
|
@@ -398,7 +398,7 @@ type EmailAddressInUseError {
|
|
|
398
398
|
```
|
|
399
399
|
|
|
400
400
|
:::info
|
|
401
|
-
In Vendure, we use this pattern for almost all mutations. You can read more about it in the [Error Handling guide](/
|
|
401
|
+
In Vendure, we use this pattern for almost all mutations. You can read more about it in the [Error Handling guide](/developer-guide/error-handling/).
|
|
402
402
|
:::
|
|
403
403
|
|
|
404
404
|
Now, when we perform this mutation, we need alter the way we select the fields in the response, since the response could be one of two types:
|
|
@@ -484,7 +484,7 @@ A resolver is a function which is responsible for fetching the data for a partic
|
|
|
484
484
|
would be resolved by a function which fetches the list of customers from the database.
|
|
485
485
|
|
|
486
486
|
To get started with Vendure's APIs, you don't need to know much about resolvers beyond this basic understanding. However,
|
|
487
|
-
later on you may want to write your own custom resolvers to extend the API. This is covered in the [Extending the GraphQL API guide](/
|
|
487
|
+
later on you may want to write your own custom resolvers to extend the API. This is covered in the [Extending the GraphQL API guide](/developer-guide/extend-graphql-api/).
|
|
488
488
|
|
|
489
489
|
## Querying data
|
|
490
490
|
|
|
@@ -555,7 +555,7 @@ can use to provide autocomplete.
|
|
|
555
555
|
|
|
556
556
|
Code generation means the automatic generation of TypeScript types based on your GraphQL schema and your GraphQL operations. This is a very powerful feature that allows you to write your code in a type-safe manner, without you needing to manually write any types for your API calls.
|
|
557
557
|
|
|
558
|
-
For more information see the [GraphQL Code Generation guide](/
|
|
558
|
+
For more information see the [GraphQL Code Generation guide](/storefront/codegen).
|
|
559
559
|
|
|
560
560
|
## Further reading
|
|
561
561
|
|
|
@@ -76,7 +76,7 @@ If you'd rather have more control over the configuration, you can choose the "Ma
|
|
|
76
76
|
|
|
77
77
|
Vendure supports a number of different databases. The `@vendure/create` tool will prompt you to select one.
|
|
78
78
|
|
|
79
|
-
**To quickly test out Vendure, we recommend using SQLite**, which requires no external dependencies. You can always switch to a different database later [by changing your configuration file](/
|
|
79
|
+
**To quickly test out Vendure, we recommend using SQLite**, which requires no external dependencies. You can always switch to a different database later [by changing your configuration file](/developer-guide/configuration/#connecting-to-the-database).
|
|
80
80
|
|
|
81
81
|
```text
|
|
82
82
|
┌ Let's create a Vendure App ✨
|
|
@@ -104,7 +104,7 @@ If you select MySQL, MariaDB, or Postgres, you need to make sure you:
|
|
|
104
104
|
|
|
105
105
|
3. **Have database credentials**: You need the username and password for a database user that has full permissions (CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT) on the database you created.
|
|
106
106
|
|
|
107
|
-
For detailed database configuration examples, see the [Configuration guide](/
|
|
107
|
+
For detailed database configuration examples, see the [Configuration guide](/developer-guide/configuration/#connecting-to-the-database).
|
|
108
108
|
|
|
109
109
|
:::
|
|
110
110
|
|
|
@@ -112,7 +112,7 @@ For detailed database configuration examples, see the [Configuration guide](/gui
|
|
|
112
112
|
|
|
113
113
|
The final prompt will ask whether to populate your new Vendure server with some sample product data.
|
|
114
114
|
|
|
115
|
-
**We recommend you do so**, as it will give you a good starting point for exploring the APIs, which we will cover in the [Try the API section](/
|
|
115
|
+
**We recommend you do so**, as it will give you a good starting point for exploring the APIs, which we will cover in the [Try the API section](/getting-started/try-the-api/), as well as providing some data to use when building your own storefront.
|
|
116
116
|
|
|
117
117
|
```text
|
|
118
118
|
┌ Let's create a Vendure App ✨
|
|
@@ -203,9 +203,9 @@ If you included the Next.js Storefront Starter, you can also access:
|
|
|
203
203
|
|
|
204
204
|
Congratulations! 🥳 You now have a fully functional Vendure server running locally.
|
|
205
205
|
|
|
206
|
-
Now you can explore Vendure by following our [Try the API guide](/
|
|
206
|
+
Now you can explore Vendure by following our [Try the API guide](/getting-started/try-the-api/) to learn how to interact with the server.
|
|
207
207
|
|
|
208
|
-
If you are new to GraphQL, you should also check out our [Introducing GraphQL guide](/
|
|
208
|
+
If you are new to GraphQL, you should also check out our [Introducing GraphQL guide](/getting-started/graphql-intro/).
|
|
209
209
|
|
|
210
210
|
:::tip
|
|
211
211
|
Open the Dashboard at [http://localhost:3000/dashboard](http://localhost:3000/dashboard) in your browser and log in with the superadmin credentials you specified, which default to:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
title: 'Try the API'
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
Once you have successfully installed Vendure locally following the [installation guide](/
|
|
5
|
+
Once you have successfully installed Vendure locally following the [installation guide](/getting-started/installation),
|
|
6
6
|
it's time to try out the API!
|
|
7
7
|
|
|
8
8
|
:::note
|
|
@@ -162,7 +162,7 @@ if the response is an `ErrorResult`, we want to include the `errorCode` and `mes
|
|
|
162
162
|
Running this mutation a second time should show that the quantity of the product in the order has increased by 1.
|
|
163
163
|
|
|
164
164
|
:::info
|
|
165
|
-
For more information about `ErrorResult` and the handling of errors in Vendure, see the [Error Handling guide](/
|
|
165
|
+
For more information about `ErrorResult` and the handling of errors in Vendure, see the [Error Handling guide](/developer-guide/error-handling).
|
|
166
166
|
:::
|
|
167
167
|
|
|
168
168
|
## Admin API
|