@voyant-travel/catalog-react 0.119.0 → 0.120.1

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.
@@ -1,5 +1,16 @@
1
1
  import type { CatalogVerticalPageId } from "../catalog-surfaces.js";
2
2
  import type { CatalogSearchHit, CatalogSearchParams } from "../index.js";
3
+ interface CatalogMarket {
4
+ id: string;
5
+ name: string;
6
+ code: string;
7
+ defaultLanguageTag: string;
8
+ }
9
+ export declare function resolveCatalogDefaultMarket(markets: ReadonlyArray<CatalogMarket>, selectedMarketId?: string): CatalogMarket | undefined;
10
+ export declare function resolveCatalogLocaleOptions(market: CatalogMarket | undefined, locales: ReadonlyArray<{
11
+ languageTag: string;
12
+ }>): string[];
13
+ export declare function resolveCatalogSelectedLocale(requestedLocale: string | undefined, localeOptions: ReadonlyArray<string>, market: CatalogMarket | undefined): string;
3
14
  export interface CatalogVerticalHostProps {
4
15
  vertical: CatalogVerticalPageId;
5
16
  search: CatalogSearchParams;
@@ -42,4 +53,5 @@ export interface CatalogVerticalHostProps {
42
53
  * destination keys declared in `./index.tsx` (packaged-admin RFC §4.7).
43
54
  */
44
55
  export declare function CatalogVerticalHost({ vertical, search, onSearchChange, embedded, lockedFacets, lockedRanges, onOpenDetail, }: CatalogVerticalHostProps): import("react/jsx-runtime").JSX.Element;
56
+ export {};
45
57
  //# sourceMappingURL=catalog-vertical-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-vertical-host.d.ts","sourceRoot":"","sources":["../../src/admin/catalog-vertical-host.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAgBxE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,cAAc,EAAE,CACd,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,mBAAmB,EAC3D,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,CAAA;IACT;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;IACrD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,cAAc,EACd,QAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,EAAE,wBAAwB,2CAuP1B"}
1
+ {"version":3,"file":"catalog-vertical-host.d.ts","sourceRoot":"","sources":["../../src/admin/catalog-vertical-host.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAGnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAgBxE,UAAU,aAAa;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAC,EACrC,gBAAgB,CAAC,EAAE,MAAM,GACxB,aAAa,GAAG,SAAS,CAM3B;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,OAAO,EAAE,aAAa,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAC9C,MAAM,EAAE,CASV;AAED,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EACpC,MAAM,EAAE,aAAa,GAAG,SAAS,GAChC,MAAM,CAKR;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,MAAM,EAAE,mBAAmB,CAAA;IAC3B,cAAc,EAAE,CACd,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,mBAAmB,EAC3D,OAAO,CAAC,EAAE,OAAO,KACd,IAAI,CAAA;IACT;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAA;IACrD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC7D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAC/C;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,cAAc,EACd,QAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,EAAE,wBAAwB,2CAgP1B"}
@@ -12,6 +12,29 @@ import { useCatalogUiMessagesOrDefault } from "../i18n/index.js";
12
12
  import { createCatalogEnrichmentFetchers, fetchCatalogSlots, useVoyantCatalogContext, } from "../index.js";
13
13
  const DEFAULT_MARKET_VALUE = "__default__";
14
14
  const DEFAULT_CATALOG_LOCALE = "en-GB";
15
+ export function resolveCatalogDefaultMarket(markets, selectedMarketId) {
16
+ return (markets.find((market) => market.id === selectedMarketId) ??
17
+ markets.find((market) => market.code === "default") ??
18
+ markets[0]);
19
+ }
20
+ export function resolveCatalogLocaleOptions(market, locales) {
21
+ const tags = new Set();
22
+ if (market) {
23
+ tags.add(market.defaultLanguageTag);
24
+ for (const locale of locales)
25
+ tags.add(locale.languageTag);
26
+ }
27
+ else {
28
+ tags.add(DEFAULT_CATALOG_LOCALE);
29
+ }
30
+ return Array.from(tags).sort((left, right) => left.localeCompare(right));
31
+ }
32
+ export function resolveCatalogSelectedLocale(requestedLocale, localeOptions, market) {
33
+ const fallbackLocale = market?.defaultLanguageTag ?? DEFAULT_CATALOG_LOCALE;
34
+ return requestedLocale && localeOptions.includes(requestedLocale)
35
+ ? requestedLocale
36
+ : fallbackLocale;
37
+ }
15
38
  /**
16
39
  * The indexed catalog browse grid bound to its data wiring (markets, locales,
17
40
  * suppliers, product tag mutations, slot availability) — the packaged admin
@@ -28,28 +51,19 @@ export function CatalogVerticalHost({ vertical, search, onSearchChange, embedded
28
51
  const catalogMessages = useCatalogUiMessagesOrDefault().catalogPage;
29
52
  const suppliersQuery = useSuppliers({ limit: 100 });
30
53
  const marketsQuery = useMarkets({ status: "active", limit: 100 });
54
+ const markets = marketsQuery.data?.data ?? [];
31
55
  const selectedMarketId = search.market;
32
- const selectedMarket = (marketsQuery.data?.data ?? []).find((market) => market.id === selectedMarketId);
56
+ const defaultMarket = resolveCatalogDefaultMarket(markets, selectedMarketId);
57
+ const selectedMarket = selectedMarketId ? defaultMarket : undefined;
58
+ const localeMarket = selectedMarket ?? defaultMarket;
33
59
  const localesQuery = useMarketLocales({
34
- marketId: selectedMarketId,
60
+ marketId: localeMarket?.id,
35
61
  active: true,
36
62
  limit: 100,
37
- enabled: Boolean(selectedMarketId),
63
+ enabled: Boolean(localeMarket?.id),
38
64
  });
39
- const localeOptions = useMemo(() => {
40
- const tags = new Set();
41
- if (selectedMarket) {
42
- tags.add(selectedMarket.defaultLanguageTag);
43
- for (const locale of localesQuery.data?.data ?? [])
44
- tags.add(locale.languageTag);
45
- }
46
- else {
47
- tags.add(DEFAULT_CATALOG_LOCALE);
48
- }
49
- return Array.from(tags).sort((left, right) => left.localeCompare(right));
50
- }, [localesQuery.data, selectedMarket]);
51
- const fallbackLocale = selectedMarket?.defaultLanguageTag ?? DEFAULT_CATALOG_LOCALE;
52
- const selectedLocale = search.locale && localeOptions.includes(search.locale) ? search.locale : fallbackLocale;
65
+ const localeOptions = useMemo(() => resolveCatalogLocaleOptions(localeMarket, localesQuery.data?.data ?? []), [localesQuery.data, localeMarket]);
66
+ const selectedLocale = resolveCatalogSelectedLocale(search.locale, localeOptions, localeMarket);
53
67
  const supplierMap = useMemo(() => {
54
68
  const m = new Map();
55
69
  for (const s of suppliersQuery.data?.data ?? [])
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyant-travel/catalog-react",
3
- "version": "0.119.0",
3
+ "version": "0.120.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -76,10 +76,10 @@
76
76
  "react-dom": "^19.0.0",
77
77
  "sonner": "^2.0.0",
78
78
  "zod": "^4.0.0",
79
- "@voyant-travel/admin": "^0.111.3",
80
- "@voyant-travel/commerce-react": "^0.3.0",
81
- "@voyant-travel/inventory-react": "^0.3.0",
82
- "@voyant-travel/distribution-react": "^0.111.0",
79
+ "@voyant-travel/admin": "^0.111.4",
80
+ "@voyant-travel/commerce-react": "^0.4.0",
81
+ "@voyant-travel/inventory-react": "^0.4.0",
82
+ "@voyant-travel/distribution-react": "^0.112.0",
83
83
  "@voyant-travel/ui": "^0.106.2"
84
84
  },
85
85
  "peerDependenciesMeta": {
@@ -122,14 +122,14 @@
122
122
  "typescript": "^6.0.2",
123
123
  "vitest": "^4.1.2",
124
124
  "zod": "^4.3.6",
125
- "@voyant-travel/admin": "^0.111.3",
125
+ "@voyant-travel/admin": "^0.111.4",
126
126
  "@voyant-travel/i18n": "^0.106.1",
127
- "@voyant-travel/commerce-react": "^0.3.0",
128
- "@voyant-travel/inventory-react": "^0.3.0",
127
+ "@voyant-travel/inventory-react": "^0.4.0",
129
128
  "@voyant-travel/react": "^0.104.1",
130
- "@voyant-travel/distribution-react": "^0.111.0",
129
+ "@voyant-travel/distribution-react": "^0.112.0",
131
130
  "@voyant-travel/ui": "^0.106.2",
132
- "@voyant-travel/voyant-typescript-config": "^0.1.0"
131
+ "@voyant-travel/voyant-typescript-config": "^0.1.0",
132
+ "@voyant-travel/commerce-react": "^0.4.0"
133
133
  },
134
134
  "files": [
135
135
  "dist",