@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.
Files changed (302) hide show
  1. package/README.md +5772 -118
  2. package/dist/auth/index.d.ts +7 -1
  3. package/dist/auth/index.js +8 -1
  4. package/dist/catalog/assets.d.ts +120 -8
  5. package/dist/catalog/assets.js +98 -12
  6. package/dist/catalog/collections.d.ts +279 -14
  7. package/dist/catalog/collections.js +246 -15
  8. package/dist/catalog/documents.d.ts +142 -0
  9. package/dist/catalog/documents.js +114 -0
  10. package/dist/catalog/index.d.ts +54 -6
  11. package/dist/catalog/index.js +10 -1
  12. package/dist/catalog/metadata.d.ts +244 -0
  13. package/dist/catalog/metadata.js +220 -0
  14. package/dist/catalog/products.d.ts +159 -19
  15. package/dist/catalog/products.js +88 -13
  16. package/dist/catalog/properties.d.ts +140 -14
  17. package/dist/catalog/properties.js +65 -1
  18. package/dist/catalog/recommendations.d.ts +288 -0
  19. package/dist/catalog/recommendations.js +237 -0
  20. package/dist/catalog/reviews.d.ts +381 -0
  21. package/dist/catalog/reviews.js +325 -0
  22. package/dist/catalog/types.d.ts +17 -1
  23. package/dist/catalog/types.js +10 -0
  24. package/dist/catalog/variant-find.d.ts +136 -0
  25. package/dist/catalog/variant-find.js +239 -0
  26. package/dist/catalog/variants.d.ts +293 -26
  27. package/dist/catalog/variants.js +164 -7
  28. package/dist/catalog/visibility.d.ts +38 -7
  29. package/dist/catalog/visibility.js +19 -1
  30. package/dist/client.d.ts +121 -9
  31. package/dist/client.js +53 -14
  32. package/dist/content/assets.d.ts +285 -0
  33. package/dist/content/assets.js +181 -0
  34. package/dist/content/forms.d.ts +332 -1
  35. package/dist/content/forms.js +140 -4
  36. package/dist/content/items.d.ts +292 -0
  37. package/dist/content/items.js +170 -0
  38. package/dist/content/menus.d.ts +254 -0
  39. package/dist/content/menus.js +70 -0
  40. package/dist/content/strings.d.ts +137 -0
  41. package/dist/content/strings.js +82 -0
  42. package/dist/content/types.d.ts +282 -0
  43. package/dist/content/types.js +100 -0
  44. package/dist/customers/age-verification.d.ts +66 -0
  45. package/dist/customers/age-verification.js +79 -0
  46. package/dist/customers/credit.d.ts +263 -0
  47. package/dist/customers/credit.js +244 -0
  48. package/dist/customers/delivery-preferences.d.ts +120 -0
  49. package/dist/customers/delivery-preferences.js +97 -0
  50. package/dist/customers/delivery-terms.d.ts +44 -0
  51. package/dist/customers/delivery-terms.js +32 -0
  52. package/dist/customers/groups.d.ts +207 -0
  53. package/dist/customers/groups.js +438 -0
  54. package/dist/customers/index.d.ts +462 -37
  55. package/dist/customers/index.js +317 -40
  56. package/dist/customers/invitation-status.d.ts +57 -0
  57. package/dist/customers/invitation-status.js +21 -0
  58. package/dist/customers/notes.d.ts +67 -0
  59. package/dist/customers/notes.js +51 -0
  60. package/dist/customers/notification-recipients.d.ts +97 -0
  61. package/dist/customers/notification-recipients.js +84 -0
  62. package/dist/customers/saved-lists.d.ts +42 -0
  63. package/dist/customers/saved-lists.js +61 -0
  64. package/dist/customers/vat.d.ts +83 -0
  65. package/dist/customers/vat.js +46 -0
  66. package/dist/customers/wire.d.ts +20 -0
  67. package/dist/customers/wire.js +35 -0
  68. package/dist/documents/ar.d.ts +307 -0
  69. package/dist/documents/ar.js +254 -0
  70. package/dist/documents/emails.d.ts +150 -0
  71. package/dist/documents/emails.js +220 -0
  72. package/dist/documents/index.d.ts +744 -21
  73. package/dist/documents/index.js +438 -24
  74. package/dist/documents/pdf.d.ts +2 -0
  75. package/dist/documents/pdf.js +11 -0
  76. package/dist/fulfillments/create.d.ts +167 -0
  77. package/dist/fulfillments/create.js +216 -0
  78. package/dist/fulfillments/index.d.ts +163 -11
  79. package/dist/fulfillments/index.js +135 -6
  80. package/dist/fulfillments/payment-policy.d.ts +64 -0
  81. package/dist/fulfillments/payment-policy.js +140 -0
  82. package/dist/fulfillments/warehouse.d.ts +724 -0
  83. package/dist/fulfillments/warehouse.js +914 -0
  84. package/dist/geo/index.d.ts +119 -0
  85. package/dist/geo/index.js +107 -0
  86. package/dist/index.d.ts +147 -39
  87. package/dist/index.js +51 -12
  88. package/dist/integrations/afas-actions.d.ts +234 -0
  89. package/dist/integrations/afas-actions.js +310 -0
  90. package/dist/integrations/afas-types.d.ts +483 -0
  91. package/dist/integrations/afas-types.js +5 -0
  92. package/dist/integrations/afas.d.ts +234 -0
  93. package/dist/integrations/afas.js +290 -0
  94. package/dist/integrations/connections.d.ts +103 -0
  95. package/dist/integrations/connections.js +55 -0
  96. package/dist/integrations/esp.d.ts +313 -0
  97. package/dist/integrations/esp.js +169 -0
  98. package/dist/integrations/exact-online-types.d.ts +965 -0
  99. package/dist/integrations/exact-online-types.js +6 -0
  100. package/dist/integrations/exact-online.d.ts +784 -0
  101. package/dist/integrations/exact-online.js +1089 -0
  102. package/dist/integrations/index.d.ts +44 -3
  103. package/dist/integrations/index.js +23 -3
  104. package/dist/integrations/pipeline-discoveries.d.ts +65 -0
  105. package/dist/integrations/pipeline-discoveries.js +65 -0
  106. package/dist/integrations/pipeline-keys.d.ts +13 -0
  107. package/dist/integrations/pipeline-keys.js +22 -0
  108. package/dist/integrations/pipeline-runs.d.ts +119 -0
  109. package/dist/integrations/pipeline-runs.js +87 -0
  110. package/dist/integrations/pipelines.d.ts +87 -15
  111. package/dist/integrations/pipelines.js +41 -22
  112. package/dist/integrations/price-import.d.ts +223 -0
  113. package/dist/integrations/price-import.js +124 -0
  114. package/dist/integrations/types.d.ts +367 -3
  115. package/dist/integrations/types.js +4 -3
  116. package/dist/locations/index.d.ts +66 -0
  117. package/dist/locations/index.js +31 -0
  118. package/dist/meta/index.d.ts +172 -0
  119. package/dist/metafields/index.d.ts +8 -1
  120. package/dist/metafields/index.js +10 -0
  121. package/dist/orders/cancel-with-money.d.ts +237 -0
  122. package/dist/orders/cancel-with-money.js +155 -0
  123. package/dist/orders/commit-edit.d.ts +23 -1
  124. package/dist/orders/commit-edit.js +19 -2
  125. package/dist/orders/deposit-policy.d.ts +3 -1
  126. package/dist/orders/drafts.d.ts +800 -0
  127. package/dist/orders/drafts.js +771 -0
  128. package/dist/orders/fields.d.ts +245 -0
  129. package/dist/orders/fields.js +188 -0
  130. package/dist/orders/get.d.ts +29 -19
  131. package/dist/orders/get.js +17 -8
  132. package/dist/orders/index.d.ts +66 -15
  133. package/dist/orders/index.js +25 -2
  134. package/dist/orders/lifecycle.d.ts +128 -0
  135. package/dist/orders/lifecycle.js +158 -0
  136. package/dist/orders/line-price-preview.d.ts +7 -2
  137. package/dist/orders/list.d.ts +243 -0
  138. package/dist/orders/list.js +487 -0
  139. package/dist/orders/manual-discounts.d.ts +13 -5
  140. package/dist/orders/manual-pricing.d.ts +5 -0
  141. package/dist/orders/money-view.d.ts +149 -0
  142. package/dist/orders/money-view.js +99 -0
  143. package/dist/orders/order-entry.d.ts +20 -7
  144. package/dist/orders/plan-edit.d.ts +34 -2
  145. package/dist/orders/plan-edit.js +112 -11
  146. package/dist/orders/settings.d.ts +201 -0
  147. package/dist/orders/settings.js +325 -0
  148. package/dist/orders/status.d.ts +159 -13
  149. package/dist/orders/status.js +21 -0
  150. package/dist/orders/surcharges.d.ts +20 -1
  151. package/dist/orders/surcharges.js +37 -11
  152. package/dist/payments/account-credit.d.ts +46 -0
  153. package/dist/payments/account-credit.js +42 -0
  154. package/dist/payments/ar.d.ts +292 -0
  155. package/dist/payments/ar.js +223 -0
  156. package/dist/payments/connected-account.d.ts +47 -0
  157. package/dist/payments/connected-account.js +61 -0
  158. package/dist/payments/credit-noted-fields.d.ts +19 -0
  159. package/dist/payments/credit-noted-fields.js +69 -0
  160. package/dist/payments/customer-consent.d.ts +30 -0
  161. package/dist/payments/customer-consent.js +49 -0
  162. package/dist/payments/index.d.ts +340 -19
  163. package/dist/payments/index.js +151 -1
  164. package/dist/payments/methods.d.ts +303 -8
  165. package/dist/payments/methods.js +337 -7
  166. package/dist/payments/mollie-methods.d.ts +159 -0
  167. package/dist/payments/mollie-methods.js +141 -0
  168. package/dist/payments/payment-links.d.ts +180 -0
  169. package/dist/payments/payment-links.js +97 -0
  170. package/dist/payments/provider-keys.d.ts +150 -0
  171. package/dist/payments/provider-keys.js +118 -0
  172. package/dist/payments/providers.d.ts +86 -11
  173. package/dist/payments/providers.js +29 -0
  174. package/dist/payments/requests.d.ts +147 -0
  175. package/dist/payments/requests.js +93 -0
  176. package/dist/payments/store-credit-fields.d.ts +15 -0
  177. package/dist/payments/store-credit-fields.js +51 -0
  178. package/dist/pickups/index.d.ts +106 -0
  179. package/dist/pickups/index.js +108 -0
  180. package/dist/platform/channels.d.ts +132 -0
  181. package/dist/platform/channels.js +128 -0
  182. package/dist/platform/email-gateways.d.ts +165 -0
  183. package/dist/platform/email-gateways.js +78 -0
  184. package/dist/platform/geo.d.ts +123 -0
  185. package/dist/platform/geo.js +144 -0
  186. package/dist/platform/tax.d.ts +162 -0
  187. package/dist/platform/tax.js +169 -0
  188. package/dist/pos/anomalies.d.ts +158 -0
  189. package/dist/pos/anomalies.js +64 -0
  190. package/dist/pos/assisted-selling.d.ts +79 -0
  191. package/dist/pos/assisted-selling.js +38 -0
  192. package/dist/pos/exchanges.d.ts +108 -0
  193. package/dist/pos/exchanges.js +22 -0
  194. package/dist/pos/gift-cards.d.ts +135 -0
  195. package/dist/pos/gift-cards.js +47 -0
  196. package/dist/pos/index.d.ts +2370 -58
  197. package/dist/pos/index.js +854 -7
  198. package/dist/pos/no-receipt.d.ts +94 -0
  199. package/dist/pos/no-receipt.js +25 -0
  200. package/dist/pos/offline-sales.d.ts +228 -0
  201. package/dist/pos/offline-sales.js +170 -0
  202. package/dist/pos/pay-by-link.d.ts +143 -0
  203. package/dist/pos/pay-by-link.js +57 -0
  204. package/dist/pos/quick-keys.d.ts +103 -0
  205. package/dist/pos/quick-keys.js +45 -0
  206. package/dist/pos/reports.d.ts +360 -0
  207. package/dist/pos/reports.js +62 -0
  208. package/dist/pos/returns.d.ts +244 -0
  209. package/dist/pos/returns.js +83 -0
  210. package/dist/pricing/bulk-coupons.d.ts +139 -0
  211. package/dist/pricing/bulk-coupons.js +112 -0
  212. package/dist/pricing/index.d.ts +174 -4
  213. package/dist/pricing/index.js +174 -1
  214. package/dist/pricing/price-lists.d.ts +606 -0
  215. package/dist/pricing/price-lists.js +600 -0
  216. package/dist/purchasing/alerts.d.ts +104 -0
  217. package/dist/purchasing/alerts.js +88 -0
  218. package/dist/purchasing/backorders.d.ts +61 -0
  219. package/dist/purchasing/backorders.js +92 -0
  220. package/dist/purchasing/cost.d.ts +110 -0
  221. package/dist/purchasing/cost.js +86 -0
  222. package/dist/purchasing/index.d.ts +54 -0
  223. package/dist/purchasing/index.js +24 -0
  224. package/dist/purchasing/links.d.ts +263 -0
  225. package/dist/purchasing/links.js +192 -0
  226. package/dist/purchasing/purchase-orders.d.ts +551 -0
  227. package/dist/purchasing/purchase-orders.js +491 -0
  228. package/dist/purchasing/receipts.d.ts +396 -0
  229. package/dist/purchasing/receipts.js +287 -0
  230. package/dist/purchasing/replenishment.d.ts +281 -0
  231. package/dist/purchasing/replenishment.js +240 -0
  232. package/dist/purchasing/returns.d.ts +273 -0
  233. package/dist/purchasing/returns.js +229 -0
  234. package/dist/purchasing/settings.d.ts +152 -0
  235. package/dist/purchasing/settings.js +181 -0
  236. package/dist/purchasing/suppliers.d.ts +476 -0
  237. package/dist/purchasing/suppliers.js +438 -0
  238. package/dist/quotes/index.d.ts +518 -0
  239. package/dist/quotes/index.js +439 -0
  240. package/dist/reports/index.d.ts +71 -8
  241. package/dist/reports/index.js +74 -11
  242. package/dist/returns/index.d.ts +675 -21
  243. package/dist/returns/index.js +756 -11
  244. package/dist/search/index.d.ts +76 -1
  245. package/dist/search/index.js +63 -0
  246. package/dist/seo/config.d.ts +128 -0
  247. package/dist/seo/config.js +95 -0
  248. package/dist/seo/redirects.d.ts +125 -0
  249. package/dist/seo/redirects.js +60 -1
  250. package/dist/seo/settings.d.ts +147 -0
  251. package/dist/seo/settings.js +209 -0
  252. package/dist/shipping/definitions.d.ts +29 -0
  253. package/dist/shipping/definitions.js +47 -0
  254. package/dist/shipping/fulfillment-profiles.d.ts +174 -0
  255. package/dist/shipping/fulfillment-profiles.js +104 -0
  256. package/dist/shipping/hendriks.d.ts +97 -0
  257. package/dist/shipping/hendriks.js +50 -0
  258. package/dist/shipping/index.d.ts +54 -0
  259. package/dist/shipping/index.js +27 -0
  260. package/dist/shipping/methods.d.ts +205 -0
  261. package/dist/shipping/methods.js +240 -0
  262. package/dist/shipping/myparcel.d.ts +668 -0
  263. package/dist/shipping/myparcel.js +466 -0
  264. package/dist/shipping/parcel-count-suggestion.d.ts +2 -0
  265. package/dist/shipping/parcel-rule.d.ts +6 -5
  266. package/dist/shipping/parcel-rule.js +21 -23
  267. package/dist/shipping/rate-tables.d.ts +324 -0
  268. package/dist/shipping/rate-tables.js +390 -0
  269. package/dist/shipping/ship-to-countries.d.ts +75 -0
  270. package/dist/shipping/ship-to-countries.js +47 -0
  271. package/dist/stock/by-location.d.ts +86 -0
  272. package/dist/stock/by-location.js +94 -0
  273. package/dist/stock/index.d.ts +18 -4
  274. package/dist/stock/index.js +7 -0
  275. package/dist/stock/locations.d.ts +144 -0
  276. package/dist/stock/locations.js +168 -0
  277. package/dist/stock/settings.d.ts +106 -0
  278. package/dist/stock/settings.js +103 -0
  279. package/dist/stock/transfers.d.ts +386 -52
  280. package/dist/stock/transfers.js +222 -17
  281. package/dist/stored-value/index.d.ts +312 -11
  282. package/dist/stored-value/index.js +223 -4
  283. package/dist/subscriptions/index.d.ts +682 -0
  284. package/dist/subscriptions/index.js +815 -0
  285. package/dist/tax/display-policy.d.ts +105 -0
  286. package/dist/tax/display-policy.js +84 -0
  287. package/dist/tax/index.d.ts +79 -1
  288. package/dist/tax/index.js +52 -0
  289. package/dist/tenant/email-style.d.ts +102 -0
  290. package/dist/tenant/email-style.js +72 -0
  291. package/dist/tenant/email-templates.d.ts +287 -0
  292. package/dist/tenant/email-templates.js +271 -0
  293. package/dist/tenant/notifications.d.ts +23 -17
  294. package/dist/tenant/settings-sources.d.ts +1 -1
  295. package/dist/tenant/time-zone.d.ts +17 -0
  296. package/dist/tenant/time-zone.js +11 -0
  297. package/dist/types.d.ts +50 -3
  298. package/dist/users/index.d.ts +3 -0
  299. package/dist/users/index.js +2 -0
  300. package/dist/users/warehouses.d.ts +50 -0
  301. package/dist/users/warehouses.js +51 -0
  302. package/package.json +2 -2
