@haus-tech/product-import-export-plugin 3.3.2-next.0 → 3.3.2-next.2
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 +15 -0
- package/README.mdx +36 -8
- package/package.json +1 -1
- package/src/api/product-export.controller.d.ts +1 -0
- package/src/api/product-export.controller.js +16 -0
- package/src/api/product-export.controller.js.map +1 -1
- package/src/api/product-import.controller.js +2 -2
- package/src/api/product-import.controller.js.map +1 -1
- package/src/constants.d.ts +1 -0
- package/src/constants.js +2 -1
- package/src/constants.js.map +1 -1
- package/src/dashboard/export-dialog.tsx +21 -7
- package/src/dashboard/import.tsx +6 -3
- package/src/dashboard/utils.ts +0 -1
- package/src/email-templates/product-export-complete/body.hbs +12 -0
- package/src/email.d.ts +15 -4
- package/src/email.js +108 -1
- package/src/email.js.map +1 -1
- package/src/index.d.ts +3 -0
- package/src/index.js +3 -0
- package/src/index.js.map +1 -1
- package/src/product-import-export.plugin.js +26 -1
- package/src/product-import-export.plugin.js.map +1 -1
- package/src/providers/import-providers/import-parser.d.ts +7 -5
- package/src/providers/import-providers/import-parser.js +53 -15
- package/src/providers/import-providers/import-parser.js.map +1 -1
- package/src/providers/import-providers/product-importer.d.ts +1 -0
- package/src/providers/import-providers/product-importer.js +120 -74
- package/src/providers/import-providers/product-importer.js.map +1 -1
- package/src/services/extended-fast-importer.service.d.ts +5 -3
- package/src/services/extended-fast-importer.service.js +20 -6
- package/src/services/extended-fast-importer.service.js.map +1 -1
- package/src/services/import-storage/import-job-storage-strategy.d.ts +22 -0
- package/src/services/import-storage/import-job-storage-strategy.js +3 -0
- package/src/services/import-storage/import-job-storage-strategy.js.map +1 -0
- package/src/services/import-storage/local-import-job-storage-strategy.d.ts +18 -0
- package/src/services/import-storage/local-import-job-storage-strategy.js +76 -0
- package/src/services/import-storage/local-import-job-storage-strategy.js.map +1 -0
- package/src/services/import-storage/s3-import-job-storage-strategy.d.ts +13 -0
- package/src/services/import-storage/s3-import-job-storage-strategy.js +109 -0
- package/src/services/import-storage/s3-import-job-storage-strategy.js.map +1 -0
- package/src/services/product-export.service.d.ts +1 -0
- package/src/services/product-export.service.js +24 -3
- package/src/services/product-export.service.js.map +1 -1
- package/src/services/product-import.service.d.ts +10 -6
- package/src/services/product-import.service.js +62 -37
- package/src/services/product-import.service.js.map +1 -1
- package/src/types.d.ts +21 -1
- package/src/ui/components/export-dialog.component.html +1 -1
- package/src/ui/components/export-dialog.component.ts +10 -2
- package/src/ui/components/product-import.component.html +6 -8
- package/src/ui/translations/en.json +1 -1
- package/src/ui/translations/sv.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
## 3.3.2-next.1
|
|
2
|
+
|
|
3
|
+
### 🚀 Features
|
|
4
|
+
|
|
5
|
+
- **product-import-export-plugin:** enforce import/export acceptance criteria and enhance documentation ([b1a93b6](https://github.com/WeAreHausTech/haus-tech-vendure-plugins-public/commit/b1a93b6))
|
|
6
|
+
- **product-import-export-plugin:** update pre-version command and clean up export artifacts ([1cde024](https://github.com/WeAreHausTech/haus-tech-vendure-plugins-public/commit/1cde024))
|
|
7
|
+
|
|
8
|
+
## 3.3.2-next.0
|
|
9
|
+
|
|
10
|
+
### 🚀 Features
|
|
11
|
+
|
|
12
|
+
- **product-import-export-plugin:** optimize asset handling and caching in product importer ([9d2888e](https://github.com/WeAreHausTech/haus-tech-vendure-plugins-public/commit/9d2888e))
|
|
13
|
+
- **product-import-export-plugin:** enhance testing and export functionality ([1764eb2](https://github.com/WeAreHausTech/haus-tech-vendure-plugins-public/commit/1764eb2))
|
|
14
|
+
- **product-import-export-plugin:** enforce import/export acceptance criteria (column-presence updates, multi-variant option requirements, no ProductID export option, clearer import CTA, and strict required relation custom-field validation)
|
|
15
|
+
|
|
1
16
|
## 3.3.1
|
|
2
17
|
|
|
3
18
|
This was a version bump only for product-import-export-plugin to align it with other projects, there were no code changes.
|
package/README.mdx
CHANGED
|
@@ -65,10 +65,18 @@ export const config = {
|
|
|
65
65
|
|
|
66
66
|
### Import options
|
|
67
67
|
|
|
68
|
-
| Option
|
|
69
|
-
|
|
|
70
|
-
| `updateProductSlug`
|
|
71
|
-
| `restoreSoftDeleted`
|
|
68
|
+
| Option | Type | Default | Description |
|
|
69
|
+
| ------------------------ | ----------------------------------------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
|
70
|
+
| `updateProductSlug` | `boolean` | `true` | Update product slug from the `name` field in the CSV |
|
|
71
|
+
| `restoreSoftDeleted` | `boolean` | `true` | Restore soft-deleted products/variants found by id or SKU during import. If `false`, new products will be created instead. |
|
|
72
|
+
| `storageStrategy` | `ImportJobStorageStrategy` | local disk | Strategy instance for queued import file storage and retrieval. |
|
|
73
|
+
| `storageStrategyFactory` | `(injector: Injector) => ImportJobStorageStrategy` | `undefined` | Factory for DI-aware strategy creation (recommended for S3/remote storage). |
|
|
74
|
+
| `importJobStorage` | `'local' \| 's3'` | `'local'` | Deprecated compatibility flag. Prefer `storageStrategy` / `storageStrategyFactory`. |
|
|
75
|
+
|
|
76
|
+
Available import storage strategies:
|
|
77
|
+
|
|
78
|
+
- `LocalImportJobStorageStrategy` (default)
|
|
79
|
+
- `S3ImportJobStorageStrategy`
|
|
72
80
|
|
|
73
81
|
### Export options
|
|
74
82
|
|
|
@@ -114,6 +122,12 @@ The plugin supports configurable storage for exported files:
|
|
|
114
122
|
| `enabled` | `true` or `false` | `true` |
|
|
115
123
|
| Custom fields | Column name = custom field name; value depends on field type | Add columns for any Product or ProductVariant custom fields defined in your Vendure config |
|
|
116
124
|
|
|
125
|
+
#### Import behavior rules
|
|
126
|
+
|
|
127
|
+
- If a column is omitted from the CSV header, that field is left unchanged on existing products/variants.
|
|
128
|
+
- If a column exists in the header but the cell is empty, that field is explicitly cleared.
|
|
129
|
+
- For products with more than one variant, `optionGroups` and `optionValues` are required.
|
|
130
|
+
|
|
117
131
|
#### Multi-language support
|
|
118
132
|
|
|
119
133
|
Use language-specific columns by suffixing the field name with the language code. The language codes must match those configured in your Vendure instance (e.g. `en`, `sv`).
|
|
@@ -161,6 +175,9 @@ The Admin UI offers basic import and export. Some features such as the export-al
|
|
|
161
175
|
|
|
162
176
|
1. In the Admin UI or Dashboard, select products to export (or use bulk export).
|
|
163
177
|
2. Configure export fields (assets, facets, custom fields, etc.).
|
|
178
|
+
- For products with more than one variant, `optionGroups` and `optionValues` must be included.
|
|
179
|
+
- `productId` is not available as a selectable export field.
|
|
180
|
+
- If `customFields` are not selected, no custom-field columns are written to the CSV.
|
|
164
181
|
3. Choose asset format: URL or JSON.
|
|
165
182
|
4. Start the export (it is added to a job queue and runs in the background).
|
|
166
183
|
5. Download the CSV when the export is complete. Your downloaded files will be listed in the export view.
|
|
@@ -169,16 +186,27 @@ The Admin UI offers basic import and export. Some features such as the export-al
|
|
|
169
186
|
|
|
170
187
|
## Optional: Email notification on export complete
|
|
171
188
|
|
|
172
|
-
If you use `@vendure/email-plugin`, you can add an email notification when an export finishes
|
|
189
|
+
If you use `@vendure/email-plugin`, you can add an email notification when an export finishes from the `/email` subpath.
|
|
190
|
+
|
|
191
|
+
The plugin now provides a default fallback template for `product-export-complete/body.hbs`.
|
|
192
|
+
If you define your own template in your app's template directory, your template takes precedence.
|
|
193
|
+
Note: templates for `@vendure/email-plugin` should be valid MJML.
|
|
173
194
|
|
|
174
195
|
```typescript
|
|
175
|
-
import
|
|
176
|
-
import {
|
|
196
|
+
import path from 'path'
|
|
197
|
+
import { DefaultEmailPlugin, FileBasedTemplateLoader, defaultEmailHandlers } from '@vendure/email-plugin'
|
|
198
|
+
import {
|
|
199
|
+
withProductExportedHandler,
|
|
200
|
+
withProductExportedTemplateFallback,
|
|
201
|
+
} from '@haus-tech/product-import-export-plugin/email'
|
|
177
202
|
|
|
178
203
|
export const config = {
|
|
179
204
|
plugins: [
|
|
180
205
|
DefaultEmailPlugin.init({
|
|
181
|
-
handlers:
|
|
206
|
+
handlers: withProductExportedHandler(defaultEmailHandlers),
|
|
207
|
+
templateLoader: withProductExportedTemplateFallback(
|
|
208
|
+
new FileBasedTemplateLoader(path.join(__dirname, '../static/email/templates')),
|
|
209
|
+
),
|
|
182
210
|
}),
|
|
183
211
|
],
|
|
184
212
|
}
|
package/package.json
CHANGED
|
@@ -11,6 +11,7 @@ export declare class ProductExportController {
|
|
|
11
11
|
private productExportQueueService;
|
|
12
12
|
constructor(options: PluginInitOptions, exportStorageStrategy: ExportStorageStrategy, productExportService: ProductExportService, productExportQueueService: ProductExportQueueService);
|
|
13
13
|
private validateExportFileName;
|
|
14
|
+
private validateOptionColumnsForMultiVariantExport;
|
|
14
15
|
exportProducts(ctx: RequestContext, res: Response, fileName: string, customFields: string, exportAssetsAs: 'url' | 'json', selectedExportFields: string, selection: ID[]): Promise<void>;
|
|
15
16
|
exportAllProducts(ctx: RequestContext, fileName: string, customFields: string, exportAssetsAs: 'url' | 'json', selectedExportFields: string): Promise<{
|
|
16
17
|
success: boolean;
|
|
@@ -46,6 +46,20 @@ let ProductExportController = class ProductExportController {
|
|
|
46
46
|
}
|
|
47
47
|
return trimmed;
|
|
48
48
|
}
|
|
49
|
+
async validateOptionColumnsForMultiVariantExport(ctx, selectedExportFields, selectionIds) {
|
|
50
|
+
const selected = new Set(selectedExportFields
|
|
51
|
+
.split(',')
|
|
52
|
+
.map((field) => field.trim())
|
|
53
|
+
.filter(Boolean));
|
|
54
|
+
const hasRequiredFields = selected.has('optionGroups') && selected.has('optionValues');
|
|
55
|
+
if (hasRequiredFields) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const hasMultiVariantProducts = await this.productExportService.hasMultiVariantProducts(ctx, selectionIds);
|
|
59
|
+
if (hasMultiVariantProducts) {
|
|
60
|
+
throw new common_1.UnprocessableEntityException('optionGroups and optionValues are required when exporting products with multiple variants');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
49
63
|
async exportProducts(ctx, res, fileName, customFields, exportAssetsAs, selectedExportFields, selection) {
|
|
50
64
|
try {
|
|
51
65
|
if (!selection ||
|
|
@@ -70,6 +84,7 @@ let ProductExportController = class ProductExportController {
|
|
|
70
84
|
if (!customFields) {
|
|
71
85
|
customFields = '';
|
|
72
86
|
}
|
|
87
|
+
await this.validateOptionColumnsForMultiVariantExport(ctx, selectedExportFields, selection);
|
|
73
88
|
const job = await this.productExportQueueService.triggerExportWithSelection(ctx, fileName, customFields, exportAssetsAs, selectedExportFields, selection);
|
|
74
89
|
if (!job || !job.id) {
|
|
75
90
|
throw new common_1.UnprocessableEntityException('Failed to queue export job');
|
|
@@ -99,6 +114,7 @@ let ProductExportController = class ProductExportController {
|
|
|
99
114
|
if (!customFields) {
|
|
100
115
|
customFields = '';
|
|
101
116
|
}
|
|
117
|
+
await this.validateOptionColumnsForMultiVariantExport(ctx, selectedExportFields);
|
|
102
118
|
const job = await this.productExportQueueService.triggerExport(ctx, fileName, customFields, exportAssetsAs, selectedExportFields, true);
|
|
103
119
|
return {
|
|
104
120
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-export.controller.js","sourceRoot":"","sources":["../../../../../packages/product-import-export-plugin/src/api/product-export.controller.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"product-export.controller.js","sourceRoot":"","sources":["../../../../../packages/product-import-export-plugin/src/api/product-export.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,11 +34,11 @@ let ProductImportController = class ProductImportController {
|
|
|
34
34
|
return res.status(400).send('No mainLanguage provided');
|
|
35
35
|
}
|
|
36
36
|
try {
|
|
37
|
-
this.service.processFile(ctx, file, updateProductSlug === 'true', mainLanguage, updatingStrategy);
|
|
37
|
+
await this.service.processFile(ctx, file, updateProductSlug === 'true', mainLanguage, updatingStrategy);
|
|
38
38
|
return res.status(200).send('File uploaded successfully');
|
|
39
39
|
}
|
|
40
40
|
catch (error) {
|
|
41
|
-
return res.status(500).send('Internal Server Error');
|
|
41
|
+
return res.status(500).send(error?.message || 'Internal Server Error');
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-import.controller.js","sourceRoot":"","sources":["../../../../../packages/product-import-export-plugin/src/api/product-import.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"product-import.controller.js","sourceRoot":"","sources":["../../../../../packages/product-import-export-plugin/src/api/product-import.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wCAAiE;AACjE,2CAQuB;AAEvB,+DAA0D;AAC1D,4CAAmE;AAEnE,+EAAyE;AAGlE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAEsB;IAC9C;IAFV,YACwD,OAA0B,EACxE,OAA6B;QADiB,YAAO,GAAP,OAAO,CAAmB;QACxE,YAAO,GAAP,OAAO,CAAsB;IACpC,CAAC;IAIE,AAAN,KAAK,CAAC,cAAc,CACX,GAAmB,EACV,IAAyB,EAEzC,oBAAuC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc;QAC9E,EAAE,iBAAyB,IAAI,MAAM,EACjB,YAA0B,EACtB,gBAAkC,EAE5D,GAAa;QAEb,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACjD,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACzD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAC5B,GAAG,EACH,IAAI,EACJ,iBAAiB,KAAK,MAAM,EAC5B,YAAY,EACZ,gBAAgB,CACjB,CAAA;YACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAE,KAAe,EAAE,OAAO,IAAI,uBAAuB,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;CACF,CAAA;AAxCY,0DAAuB;AAQ5B;IAFL,IAAA,aAAI,EAAC,SAAS,CAAC;IACf,IAAA,wBAAe,EAAC,IAAA,kCAAe,EAAC,MAAM,CAAC,CAAC;IAEtC,WAAA,IAAA,UAAG,GAAE,CAAA;IACL,WAAA,IAAA,qBAAY,GAAE,CAAA;IACd,WAAA,IAAA,aAAI,EAAC,mBAAmB,CAAC,CAAA;IAGzB,WAAA,IAAA,aAAI,EAAC,cAAc,CAAC,CAAA;IACpB,WAAA,IAAA,aAAI,EAAC,kBAAkB,CAAC,CAAA;IACxB,WAAA,IAAA,YAAG,GAAE,CAAA;;qCAPM,qBAAc;;6DA8B3B;kCAvCU,uBAAuB;IADnC,IAAA,mBAAU,EAAC,gBAAgB,CAAC;IAGxB,WAAA,IAAA,eAAM,EAAC,gDAAoC,CAAC,CAAA;6CAC5B,6CAAoB;GAH5B,uBAAuB,CAwCnC"}
|
package/src/constants.d.ts
CHANGED
package/src/constants.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.loggerCtx = exports.EXPORT_STORAGE_STRATEGY = exports.PRODUCT_IMPORT_EXPORT_PLUGIN_OPTIONS = void 0;
|
|
3
|
+
exports.loggerCtx = exports.IMPORT_JOB_STORAGE_STRATEGY = exports.EXPORT_STORAGE_STRATEGY = exports.PRODUCT_IMPORT_EXPORT_PLUGIN_OPTIONS = void 0;
|
|
4
4
|
exports.PRODUCT_IMPORT_EXPORT_PLUGIN_OPTIONS = Symbol('PRODUCT_IMPORT_EXPORT_PLUGIN_OPTIONS');
|
|
5
5
|
exports.EXPORT_STORAGE_STRATEGY = Symbol('EXPORT_STORAGE_STRATEGY');
|
|
6
|
+
exports.IMPORT_JOB_STORAGE_STRATEGY = Symbol('IMPORT_JOB_STORAGE_STRATEGY');
|
|
6
7
|
exports.loggerCtx = 'ProductImportExportPlugin';
|
|
7
8
|
//# sourceMappingURL=constants.js.map
|
package/src/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oCAAoC,GAAG,MAAM,CAAC,sCAAsC,CAAC,CAAA;AACrF,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAC3D,QAAA,SAAS,GAAG,2BAA2B,CAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,oCAAoC,GAAG,MAAM,CAAC,sCAAsC,CAAC,CAAA;AACrF,QAAA,uBAAuB,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAC3D,QAAA,2BAA2B,GAAG,MAAM,CAAC,6BAA6B,CAAC,CAAA;AACnE,QAAA,SAAS,GAAG,2BAA2B,CAAA"}
|
|
@@ -36,13 +36,13 @@ export function ExportDialog({
|
|
|
36
36
|
productIds,
|
|
37
37
|
isExportAll = false,
|
|
38
38
|
}: ExportDialogProps) {
|
|
39
|
+
const mandatoryOptionFields: Array<ProductFields | VariantFields> = ['optionGroups', 'optionValues']
|
|
39
40
|
const [fileName, setFileName] = useState('')
|
|
40
41
|
const [customFields, setCustomFields] = useState<string[]>([])
|
|
41
42
|
const [selectedFields, setSelectedFields] = useState<string[]>([])
|
|
42
43
|
const [exportAssetsAs, setExportAssetsAs] = useState<'url' | 'json'>('url')
|
|
43
44
|
const [selectedExportFields, setSelectedExportFields] = useState<ExportFields>([])
|
|
44
45
|
const [availableExportFields] = useState<ExportFields>([
|
|
45
|
-
'productId',
|
|
46
46
|
'name',
|
|
47
47
|
'slug',
|
|
48
48
|
'description',
|
|
@@ -101,10 +101,15 @@ export function ExportDialog({
|
|
|
101
101
|
configData.exportOptions?.defaultExportFields ||
|
|
102
102
|
configData.exportOptions?.requiredExportFields
|
|
103
103
|
) {
|
|
104
|
-
setSelectedExportFields(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
setSelectedExportFields(
|
|
105
|
+
Array.from(
|
|
106
|
+
new Set([
|
|
107
|
+
...(configData.exportOptions.defaultExportFields || []),
|
|
108
|
+
...(configData.exportOptions.requiredExportFields || []),
|
|
109
|
+
...mandatoryOptionFields,
|
|
110
|
+
]),
|
|
111
|
+
) as ExportFields,
|
|
112
|
+
)
|
|
108
113
|
}
|
|
109
114
|
} catch (error) {
|
|
110
115
|
console.error('Failed to fetch config:', error)
|
|
@@ -123,6 +128,9 @@ export function ExportDialog({
|
|
|
123
128
|
}
|
|
124
129
|
|
|
125
130
|
const toggleExportFieldSelection = (fieldName: ProductFields | VariantFields) => {
|
|
131
|
+
if (mandatoryOptionFields.includes(fieldName)) {
|
|
132
|
+
return
|
|
133
|
+
}
|
|
126
134
|
setSelectedExportFields((prev) =>
|
|
127
135
|
prev.includes(fieldName) ? prev.filter((f) => f !== fieldName) : [...prev, fieldName],
|
|
128
136
|
)
|
|
@@ -134,7 +142,10 @@ export function ExportDialog({
|
|
|
134
142
|
setSelectedExportFields([...availableExportFields])
|
|
135
143
|
setSelectedFields([...customFields])
|
|
136
144
|
} else {
|
|
137
|
-
setSelectedExportFields([
|
|
145
|
+
setSelectedExportFields([
|
|
146
|
+
...(config?.requiredExportFields || []),
|
|
147
|
+
...mandatoryOptionFields,
|
|
148
|
+
])
|
|
138
149
|
setSelectedFields([])
|
|
139
150
|
}
|
|
140
151
|
}
|
|
@@ -220,7 +231,10 @@ export function ExportDialog({
|
|
|
220
231
|
id={`field-${field}`}
|
|
221
232
|
checked={selectedExportFields.includes(field)}
|
|
222
233
|
onCheckedChange={() => toggleExportFieldSelection(field)}
|
|
223
|
-
disabled={
|
|
234
|
+
disabled={
|
|
235
|
+
config?.requiredExportFields?.includes(field) ||
|
|
236
|
+
mandatoryOptionFields.includes(field)
|
|
237
|
+
}
|
|
224
238
|
/>
|
|
225
239
|
<Label htmlFor={`field-${field}`} className="font-normal">
|
|
226
240
|
{field}
|
package/src/dashboard/import.tsx
CHANGED
|
@@ -503,9 +503,6 @@ export function ProductImportBlock() {
|
|
|
503
503
|
<UploadIcon className="mr-2 h-4 w-4" />
|
|
504
504
|
{selectedFile.name}
|
|
505
505
|
</Button>
|
|
506
|
-
<Button type="button" onClick={uploadFile} disabled={!selectedMainLanguage}>
|
|
507
|
-
Upload file
|
|
508
|
-
</Button>
|
|
509
506
|
</>
|
|
510
507
|
) : (
|
|
511
508
|
<Button type="button" variant="default" onClick={() => fileInputRef.current?.click()}>
|
|
@@ -577,6 +574,12 @@ export function ProductImportBlock() {
|
|
|
577
574
|
</p>
|
|
578
575
|
)}
|
|
579
576
|
</div>
|
|
577
|
+
|
|
578
|
+
<div className="pt-2 border-t">
|
|
579
|
+
<Button type="button" onClick={uploadFile} disabled={!selectedMainLanguage}>
|
|
580
|
+
Start import now
|
|
581
|
+
</Button>
|
|
582
|
+
</div>
|
|
580
583
|
</div>
|
|
581
584
|
)}
|
|
582
585
|
</div>
|
package/src/dashboard/utils.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<mjml>
|
|
2
|
+
<mj-body>
|
|
3
|
+
<mj-section>
|
|
4
|
+
<mj-column>
|
|
5
|
+
<mj-text font-size="20px" font-weight="bold">Product export complete</mj-text>
|
|
6
|
+
<mj-text>Your export has finished successfully.</mj-text>
|
|
7
|
+
<mj-text><strong>File:</strong> {{ fileName }}</mj-text>
|
|
8
|
+
<mj-text><strong>Products exported:</strong> {{ productCount }}</mj-text>
|
|
9
|
+
</mj-column>
|
|
10
|
+
</mj-section>
|
|
11
|
+
</mj-body>
|
|
12
|
+
</mjml>
|
package/src/email.d.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import type { TemplateLoader } from '@vendure/email-plugin';
|
|
2
|
+
import { productExportedHandler } from './handlers/product-exported.handler';
|
|
3
|
+
export { productExportedHandler };
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
+
* Convenience helper to append this plugin's email handler without duplicating it.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* handlers: withProductExportedHandler(defaultEmailHandlers)
|
|
5
9
|
*/
|
|
6
|
-
export
|
|
10
|
+
export declare function withProductExportedHandler<T>(handlers: T[]): T[];
|
|
11
|
+
/**
|
|
12
|
+
* Wrap a TemplateLoader with fallback support for this plugin's export-complete template.
|
|
13
|
+
*
|
|
14
|
+
* If your app has `product-export-complete/body.hbs`, it is used as normal.
|
|
15
|
+
* If it does not exist, the plugin's bundled default template is used.
|
|
16
|
+
*/
|
|
17
|
+
export declare function withProductExportedTemplateFallback(templateLoader: TemplateLoader): TemplateLoader;
|
package/src/email.js
CHANGED
|
@@ -1,11 +1,118 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.productExportedHandler = void 0;
|
|
37
|
+
exports.withProductExportedHandler = withProductExportedHandler;
|
|
38
|
+
exports.withProductExportedTemplateFallback = withProductExportedTemplateFallback;
|
|
4
39
|
/**
|
|
5
40
|
* Re-export of the product exported email handler for use with @vendure/email-plugin.
|
|
6
41
|
* Import from '@haus-tech/product-import-export-plugin/email'.
|
|
7
42
|
* Requires @vendure/email-plugin to be installed.
|
|
8
43
|
*/
|
|
9
|
-
|
|
44
|
+
const promises_1 = require("node:fs/promises");
|
|
45
|
+
const path = __importStar(require("node:path"));
|
|
46
|
+
const product_exported_handler_1 = require("./handlers/product-exported.handler");
|
|
10
47
|
Object.defineProperty(exports, "productExportedHandler", { enumerable: true, get: function () { return product_exported_handler_1.productExportedHandler; } });
|
|
48
|
+
/**
|
|
49
|
+
* Convenience helper to append this plugin's email handler without duplicating it.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* handlers: withProductExportedHandler(defaultEmailHandlers)
|
|
53
|
+
*/
|
|
54
|
+
function withProductExportedHandler(handlers) {
|
|
55
|
+
if (handlers.includes(product_exported_handler_1.productExportedHandler)) {
|
|
56
|
+
return handlers;
|
|
57
|
+
}
|
|
58
|
+
return [...handlers, product_exported_handler_1.productExportedHandler];
|
|
59
|
+
}
|
|
60
|
+
const PRODUCT_EXPORT_EMAIL_TYPE = 'product-export-complete';
|
|
61
|
+
const DEFAULT_TEMPLATE_NAME = 'body.hbs';
|
|
62
|
+
const DEFAULT_PRODUCT_EXPORTED_TEMPLATE = `<mjml>
|
|
63
|
+
<mj-body>
|
|
64
|
+
<mj-section>
|
|
65
|
+
<mj-column>
|
|
66
|
+
<mj-text font-size="20px" font-weight="bold">Product export complete</mj-text>
|
|
67
|
+
<mj-text>Your export has finished successfully.</mj-text>
|
|
68
|
+
<mj-text><strong>File:</strong> {{ fileName }}</mj-text>
|
|
69
|
+
<mj-text><strong>Products exported:</strong> {{ productCount }}</mj-text>
|
|
70
|
+
</mj-column>
|
|
71
|
+
</mj-section>
|
|
72
|
+
</mj-body>
|
|
73
|
+
</mjml>
|
|
74
|
+
`;
|
|
75
|
+
function isFileNotFoundError(error) {
|
|
76
|
+
return error instanceof Error && 'code' in error && error.code === 'ENOENT';
|
|
77
|
+
}
|
|
78
|
+
function getBundledTemplatePath(templateName) {
|
|
79
|
+
return path.join(__dirname, 'email-templates', PRODUCT_EXPORT_EMAIL_TYPE, templateName);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Wrap a TemplateLoader with fallback support for this plugin's export-complete template.
|
|
83
|
+
*
|
|
84
|
+
* If your app has `product-export-complete/body.hbs`, it is used as normal.
|
|
85
|
+
* If it does not exist, the plugin's bundled default template is used.
|
|
86
|
+
*/
|
|
87
|
+
function withProductExportedTemplateFallback(templateLoader) {
|
|
88
|
+
return {
|
|
89
|
+
async loadTemplate(injector, ctx, input) {
|
|
90
|
+
try {
|
|
91
|
+
return await templateLoader.loadTemplate(injector, ctx, input);
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
const isProductExportBodyTemplate = input.type === PRODUCT_EXPORT_EMAIL_TYPE && input.templateName === DEFAULT_TEMPLATE_NAME;
|
|
95
|
+
if (!isProductExportBodyTemplate || !isFileNotFoundError(error)) {
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
return await (0, promises_1.readFile)(getBundledTemplatePath(input.templateName), 'utf8');
|
|
100
|
+
}
|
|
101
|
+
catch (bundledTemplateError) {
|
|
102
|
+
if (!isFileNotFoundError(bundledTemplateError)) {
|
|
103
|
+
throw bundledTemplateError;
|
|
104
|
+
}
|
|
105
|
+
// Final fallback if the package template file is unavailable in node_modules.
|
|
106
|
+
return DEFAULT_PRODUCT_EXPORTED_TEMPLATE;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
async loadPartials() {
|
|
111
|
+
if (typeof templateLoader.loadPartials === 'function') {
|
|
112
|
+
return templateLoader.loadPartials();
|
|
113
|
+
}
|
|
114
|
+
return [];
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
11
118
|
//# sourceMappingURL=email.js.map
|
package/src/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/email.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/email.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,gEAKC;AAgCD,kFA6BC;AArFD;;;;GAIG;AACH,+CAA2C;AAC3C,gDAAiC;AAGjC,kFAA4E;AAEnE,uGAFA,iDAAsB,OAEA;AAE/B;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAI,QAAa;IACzD,IAAI,QAAQ,CAAC,QAAQ,CAAC,iDAAsC,CAAC,EAAE,CAAC;QAC9D,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,EAAE,iDAAsC,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,yBAAyB,GAAG,yBAAyB,CAAA;AAC3D,MAAM,qBAAqB,GAAG,UAAU,CAAA;AACxC,MAAM,iCAAiC,GAAG;;;;;;;;;;;;CAYzC,CAAA;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAK,KAA2B,CAAC,IAAI,KAAK,QAAQ,CAAA;AACpG,CAAC;AAED,SAAS,sBAAsB,CAAC,YAAoB;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,YAAY,CAAC,CAAA;AACzF,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mCAAmC,CAAC,cAA8B;IAChF,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,QAAkB,EAAE,GAAmB,EAAE,KAAwB;YAClF,IAAI,CAAC;gBACH,OAAO,MAAM,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;YAChE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,2BAA2B,GAC/B,KAAK,CAAC,IAAI,KAAK,yBAAyB,IAAI,KAAK,CAAC,YAAY,KAAK,qBAAqB,CAAA;gBAC1F,IAAI,CAAC,2BAA2B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChE,MAAM,KAAK,CAAA;gBACb,CAAC;gBACD,IAAI,CAAC;oBACH,OAAO,MAAM,IAAA,mBAAQ,EAAC,sBAAsB,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,CAAA;gBAC3E,CAAC;gBAAC,OAAO,oBAAoB,EAAE,CAAC;oBAC9B,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE,CAAC;wBAC/C,MAAM,oBAAoB,CAAA;oBAC5B,CAAC;oBACD,8EAA8E;oBAC9E,OAAO,iCAAiC,CAAA;gBAC1C,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,CAAC,YAAY;YAChB,IAAI,OAAO,cAAc,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;gBACtD,OAAO,cAAc,CAAC,YAAY,EAAE,CAAA;YACtC,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/src/index.d.ts
CHANGED
|
@@ -3,4 +3,7 @@ export type { PluginInitOptions, UpdatingStrategy, JsonAsset } from './types';
|
|
|
3
3
|
export * from './services/export-storage/export-storage-strategy';
|
|
4
4
|
export * from './services/export-storage/local-export-storage-strategy';
|
|
5
5
|
export * from './services/export-storage/s3-export-storage-strategy';
|
|
6
|
+
export * from './services/import-storage/import-job-storage-strategy';
|
|
7
|
+
export * from './services/import-storage/local-import-job-storage-strategy';
|
|
8
|
+
export * from './services/import-storage/s3-import-job-storage-strategy';
|
|
6
9
|
export type { S3ExportStorageConfig } from './services/export-storage.util';
|
package/src/index.js
CHANGED
|
@@ -18,4 +18,7 @@ __exportStar(require("./product-import-export.plugin"), exports);
|
|
|
18
18
|
__exportStar(require("./services/export-storage/export-storage-strategy"), exports);
|
|
19
19
|
__exportStar(require("./services/export-storage/local-export-storage-strategy"), exports);
|
|
20
20
|
__exportStar(require("./services/export-storage/s3-export-storage-strategy"), exports);
|
|
21
|
+
__exportStar(require("./services/import-storage/import-job-storage-strategy"), exports);
|
|
22
|
+
__exportStar(require("./services/import-storage/local-import-job-storage-strategy"), exports);
|
|
23
|
+
__exportStar(require("./services/import-storage/s3-import-job-storage-strategy"), exports);
|
|
21
24
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA8C;AAG9C,oFAAiE;AACjE,0FAAuE;AACvE,uFAAoE"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAA8C;AAG9C,oFAAiE;AACjE,0FAAuE;AACvE,uFAAoE;AACpE,wFAAqE;AACrE,8FAA2E;AAC3E,2FAAwE"}
|
|
@@ -60,6 +60,7 @@ const extended_fast_importer_service_1 = require("./services/extended-fast-impor
|
|
|
60
60
|
const product_export_service_1 = require("./services/product-export.service");
|
|
61
61
|
const product_export_queue_service_1 = require("./services/product-export-queue.service");
|
|
62
62
|
const local_export_storage_strategy_1 = require("./services/export-storage/local-export-storage-strategy");
|
|
63
|
+
const local_import_job_storage_strategy_1 = require("./services/import-storage/local-import-job-storage-strategy");
|
|
63
64
|
let ProductImportExportPlugin = class ProductImportExportPlugin {
|
|
64
65
|
static { ProductImportExportPlugin_1 = this; }
|
|
65
66
|
static options;
|
|
@@ -71,6 +72,9 @@ let ProductImportExportPlugin = class ProductImportExportPlugin {
|
|
|
71
72
|
restoreSoftDeleted: true,
|
|
72
73
|
};
|
|
73
74
|
}
|
|
75
|
+
if (!options.importOptions.importJobStorage) {
|
|
76
|
+
options.importOptions.importJobStorage = 'local';
|
|
77
|
+
}
|
|
74
78
|
// Ensure exportOptions exists
|
|
75
79
|
if (!options.exportOptions) {
|
|
76
80
|
options.exportOptions = {};
|
|
@@ -108,16 +112,20 @@ let ProductImportExportPlugin = class ProductImportExportPlugin {
|
|
|
108
112
|
...options.exportOptions.defaultExportFields,
|
|
109
113
|
'name',
|
|
110
114
|
'sku',
|
|
115
|
+
'optionGroups',
|
|
116
|
+
'optionValues',
|
|
111
117
|
]);
|
|
112
118
|
}
|
|
113
119
|
if (!options.exportOptions.requiredExportFields) {
|
|
114
|
-
options.exportOptions.requiredExportFields = ['name', 'sku'];
|
|
120
|
+
options.exportOptions.requiredExportFields = ['name', 'sku', 'optionGroups', 'optionValues'];
|
|
115
121
|
}
|
|
116
122
|
if (options.exportOptions.requiredExportFields) {
|
|
117
123
|
options.exportOptions.requiredExportFields = (0, lodash_1.uniq)([
|
|
118
124
|
...options.exportOptions.requiredExportFields,
|
|
119
125
|
'name',
|
|
120
126
|
'sku',
|
|
127
|
+
'optionGroups',
|
|
128
|
+
'optionValues',
|
|
121
129
|
]);
|
|
122
130
|
}
|
|
123
131
|
this.options = options;
|
|
@@ -160,6 +168,23 @@ exports.ProductImportExportPlugin = ProductImportExportPlugin = ProductImportExp
|
|
|
160
168
|
},
|
|
161
169
|
inject: [core_2.ModuleRef],
|
|
162
170
|
},
|
|
171
|
+
{
|
|
172
|
+
provide: constants_1.IMPORT_JOB_STORAGE_STRATEGY,
|
|
173
|
+
useFactory: async (moduleRef) => {
|
|
174
|
+
const importOptions = ProductImportExportPlugin.options?.importOptions;
|
|
175
|
+
const injector = new core_1.Injector(moduleRef);
|
|
176
|
+
if (importOptions?.storageStrategy) {
|
|
177
|
+
return importOptions.storageStrategy;
|
|
178
|
+
}
|
|
179
|
+
if (importOptions?.storageStrategyFactory) {
|
|
180
|
+
return await importOptions.storageStrategyFactory(injector);
|
|
181
|
+
}
|
|
182
|
+
return new local_import_job_storage_strategy_1.LocalImportJobStorageStrategy({
|
|
183
|
+
baseDir: path.join(process.cwd(), 'static', 'imports-tmp'),
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
inject: [core_2.ModuleRef],
|
|
187
|
+
},
|
|
163
188
|
product_import_service_1.ProductImportService,
|
|
164
189
|
product_importer_1.ProductImporter,
|
|
165
190
|
extended_fast_importer_service_1.ExtendedFastImporterService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-import-export.plugin.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/product-import-export.plugin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,wCAAiF;AAEjF,uCAAwC;AACxC,2CAA4B;AAC5B,mCAA6B;AAE7B,
|
|
1
|
+
{"version":3,"file":"product-import-export.plugin.js","sourceRoot":"","sources":["../../../../packages/product-import-export-plugin/src/product-import-export.plugin.ts"],"names":[],"mappings":"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"}
|