@sixtyninecommerce/admin 0.10.0 → 0.12.0
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/README.md +5772 -118
- package/dist/auth/index.d.ts +7 -1
- package/dist/auth/index.js +8 -1
- package/dist/catalog/assets.d.ts +120 -8
- package/dist/catalog/assets.js +98 -12
- package/dist/catalog/collections.d.ts +279 -14
- package/dist/catalog/collections.js +246 -15
- package/dist/catalog/documents.d.ts +142 -0
- package/dist/catalog/documents.js +114 -0
- package/dist/catalog/index.d.ts +54 -6
- package/dist/catalog/index.js +10 -1
- package/dist/catalog/metadata.d.ts +244 -0
- package/dist/catalog/metadata.js +220 -0
- package/dist/catalog/products.d.ts +159 -19
- package/dist/catalog/products.js +88 -13
- package/dist/catalog/properties.d.ts +140 -14
- package/dist/catalog/properties.js +65 -1
- package/dist/catalog/recommendations.d.ts +288 -0
- package/dist/catalog/recommendations.js +237 -0
- package/dist/catalog/reviews.d.ts +381 -0
- package/dist/catalog/reviews.js +325 -0
- package/dist/catalog/types.d.ts +17 -1
- package/dist/catalog/types.js +10 -0
- package/dist/catalog/variant-find.d.ts +136 -0
- package/dist/catalog/variant-find.js +239 -0
- package/dist/catalog/variants.d.ts +293 -26
- package/dist/catalog/variants.js +164 -7
- package/dist/catalog/visibility.d.ts +38 -7
- package/dist/catalog/visibility.js +19 -1
- package/dist/client.d.ts +121 -9
- package/dist/client.js +53 -14
- package/dist/content/assets.d.ts +285 -0
- package/dist/content/assets.js +181 -0
- package/dist/content/forms.d.ts +332 -1
- package/dist/content/forms.js +140 -4
- package/dist/content/items.d.ts +292 -0
- package/dist/content/items.js +170 -0
- package/dist/content/menus.d.ts +254 -0
- package/dist/content/menus.js +70 -0
- package/dist/content/strings.d.ts +137 -0
- package/dist/content/strings.js +82 -0
- package/dist/content/types.d.ts +282 -0
- package/dist/content/types.js +100 -0
- package/dist/customers/age-verification.d.ts +66 -0
- package/dist/customers/age-verification.js +79 -0
- package/dist/customers/credit.d.ts +263 -0
- package/dist/customers/credit.js +244 -0
- package/dist/customers/delivery-preferences.d.ts +120 -0
- package/dist/customers/delivery-preferences.js +97 -0
- package/dist/customers/delivery-terms.d.ts +44 -0
- package/dist/customers/delivery-terms.js +32 -0
- package/dist/customers/groups.d.ts +207 -0
- package/dist/customers/groups.js +438 -0
- package/dist/customers/index.d.ts +462 -37
- package/dist/customers/index.js +317 -40
- package/dist/customers/invitation-status.d.ts +57 -0
- package/dist/customers/invitation-status.js +21 -0
- package/dist/customers/notes.d.ts +67 -0
- package/dist/customers/notes.js +51 -0
- package/dist/customers/notification-recipients.d.ts +97 -0
- package/dist/customers/notification-recipients.js +84 -0
- package/dist/customers/saved-lists.d.ts +42 -0
- package/dist/customers/saved-lists.js +61 -0
- package/dist/customers/vat.d.ts +83 -0
- package/dist/customers/vat.js +46 -0
- package/dist/customers/wire.d.ts +20 -0
- package/dist/customers/wire.js +35 -0
- package/dist/documents/ar.d.ts +307 -0
- package/dist/documents/ar.js +254 -0
- package/dist/documents/emails.d.ts +150 -0
- package/dist/documents/emails.js +220 -0
- package/dist/documents/index.d.ts +744 -21
- package/dist/documents/index.js +438 -24
- package/dist/documents/pdf.d.ts +2 -0
- package/dist/documents/pdf.js +11 -0
- package/dist/fulfillments/create.d.ts +167 -0
- package/dist/fulfillments/create.js +216 -0
- package/dist/fulfillments/index.d.ts +163 -11
- package/dist/fulfillments/index.js +135 -6
- package/dist/fulfillments/payment-policy.d.ts +64 -0
- package/dist/fulfillments/payment-policy.js +140 -0
- package/dist/fulfillments/warehouse.d.ts +724 -0
- package/dist/fulfillments/warehouse.js +914 -0
- package/dist/geo/index.d.ts +119 -0
- package/dist/geo/index.js +107 -0
- package/dist/index.d.ts +147 -39
- package/dist/index.js +51 -12
- package/dist/integrations/afas-actions.d.ts +234 -0
- package/dist/integrations/afas-actions.js +310 -0
- package/dist/integrations/afas-types.d.ts +483 -0
- package/dist/integrations/afas-types.js +5 -0
- package/dist/integrations/afas.d.ts +234 -0
- package/dist/integrations/afas.js +290 -0
- package/dist/integrations/connections.d.ts +103 -0
- package/dist/integrations/connections.js +55 -0
- package/dist/integrations/esp.d.ts +313 -0
- package/dist/integrations/esp.js +169 -0
- package/dist/integrations/exact-online-types.d.ts +965 -0
- package/dist/integrations/exact-online-types.js +6 -0
- package/dist/integrations/exact-online.d.ts +784 -0
- package/dist/integrations/exact-online.js +1089 -0
- package/dist/integrations/index.d.ts +44 -3
- package/dist/integrations/index.js +23 -3
- package/dist/integrations/pipeline-discoveries.d.ts +65 -0
- package/dist/integrations/pipeline-discoveries.js +65 -0
- package/dist/integrations/pipeline-keys.d.ts +13 -0
- package/dist/integrations/pipeline-keys.js +22 -0
- package/dist/integrations/pipeline-runs.d.ts +119 -0
- package/dist/integrations/pipeline-runs.js +87 -0
- package/dist/integrations/pipelines.d.ts +87 -15
- package/dist/integrations/pipelines.js +41 -22
- package/dist/integrations/price-import.d.ts +223 -0
- package/dist/integrations/price-import.js +124 -0
- package/dist/integrations/types.d.ts +367 -3
- package/dist/integrations/types.js +4 -3
- package/dist/locations/index.d.ts +66 -0
- package/dist/locations/index.js +31 -0
- package/dist/meta/index.d.ts +172 -0
- package/dist/metafields/index.d.ts +8 -1
- package/dist/metafields/index.js +10 -0
- package/dist/orders/cancel-with-money.d.ts +237 -0
- package/dist/orders/cancel-with-money.js +155 -0
- package/dist/orders/commit-edit.d.ts +23 -1
- package/dist/orders/commit-edit.js +19 -2
- package/dist/orders/deposit-policy.d.ts +3 -1
- package/dist/orders/drafts.d.ts +800 -0
- package/dist/orders/drafts.js +771 -0
- package/dist/orders/fields.d.ts +245 -0
- package/dist/orders/fields.js +188 -0
- package/dist/orders/get.d.ts +29 -19
- package/dist/orders/get.js +17 -8
- package/dist/orders/index.d.ts +66 -15
- package/dist/orders/index.js +25 -2
- package/dist/orders/lifecycle.d.ts +128 -0
- package/dist/orders/lifecycle.js +158 -0
- package/dist/orders/line-price-preview.d.ts +7 -2
- package/dist/orders/list.d.ts +243 -0
- package/dist/orders/list.js +487 -0
- package/dist/orders/manual-discounts.d.ts +13 -5
- package/dist/orders/manual-pricing.d.ts +5 -0
- package/dist/orders/money-view.d.ts +149 -0
- package/dist/orders/money-view.js +99 -0
- package/dist/orders/order-entry.d.ts +20 -7
- package/dist/orders/plan-edit.d.ts +34 -2
- package/dist/orders/plan-edit.js +112 -11
- package/dist/orders/settings.d.ts +201 -0
- package/dist/orders/settings.js +325 -0
- package/dist/orders/status.d.ts +159 -13
- package/dist/orders/status.js +21 -0
- package/dist/orders/surcharges.d.ts +20 -1
- package/dist/orders/surcharges.js +37 -11
- package/dist/payments/account-credit.d.ts +46 -0
- package/dist/payments/account-credit.js +42 -0
- package/dist/payments/ar.d.ts +292 -0
- package/dist/payments/ar.js +223 -0
- package/dist/payments/connected-account.d.ts +47 -0
- package/dist/payments/connected-account.js +61 -0
- package/dist/payments/credit-noted-fields.d.ts +19 -0
- package/dist/payments/credit-noted-fields.js +69 -0
- package/dist/payments/customer-consent.d.ts +30 -0
- package/dist/payments/customer-consent.js +49 -0
- package/dist/payments/index.d.ts +340 -19
- package/dist/payments/index.js +151 -1
- package/dist/payments/methods.d.ts +303 -8
- package/dist/payments/methods.js +337 -7
- package/dist/payments/mollie-methods.d.ts +159 -0
- package/dist/payments/mollie-methods.js +141 -0
- package/dist/payments/payment-links.d.ts +180 -0
- package/dist/payments/payment-links.js +97 -0
- package/dist/payments/provider-keys.d.ts +150 -0
- package/dist/payments/provider-keys.js +118 -0
- package/dist/payments/providers.d.ts +86 -11
- package/dist/payments/providers.js +29 -0
- package/dist/payments/requests.d.ts +147 -0
- package/dist/payments/requests.js +93 -0
- package/dist/payments/store-credit-fields.d.ts +15 -0
- package/dist/payments/store-credit-fields.js +51 -0
- package/dist/pickups/index.d.ts +106 -0
- package/dist/pickups/index.js +108 -0
- package/dist/platform/channels.d.ts +132 -0
- package/dist/platform/channels.js +128 -0
- package/dist/platform/email-gateways.d.ts +165 -0
- package/dist/platform/email-gateways.js +78 -0
- package/dist/platform/geo.d.ts +123 -0
- package/dist/platform/geo.js +144 -0
- package/dist/platform/tax.d.ts +162 -0
- package/dist/platform/tax.js +169 -0
- package/dist/pos/anomalies.d.ts +158 -0
- package/dist/pos/anomalies.js +64 -0
- package/dist/pos/assisted-selling.d.ts +79 -0
- package/dist/pos/assisted-selling.js +38 -0
- package/dist/pos/exchanges.d.ts +108 -0
- package/dist/pos/exchanges.js +22 -0
- package/dist/pos/gift-cards.d.ts +135 -0
- package/dist/pos/gift-cards.js +47 -0
- package/dist/pos/index.d.ts +2370 -58
- package/dist/pos/index.js +854 -7
- package/dist/pos/no-receipt.d.ts +94 -0
- package/dist/pos/no-receipt.js +25 -0
- package/dist/pos/offline-sales.d.ts +228 -0
- package/dist/pos/offline-sales.js +170 -0
- package/dist/pos/pay-by-link.d.ts +143 -0
- package/dist/pos/pay-by-link.js +57 -0
- package/dist/pos/quick-keys.d.ts +103 -0
- package/dist/pos/quick-keys.js +45 -0
- package/dist/pos/reports.d.ts +360 -0
- package/dist/pos/reports.js +62 -0
- package/dist/pos/returns.d.ts +244 -0
- package/dist/pos/returns.js +83 -0
- package/dist/pricing/bulk-coupons.d.ts +139 -0
- package/dist/pricing/bulk-coupons.js +112 -0
- package/dist/pricing/index.d.ts +174 -4
- package/dist/pricing/index.js +174 -1
- package/dist/pricing/price-lists.d.ts +606 -0
- package/dist/pricing/price-lists.js +600 -0
- package/dist/purchasing/alerts.d.ts +104 -0
- package/dist/purchasing/alerts.js +88 -0
- package/dist/purchasing/backorders.d.ts +61 -0
- package/dist/purchasing/backorders.js +92 -0
- package/dist/purchasing/cost.d.ts +110 -0
- package/dist/purchasing/cost.js +86 -0
- package/dist/purchasing/index.d.ts +54 -0
- package/dist/purchasing/index.js +24 -0
- package/dist/purchasing/links.d.ts +263 -0
- package/dist/purchasing/links.js +192 -0
- package/dist/purchasing/purchase-orders.d.ts +551 -0
- package/dist/purchasing/purchase-orders.js +491 -0
- package/dist/purchasing/receipts.d.ts +396 -0
- package/dist/purchasing/receipts.js +287 -0
- package/dist/purchasing/replenishment.d.ts +281 -0
- package/dist/purchasing/replenishment.js +240 -0
- package/dist/purchasing/returns.d.ts +273 -0
- package/dist/purchasing/returns.js +229 -0
- package/dist/purchasing/settings.d.ts +152 -0
- package/dist/purchasing/settings.js +181 -0
- package/dist/purchasing/suppliers.d.ts +476 -0
- package/dist/purchasing/suppliers.js +438 -0
- package/dist/quotes/index.d.ts +518 -0
- package/dist/quotes/index.js +439 -0
- package/dist/reports/index.d.ts +71 -8
- package/dist/reports/index.js +74 -11
- package/dist/returns/index.d.ts +675 -21
- package/dist/returns/index.js +756 -11
- package/dist/search/index.d.ts +76 -1
- package/dist/search/index.js +63 -0
- package/dist/seo/config.d.ts +128 -0
- package/dist/seo/config.js +95 -0
- package/dist/seo/redirects.d.ts +125 -0
- package/dist/seo/redirects.js +60 -1
- package/dist/seo/settings.d.ts +147 -0
- package/dist/seo/settings.js +209 -0
- package/dist/shipping/definitions.d.ts +29 -0
- package/dist/shipping/definitions.js +47 -0
- package/dist/shipping/fulfillment-profiles.d.ts +174 -0
- package/dist/shipping/fulfillment-profiles.js +104 -0
- package/dist/shipping/hendriks.d.ts +97 -0
- package/dist/shipping/hendriks.js +50 -0
- package/dist/shipping/index.d.ts +54 -0
- package/dist/shipping/index.js +27 -0
- package/dist/shipping/methods.d.ts +205 -0
- package/dist/shipping/methods.js +240 -0
- package/dist/shipping/myparcel.d.ts +668 -0
- package/dist/shipping/myparcel.js +466 -0
- package/dist/shipping/parcel-count-suggestion.d.ts +2 -0
- package/dist/shipping/parcel-rule.d.ts +6 -5
- package/dist/shipping/parcel-rule.js +21 -23
- package/dist/shipping/rate-tables.d.ts +324 -0
- package/dist/shipping/rate-tables.js +390 -0
- package/dist/shipping/ship-to-countries.d.ts +75 -0
- package/dist/shipping/ship-to-countries.js +47 -0
- package/dist/stock/by-location.d.ts +86 -0
- package/dist/stock/by-location.js +94 -0
- package/dist/stock/index.d.ts +18 -4
- package/dist/stock/index.js +7 -0
- package/dist/stock/locations.d.ts +144 -0
- package/dist/stock/locations.js +168 -0
- package/dist/stock/settings.d.ts +106 -0
- package/dist/stock/settings.js +103 -0
- package/dist/stock/transfers.d.ts +386 -52
- package/dist/stock/transfers.js +222 -17
- package/dist/stored-value/index.d.ts +312 -11
- package/dist/stored-value/index.js +223 -4
- package/dist/subscriptions/index.d.ts +682 -0
- package/dist/subscriptions/index.js +815 -0
- package/dist/tax/display-policy.d.ts +105 -0
- package/dist/tax/display-policy.js +84 -0
- package/dist/tax/index.d.ts +79 -1
- package/dist/tax/index.js +52 -0
- package/dist/tenant/email-style.d.ts +102 -0
- package/dist/tenant/email-style.js +72 -0
- package/dist/tenant/email-templates.d.ts +287 -0
- package/dist/tenant/email-templates.js +271 -0
- package/dist/tenant/notifications.d.ts +23 -17
- package/dist/tenant/settings-sources.d.ts +1 -1
- package/dist/tenant/time-zone.d.ts +17 -0
- package/dist/tenant/time-zone.js +11 -0
- package/dist/types.d.ts +50 -3
- package/dist/users/index.d.ts +3 -0
- package/dist/users/index.js +2 -0
- package/dist/users/warehouses.d.ts +50 -0
- package/dist/users/warehouses.js +51 -0
- package/package.json +2 -2
package/dist/pricing/index.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { createPage, errorFromErrorResult, isErrorResult, NotFoundError, ValidationError, } from '@sixtyninecommerce/core';
|
|
1
|
+
import { ConflictError, createPage, errorFromErrorResult, isErrorResult, NotFoundError, UpstreamError, ValidationError, } from '@sixtyninecommerce/core';
|
|
2
|
+
import { fieldOf, vendureListPage, } from '../catalog/types.js';
|
|
3
|
+
import { createPricingBulkCouponsModule } from './bulk-coupons.js';
|
|
4
|
+
import { createPricingPriceListsModule } from './price-lists.js';
|
|
2
5
|
import { createPricingVouchersModule } from './vouchers.js';
|
|
3
6
|
/**
|
|
4
7
|
* The targeting conditions (incentives sprint 2), encoded as the engine stores
|
|
@@ -142,6 +145,14 @@ export const promotionActions = {
|
|
|
142
145
|
return { code: 'mix_and_match', arguments: [] };
|
|
143
146
|
},
|
|
144
147
|
};
|
|
148
|
+
export const PROMOTION_SORT_FIELDS = [
|
|
149
|
+
'name',
|
|
150
|
+
'couponCode',
|
|
151
|
+
'startsAt',
|
|
152
|
+
'endsAt',
|
|
153
|
+
'createdAt',
|
|
154
|
+
'updatedAt',
|
|
155
|
+
];
|
|
145
156
|
const DISCOUNT_FIELDS = 'promotionId adjustmentSource type description amount amountWithTax';
|
|
146
157
|
/** An order's pricing readout; the manual pricing doors (`orders.setLinePrices`, …) answer it too. */
|
|
147
158
|
export const ORDER_DISCOUNTS_FIELDS = /* GraphQL */ `
|
|
@@ -223,8 +234,144 @@ export const UPDATE_PROMOTION_MUTATION = /* GraphQL */ `
|
|
|
223
234
|
}
|
|
224
235
|
}
|
|
225
236
|
`;
|
|
237
|
+
const PROMOTION_ROW_FIELDS = /* GraphQL */ `
|
|
238
|
+
id
|
|
239
|
+
name
|
|
240
|
+
description
|
|
241
|
+
couponCode
|
|
242
|
+
enabled
|
|
243
|
+
startsAt
|
|
244
|
+
endsAt
|
|
245
|
+
usageLimit
|
|
246
|
+
perCustomerUsageLimit
|
|
247
|
+
createdAt
|
|
248
|
+
updatedAt
|
|
249
|
+
`;
|
|
250
|
+
export const PROMOTIONS_QUERY = /* GraphQL */ `
|
|
251
|
+
query StorePromotions($options: PromotionListOptions) {
|
|
252
|
+
promotions(options: $options) {
|
|
253
|
+
items {
|
|
254
|
+
${PROMOTION_ROW_FIELDS}
|
|
255
|
+
customFields { combineWithB2b combineWithOtherPromotions priority }
|
|
256
|
+
}
|
|
257
|
+
totalItems
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
`;
|
|
261
|
+
export const PROMOTION_QUERY = /* GraphQL */ `
|
|
262
|
+
query StorePromotion($id: ID!) {
|
|
263
|
+
promotion(id: $id) {
|
|
264
|
+
${PROMOTION_ROW_FIELDS}
|
|
265
|
+
translations { id languageCode name description }
|
|
266
|
+
conditions { code args { name value } }
|
|
267
|
+
actions { code args { name value } }
|
|
268
|
+
customFields { combineWithB2b combineWithOtherPromotions priority managedBy }
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
`;
|
|
272
|
+
export const DELETE_PROMOTION_MUTATION = /* GraphQL */ `
|
|
273
|
+
mutation DeleteStorePromotion($id: ID!) {
|
|
274
|
+
deletePromotion(id: $id) {
|
|
275
|
+
result
|
|
276
|
+
message
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
`;
|
|
280
|
+
const DEFINITION_FIELDS = /* GraphQL */ `
|
|
281
|
+
code
|
|
282
|
+
description
|
|
283
|
+
args {
|
|
284
|
+
name
|
|
285
|
+
type
|
|
286
|
+
list
|
|
287
|
+
required
|
|
288
|
+
defaultValue
|
|
289
|
+
label
|
|
290
|
+
description
|
|
291
|
+
ui
|
|
292
|
+
}
|
|
293
|
+
`;
|
|
294
|
+
export const PROMOTION_CONDITION_DEFINITIONS_QUERY = /* GraphQL */ `
|
|
295
|
+
query PromotionConditionDefinitions {
|
|
296
|
+
promotionConditions { ${DEFINITION_FIELDS} }
|
|
297
|
+
}
|
|
298
|
+
`;
|
|
299
|
+
export const PROMOTION_ACTION_DEFINITIONS_QUERY = /* GraphQL */ `
|
|
300
|
+
query PromotionActionDefinitions {
|
|
301
|
+
promotionActions { ${DEFINITION_FIELDS} }
|
|
302
|
+
}
|
|
303
|
+
`;
|
|
226
304
|
/** The condition the dashboard and the admin app put on every promotion they save. */
|
|
227
305
|
export const STACKING_GUARD_CONDITION = 'promotion_stacking_guard';
|
|
306
|
+
/**
|
|
307
|
+
* The price-list order-rule condition and action (`vendure-plugin-price-list`'s
|
|
308
|
+
* `order-rule-promotion.ts`): only the store's auto-managed promotion carries them, and the engine
|
|
309
|
+
* refuses them on any other (`PROMOTION_CONDITION_INVALID`), so they are never offered.
|
|
310
|
+
*/
|
|
311
|
+
const ORDER_RULE_OPERATION = 'price_list_order_rules';
|
|
312
|
+
/** Registered conditions a caller never sets itself (see `conditionDefinitions`). */
|
|
313
|
+
const NOT_OFFERED_CONDITIONS = new Set([
|
|
314
|
+
STACKING_GUARD_CONDITION,
|
|
315
|
+
ORDER_RULE_OPERATION,
|
|
316
|
+
]);
|
|
317
|
+
/** Registered actions a caller never sets itself (see `actionDefinitions`). */
|
|
318
|
+
const NOT_OFFERED_ACTIONS = new Set([ORDER_RULE_OPERATION]);
|
|
319
|
+
/**
|
|
320
|
+
* Every list read asks only for promotions no platform service manages: the store's order-rule
|
|
321
|
+
* promotion (`customFields.managedBy`) is never a row, on any page or search.
|
|
322
|
+
*/
|
|
323
|
+
const MERCHANT_PROMOTIONS = { managedBy: { isNull: true } };
|
|
324
|
+
function invalidPromotionList(code, message) {
|
|
325
|
+
return new ValidationError({ code, message, status: 400, service: 'vendure' });
|
|
326
|
+
}
|
|
327
|
+
/** `promotions(options)`'s variables for one page, the filters and the sort checked first. */
|
|
328
|
+
function promotionListVariables(options) {
|
|
329
|
+
const filter = { ...MERCHANT_PROMOTIONS };
|
|
330
|
+
const term = options?.term;
|
|
331
|
+
if (term !== undefined) {
|
|
332
|
+
if (typeof term !== 'string') {
|
|
333
|
+
throw invalidPromotionList('INVALID_PROMOTION_FILTER', 'term must be a string.');
|
|
334
|
+
}
|
|
335
|
+
const trimmed = term.trim();
|
|
336
|
+
if (trimmed !== '') {
|
|
337
|
+
filter._or = [{ name: { contains: trimmed } }, { couponCode: { contains: trimmed } }];
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
const enabled = options?.enabled;
|
|
341
|
+
if (enabled !== undefined) {
|
|
342
|
+
if (typeof enabled !== 'boolean') {
|
|
343
|
+
throw invalidPromotionList('INVALID_PROMOTION_FILTER', 'enabled must be true or false.');
|
|
344
|
+
}
|
|
345
|
+
filter.enabled = { eq: enabled };
|
|
346
|
+
}
|
|
347
|
+
const sort = options?.sort;
|
|
348
|
+
if (sort !== undefined &&
|
|
349
|
+
(!PROMOTION_SORT_FIELDS.includes(sort.field) ||
|
|
350
|
+
(sort.direction !== 'ASC' && sort.direction !== 'DESC'))) {
|
|
351
|
+
throw invalidPromotionList('INVALID_PROMOTION_SORT', `sort must name one of ${PROMOTION_SORT_FIELDS.join(', ')} and a direction ASC or DESC.`);
|
|
352
|
+
}
|
|
353
|
+
return (skip, take) => ({
|
|
354
|
+
options: {
|
|
355
|
+
skip,
|
|
356
|
+
take,
|
|
357
|
+
filter,
|
|
358
|
+
...(sort === undefined ? {} : { sort: { [sort.field]: sort.direction } }),
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
/** A definitions list read by name: anything but a list is refused, never answered empty. */
|
|
363
|
+
async function definitionsOf(transport, document, field, hidden, options) {
|
|
364
|
+
const definitions = await fieldOf(transport, document, field, {}, options);
|
|
365
|
+
if (!Array.isArray(definitions)) {
|
|
366
|
+
throw new UpstreamError({
|
|
367
|
+
code: 'UNEXPECTED_RESPONSE',
|
|
368
|
+
message: `The engine answered "${field}" without a list.`,
|
|
369
|
+
status: 502,
|
|
370
|
+
service: 'vendure',
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
return definitions.filter((definition) => !hidden.has(definition.code));
|
|
374
|
+
}
|
|
228
375
|
function withStackingGuard(conditions) {
|
|
229
376
|
return conditions.some((condition) => condition.code === STACKING_GUARD_CONDITION)
|
|
230
377
|
? conditions
|
|
@@ -280,6 +427,30 @@ function idVariable(value) {
|
|
|
280
427
|
export function createPricingModule(transport) {
|
|
281
428
|
return {
|
|
282
429
|
promotions: {
|
|
430
|
+
// Async, so a refused option rejects the promise like every refusal, never throws.
|
|
431
|
+
async list(options) {
|
|
432
|
+
return vendureListPage(transport, PROMOTIONS_QUERY, 'promotions', promotionListVariables(options), options);
|
|
433
|
+
},
|
|
434
|
+
get(id, options) {
|
|
435
|
+
return fieldOf(transport, PROMOTION_QUERY, 'promotion', { id }, options);
|
|
436
|
+
},
|
|
437
|
+
async delete(id, options) {
|
|
438
|
+
const answer = await fieldOf(transport, DELETE_PROMOTION_MUTATION, 'deletePromotion', { id }, options);
|
|
439
|
+
if (answer.result !== 'DELETED') {
|
|
440
|
+
throw new ConflictError({
|
|
441
|
+
code: 'PROMOTION_NOT_DELETED',
|
|
442
|
+
message: answer.message || `The engine kept promotion ${id}.`,
|
|
443
|
+
status: 409,
|
|
444
|
+
service: 'vendure',
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
conditionDefinitions(options) {
|
|
449
|
+
return definitionsOf(transport, PROMOTION_CONDITION_DEFINITIONS_QUERY, 'promotionConditions', NOT_OFFERED_CONDITIONS, options);
|
|
450
|
+
},
|
|
451
|
+
actionDefinitions(options) {
|
|
452
|
+
return definitionsOf(transport, PROMOTION_ACTION_DEFINITIONS_QUERY, 'promotionActions', NOT_OFFERED_ACTIONS, options);
|
|
453
|
+
},
|
|
283
454
|
async active(filter, options) {
|
|
284
455
|
const data = await transport.graphql({
|
|
285
456
|
api: 'admin',
|
|
@@ -319,7 +490,9 @@ export function createPricingModule(transport) {
|
|
|
319
490
|
},
|
|
320
491
|
},
|
|
321
492
|
vouchers: createPricingVouchersModule(transport),
|
|
493
|
+
priceLists: createPricingPriceListsModule(transport),
|
|
322
494
|
coupons: {
|
|
495
|
+
bulk: createPricingBulkCouponsModule(transport),
|
|
323
496
|
async apply(orderId, couponCode, options) {
|
|
324
497
|
const data = await transport.graphql({
|
|
325
498
|
api: 'admin',
|