@@ -0,0 +1,119 @@
1
+ import type { Page, Transport } from '@sixtyninecommerce/core';
2
+ import type { Call, ListOptions } from '../types.js';
3
+ /**
4
+ * A country. Countries are PLATFORM-WIDE: every store reads the same table, and only a
5
+ * SuperAdmin changes it.
6
+ */
7
+ export interface Country {
8
+ id: string;
9
+ /** In the language of the request. */
10
+ name: string;
11
+ /** ISO 3166-1 alpha-2, upper case. */
12
+ code: string;
13
+ /** A disabled country is kept for history; checkout and addresses refuse it. */
14
+ enabled: boolean;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
18
+ /** A region inside a zone: today always a country (`type: 'country'`). */
19
+ export interface ZoneMember {
20
+ id: string;
21
+ name: string;
22
+ code: string;
23
+ enabled: boolean;
24
+ type: string;
25
+ }
26
+ /** A tax or shipping zone: a named set of countries, platform-wide like the countries. */
27
+ export interface Zone {
28
+ id: string;
29
+ name: string;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ }
33
+ /** A zone with the countries in it. */
34
+ export interface ZoneWithMembers extends Zone {
35
+ members: ZoneMember[];
36
+ }
37
+ /** Options for {@link GeoZonesModule.list}. */
38
+ export interface ZoneListOptions extends ListOptions {
39
+ /** Also select each zone's members (the countries in it). Defaults to false. */
40
+ members?: boolean;
41
+ }
42
+ export interface GeoCountriesModule {
43
+ /**
44
+ * The platform's countries, in id order.
45
+ *
46
+ * A `Page`: walk it (`for await`, or `.next()` until null) for the COMPLETE list. Nothing is cut
47
+ * at a fixed size; every following page keeps the same order and per-call options.
48
+ *
49
+ * @effect read
50
+ */
51
+ list(options?: ListOptions): Promise<Page<Country>>;
52
+ }
53
+ export interface GeoZonesModule {
54
+ /**
55
+ * The platform's zones, in id order, with their members when `members` is true.
56
+ *
57
+ * A `Page`: walk it (`for await`, or `.next()` until null) for the COMPLETE list. Nothing is cut
58
+ * at a fixed size; every following page keeps the same order, `members` and per-call options.
59
+ *
60
+ * @effect read
61
+ */
62
+ list(options: ZoneListOptions & {
63
+ members: true;
64
+ }): Promise<Page<ZoneWithMembers>>;
65
+ /**
66
+ * The platform's zones, in id order, without their members. A complete list when walked.
67
+ *
68
+ * @effect read
69
+ */
70
+ list(options?: ZoneListOptions): Promise<Page<Zone>>;
71
+ /**
72
+ * One zone with its members, or null when no zone has that id. An id that is not in the
73
+ * platform's id format at all is refused by the engine (`ENTITY_NOT_FOUND`, a `NotFoundError`).
74
+ *
75
+ * @effect read
76
+ */
77
+ get(id: string, options?: Call): Promise<ZoneWithMembers | null>;
78
+ }
79
+ /**
80
+ * Countries and zones (spec §9.2, ruling G128). Platform-wide reads: any store's client answers
81
+ * the same lists. Reading needs `ReadCountry` / `ReadZone`, which every store role holds; a
82
+ * SuperAdmin writes them through `platform.geo`.
83
+ */
84
+ export interface GeoModule {
85
+ countries: GeoCountriesModule;
86
+ zones: GeoZonesModule;
87
+ }
88
+ /**
89
+ * The zone provisioning gives a store for its country when it is sent no zones
90
+ * (`platform.provisionStore`, see `ProvisionStoreInput.defaultTaxZoneId`): the most SPECIFIC
91
+ * zone that contains the country — the fewest members — so a dedicated `Benelux` wins over a
92
+ * catch-all `Europe`. Ties break on name, then id, so the answer never depends on list order.
93
+ * Country codes compare case-insensitively.
94
+ *
95
+ * Null when no zone contains the country (or the code is blank): provisioning then refuses to
96
+ * guess, and so does this.
97
+ *
98
+ * Pass the COMPLETE zone list with members (`geo.zones.list({ members: true })`, walked): a cut
99
+ * list can answer a less specific zone than the server would.
100
+ *
101
+ * The server re-judges this: provisioning sent no zones resolves them itself with the same rule.
102
+ * A form that pre-fills with it and finds both zones unchanged at submit can leave them out and
103
+ * let the server have the last word.
104
+ */
105
+ export declare function mostSpecificZone<T extends {
106
+ id: string;
107
+ name: string;
108
+ members: {
109
+ code: string;
110
+ }[];
111
+ }>(zones: readonly T[], countryCode: string | null | undefined): T | null;
112
+ export declare const COUNTRY_FIELDS = "\n id\n name\n code\n enabled\n createdAt\n updatedAt\n";
113
+ export declare const ZONE_FIELDS = "\n id\n name\n createdAt\n updatedAt\n";
114
+ export declare const ZONE_MEMBER_FIELDS = "\n members {\n id\n name\n code\n enabled\n type\n }\n";
115
+ export declare const GEO_COUNTRIES_QUERY = "\n query GeoCountries($options: CountryListOptions) {\n countries(options: $options) {\n items { \n id\n name\n code\n enabled\n createdAt\n updatedAt\n }\n totalItems\n }\n }\n";
116
+ export declare const GEO_ZONES_QUERY = "\n query GeoZones($options: ZoneListOptions) {\n zones(options: $options) {\n items { \n id\n name\n createdAt\n updatedAt\n }\n totalItems\n }\n }\n";
117
+ export declare const GEO_ZONES_WITH_MEMBERS_QUERY = "\n query GeoZonesWithMembers($options: ZoneListOptions) {\n zones(options: $options) {\n items { \n id\n name\n createdAt\n updatedAt\n \n members {\n id\n name\n code\n enabled\n type\n }\n }\n totalItems\n }\n }\n";
118
+ export declare const GEO_ZONE_QUERY = "\n query GeoZone($id: ID!) {\n zone(id: $id) { \n id\n name\n createdAt\n updatedAt\n \n members {\n id\n name\n code\n enabled\n type\n }\n }\n }\n";
119
+ export declare function createGeoModule(transport: Transport): GeoModule;
@@ -0,0 +1,107 @@
1
+ import { fieldOf, vendureListPage } from '../catalog/types.js';
2
+ /**
3
+ * The zone provisioning gives a store for its country when it is sent no zones
4
+ * (`platform.provisionStore`, see `ProvisionStoreInput.defaultTaxZoneId`): the most SPECIFIC
5
+ * zone that contains the country — the fewest members — so a dedicated `Benelux` wins over a
6
+ * catch-all `Europe`. Ties break on name, then id, so the answer never depends on list order.
7
+ * Country codes compare case-insensitively.
8
+ *
9
+ * Null when no zone contains the country (or the code is blank): provisioning then refuses to
10
+ * guess, and so does this.
11
+ *
12
+ * Pass the COMPLETE zone list with members (`geo.zones.list({ members: true })`, walked): a cut
13
+ * list can answer a less specific zone than the server would.
14
+ *
15
+ * The server re-judges this: provisioning sent no zones resolves them itself with the same rule.
16
+ * A form that pre-fills with it and finds both zones unchanged at submit can leave them out and
17
+ * let the server have the last word.
18
+ */
19
+ export function mostSpecificZone(zones, countryCode) {
20
+ const code = typeof countryCode === 'string' ? countryCode.trim().toUpperCase() : '';
21
+ if (code === '')
22
+ return null;
23
+ const candidates = zones.filter((zone) => zone.members.some((member) => member.code?.toUpperCase() === code));
24
+ const [best] = [...candidates].sort((a, b) => {
25
+ const size = a.members.length - b.members.length;
26
+ if (size !== 0)
27
+ return size;
28
+ const name = a.name.localeCompare(b.name, 'en');
29
+ if (name !== 0)
30
+ return name;
31
+ return a.id.localeCompare(b.id);
32
+ });
33
+ return best ?? null;
34
+ }
35
+ export const COUNTRY_FIELDS = /* GraphQL */ `
36
+ id
37
+ name
38
+ code
39
+ enabled
40
+ createdAt
41
+ updatedAt
42
+ `;
43
+ export const ZONE_FIELDS = /* GraphQL */ `
44
+ id
45
+ name
46
+ createdAt
47
+ updatedAt
48
+ `;
49
+ export const ZONE_MEMBER_FIELDS = /* GraphQL */ `
50
+ members {
51
+ id
52
+ name
53
+ code
54
+ enabled
55
+ type
56
+ }
57
+ `;
58
+ export const GEO_COUNTRIES_QUERY = /* GraphQL */ `
59
+ query GeoCountries($options: CountryListOptions) {
60
+ countries(options: $options) {
61
+ items { ${COUNTRY_FIELDS} }
62
+ totalItems
63
+ }
64
+ }
65
+ `;
66
+ export const GEO_ZONES_QUERY = /* GraphQL */ `
67
+ query GeoZones($options: ZoneListOptions) {
68
+ zones(options: $options) {
69
+ items { ${ZONE_FIELDS} }
70
+ totalItems
71
+ }
72
+ }
73
+ `;
74
+ export const GEO_ZONES_WITH_MEMBERS_QUERY = /* GraphQL */ `
75
+ query GeoZonesWithMembers($options: ZoneListOptions) {
76
+ zones(options: $options) {
77
+ items { ${ZONE_FIELDS} ${ZONE_MEMBER_FIELDS} }
78
+ totalItems
79
+ }
80
+ }
81
+ `;
82
+ export const GEO_ZONE_QUERY = /* GraphQL */ `
83
+ query GeoZone($id: ID!) {
84
+ zone(id: $id) { ${ZONE_FIELDS} ${ZONE_MEMBER_FIELDS} }
85
+ }
86
+ `;
87
+ /**
88
+ * Vendure's list queries add no ORDER BY of their own, and `skip/take` over an unordered query
89
+ * can repeat or skip rows between two requests. Every list here is ordered by id, the one unique
90
+ * key a sort can name (a GraphQL sort input applies its fields in the SCHEMA's order, where `id`
91
+ * comes first, so `{ name, id }` is id order too), so a walk answers each row exactly once.
92
+ */
93
+ const BY_ID = { id: 'ASC' };
94
+ export function createGeoModule(transport) {
95
+ function listZones(options) {
96
+ return vendureListPage(transport, options?.members === true ? GEO_ZONES_WITH_MEMBERS_QUERY : GEO_ZONES_QUERY, 'zones', (skip, take) => ({ options: { skip, take, sort: BY_ID } }), options);
97
+ }
98
+ return {
99
+ countries: {
100
+ list: (options) => vendureListPage(transport, GEO_COUNTRIES_QUERY, 'countries', (skip, take) => ({ options: { skip, take, sort: BY_ID } }), options),
101
+ },
102
+ zones: {
103
+ list: listZones,
104
+ get: (id, options) => fieldOf(transport, GEO_ZONE_QUERY, 'zone', { id }, options),
105
+ },
106
+ };
107
+ }