@usereactify/search 5.57.1 → 5.58.0-beta.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 (30) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/package.json +1 -1
  3. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.d.ts +0 -2
  4. package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js.map +1 -1
  5. package/dist/src/components/Sensor/SensorInventoryAvailable.js +0 -4
  6. package/dist/src/components/Sensor/SensorInventoryAvailable.js.map +1 -1
  7. package/dist/src/components/Sensor/SensorPublished.js +0 -4
  8. package/dist/src/components/Sensor/SensorPublished.js.map +1 -1
  9. package/dist/src/components/Sensor/SensorSearchTerm.js +5 -26
  10. package/dist/src/components/Sensor/SensorSearchTerm.js.map +1 -1
  11. package/dist/src/components/Sensor/SensorSort.js +0 -4
  12. package/dist/src/components/Sensor/SensorSort.js.map +1 -1
  13. package/dist/src/hooks/index.d.ts +0 -1
  14. package/dist/src/hooks/index.js +0 -1
  15. package/dist/src/hooks/index.js.map +1 -1
  16. package/dist/src/hooks/useProductPrice.d.ts +2 -1
  17. package/dist/src/hooks/useProductPrice.js +50 -31
  18. package/dist/src/hooks/useProductPrice.js.map +1 -1
  19. package/dist/src/hooks/useReactifySearchContext.d.ts +0 -3
  20. package/dist/src/hooks/useReactifySearchContext.js.map +1 -1
  21. package/dist/src/types/elastic.d.ts +4 -0
  22. package/dist/src/types/elastic.js.map +1 -1
  23. package/dist/src/types/firestore.d.ts +2 -0
  24. package/dist/src/types/firestore.js.map +1 -1
  25. package/dist/src/utility/sortOption.js +3 -0
  26. package/dist/src/utility/sortOption.js.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/src/hooks/useFlags.d.ts +0 -21
  29. package/dist/src/hooks/useFlags.js +0 -65
  30. package/dist/src/hooks/useFlags.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [5.58.0-beta.0](https://bitbucket.org/usereactify/reactify-search-ui/compare/beta-v5.55.0-beta.3...beta-v5.58.0-beta.0) (2025-02-26)
6
+
7
+
8
+ ### Features
9
+
10
+ * improve querying for market specifics (curations and inventory) ([0527154](https://bitbucket.org/usereactify/reactify-search-ui/commit/05271549a03ba3d077673751baa96196a5e8df87))
11
+ * improve selection of curations based on market and fallbacks ([63b10ab](https://bitbucket.org/usereactify/reactify-search-ui/commit/63b10abe1793151ccf7d08642e736b8dc3ab44bd))
12
+ * log curation as it changes ([6e56aaa](https://bitbucket.org/usereactify/reactify-search-ui/commit/6e56aaa27e97a14aeb5460f6c628a0802a1d7ebd))
13
+ * remove flags ([425865a](https://bitbucket.org/usereactify/reactify-search-ui/commit/425865abe048b6f799c6330ce094f882cce2d0ff))
14
+ * track attribution within analytics ([bd9c6b5](https://bitbucket.org/usereactify/reactify-search-ui/commit/bd9c6b588c30e705848315e41ed731a4bc16ebdf))
15
+ * update sort options for price_min and price_max to use market specific prices ([1a6c0c3](https://bitbucket.org/usereactify/reactify-search-ui/commit/1a6c0c3b8e63200a71d92d7ba62271bba3ec9d32))
16
+ * update useProductPrice to return market specific prices ([1907949](https://bitbucket.org/usereactify/reactify-search-ui/commit/1907949f2136090afaaba23b344232b5f0d90e9d))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * apply global boosting rules to search curations without boosting rules ([8645453](https://bitbucket.org/usereactify/reactify-search-ui/commit/86454531bf134ca01933e03fa234df8d2379ee09))
22
+ * change customQuery from object to function that returns object ([4190604](https://bitbucket.org/usereactify/reactify-search-ui/commit/4190604e1ddc0ad4ffea79ead41580955563c9bc))
23
+ * clamp values of slider filters to whole numbers ([ddf745d](https://bitbucket.org/usereactify/reactify-search-ui/commit/ddf745d67a359a54dd91d012bbc166b87dae2bbe))
24
+ * clamp values of slider filters to whole numbers within react-slider helper ([84002be](https://bitbucket.org/usereactify/reactify-search-ui/commit/84002bed13e25b6f075385f308c0eac8265a18a5))
25
+ * correctly parse and allow for empty filter slider values ([8266c37](https://bitbucket.org/usereactify/reactify-search-ui/commit/8266c373359f6c751e000c74ea94f7749a0ef137))
26
+ * correctly parse filter slider value during SSR ([ea8600e](https://bitbucket.org/usereactify/reactify-search-ui/commit/ea8600e9f1f731053fccf09da10b2e0f7b99a8a0))
27
+ * ensure hidden products within curations are separated between markets ([e6d66a0](https://bitbucket.org/usereactify/reactify-search-ui/commit/e6d66a03bc97c44ec37d3fb6d1e87d6a13b62eb1))
28
+ * generate query for sliders using custom query for SSR loading and native query for realtime ([d5f36bb](https://bitbucket.org/usereactify/reactify-search-ui/commit/d5f36bb34901c4a0258555385fe9f95260f1c615))
29
+ * improve suggestions to include more results when searching ([ba04d45](https://bitbucket.org/usereactify/reactify-search-ui/commit/ba04d45a9fb649ac371bbcfc1003f83cf47aee6d))
30
+ * prevent call to window on load ([4628557](https://bitbucket.org/usereactify/reactify-search-ui/commit/462855708bddc4ff72003ed5a0b541ed3447e5f2))
31
+ * remove listener for url sort param ([a0514ae](https://bitbucket.org/usereactify/reactify-search-ui/commit/a0514aef591a861b4a7718eed1b5a0254fb8b4cf))
32
+ * set initial slider value to [0,0] when not in url params ([aeb7bd7](https://bitbucket.org/usereactify/reactify-search-ui/commit/aeb7bd77e75f0d9b4cae533a1f3702547cab5cb2))
33
+
5
34
  ### [5.57.1](https://bitbucket.org/usereactify/reactify-search-ui/compare/release-v5.57.0...release-v5.57.1) (2025-02-06)
6
35
 
7
36
  ## [5.57.0](https://bitbucket.org/usereactify/reactify-search-ui/compare/release-v5.56.8...release-v5.57.0) (2025-02-06)
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@usereactify/search",
3
3
  "description": "React UI library for Reactify Search",
4
- "version": "5.57.1",
4
+ "version": "5.58.0-beta.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
@@ -31,8 +31,6 @@ export type ReactifySearchProviderProps = {
31
31
  includeFields?: Array<string>;
32
32
  /** Advanced usage: Fields to exclude from the Elasticsearch response e.g. ["variant_skus", "*price*"] */
33
33
  excludeFields?: Array<string>;
34
- /** Advanced usage: Flags are used to enable or disable specific features within Reactify Search */
35
- flags?: Record<string, boolean>;
36
34
  /** Advanced usage: Server content for SSR */
37
35
  query?: Record<string, string>;
38
36
  preload?: {
@@ -1 +1 @@
1
- {"version":3,"file":"ReactifySearchProvider.js","sourceRoot":"","sources":["../../../../src/components/ReactifySearchProvider/ReactifySearchProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n// @ts-expect-error missing types\nimport * as GaGtag from \"ga-gtag\";\n\nimport pkg from \"../../../package.json\";\n\nimport { ReactifySearchContext, useConfig } from \"../../hooks\";\nimport { UtilityAuthenticatedReactiveBase } from \"../../components\";\nimport { debug } from \"../../utility\";\nimport { Config, ConfigCuration, ConfigRedirect, ReactivesearchResultProps } from \"../../types\";\nimport { getCuration } from \"../../utility/curation\";\n\nexport type ReactifySearchProviderProps = {\n /** Standard react children */\n children?: React.ReactNode | undefined;\n /** The search area the provider will be used in */\n mode: \"search\" | \"collection\" | \"instant-search\";\n /** Shopify store domain used to resolve the site configuration */\n shopifyPermanentDomain: string;\n /** Market ID used to change merchandising based on market e.g. 7494533198 */\n market?: string;\n /** Callback function for redirects, suitable for headless sites to avoid full page refresh */\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n /** Render method to display a component when the config is loading */\n renderBooting?: () => JSX.Element | null;\n /** Advanced usage: Override the default Reactify Search id (for telemetry) */\n clientId?: string;\n /** Advanced usage: Override the default Filters selection logic */\n filtersHandle?: string;\n /** Advanced usage: Array of additional component IDs managed outside of Reactify Search */\n additionalComponentIds?: Array<string>;\n /** Advanced usage: Override the default Elasticsearch index */\n index?: string;\n /** Advanced usage: Override the default Reactify Search config (for multi-instance stores) */\n configId?: string;\n /** Advanced usage: Override the default Elasticsearch credentials */\n credentials?: string;\n /** Advanced usage: Override the default ReactiveBase theme */\n theme?: Record<string, unknown>;\n /** Advanced usage: Fields to include in the Elasticsearch response e.g. [\"title\"] */\n includeFields?: Array<string>;\n /** Advanced usage: Fields to exclude from the Elasticsearch response e.g. [\"variant_skus\", \"*price*\"] */\n excludeFields?: Array<string>;\n /** Advanced usage: Flags are used to enable or disable specific features within Reactify Search */\n flags?: Record<string, boolean>;\n /** Advanced usage: Server content for SSR */\n query?: Record<string, string>;\n preload?: {\n config: Config;\n state: unknown;\n }\n} & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n /** Collection object that includes the handle, used to find curations */\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n);\n\nexport const ReactifySearchProvider: React.FC<ReactifySearchProviderProps> = (\n props\n) => {\n React.useEffect(() => {\n debug.log(\"ReactifySearchProvider\", \"props\", props);\n\n GaGtag.install(\"G-DV00Z0X5VP\", {\n cookie_prefix: \"_rs\",\n user_properties: {\n shop: props.shopifyPermanentDomain,\n version: pkg.version,\n },\n });\n }, [props]);\n\n return <ReactifySearchInner {...props} />;\n};\n\nconst ReactifySearchInner: React.FC<ReactifySearchProviderProps> = (props) => {\n const { config } = useConfig(props.shopifyPermanentDomain, props.preload?.config);\n\n const theme = props.theme ?? {\n typography: {\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n },\n };\n\n // search from url\n const searchTermFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"q\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // sort from url\n const searchSortFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return props.query?.sort;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"sort\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // index from url\n const indexFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"index\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // search term\n const [searchTerm, setSearchTerm] = React.useState<string>(\n searchTermFromURL ?? \"\"\n );\n // search term redirect\n const searchRedirect = React.useMemo<ConfigRedirect | undefined>(() => {\n return config?.redirects.find((redirect) => redirect.query.trim().toLowerCase() === searchTerm.trim().toLowerCase());\n }, [config?.redirects, searchTerm]);\n // show instant-search\n const [showInstantSearchResults, setShowInstantSearchResults] =\n React.useState<boolean>(false);\n // sort option\n const [sortOption, setSortOption] = React.useState<string>(\n searchSortFromURL ?? \"\"\n );\n // results\n const [results, setResults] = React.useState<\n ReactivesearchResultProps[\"data\"]\n >([]);\n // curation\n const curation = React.useMemo<ConfigCuration | undefined>(() => {\n if (!config) {\n return undefined;\n }\n\n return getCuration({\n provider: props,\n config: config,\n searchTerm: searchTerm,\n });\n }, [props, config, searchTerm]);\n // result stats\n const [resultStats, setResultStats] =\n React.useState<ReactivesearchResultProps[\"resultStats\"]>();\n\n React.useEffect(() => {\n if (props.mode === \"instant-search\") {\n return;\n }\n\n if (searchTermFromURL && searchTerm !== searchTermFromURL) {\n setSearchTerm(searchTermFromURL);\n }\n }, [searchTermFromURL]);\n\n const contextValue = React.useMemo(() => {\n if (!config) {\n return;\n }\n\n return {\n config: config,\n options: {\n ...props,\n clientId: props.clientId ?? \"theme\",\n index: props.index ?? indexFromURL ?? config.index,\n filtersHandle: props.filtersHandle,\n credentials: props.credentials,\n theme: theme,\n },\n search: {\n searchTerm: searchTerm,\n setSearchTerm: setSearchTerm,\n showInstantSearchResults: showInstantSearchResults,\n setShowInstantSearchResults: setShowInstantSearchResults,\n searchRedirect: searchRedirect,\n },\n sortby: {\n sortOption: sortOption,\n setSortOption: setSortOption,\n },\n results: {\n results: results,\n setResults: setResults,\n resultStats: resultStats,\n setResultStats: setResultStats,\n },\n curation: curation,\n };\n }, [\n config,\n props,\n searchTerm,\n showInstantSearchResults,\n searchRedirect,\n sortOption,\n results,\n resultStats,\n curation,\n ]);\n\n React.useEffect(() => {\n debug.log(\"curation\", \"content\", curation);\n }, [curation?.id]);\n\n debug.hook(\"ReactifySearchProvider\", \"context\", contextValue);\n\n if (!contextValue) {\n if (props.renderBooting) {\n return props.renderBooting();\n }\n return null;\n }\n\n return (\n <ReactifySearchContext.Provider value={contextValue}>\n <UtilityAuthenticatedReactiveBase>\n {props.children}\n </UtilityAuthenticatedReactiveBase>\n </ReactifySearchContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"ReactifySearchProvider.js","sourceRoot":"","sources":["../../../../src/components/ReactifySearchProvider/ReactifySearchProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\n// @ts-expect-error missing types\nimport * as GaGtag from \"ga-gtag\";\n\nimport pkg from \"../../../package.json\";\n\nimport { ReactifySearchContext, useConfig } from \"../../hooks\";\nimport { UtilityAuthenticatedReactiveBase } from \"../../components\";\nimport { debug } from \"../../utility\";\nimport { Config, ConfigCuration, ConfigRedirect, ReactivesearchResultProps } from \"../../types\";\nimport { getCuration } from \"../../utility/curation\";\n\nexport type ReactifySearchProviderProps = {\n /** Standard react children */\n children?: React.ReactNode | undefined;\n /** The search area the provider will be used in */\n mode: \"search\" | \"collection\" | \"instant-search\";\n /** Shopify store domain used to resolve the site configuration */\n shopifyPermanentDomain: string;\n /** Market ID used to change merchandising based on market e.g. 7494533198 */\n market?: string;\n /** Callback function for redirects, suitable for headless sites to avoid full page refresh */\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n /** Render method to display a component when the config is loading */\n renderBooting?: () => JSX.Element | null;\n /** Advanced usage: Override the default Reactify Search id (for telemetry) */\n clientId?: string;\n /** Advanced usage: Override the default Filters selection logic */\n filtersHandle?: string;\n /** Advanced usage: Array of additional component IDs managed outside of Reactify Search */\n additionalComponentIds?: Array<string>;\n /** Advanced usage: Override the default Elasticsearch index */\n index?: string;\n /** Advanced usage: Override the default Reactify Search config (for multi-instance stores) */\n configId?: string;\n /** Advanced usage: Override the default Elasticsearch credentials */\n credentials?: string;\n /** Advanced usage: Override the default ReactiveBase theme */\n theme?: Record<string, unknown>;\n /** Advanced usage: Fields to include in the Elasticsearch response e.g. [\"title\"] */\n includeFields?: Array<string>;\n /** Advanced usage: Fields to exclude from the Elasticsearch response e.g. [\"variant_skus\", \"*price*\"] */\n excludeFields?: Array<string>;\n /** Advanced usage: Server content for SSR */\n query?: Record<string, string>;\n preload?: {\n config: Config;\n state: unknown;\n }\n} & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n /** Collection object that includes the handle, used to find curations */\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n);\n\nexport const ReactifySearchProvider: React.FC<ReactifySearchProviderProps> = (\n props\n) => {\n React.useEffect(() => {\n debug.log(\"ReactifySearchProvider\", \"props\", props);\n\n GaGtag.install(\"G-DV00Z0X5VP\", {\n cookie_prefix: \"_rs\",\n user_properties: {\n shop: props.shopifyPermanentDomain,\n version: pkg.version,\n },\n });\n }, [props]);\n\n return <ReactifySearchInner {...props} />;\n};\n\nconst ReactifySearchInner: React.FC<ReactifySearchProviderProps> = (props) => {\n const { config } = useConfig(props.shopifyPermanentDomain, props.preload?.config);\n\n const theme = props.theme ?? {\n typography: {\n fontFamily: \"inherit\",\n fontSize: \"inherit\",\n },\n };\n\n // search from url\n const searchTermFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"q\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // sort from url\n const searchSortFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return props.query?.sort;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"sort\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // index from url\n const indexFromURL = React.useMemo(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(\"index\") ?? undefined;\n }, [typeof window !== \"undefined\" && window.location.search]);\n\n // search term\n const [searchTerm, setSearchTerm] = React.useState<string>(\n searchTermFromURL ?? \"\"\n );\n // search term redirect\n const searchRedirect = React.useMemo<ConfigRedirect | undefined>(() => {\n return config?.redirects.find((redirect) => redirect.query.trim().toLowerCase() === searchTerm.trim().toLowerCase());\n }, [config?.redirects, searchTerm]);\n // show instant-search\n const [showInstantSearchResults, setShowInstantSearchResults] =\n React.useState<boolean>(false);\n // sort option\n const [sortOption, setSortOption] = React.useState<string>(\n searchSortFromURL ?? \"\"\n );\n // results\n const [results, setResults] = React.useState<\n ReactivesearchResultProps[\"data\"]\n >([]);\n // curation\n const curation = React.useMemo<ConfigCuration | undefined>(() => {\n if (!config) {\n return undefined;\n }\n\n return getCuration({\n provider: props,\n config: config,\n searchTerm: searchTerm,\n });\n }, [props, config, searchTerm]);\n // result stats\n const [resultStats, setResultStats] =\n React.useState<ReactivesearchResultProps[\"resultStats\"]>();\n\n React.useEffect(() => {\n if (props.mode === \"instant-search\") {\n return;\n }\n\n if (searchTermFromURL && searchTerm !== searchTermFromURL) {\n setSearchTerm(searchTermFromURL);\n }\n }, [searchTermFromURL]);\n\n const contextValue = React.useMemo(() => {\n if (!config) {\n return;\n }\n\n return {\n config: config,\n options: {\n ...props,\n clientId: props.clientId ?? \"theme\",\n index: props.index ?? indexFromURL ?? config.index,\n filtersHandle: props.filtersHandle,\n credentials: props.credentials,\n theme: theme,\n },\n search: {\n searchTerm: searchTerm,\n setSearchTerm: setSearchTerm,\n showInstantSearchResults: showInstantSearchResults,\n setShowInstantSearchResults: setShowInstantSearchResults,\n searchRedirect: searchRedirect,\n },\n sortby: {\n sortOption: sortOption,\n setSortOption: setSortOption,\n },\n results: {\n results: results,\n setResults: setResults,\n resultStats: resultStats,\n setResultStats: setResultStats,\n },\n curation: curation,\n };\n }, [\n config,\n props,\n searchTerm,\n showInstantSearchResults,\n searchRedirect,\n sortOption,\n results,\n resultStats,\n curation,\n ]);\n\n React.useEffect(() => {\n debug.log(\"curation\", \"content\", curation);\n }, [curation?.id]);\n\n debug.hook(\"ReactifySearchProvider\", \"context\", contextValue);\n\n if (!contextValue) {\n if (props.renderBooting) {\n return props.renderBooting();\n }\n return null;\n }\n\n return (\n <ReactifySearchContext.Provider value={contextValue}>\n <UtilityAuthenticatedReactiveBase>\n {props.children}\n </UtilityAuthenticatedReactiveBase>\n </ReactifySearchContext.Provider>\n );\n};\n"]}
@@ -9,7 +9,6 @@ const ReactiveComponent_1 = __importDefault(require("@usereactify/search-interna
9
9
  const hooks_1 = require("../../hooks");
10
10
  const props_1 = require("../../utility/props");
11
11
  const SensorInventoryAvailable = () => {
12
- const flagsHook = (0, hooks_1.useFlags)();
13
12
  const reactifySearchContext = (0, hooks_1.useReactifySearchContext)();
14
13
  const reactiveProps = (0, props_1.getPropsSensorInventoryAvailable)({
15
14
  config: reactifySearchContext.config,
@@ -18,9 +17,6 @@ const SensorInventoryAvailable = () => {
18
17
  if (!reactiveProps) {
19
18
  return null;
20
19
  }
21
- if (!flagsHook.flags["reactify-search:flag_sensor_inventoryavailable"]) {
22
- return null;
23
- }
24
20
  return (react_1.default.createElement(ReactiveComponent_1.default, Object.assign({}, reactiveProps)));
25
21
  };
26
22
  exports.SensorInventoryAvailable = SensorInventoryAvailable;
@@ -1 +1 @@
1
- {"version":3,"file":"SensorInventoryAvailable.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorInventoryAvailable.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAAiE;AACjE,+CAAuE;AAEhE,MAAM,wBAAwB,GAAa,GAAG,EAAE;IACrD,MAAM,SAAS,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAE7B,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,aAAa,GAAG,IAAA,wCAAgC,EAAC;QACrD,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;KACxC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,gDAAgD,CAAC,EAAE,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,wBAAwB,4BAsBnC","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport { useFlags, useReactifySearchContext } from \"../../hooks\";\nimport { getPropsSensorInventoryAvailable } from \"../../utility/props\";\n\nexport const SensorInventoryAvailable: React.FC = () => {\n const flagsHook = useFlags();\n \n const reactifySearchContext = useReactifySearchContext();\n const reactiveProps = getPropsSensorInventoryAvailable({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n });\n\n if (!reactiveProps) {\n return null;\n }\n\n if (!flagsHook.flags[\"reactify-search:flag_sensor_inventoryavailable\"]) {\n return null;\n }\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"SensorInventoryAvailable.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorInventoryAvailable.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAAuD;AACvD,+CAAuE;AAEhE,MAAM,wBAAwB,GAAa,GAAG,EAAE;IACrD,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,aAAa,GAAG,IAAA,wCAAgC,EAAC;QACrD,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;KACxC,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAhBW,QAAA,wBAAwB,4BAgBnC","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport { useReactifySearchContext } from \"../../hooks\";\nimport { getPropsSensorInventoryAvailable } from \"../../utility/props\";\n\nexport const SensorInventoryAvailable: React.FC = () => {\n const reactifySearchContext = useReactifySearchContext();\n const reactiveProps = getPropsSensorInventoryAvailable({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n });\n\n if (!reactiveProps) {\n return null;\n }\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
@@ -9,15 +9,11 @@ const ReactiveComponent_1 = __importDefault(require("@usereactify/search-interna
9
9
  const hooks_1 = require("../../hooks");
10
10
  const props_1 = require("../../utility/props");
11
11
  const SensorPublished = () => {
12
- const flagsHook = (0, hooks_1.useFlags)();
13
12
  const reactifySearchContext = (0, hooks_1.useReactifySearchContext)();
14
13
  const reactiveProps = (0, props_1.getPropsSensorPublished)({
15
14
  config: reactifySearchContext.config,
16
15
  provider: reactifySearchContext.options,
17
16
  });
18
- if (!flagsHook.flags["reactify-search:flag_sensor_published"]) {
19
- return null;
20
- }
21
17
  return (react_1.default.createElement(ReactiveComponent_1.default, Object.assign({}, reactiveProps)));
22
18
  };
23
19
  exports.SensorPublished = SensorPublished;
@@ -1 +1 @@
1
- {"version":3,"file":"SensorPublished.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorPublished.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAAiE;AACjE,+CAA8D;AAEvD,MAAM,eAAe,GAAa,GAAG,EAAE;IAC5C,MAAM,SAAS,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAC7B,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,aAAa,GAAG,IAAA,+BAAuB,EAAC;QAC5C,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;KACxC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,uCAAuC,CAAC,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,eAAe,mBAiB1B","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport { useFlags, useReactifySearchContext } from \"../../hooks\";\nimport { getPropsSensorPublished } from \"../../utility/props\";\n\nexport const SensorPublished: React.FC = () => {\n const flagsHook = useFlags();\n const reactifySearchContext = useReactifySearchContext();\n const reactiveProps = getPropsSensorPublished({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n });\n\n if (!flagsHook.flags[\"reactify-search:flag_sensor_published\"]) {\n return null;\n }\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"SensorPublished.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorPublished.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAAuD;AACvD,+CAA8D;AAEvD,MAAM,eAAe,GAAa,GAAG,EAAE;IAC5C,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,aAAa,GAAG,IAAA,+BAAuB,EAAC;QAC5C,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;KACxC,CAAC,CAAC;IAEH,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport { useReactifySearchContext } from \"../../hooks\";\nimport { getPropsSensorPublished } from \"../../utility/props\";\n\nexport const SensorPublished: React.FC = () => {\n const reactifySearchContext = useReactifySearchContext();\n const reactiveProps = getPropsSensorPublished({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n });\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
@@ -9,7 +9,6 @@ const ahooks_1 = require("ahooks");
9
9
  const DataSearch_1 = __importDefault(require("@usereactify/search-internals/lib/components/search/DataSearch"));
10
10
  const hooks_1 = require("../../hooks");
11
11
  const SensorSearchTerm = () => {
12
- const flagsHook = (0, hooks_1.useFlags)();
13
12
  const { options, config } = (0, hooks_1.useReactifySearchContext)();
14
13
  const { track } = (0, hooks_1.useAnalytics)();
15
14
  const { searchTerm } = (0, hooks_1.useSearch)();
@@ -46,15 +45,11 @@ const SensorSearchTerm = () => {
46
45
  if (searchFields.length === 0) {
47
46
  return null;
48
47
  }
49
- if (!flagsHook.flags["reactify-search:flag_sensor_searchterm"]) {
50
- return null;
51
- }
52
48
  return (react_1.default.createElement(react_1.default.Fragment, null,
53
49
  react_1.default.createElement(DataSearch_1.default, { fuzziness: 1, queryFormat: "and", autosuggest: false, value: searchTermDebounced, componentId: "SensorSearchTerm", style: { display: "none" }, dataField: searchFields.map((field) => field.field), fieldWeights: searchFields.map((field) => field.importance), customQuery: (value, props) => {
54
50
  const valueNormal = value.toLowerCase().trim();
55
51
  const conditions = [];
56
- if (flagsHook.flags["reactify-search:flag_sensor_searchterm_value"] &&
57
- valueNormal) {
52
+ if (valueNormal) {
58
53
  if (options.market) {
59
54
  conditions.push({
60
55
  nested: {
@@ -92,12 +87,8 @@ const SensorSearchTerm = () => {
92
87
  }
93
88
  }
94
89
  const fieldsPhrase = props.dataField
95
- .filter((field) => !flagsHook.flags["reactify-search:flag_sensor_searchterm_phrase_synonyms"]
96
- ? !field.includes("synonym")
97
- : true)
98
90
  .map((field, index) => `${field}^${props.fieldWeights[index]}`);
99
- if (flagsHook.flags["reactify-search:flag_sensor_searchterm_phrase"] &&
100
- fieldsPhrase.length > 0) {
91
+ if (fieldsPhrase.length > 0) {
101
92
  conditions.push({
102
93
  multi_match: {
103
94
  query: valueNormal,
@@ -108,13 +99,9 @@ const SensorSearchTerm = () => {
108
99
  });
109
100
  }
110
101
  const fieldsPhrasePrefix = props.dataField
111
- .filter((field) => !flagsHook.flags["reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms"]
112
- ? !field.includes("synonym")
113
- : true)
114
102
  .map((field, index) => `${field}^${props.fieldWeights[index]}`)
115
103
  .filter((field) => !field.includes("."));
116
- if (flagsHook.flags["reactify-search:flag_sensor_searchterm_phrase_prefix"] &&
117
- fieldsPhrasePrefix.length > 0) {
104
+ if (fieldsPhrasePrefix.length > 0) {
118
105
  conditions.push({
119
106
  multi_match: {
120
107
  query: valueNormal,
@@ -125,12 +112,8 @@ const SensorSearchTerm = () => {
125
112
  });
126
113
  }
127
114
  const fieldsCrossFields = props.dataField
128
- .filter((field) => !flagsHook.flags["reactify-search:flag_sensor_searchterm_cross_fields_synonyms"]
129
- ? !field.includes("synonym")
130
- : true)
131
115
  .map((field, index) => `${field}^${props.fieldWeights[index]}`);
132
- if (flagsHook.flags["reactify-search:flag_sensor_searchterm_cross_fields"] &&
133
- fieldsCrossFields.length > 0) {
116
+ if (fieldsCrossFields.length > 0) {
134
117
  conditions.push({
135
118
  multi_match: {
136
119
  query: valueNormal,
@@ -141,9 +124,6 @@ const SensorSearchTerm = () => {
141
124
  });
142
125
  }
143
126
  const fieldsSpanFirst = props.dataField
144
- .filter((field) => !flagsHook.flags["reactify-search:flag_sensor_searchterm_span_first_synonyms"]
145
- ? !field.includes("synonym")
146
- : true)
147
127
  .filter((field) => {
148
128
  if (field.endsWith(".keyword")) {
149
129
  return false;
@@ -158,8 +138,7 @@ const SensorSearchTerm = () => {
158
138
  end: 1,
159
139
  },
160
140
  }));
161
- if (flagsHook.flags["reactify-search:flag_sensor_searchterm_span_first"] &&
162
- fieldsSpanFirst.length > 0) {
141
+ if (fieldsSpanFirst.length > 0) {
163
142
  conditions.push(...fieldsSpanFirst);
164
143
  }
165
144
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SensorSearchTerm.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSearchTerm.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { useDebounceFn } from \"ahooks\";\nimport DataSearch from \"@usereactify/search-internals/lib/components/search/DataSearch\";\n\nimport {\n useAnalytics,\n useFlags,\n useReactifySearchContext,\n useSearch,\n} from \"../../hooks\";\n\nexport const SensorSearchTerm: React.FC = () => {\n const flagsHook = useFlags();\n const { options, config } = useReactifySearchContext();\n const { track } = useAnalytics();\n const { searchTerm } = useSearch();\n\n const [searchTermDebounced, setSearchTermDebounced] =\n React.useState<string>(searchTerm);\n\n // ignore search fields only set for instant search\n const searchFields = React.useMemo(() => {\n if (options.mode === \"search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"search_page\"].includes(field.searchType)\n );\n }\n\n if (options.mode === \"instant-search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"instant_search\"].includes(field.searchType)\n );\n }\n\n return [];\n }, [config.fields]);\n\n const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } =\n useDebounceFn(\n (value: string) => {\n setSearchTermDebounced(value);\n\n let trimmedSearchTerm = searchTerm.trim();\n\n if (\n !trimmedSearchTerm ||\n (trimmedSearchTerm && trimmedSearchTerm.length < 3)\n ) {\n return;\n }\n\n track({\n eventName: \"search\",\n payload: {\n searchTerm: trimmedSearchTerm,\n },\n });\n },\n {\n wait: 300,\n }\n );\n\n React.useEffect(() => {\n runDebouncedTriggerQuery(searchTerm);\n }, [searchTerm]);\n\n if (searchFields.length === 0) {\n return null;\n }\n\n if (!flagsHook.flags[\"reactify-search:flag_sensor_searchterm\"]) {\n return null;\n }\n\n return (\n <>\n <DataSearch\n fuzziness={1}\n queryFormat=\"and\"\n autosuggest={false}\n value={searchTermDebounced}\n componentId=\"SensorSearchTerm\"\n style={{ display: \"none\" }}\n dataField={searchFields.map((field) => field.field)}\n fieldWeights={searchFields.map((field) => field.importance)}\n customQuery={(value, props) => {\n const valueNormal = value.toLowerCase().trim();\n const conditions: Array<unknown> = [];\n\n if (\n flagsHook.flags[\"reactify-search:flag_sensor_searchterm_value\"] &&\n valueNormal\n ) {\n if (options.market) {\n conditions.push({\n nested: {\n path: \"curations\",\n query: {\n bool: {\n must: [\n {\n term: {\n \"curations.searchTerm.keyword\": valueNormal,\n },\n },\n {\n term: {\n \"curations.markets.keyword\": options.market,\n },\n },\n ],\n },\n },\n },\n });\n } else {\n conditions.push({\n nested: {\n path: \"curations\",\n query: {\n term: {\n \"curations.searchTerm.keyword\": valueNormal,\n },\n },\n },\n });\n }\n }\n\n const fieldsPhrase = props.dataField\n .filter((field: string) =>\n !flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_phrase_synonyms\"\n ]\n ? !field.includes(\"synonym\")\n : true\n )\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n );\n if (\n flagsHook.flags[\"reactify-search:flag_sensor_searchterm_phrase\"] &&\n fieldsPhrase.length > 0\n ) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsPhrase,\n type: \"phrase\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsPhrasePrefix = props.dataField\n .filter((field: string) =>\n !flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms\"\n ]\n ? !field.includes(\"synonym\")\n : true\n )\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n )\n .filter((field: string) => !field.includes(\".\"));\n\n if (\n flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_phrase_prefix\"\n ] &&\n fieldsPhrasePrefix.length > 0\n ) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsPhrasePrefix,\n type: \"phrase_prefix\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsCrossFields = props.dataField\n .filter((field: string) =>\n !flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_cross_fields_synonyms\"\n ]\n ? !field.includes(\"synonym\")\n : true\n )\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n );\n if (\n flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_cross_fields\"\n ] &&\n fieldsCrossFields.length > 0\n ) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsCrossFields,\n type: \"cross_fields\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsSpanFirst: any = props.dataField\n .filter((field: string) =>\n !flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_span_first_synonyms\"\n ]\n ? !field.includes(\"synonym\")\n : true\n )\n .filter((field: string) => {\n if (field.endsWith(\".keyword\")) {\n return false;\n }\n\n return true;\n })\n .map((field: string) => ({\n span_first: {\n match: {\n span_term: { [`${field}`]: valueNormal },\n },\n end: 1,\n },\n }));\n if (\n flagsHook.flags[\n \"reactify-search:flag_sensor_searchterm_span_first\"\n ] &&\n fieldsSpanFirst.length > 0\n ) {\n conditions.push(...fieldsSpanFirst);\n }\n\n return {\n query: {\n bool: {\n should: conditions,\n minimum_should_match: \"1\",\n },\n },\n };\n }}\n />\n </>\n );\n};\n"]}
1
+ {"version":3,"file":"SensorSearchTerm.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSearchTerm.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport { useDebounceFn } from \"ahooks\";\nimport DataSearch from \"@usereactify/search-internals/lib/components/search/DataSearch\";\n\nimport { useAnalytics, useReactifySearchContext, useSearch } from \"../../hooks\";\n\nexport const SensorSearchTerm: React.FC = () => {\n const { options, config } = useReactifySearchContext();\n const { track } = useAnalytics();\n const { searchTerm } = useSearch();\n\n const [searchTermDebounced, setSearchTermDebounced] =\n React.useState<string>(searchTerm);\n\n // ignore search fields only set for instant search\n const searchFields = React.useMemo(() => {\n if (options.mode === \"search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"search_page\"].includes(field.searchType)\n );\n }\n\n if (options.mode === \"instant-search\") {\n return config.fields.filter((field) =>\n [\"always_search\", \"instant_search\"].includes(field.searchType)\n );\n }\n\n return [];\n }, [config.fields]);\n\n const { run: runDebouncedTriggerQuery, cancel: cancelDebouncedTriggerQuery } =\n useDebounceFn(\n (value: string) => {\n setSearchTermDebounced(value);\n\n let trimmedSearchTerm = searchTerm.trim();\n\n if (\n !trimmedSearchTerm ||\n (trimmedSearchTerm && trimmedSearchTerm.length < 3)\n ) {\n return;\n }\n\n track({\n eventName: \"search\",\n payload: {\n searchTerm: trimmedSearchTerm,\n },\n });\n },\n {\n wait: 300,\n }\n );\n\n React.useEffect(() => {\n runDebouncedTriggerQuery(searchTerm);\n }, [searchTerm]);\n\n if (searchFields.length === 0) {\n return null;\n }\n\n return (\n <>\n <DataSearch\n fuzziness={1}\n queryFormat=\"and\"\n autosuggest={false}\n value={searchTermDebounced}\n componentId=\"SensorSearchTerm\"\n style={{ display: \"none\" }}\n dataField={searchFields.map((field) => field.field)}\n fieldWeights={searchFields.map((field) => field.importance)}\n customQuery={(value, props) => {\n const valueNormal = value.toLowerCase().trim();\n const conditions: Array<unknown> = [];\n\n if (valueNormal) {\n if (options.market) {\n conditions.push({\n nested: {\n path: \"curations\",\n query: {\n bool: {\n must: [\n {\n term: {\n \"curations.searchTerm.keyword\": valueNormal,\n },\n },\n {\n term: {\n \"curations.markets.keyword\": options.market,\n },\n },\n ],\n },\n },\n },\n });\n } else {\n conditions.push({\n nested: {\n path: \"curations\",\n query: {\n term: {\n \"curations.searchTerm.keyword\": valueNormal,\n },\n },\n },\n });\n }\n }\n\n const fieldsPhrase = props.dataField\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n );\n if (fieldsPhrase.length > 0) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsPhrase,\n type: \"phrase\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsPhrasePrefix = props.dataField\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n )\n .filter((field: string) => !field.includes(\".\"));\n\n if (fieldsPhrasePrefix.length > 0) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsPhrasePrefix,\n type: \"phrase_prefix\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsCrossFields = props.dataField\n .map(\n (field: string, index: number) =>\n `${field}^${props.fieldWeights[index]}`\n );\n if (fieldsCrossFields.length > 0) {\n conditions.push({\n multi_match: {\n query: valueNormal,\n fields: fieldsCrossFields,\n type: \"cross_fields\",\n operator: \"and\",\n },\n });\n }\n\n const fieldsSpanFirst: any = props.dataField\n .filter((field: string) => {\n if (field.endsWith(\".keyword\")) {\n return false;\n }\n\n return true;\n })\n .map((field: string) => ({\n span_first: {\n match: {\n span_term: { [`${field}`]: valueNormal },\n },\n end: 1,\n },\n }));\n if (fieldsSpanFirst.length > 0) {\n conditions.push(...fieldsSpanFirst);\n }\n\n return {\n query: {\n bool: {\n should: conditions,\n minimum_should_match: \"1\",\n },\n },\n };\n }}\n />\n </>\n );\n};\n"]}
@@ -9,7 +9,6 @@ const ReactiveComponent_1 = __importDefault(require("@usereactify/search-interna
9
9
  const hooks_1 = require("../../hooks");
10
10
  const props_1 = require("../../utility/props");
11
11
  const SensorSort = () => {
12
- const flagsHook = (0, hooks_1.useFlags)();
13
12
  const reactifySearchContext = (0, hooks_1.useReactifySearchContext)();
14
13
  const { sortOption } = (0, hooks_1.useSortBy)();
15
14
  const { searchTerm } = (0, hooks_1.useSearch)();
@@ -19,9 +18,6 @@ const SensorSort = () => {
19
18
  sortOption: sortOption === null || sortOption === void 0 ? void 0 : sortOption.handle,
20
19
  searchTerm: searchTerm,
21
20
  });
22
- if (!flagsHook.flags["reactify-search:flag_sensor_sort"]) {
23
- return null;
24
- }
25
21
  return (react_1.default.createElement(ReactiveComponent_1.default, Object.assign({}, reactiveProps)));
26
22
  };
27
23
  exports.SensorSort = SensorSort;
@@ -1 +1 @@
1
- {"version":3,"file":"SensorSort.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSort.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAKqB;AACrB,+CAAyD;AAElD,MAAM,UAAU,GAAa,GAAG,EAAE;IACvC,MAAM,SAAS,GAAG,IAAA,gBAAQ,GAAE,CAAC;IAC7B,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IACnC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,IAAA,0BAAkB,EAAC;QACvC,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;QACvC,UAAU,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM;QAC9B,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,UAAU,cAsBrB","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport {\n useReactifySearchContext,\n useSortBy,\n useFlags,\n useSearch,\n} from \"../../hooks\";\nimport { getPropsSensorSort } from \"../../utility/props\";\n\nexport const SensorSort: React.FC = () => {\n const flagsHook = useFlags();\n const reactifySearchContext = useReactifySearchContext();\n const { sortOption } = useSortBy();\n const { searchTerm } = useSearch();\n\n const reactiveProps = getPropsSensorSort({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n sortOption: sortOption?.handle,\n searchTerm: searchTerm,\n });\n\n if (!flagsHook.flags[\"reactify-search:flag_sensor_sort\"]) {\n return null;\n }\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
1
+ {"version":3,"file":"SensorSort.js","sourceRoot":"","sources":["../../../../src/components/Sensor/SensorSort.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,6HAAqG;AAErG,uCAA6E;AAC7E,+CAAyD;AAElD,MAAM,UAAU,GAAa,GAAG,EAAE;IACvC,MAAM,qBAAqB,GAAG,IAAA,gCAAwB,GAAE,CAAC;IACzD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IACnC,MAAM,EAAE,UAAU,EAAE,GAAG,IAAA,iBAAS,GAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,IAAA,0BAAkB,EAAC;QACvC,MAAM,EAAE,qBAAqB,CAAC,MAAM;QACpC,QAAQ,EAAE,qBAAqB,CAAC,OAAO;QACvC,UAAU,EAAE,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM;QAC9B,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;IAEH,OAAO,CACL,8BAAC,2BAAiB,oBACZ,aAAa,EACjB,CACH,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,UAAU,cAiBrB","sourcesContent":["import React from \"react\";\nimport ReactiveComponent from \"@usereactify/search-internals/lib/components/basic/ReactiveComponent\";\n\nimport { useReactifySearchContext, useSortBy, useSearch } from \"../../hooks\";\nimport { getPropsSensorSort } from \"../../utility/props\";\n\nexport const SensorSort: React.FC = () => {\n const reactifySearchContext = useReactifySearchContext();\n const { sortOption } = useSortBy();\n const { searchTerm } = useSearch();\n\n const reactiveProps = getPropsSensorSort({\n config: reactifySearchContext.config,\n provider: reactifySearchContext.options,\n sortOption: sortOption?.handle,\n searchTerm: searchTerm,\n });\n\n return (\n <ReactiveComponent\n {...reactiveProps}\n />\n );\n};\n"]}
@@ -15,5 +15,4 @@ export * from "./useFilterCollapsedState";
15
15
  export * from "./useConfig";
16
16
  export * from "./useReactifySearchContext";
17
17
  export * from "./useResults";
18
- export * from "./useFlags";
19
18
  export * from "./useIndices";
@@ -31,6 +31,5 @@ __exportStar(require("./useFilterCollapsedState"), exports);
31
31
  __exportStar(require("./useConfig"), exports);
32
32
  __exportStar(require("./useReactifySearchContext"), exports);
33
33
  __exportStar(require("./useResults"), exports);
34
- __exportStar(require("./useFlags"), exports);
35
34
  __exportStar(require("./useIndices"), exports);
36
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AAEjC,gDAA8B;AAC9B,8CAA4B;AAC5B,kDAAgC;AAChC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,iDAA+B;AAC/B,+CAA6B;AAC7B,oDAAkC;AAClC,uDAAqC;AACrC,wDAAsC;AACtC,yDAAuC;AACvC,4DAA0C;AAC1C,8CAA4B;AAC5B,6DAA2C;AAC3C,+CAA6B;AAC7B,6CAA2B;AAC3B,+CAA6B","sourcesContent":["export * from \"./reactivesearch\";\n\nexport * from \"./useDebugger\";\nexport * from \"./useSortBy\";\nexport * from \"./usePagination\";\nexport * from \"./usePaginationLoadable\";\nexport * from \"./useSearch\";\nexport * from \"./useCuration\";\nexport * from \"./useAnalytics\";\nexport * from \"./useFilters\";\nexport * from \"./useProductPrice\";\nexport * from \"./useFilterListProps\";\nexport * from \"./useFilterRangeProps\";\nexport * from \"./useFilterSliderProps\";\nexport * from \"./useFilterCollapsedState\";\nexport * from \"./useConfig\";\nexport * from \"./useReactifySearchContext\";\nexport * from \"./useResults\";\nexport * from \"./useFlags\";\nexport * from \"./useIndices\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AAEjC,gDAA8B;AAC9B,8CAA4B;AAC5B,kDAAgC;AAChC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,iDAA+B;AAC/B,+CAA6B;AAC7B,oDAAkC;AAClC,uDAAqC;AACrC,wDAAsC;AACtC,yDAAuC;AACvC,4DAA0C;AAC1C,8CAA4B;AAC5B,6DAA2C;AAC3C,+CAA6B;AAC7B,+CAA6B","sourcesContent":["export * from \"./reactivesearch\";\n\nexport * from \"./useDebugger\";\nexport * from \"./useSortBy\";\nexport * from \"./usePagination\";\nexport * from \"./usePaginationLoadable\";\nexport * from \"./useSearch\";\nexport * from \"./useCuration\";\nexport * from \"./useAnalytics\";\nexport * from \"./useFilters\";\nexport * from \"./useProductPrice\";\nexport * from \"./useFilterListProps\";\nexport * from \"./useFilterRangeProps\";\nexport * from \"./useFilterSliderProps\";\nexport * from \"./useFilterCollapsedState\";\nexport * from \"./useConfig\";\nexport * from \"./useReactifySearchContext\";\nexport * from \"./useResults\";\nexport * from \"./useIndices\";\n"]}
@@ -1,6 +1,6 @@
1
1
  import currency from "currency.js";
2
2
  import { ElasticProduct } from "../types/elastic";
3
- export declare const useProductPrice: (product: ElasticProduct) => {
3
+ export type UseProductPrice = {
4
4
  price?: currency;
5
5
  onSale: boolean;
6
6
  currencyCode: string;
@@ -8,3 +8,4 @@ export declare const useProductPrice: (product: ElasticProduct) => {
8
8
  formattedPrice?: string;
9
9
  formattedCompareAtPrice?: string;
10
10
  };
11
+ export declare const useProductPrice: (product: ElasticProduct) => UseProductPrice;
@@ -6,21 +6,47 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.useProductPrice = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const currency_js_1 = __importDefault(require("currency.js"));
9
+ const useReactifySearchContext_1 = require("./useReactifySearchContext");
9
10
  const useProductPrice = (product) => {
10
- return react_1.default.useMemo(() => {
11
- var _a, _b, _c, _d;
12
- const variant = (_a = product.variants) === null || _a === void 0 ? void 0 : _a[0];
13
- if (!variant) {
11
+ const reactifySearchContext = (0, useReactifySearchContext_1.useReactifySearchContext)();
12
+ const value = react_1.default.useMemo(() => {
13
+ const getCurrencyCode = () => {
14
+ var _a, _b, _c;
15
+ const currencyCode = (_b = (_a = product.presentment_price_ranges) === null || _a === void 0 ? void 0 : _a.min_variant_price[0].currency_code) !== null && _b !== void 0 ? _b : "AUD";
16
+ const currencyCodeMarket = (_c = reactifySearchContext.config.markets.find((market) => market.id === reactifySearchContext.options.market)) === null || _c === void 0 ? void 0 : _c.currencyCode;
17
+ return currencyCodeMarket !== null && currencyCodeMarket !== void 0 ? currencyCodeMarket : currencyCode;
18
+ };
19
+ const getPriceDefault = () => {
20
+ var _a, _b, _c, _d;
21
+ if ((_a = product.variants) === null || _a === void 0 ? void 0 : _a[0].price) {
22
+ return {
23
+ price: (_b = product.variants) === null || _b === void 0 ? void 0 : _b[0].price,
24
+ compareAtPrice: (_d = (_c = product.variants) === null || _c === void 0 ? void 0 : _c[0].compare_at_price) !== null && _d !== void 0 ? _d : undefined,
25
+ };
26
+ }
27
+ return;
28
+ };
29
+ const getPriceMarket = () => {
30
+ var _a, _b, _c, _d;
31
+ const currencyCode = getCurrencyCode();
32
+ if (!currencyCode) {
33
+ return;
34
+ }
35
+ const presentmentPrice = (_b = (_a = product.variants) === null || _a === void 0 ? void 0 : _a[0].presentment_prices) === null || _b === void 0 ? void 0 : _b.find((item) => item.price.currency_code === currencyCode);
36
+ if (!presentmentPrice) {
37
+ return;
38
+ }
14
39
  return {
15
- onSale: false,
16
- price: undefined,
17
- currencyCode: "AUD",
18
- compareAtPrice: undefined,
40
+ price: presentmentPrice.price.amount,
41
+ compareAtPrice: (_d = (_c = presentmentPrice.compare_at_price) === null || _c === void 0 ? void 0 : _c.amount) !== null && _d !== void 0 ? _d : undefined,
19
42
  };
20
- }
21
- // @todo select the appropriate currency
22
- const priceSet = (_b = variant.presentment_prices) === null || _b === void 0 ? void 0 : _b[0];
23
- if (!priceSet || !priceSet.price) {
43
+ };
44
+ const getPrice = () => {
45
+ var _a;
46
+ return (_a = getPriceMarket()) !== null && _a !== void 0 ? _a : getPriceDefault();
47
+ };
48
+ const priceData = getPrice();
49
+ if (!priceData) {
24
50
  return {
25
51
  onSale: false,
26
52
  price: undefined,
@@ -28,27 +54,20 @@ const useProductPrice = (product) => {
28
54
  compareAtPrice: undefined,
29
55
  };
30
56
  }
31
- const currencyCode = (_c = priceSet.price.currency_code) !== null && _c !== void 0 ? _c : "AUD";
32
- const price = priceSet.price.amount
33
- ? (0, currency_js_1.default)(priceSet.price.amount)
34
- : undefined;
35
- const formattedPrice = price ? formatPrice(price, currencyCode) : undefined;
36
- const compareAtPrice = ((_d = priceSet.compare_at_price) === null || _d === void 0 ? void 0 : _d.amount)
37
- ? (0, currency_js_1.default)(priceSet.compare_at_price.amount)
38
- : undefined;
39
- const formattedCompareAtPrice = compareAtPrice
40
- ? formatPrice(compareAtPrice, currencyCode)
41
- : undefined;
42
- const onSale = !!compareAtPrice && !!price && compareAtPrice.intValue > price.intValue;
57
+ const currencyCode = getCurrencyCode();
58
+ const onSale = Boolean(priceData.compareAtPrice && priceData.compareAtPrice > priceData.price);
59
+ const priceAsCurrency = (0, currency_js_1.default)(priceData.price);
60
+ const compareAtPriceAsCurrency = priceData.compareAtPrice ? (0, currency_js_1.default)(priceData.compareAtPrice) : undefined;
43
61
  return {
44
- price,
45
- onSale,
46
- currencyCode,
47
- compareAtPrice,
48
- formattedPrice,
49
- formattedCompareAtPrice,
62
+ onSale: onSale,
63
+ price: priceAsCurrency,
64
+ compareAtPrice: compareAtPriceAsCurrency,
65
+ formattedPrice: formatPrice(priceAsCurrency, currencyCode),
66
+ formattedCompareAtPrice: compareAtPriceAsCurrency ? formatPrice(compareAtPriceAsCurrency, currencyCode) : undefined,
67
+ currencyCode: currencyCode,
50
68
  };
51
- }, [product]);
69
+ }, [product, reactifySearchContext.options.market, reactifySearchContext.config.markets]);
70
+ return value;
52
71
  };
53
72
  exports.useProductPrice = useProductPrice;
54
73
  const formatPrice = (price, currencyCode) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useProductPrice.js","sourceRoot":"","sources":["../../../src/hooks/useProductPrice.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,8DAAmC;AAI5B,MAAM,eAAe,GAAG,CAAC,OAAuB,EAOrD,EAAE;IACF,OAAO,eAAK,CAAC,OAAO,CAAC,GAAG,EAAE;;QACxB,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,QAAQ,0CAAG,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,wCAAwC;QACxC,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,kBAAkB,0CAAG,CAAC,CAAC,CAAC;QAEjD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,SAAS;gBAChB,YAAY,EAAE,KAAK;gBACnB,cAAc,EAAE,SAAS;aAC1B,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAA,QAAQ,CAAC,KAAK,CAAC,aAAa,mCAAI,KAAK,CAAC;QAE3D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM;YACjC,CAAC,CAAC,IAAA,qBAAQ,EAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACjC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5E,MAAM,cAAc,GAAG,CAAA,MAAA,QAAQ,CAAC,gBAAgB,0CAAE,MAAM;YACtD,CAAC,CAAC,IAAA,qBAAQ,EAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,uBAAuB,GAAG,cAAc;YAC5C,CAAC,CAAC,WAAW,CAAC,cAAc,EAAE,YAAY,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,MAAM,GACV,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,KAAK,IAAI,cAAc,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAE1E,OAAO;YACL,KAAK;YACL,MAAM;YACN,YAAY;YACZ,cAAc;YACd,cAAc;YACd,uBAAuB;SACxB,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,CAAC,CAAC;AA5DW,QAAA,eAAe,mBA4D1B;AAEF,MAAM,WAAW,GAAG,CAAC,KAAe,EAAE,YAAoB,EAAU,EAAE;IACpE,IAAI,WAAW,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;QAC/C,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,YAAY;KACvB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEvB,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;QAC3B,WAAW,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC","sourcesContent":["import React from \"react\";\nimport currency from \"currency.js\";\n\nimport { ElasticProduct } from \"../types/elastic\";\n\nexport const useProductPrice = (product: ElasticProduct): {\n price?: currency;\n onSale: boolean;\n currencyCode: string;\n compareAtPrice?: currency;\n formattedPrice?: string;\n formattedCompareAtPrice?: string;\n} => {\n return React.useMemo(() => {\n const variant = product.variants?.[0];\n\n if (!variant) {\n return {\n onSale: false,\n price: undefined,\n currencyCode: \"AUD\",\n compareAtPrice: undefined,\n };\n }\n\n // @todo select the appropriate currency\n const priceSet = variant.presentment_prices?.[0];\n\n if (!priceSet || !priceSet.price) {\n return {\n onSale: false,\n price: undefined,\n currencyCode: \"AUD\",\n compareAtPrice: undefined,\n };\n }\n\n const currencyCode = priceSet.price.currency_code ?? \"AUD\";\n\n const price = priceSet.price.amount\n ? currency(priceSet.price.amount)\n : undefined;\n\n const formattedPrice = price ? formatPrice(price, currencyCode) : undefined;\n\n const compareAtPrice = priceSet.compare_at_price?.amount\n ? currency(priceSet.compare_at_price.amount)\n : undefined;\n\n const formattedCompareAtPrice = compareAtPrice\n ? formatPrice(compareAtPrice, currencyCode)\n : undefined;\n\n const onSale =\n !!compareAtPrice && !!price && compareAtPrice.intValue > price.intValue;\n\n return {\n price,\n onSale,\n currencyCode,\n compareAtPrice,\n formattedPrice,\n formattedCompareAtPrice,\n };\n }, [product]);\n};\n\nconst formatPrice = (price: currency, currencyCode: string): string => {\n let priceString = new Intl.NumberFormat(\"en-AU\", {\n style: \"currency\",\n currency: currencyCode,\n }).format(price.value);\n\n if (\"AUD\" === currencyCode) {\n priceString = `AU ${priceString}`;\n }\n\n return priceString;\n};\n"]}
1
+ {"version":3,"file":"useProductPrice.js","sourceRoot":"","sources":["../../../src/hooks/useProductPrice.ts"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\nimport currency from \"currency.js\";\n\nimport { ElasticProduct } from \"../types/elastic\";\nimport { useReactifySearchContext } from \"./useReactifySearchContext\";\n\nexport type UseProductPrice = {\n price?: currency;\n onSale: boolean;\n currencyCode: string;\n compareAtPrice?: currency;\n formattedPrice?: string;\n formattedCompareAtPrice?: string;\n};\n\nexport const useProductPrice = (product: ElasticProduct): UseProductPrice => {\n const reactifySearchContext = useReactifySearchContext();\n\n const value = React.useMemo<UseProductPrice>(() => {\n const getCurrencyCode = (): string => {\n const currencyCode = product.presentment_price_ranges?.min_variant_price[0].currency_code ?? \"AUD\";\n const currencyCodeMarket = reactifySearchContext.config.markets.find((market) => market.id === reactifySearchContext.options.market)?.currencyCode;\n \n return currencyCodeMarket ?? currencyCode;\n }\n \n const getPriceDefault = (): {\n price: number;\n compareAtPrice: number | undefined;\n } | undefined => {\n if (product.variants?.[0].price) {\n return {\n price: product.variants?.[0].price,\n compareAtPrice: product.variants?.[0].compare_at_price ?? undefined,\n };\n }\n \n return;\n }\n \n const getPriceMarket = (): {\n price: number;\n compareAtPrice: number | undefined;\n } | undefined => {\n const currencyCode = getCurrencyCode();\n if (!currencyCode) {\n return;\n }\n \n const presentmentPrice = product.variants?.[0].presentment_prices?.find((item) => item.price.currency_code === currencyCode);\n if (!presentmentPrice) {\n return;\n }\n \n return {\n price: presentmentPrice.price.amount,\n compareAtPrice: presentmentPrice.compare_at_price?.amount ?? undefined,\n };\n };\n \n const getPrice = (): {\n price: number;\n compareAtPrice: number | undefined;\n } | undefined => {\n return getPriceMarket() ?? getPriceDefault();\n }\n\n const priceData = getPrice();\n if (!priceData) {\n return {\n onSale: false,\n price: undefined,\n currencyCode: \"AUD\",\n compareAtPrice: undefined,\n };\n }\n\n const currencyCode = getCurrencyCode();\n const onSale = Boolean(priceData.compareAtPrice && priceData.compareAtPrice > priceData.price);\n const priceAsCurrency = currency(priceData.price);\n const compareAtPriceAsCurrency = priceData.compareAtPrice ? currency(priceData.compareAtPrice) : undefined;\n\n return {\n onSale: onSale,\n price: priceAsCurrency,\n compareAtPrice: compareAtPriceAsCurrency,\n formattedPrice: formatPrice(priceAsCurrency, currencyCode),\n formattedCompareAtPrice: compareAtPriceAsCurrency ? formatPrice(compareAtPriceAsCurrency, currencyCode) : undefined,\n currencyCode: currencyCode,\n }\n }, [product, reactifySearchContext.options.market, reactifySearchContext.config.markets]);\n\n return value;\n};\n\nconst formatPrice = (price: currency, currencyCode: string): string => {\n let priceString = new Intl.NumberFormat(\"en-AU\", {\n style: \"currency\",\n currency: currencyCode,\n }).format(price.value);\n\n if (\"AUD\" === currencyCode) {\n priceString = `AU ${priceString}`;\n }\n\n return priceString;\n};\n"]}
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import { Config, ConfigCuration, ConfigRedirect, ReactivesearchResultProps } from "../types";
3
- import { Flags } from "./useFlags";
4
3
  export type ReactifySearchMode = "search" | "collection" | "instant-search";
5
4
  export declare const ReactifySearchContext: React.Context<{
6
5
  config: Config;
@@ -17,7 +16,6 @@ export declare const ReactifySearchContext: React.Context<{
17
16
  additionalComponentIds?: Array<string>;
18
17
  includeFields?: Array<string>;
19
18
  excludeFields?: Array<string>;
20
- flags?: Record<Flags, boolean>;
21
19
  query?: Record<string, string>;
22
20
  preload?: {
23
21
  config: Config;
@@ -65,7 +63,6 @@ export declare const useReactifySearchContext: () => {
65
63
  additionalComponentIds?: Array<string>;
66
64
  includeFields?: Array<string>;
67
65
  excludeFields?: Array<string>;
68
- flags?: Record<Flags, boolean>;
69
66
  query?: Record<string, string>;
70
67
  preload?: {
71
68
  config: Config;
@@ -1 +1 @@
1
- {"version":3,"file":"useReactifySearchContext.js","sourceRoot":"","sources":["../../../src/hooks/useReactifySearchContext.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAOb,QAAA,qBAAqB,GAAG,eAAK,CAAC,aAAa,CA8DtD,SAAS,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAC3C,eAAK,CAAC,UAAU,CAAC,6BAAqB,CAAE,CAAC;AAD9B,QAAA,wBAAwB,4BACM","sourcesContent":["import React from \"react\";\n\nimport { Config, ConfigCuration, ConfigRedirect, ReactivesearchResultProps } from \"../types\";\nimport { Flags } from \"./useFlags\";\n\nexport type ReactifySearchMode = \"search\" | \"collection\" | \"instant-search\";\n\nexport const ReactifySearchContext = React.createContext<\n | {\n config: Config;\n options: {\n clientId: string;\n mode: ReactifySearchMode;\n index: string;\n shopifyPermanentDomain: string;\n market?: string;\n filtersHandle?: string;\n credentials?: string;\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n theme: Record<string, unknown>;\n additionalComponentIds?: Array<string>;\n includeFields?: Array<string>;\n excludeFields?: Array<string>;\n flags?: Record<Flags, boolean>;\n query?: Record<string, string>;\n preload?: {\n config: Config;\n state: unknown;\n };\n } & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n );\n search: {\n searchTerm: string;\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<\n React.SetStateAction<boolean>\n >;\n searchRedirect: ConfigRedirect | undefined;\n };\n sortby: {\n sortOption: string;\n setSortOption: React.Dispatch<React.SetStateAction<string>>;\n };\n results: {\n results: ReactivesearchResultProps[\"data\"];\n setResults: React.Dispatch<\n React.SetStateAction<ReactivesearchResultProps[\"data\"]>\n >;\n resultStats?: ReactivesearchResultProps[\"resultStats\"];\n setResultStats: React.Dispatch<\n React.SetStateAction<\n ReactivesearchResultProps[\"resultStats\"] | undefined\n >\n >;\n };\n curation: ConfigCuration | undefined;\n }\n | undefined\n>(undefined);\n\nexport const useReactifySearchContext = () =>\n React.useContext(ReactifySearchContext)!;\n"]}
1
+ {"version":3,"file":"useReactifySearchContext.js","sourceRoot":"","sources":["../../../src/hooks/useReactifySearchContext.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAMb,QAAA,qBAAqB,GAAG,eAAK,CAAC,aAAa,CA6DtD,SAAS,CAAC,CAAC;AAEN,MAAM,wBAAwB,GAAG,GAAG,EAAE,CAC3C,eAAK,CAAC,UAAU,CAAC,6BAAqB,CAAE,CAAC;AAD9B,QAAA,wBAAwB,4BACM","sourcesContent":["import React from \"react\";\n\nimport { Config, ConfigCuration, ConfigRedirect, ReactivesearchResultProps } from \"../types\";\n\nexport type ReactifySearchMode = \"search\" | \"collection\" | \"instant-search\";\n\nexport const ReactifySearchContext = React.createContext<\n | {\n config: Config;\n options: {\n clientId: string;\n mode: ReactifySearchMode;\n index: string;\n shopifyPermanentDomain: string;\n market?: string;\n filtersHandle?: string;\n credentials?: string;\n onRedirect?: (type: \"redirect\" | \"search\", url: string) => void;\n theme: Record<string, unknown>;\n additionalComponentIds?: Array<string>;\n includeFields?: Array<string>;\n excludeFields?: Array<string>;\n query?: Record<string, string>;\n preload?: {\n config: Config;\n state: unknown;\n };\n } & (\n | {\n mode: \"search\";\n }\n | {\n mode: \"collection\";\n collectionHandle: string;\n }\n | {\n mode: \"instant-search\";\n }\n );\n search: {\n searchTerm: string;\n setSearchTerm: React.Dispatch<React.SetStateAction<string>>;\n showInstantSearchResults: boolean;\n setShowInstantSearchResults: React.Dispatch<\n React.SetStateAction<boolean>\n >;\n searchRedirect: ConfigRedirect | undefined;\n };\n sortby: {\n sortOption: string;\n setSortOption: React.Dispatch<React.SetStateAction<string>>;\n };\n results: {\n results: ReactivesearchResultProps[\"data\"];\n setResults: React.Dispatch<\n React.SetStateAction<ReactivesearchResultProps[\"data\"]>\n >;\n resultStats?: ReactivesearchResultProps[\"resultStats\"];\n setResultStats: React.Dispatch<\n React.SetStateAction<\n ReactivesearchResultProps[\"resultStats\"] | undefined\n >\n >;\n };\n curation: ConfigCuration | undefined;\n }\n | undefined\n>(undefined);\n\nexport const useReactifySearchContext = () =>\n React.useContext(ReactifySearchContext)!;\n"]}
@@ -35,6 +35,10 @@ export interface ElasticProduct {
35
35
  price_min: number;
36
36
  /** decimal number e.g. 99.95 */
37
37
  price_max: number;
38
+ /** market specific price min, decimal number e.g. 99.95 */
39
+ [key: `price_min_market_${number}`]: number;
40
+ /** market specific price max, decimal number e.g. 99.95 */
41
+ [key: `price_max_market_${number}`]: number;
38
42
  /** array of option names e.g. ["Colour", "Size"] */
39
43
  options: Array<string>;
40
44
  /** @todo it would be better to use ProductStatus directly, which has uppercase */
@@ -1 +1 @@
1
- {"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/types/elastic.ts"],"names":[],"mappings":";;;AAOA,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;AACrB,CAAC,EAHW,mBAAmB,mCAAnB,mBAAmB,QAG9B;AAkOD,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,gCAAa,CAAA;IACb,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACrB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B","sourcesContent":["import { Callout } from \"./firestore\";\nimport {\n Maybe,\n ProductVariantInventoryPolicy,\n MetafieldValueType,\n} from \"./graphql\";\n\nexport enum ElasticDocumentType {\n Callout = \"callout\",\n Product = \"product\",\n}\n\nexport type ElasticDocument = ElasticCallout | ElasticProduct;\n\nexport interface ElasticCallout {\n type: ElasticDocumentType.Callout;\n key: string;\n callout: Omit<Callout, \"keywords\">;\n /** elastic callouts are always published */\n published: true;\n /** elastic callouts are always attached to one curation */\n curations: [ElasticCuration] | [];\n}\n\nexport interface ElasticProduct {\n type: ElasticDocumentType.Product;\n /** the log id from which this product was last uploaded */\n lastLogId: string;\n /** legacy resource id */\n id: number;\n storefrontId: string;\n title: string;\n description: string;\n vendor: string;\n product_type: string;\n handle: string;\n url: string;\n tags: Array<string>;\n collection_titles: Array<string>;\n /** tag prefixes defined in tagKeys are split to their own attributes */\n [key: `tags_${string}`]: Array<string> | undefined;\n /** decimal number e.g. 99.95 */\n price_min: number;\n /** decimal number e.g. 99.95 */\n price_max: number;\n /** array of option names e.g. [\"Colour\", \"Size\"] */\n options: Array<string>;\n /** @todo it would be better to use ProductStatus directly, which has uppercase */\n status: \"active\" | \"archived\" | \"draft\";\n published: boolean;\n /** ISO 8601 datetime */\n published_at: Maybe<string>;\n /** ISO 8601 datetime */\n updated_at: string;\n /** ISO 8601 datetime */\n created_at: string;\n tracks_inventory: boolean;\n /** originalSrc URL for featured image */\n image: Maybe<string>;\n /** array of images (undefined if images are disabled in sync settings) */\n images?: Array<ElasticImage>;\n /** array of variants attached to product (undefined if variants are disabled in sync settings) */\n variants?: Array<ElasticVariant>;\n /** price ranges from presentment prices (undefined if presentment prices or variants are disabled in sync settings) */\n presentment_price_ranges?: {\n min_variant_price: Array<ElasticPresentmentPrice>;\n max_variant_price: Array<ElasticPresentmentPrice>;\n };\n /** array of variant skus (undefined if variants are disabled in sync settings) */\n variant_skus?: Array<string>;\n /** combined array of option values from all option types (undefined if variants are disabled in sync settings) */\n variant_options?: Array<string>;\n /** array of collections which this product belongs to (undefined if collections are disabled in sync settings) */\n collections?: Array<ElasticCollection>;\n /** array of whitelisted metafields (undefined if metafields are disabled in sync settings) */\n metafields?: Array<ElasticMetafield>;\n /** decimal number e.g. 99.95 (undefined if variants are disabled in sync settings) */\n discount_amount?: number;\n /** combined inventory for all variants (undefined if variants are disabled in sync settings) */\n inventory_total?: number;\n /** number of days since published, null if unpublished */\n published_days: Maybe<number>;\n /** collection of curations that this product is attached to */\n curations?: Array<ElasticCuration>;\n /** related products **/\n related?: Array<ElasticProductRelated>;\n}\n\nexport interface ElasticProductRelated {\n createdAt: string;\n description: string;\n featuredImage: {\n originalSrc: \"https://cdn.shopify.com/s/files/1/0614/3977/0777/p…71d6-e7fd-4f5f-aa99-c722e2832d01.jpg?v=1660776345\";\n };\n handle: string;\n id: string;\n images: Array<ElasticImage>;\n legacyResourceId: string;\n metafields?: Array<ElasticMetafield>;\n options: Array<{\n name: string;\n }>;\n priceRangeV2: {\n maxVariantPrice: {\n amount: string;\n };\n minVariantPrice: {\n amount: string;\n };\n };\n productType: string;\n publishedAt: string;\n status: \"ACTIVE\" | \"ARCHIVED\" | \"DRAFT\";\n storefrontId: string;\n tags: Array<string>;\n title: string;\n tracksInventory: boolean;\n updatedAt: string;\n variants: Array<ElasticVariant>;\n vendor: string;\n __typename: \"Product\";\n}\n\nexport interface ElasticVariant {\n /** legacy resource id */\n id: number;\n storefrontId: string;\n title: string;\n sku: Maybe<string>;\n barcode: Maybe<string>;\n /** array of presentment prices (undefined if presentment prices are disabled in sync settings) */\n presentment_prices?: Array<{\n price: ElasticPresentmentPrice;\n compare_at_price: Maybe<ElasticPresentmentPrice>;\n }>;\n /** decimal number e.g. 99.95 */\n price: number;\n /** decimal number e.g. 99.95 */\n compare_at_price: Maybe<number>;\n /** value string for option 1 e.g. Blue */\n option1: Maybe<string>;\n /** value string for option 2 e.g. Medium */\n option2: Maybe<string>;\n /** value string for option 3 */\n option3: Maybe<string>;\n /** sort position within the product */\n position: number;\n inventory_policy: ProductVariantInventoryPolicy;\n inventory_quantity: number;\n available: boolean;\n /** array of images (only available if this variant has been merged from another product and if images are enabled in sync settings) */\n images?: Array<ElasticImage>;\n}\n\nexport interface ElasticCollection {\n /** legacy resource id */\n id: number;\n storefrontId: string;\n handle: string;\n title: string;\n position: number;\n}\n\nexport interface ElasticMetafield {\n key: string;\n type: string;\n value: string;\n namespace: string;\n /**\n * Legacy valueType attribute which is no longer provided by Shopify. We still\n * populate this field to prevent any frontends breaking which rely on it.\n *\n * @see https://shopify.dev/apps/metafields/definitions/types\n */\n value_type: MetafieldValueType;\n}\n\nexport interface ElasticPresentmentPrice {\n /** decimal number e.g. 99.95 */\n amount: number;\n currency_code: string;\n}\n\nexport interface ElasticImage {\n /** originalSrc URL */\n src: string;\n /** alt text */\n alt: Maybe<string>;\n}\n\nexport interface ElasticCuration {\n id: string;\n hidden: boolean;\n position?: number;\n searchTerm?: string;\n collectionHandle?: string;\n}\n\n// non-exhaustive type for bulk request\n// https://www.elastic.co/guide/en/elasticsearch/reference/7.x/docs-bulk.html\nexport type ElasticBulkOperationUpdate = [\n { update: { _index: string; _id: string } },\n {\n script?: {\n lang: \"painless\";\n source: string;\n params?: Record<string, any>;\n };\n upsert?: Partial<ElasticProduct>;\n scripted_upsert?: true;\n doc?: Partial<ElasticProduct>;\n doc_as_upsert?: true;\n }\n];\n\nexport type ElasticBulkOperationIndex = [\n { index: { _index: string; _id: string } },\n ElasticDocument\n];\n\nexport type ElasticBulkOperation =\n | ElasticBulkOperationUpdate\n | ElasticBulkOperationIndex;\n\nexport type ElasticSearchResult<T = ElasticDocument> = {\n hits: {\n hits: Array<ElasticHit<T>>;\n };\n};\n\nexport type ElasticHit<T = ElasticDocument> = {\n _id: string;\n _source: T;\n _score: number | null;\n};\n\nexport enum ElasticDataType {\n Text = \"text\",\n Long = \"long\",\n Date = \"date\",\n Float = \"float\",\n Nested = \"nested\",\n Keyword = \"keyword\",\n Boolean = \"boolean\",\n}\n\nexport interface ElasticProperty {\n analyzer?: string;\n type: ElasticDataType;\n ignore_above?: number;\n fields?: { [key: string]: ElasticField };\n properties?: { [key: string]: ElasticProperty };\n}\n\nexport interface ElasticField {\n type: ElasticDataType;\n ignore_above?: number;\n}\n"]}
1
+ {"version":3,"file":"elastic.js","sourceRoot":"","sources":["../../../src/types/elastic.ts"],"names":[],"mappings":";;;AAOA,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,0CAAmB,CAAA;IACnB,0CAAmB,CAAA;AACrB,CAAC,EAHW,mBAAmB,mCAAnB,mBAAmB,QAG9B;AAsOD,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,gCAAa,CAAA;IACb,gCAAa,CAAA;IACb,gCAAa,CAAA;IACb,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;AACrB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B","sourcesContent":["import { Callout } from \"./firestore\";\nimport {\n Maybe,\n ProductVariantInventoryPolicy,\n MetafieldValueType,\n} from \"./graphql\";\n\nexport enum ElasticDocumentType {\n Callout = \"callout\",\n Product = \"product\",\n}\n\nexport type ElasticDocument = ElasticCallout | ElasticProduct;\n\nexport interface ElasticCallout {\n type: ElasticDocumentType.Callout;\n key: string;\n callout: Omit<Callout, \"keywords\">;\n /** elastic callouts are always published */\n published: true;\n /** elastic callouts are always attached to one curation */\n curations: [ElasticCuration] | [];\n}\n\nexport interface ElasticProduct {\n type: ElasticDocumentType.Product;\n /** the log id from which this product was last uploaded */\n lastLogId: string;\n /** legacy resource id */\n id: number;\n storefrontId: string;\n title: string;\n description: string;\n vendor: string;\n product_type: string;\n handle: string;\n url: string;\n tags: Array<string>;\n collection_titles: Array<string>;\n /** tag prefixes defined in tagKeys are split to their own attributes */\n [key: `tags_${string}`]: Array<string> | undefined;\n /** decimal number e.g. 99.95 */\n price_min: number;\n /** decimal number e.g. 99.95 */\n price_max: number;\n /** market specific price min, decimal number e.g. 99.95 */\n [key: `price_min_market_${number}`]: number;\n /** market specific price max, decimal number e.g. 99.95 */\n [key: `price_max_market_${number}`]: number;\n /** array of option names e.g. [\"Colour\", \"Size\"] */\n options: Array<string>;\n /** @todo it would be better to use ProductStatus directly, which has uppercase */\n status: \"active\" | \"archived\" | \"draft\";\n published: boolean;\n /** ISO 8601 datetime */\n published_at: Maybe<string>;\n /** ISO 8601 datetime */\n updated_at: string;\n /** ISO 8601 datetime */\n created_at: string;\n tracks_inventory: boolean;\n /** originalSrc URL for featured image */\n image: Maybe<string>;\n /** array of images (undefined if images are disabled in sync settings) */\n images?: Array<ElasticImage>;\n /** array of variants attached to product (undefined if variants are disabled in sync settings) */\n variants?: Array<ElasticVariant>;\n /** price ranges from presentment prices (undefined if presentment prices or variants are disabled in sync settings) */\n presentment_price_ranges?: {\n min_variant_price: Array<ElasticPresentmentPrice>;\n max_variant_price: Array<ElasticPresentmentPrice>;\n };\n /** array of variant skus (undefined if variants are disabled in sync settings) */\n variant_skus?: Array<string>;\n /** combined array of option values from all option types (undefined if variants are disabled in sync settings) */\n variant_options?: Array<string>;\n /** array of collections which this product belongs to (undefined if collections are disabled in sync settings) */\n collections?: Array<ElasticCollection>;\n /** array of whitelisted metafields (undefined if metafields are disabled in sync settings) */\n metafields?: Array<ElasticMetafield>;\n /** decimal number e.g. 99.95 (undefined if variants are disabled in sync settings) */\n discount_amount?: number;\n /** combined inventory for all variants (undefined if variants are disabled in sync settings) */\n inventory_total?: number;\n /** number of days since published, null if unpublished */\n published_days: Maybe<number>;\n /** collection of curations that this product is attached to */\n curations?: Array<ElasticCuration>;\n /** related products **/\n related?: Array<ElasticProductRelated>;\n}\n\nexport interface ElasticProductRelated {\n createdAt: string;\n description: string;\n featuredImage: {\n originalSrc: \"https://cdn.shopify.com/s/files/1/0614/3977/0777/p…71d6-e7fd-4f5f-aa99-c722e2832d01.jpg?v=1660776345\";\n };\n handle: string;\n id: string;\n images: Array<ElasticImage>;\n legacyResourceId: string;\n metafields?: Array<ElasticMetafield>;\n options: Array<{\n name: string;\n }>;\n priceRangeV2: {\n maxVariantPrice: {\n amount: string;\n };\n minVariantPrice: {\n amount: string;\n };\n };\n productType: string;\n publishedAt: string;\n status: \"ACTIVE\" | \"ARCHIVED\" | \"DRAFT\";\n storefrontId: string;\n tags: Array<string>;\n title: string;\n tracksInventory: boolean;\n updatedAt: string;\n variants: Array<ElasticVariant>;\n vendor: string;\n __typename: \"Product\";\n}\n\nexport interface ElasticVariant {\n /** legacy resource id */\n id: number;\n storefrontId: string;\n title: string;\n sku: Maybe<string>;\n barcode: Maybe<string>;\n /** array of presentment prices (undefined if presentment prices are disabled in sync settings) */\n presentment_prices?: Array<{\n price: ElasticPresentmentPrice;\n compare_at_price: Maybe<ElasticPresentmentPrice>;\n }>;\n /** decimal number e.g. 99.95 */\n price: number;\n /** decimal number e.g. 99.95 */\n compare_at_price: Maybe<number>;\n /** value string for option 1 e.g. Blue */\n option1: Maybe<string>;\n /** value string for option 2 e.g. Medium */\n option2: Maybe<string>;\n /** value string for option 3 */\n option3: Maybe<string>;\n /** sort position within the product */\n position: number;\n inventory_policy: ProductVariantInventoryPolicy;\n inventory_quantity: number;\n available: boolean;\n /** array of images (only available if this variant has been merged from another product and if images are enabled in sync settings) */\n images?: Array<ElasticImage>;\n}\n\nexport interface ElasticCollection {\n /** legacy resource id */\n id: number;\n storefrontId: string;\n handle: string;\n title: string;\n position: number;\n}\n\nexport interface ElasticMetafield {\n key: string;\n type: string;\n value: string;\n namespace: string;\n /**\n * Legacy valueType attribute which is no longer provided by Shopify. We still\n * populate this field to prevent any frontends breaking which rely on it.\n *\n * @see https://shopify.dev/apps/metafields/definitions/types\n */\n value_type: MetafieldValueType;\n}\n\nexport interface ElasticPresentmentPrice {\n /** decimal number e.g. 99.95 */\n amount: number;\n currency_code: string;\n}\n\nexport interface ElasticImage {\n /** originalSrc URL */\n src: string;\n /** alt text */\n alt: Maybe<string>;\n}\n\nexport interface ElasticCuration {\n id: string;\n hidden: boolean;\n position?: number;\n searchTerm?: string;\n collectionHandle?: string;\n}\n\n// non-exhaustive type for bulk request\n// https://www.elastic.co/guide/en/elasticsearch/reference/7.x/docs-bulk.html\nexport type ElasticBulkOperationUpdate = [\n { update: { _index: string; _id: string } },\n {\n script?: {\n lang: \"painless\";\n source: string;\n params?: Record<string, any>;\n };\n upsert?: Partial<ElasticProduct>;\n scripted_upsert?: true;\n doc?: Partial<ElasticProduct>;\n doc_as_upsert?: true;\n }\n];\n\nexport type ElasticBulkOperationIndex = [\n { index: { _index: string; _id: string } },\n ElasticDocument\n];\n\nexport type ElasticBulkOperation =\n | ElasticBulkOperationUpdate\n | ElasticBulkOperationIndex;\n\nexport type ElasticSearchResult<T = ElasticDocument> = {\n hits: {\n hits: Array<ElasticHit<T>>;\n };\n};\n\nexport type ElasticHit<T = ElasticDocument> = {\n _id: string;\n _source: T;\n _score: number | null;\n};\n\nexport enum ElasticDataType {\n Text = \"text\",\n Long = \"long\",\n Date = \"date\",\n Float = \"float\",\n Nested = \"nested\",\n Keyword = \"keyword\",\n Boolean = \"boolean\",\n}\n\nexport interface ElasticProperty {\n analyzer?: string;\n type: ElasticDataType;\n ignore_above?: number;\n fields?: { [key: string]: ElasticField };\n properties?: { [key: string]: ElasticProperty };\n}\n\nexport interface ElasticField {\n type: ElasticDataType;\n ignore_above?: number;\n}\n"]}
@@ -425,6 +425,8 @@ export interface Market {
425
425
  label: string;
426
426
  enabled: boolean;
427
427
  publicationId: string;
428
+ locationId?: string;
429
+ currencyCode?: string;
428
430
  }
429
431
  export interface BoostGrouping {
430
432
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShopifyAppPurchaseOneTime, ShopifyAppSubscription, ShopifyProduct, ShopifyProductImage } from \"./shopify\";\nimport { ElasticDataType } from \"./elastic\";\nimport { AppPurchaseStatus } from \"./graphql\";\n\nexport interface ResourceDocument {\n id: string;\n keywords: Array<string>;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport enum ResourceType {\n ActivityLog = \"activity_log\",\n Product = \"product\",\n Collection = \"collection\",\n Curation = \"curation\",\n Callout = \"callout\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Antonym = \"antonym\",\n Synonym = \"synonym\",\n Task = \"task\",\n}\n\nexport const ResourceTypeLabel: Record<ResourceType, string> = {\n [ResourceType.ActivityLog]: \"Activity log\",\n [ResourceType.Product]: \"Product\",\n [ResourceType.Collection]: \"Collection\",\n [ResourceType.Curation]: \"Curation\",\n [ResourceType.Callout]: \"Callout\",\n [ResourceType.SettingsAccount]: \"Settings account\",\n [ResourceType.SettingsAutomation]: \"Settings automation\",\n [ResourceType.SettingsProduct]: \"Settings product\",\n [ResourceType.FilterGroup]: \"Filter group\",\n [ResourceType.FilterFacet]: \"Filter facet\",\n [ResourceType.MergedValue]: \"Merged value\",\n [ResourceType.Redirect]: \"Redirect\",\n [ResourceType.Relevancy]: \"Relevancy\",\n [ResourceType.Sort]: \"Sort\",\n [ResourceType.Antonym]: \"Antonym\",\n [ResourceType.Synonym]: \"Synonym\",\n [ResourceType.Task]: \"Task\",\n};\n\nexport interface Log {\n id: string\n keywords: Array<string>\n message: string\n platform: \"reactify\" | \"shopify\" | \"google\" | \"elastic\"\n percentCompleted: number\n action?: {\n type: \"retry\"\n label: string\n task: Task[\"taskId\"]\n }\n step:\n | \"syncMainDownload\"\n | \"syncBulkStart\"\n | \"syncBulkDownload\"\n | \"syncBulkTransform\"\n | \"syncBulkMerge\"\n | \"syncBulkUpload\"\n | \"syncBulkCleanup\"\n | \"syncBulkCleanupCurations\"\n | \"analyticsDownload\"\n | \"analyticsTransform\"\n | \"analyticsUpload\"\n | \"complete\"\n | \"analyticsStart\"\n title: string\n type: \"bulk\" | \"analytics\"\n data?: string // JSON sringified data\n progress: \"new\" | \"error\" | \"complete\" | \"partiallyComplete\"\n status: \"success\" | \"info\" | \"warning\" | \"critical\" // polaris banner status\n createdAt: string;\n updatedAt?: string;\n finishedAt?: string;\n}\n\nexport interface Task {\n logId: string\n taskId:\n | \"setupInstall\"\n | \"setupWebhook\"\n | \"syncCollectionId\"\n | \"syncProductId\"\n | \"syncMainDownload\"\n | \"syncBulkReset\"\n | \"syncBulkStart\"\n | \"syncBulkDownload\"\n | \"syncBulkTransform\"\n | \"syncBulkMerge\"\n | \"syncBulkUpload\"\n | \"syncBulkCleanup\"\n | \"syncBulkCleanupCurations\"\n | \"cleanCuration\"\n | \"cleanCurationId\"\n | \"plantSeeds\"\n | \"refreshMappings\"\n | \"refreshDefinedFields\"\n | \"refreshCurations\"\n | \"analyticsStart\"\n | \"analyticsDownload\"\n | \"analyticsTransform\"\n | \"analyticsUpload\"\n | \"indexCleanup\"\n | \"cacheClear\"\n | \"syncMarkets\"\n | \"syncConfig\"\n | \"syncShop\"\n firstRun?: boolean\n createdAt: string;\n updatedAt?: string;\n}\nexport interface TaskSub extends Task {\n taskSubId: string;\n}\n\nexport interface TaskSubSyncCollectionId extends TaskSub {\n taskId: \"syncCollectionId\"\n collectionGid: string\n}\nexport interface TaskSubSyncProductId extends TaskSub {\n taskId: \"syncProductId\"\n productGid: string\n}\nexport interface TaskSyncShop extends Task {\n taskId: \"syncShop\"\n manual?: boolean\n}\n\nexport interface TaskSyncMainDownload extends Task {\n taskId: \"syncMainDownload\"\n type: \"product_download\" | \"product_polling\" | \"collection_download\" | \"collection_polling\";\n productUrl?: string\n collectionUrl?: string\n manual?: boolean\n}\n\nexport interface TaskSyncBulkReset extends Task {\n taskId: \"syncBulkReset\"\n manual?: boolean\n}\n\nexport interface TaskSyncBulkStart extends Task {\n taskId: \"syncBulkStart\"\n manual?: boolean\n}\n\nexport interface TaskSyncBulkDownload extends Task {\n taskId: \"syncBulkDownload\"\n type: \"collection\" | \"product\" | \"product_market\"\n productUrl?: string\n productMarketUrl?: string\n collectionUrl?: string\n syncAt: string\n}\n\nexport const TaskSyncBulkDownloadTypeLabel: Record<\"collection\" | \"product\" | \"product_market\", string> = {\n collection: \"collection details\",\n product: \"product details\",\n product_market: \"product market details\",\n};\n\nexport interface TaskSyncBulkTransform extends Task {\n taskId: \"syncBulkTransform\"\n productUrl: string\n productMarketUrl?: string\n collectionUrl: string\n collectionCount?: number\n lastCollectionCursor?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkMerge extends Task {\n taskId: \"syncBulkMerge\"\n productCount: number\n collectionCount: number\n productCompletedCount?: number\n startAfterId?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkUpload extends Task {\n taskId: \"syncBulkUpload\"\n productCount: number\n collectionCount: number\n productCompletedCount?: number\n startAfterId?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkCleanup extends Task {\n taskId: \"syncBulkCleanup\"\n syncAt: string\n}\n\nexport interface TaskSyncBulkCleanupCurations extends Task {\n taskId: \"syncBulkCleanupCurations\"\n}\n\nexport interface TaskCleanCuration extends Task {\n taskId: \"cleanCuration\";\n startAfterId?: string;\n manual?: boolean;\n}\nexport interface TaskSubCleanCurationId extends TaskSub {\n taskId: \"cleanCurationId\";\n curationId: string;\n manual?: boolean;\n}\nexport interface TaskSetupInstall extends Task {\n taskId: \"setupInstall\"\n}\n\nexport interface TaskSetupWebhook extends Task {\n taskId: \"setupWebhook\"\n}\n\nexport interface TaskPlantSeeds extends Task {\n taskId: \"plantSeeds\"\n}\n\nexport interface TaskRefreshMappings extends Task {\n taskId: \"refreshMappings\"\n manual?: boolean\n}\n\nexport interface TaskRefreshDefinedFields extends Task {\n taskId: \"refreshDefinedFields\"\n manual?: boolean\n}\n\nexport interface TaskRefreshCurations extends Task {\n taskId: \"refreshCurations\"\n manual?: boolean\n}\n\nexport interface TaskAnalyticsStart extends Task {\n taskId: \"analyticsStart\"\n manual?: boolean\n}\n\nexport interface TaskAnalyticsDownload extends Task {\n taskId: \"analyticsDownload\"\n reports: AnalyticsReports[]\n manual?: boolean\n}\n\nexport interface TaskAnalyticsTransform extends Task {\n taskId: \"analyticsTransform\"\n startAfterId?: string\n manual?: boolean\n}\n\nexport interface TaskAnalyticsUpload extends Task {\n taskId: \"analyticsUpload\"\n startAfterId?: string\n manual?: boolean\n}\n\nexport interface TaskIndexCleanup extends Task {\n taskId: \"indexCleanup\"\n manual?: boolean\n}\n\nexport interface TaskCacheClear extends Task {\n taskId: \"cacheClear\"\n manual?: boolean\n}\n\nexport interface TaskSyncMarkets extends Task {\n taskId: \"syncMarkets\"\n manual?: boolean\n}\n\nexport interface TaskSyncConfig extends Task {\n taskId: \"syncConfig\"\n manual?: boolean\n}\nexport interface Lock {\n logId: string\n taskType: \"sync\" | \"syncConfig\" | \"syncCollectionId\" | \"syncProductId\" | \"analytics\"\n createdAt: string;\n expiresAt: string\n}\n\nexport enum ManageAdminFlag {\n Example = \"example\",\n}\nexport interface ManageAdmin {\n installed: boolean;\n indexRead: string;\n indexWrite: string;\n indexAlias: string;\n indexAutomatic: boolean;\n indexRollback: Array<{\n indexName: string;\n documentCount: number;\n createdAt: number;\n }>;\n indexRefreshInterval: string;\n // indexSettingsPending: boolean;\n endpoint: string;\n cluster: string;\n customMappings: string; // JSON sringified data\n customFilters: string; // JSON sringified data\n timezone: string;\n cacheEnabled: boolean;\n cacheSeconds: number;\n flags?: Array<ManageAdminFlag>;\n production: boolean;\n}\n\nexport interface ManageProduct {\n tagChild?: string\n tagKeys?: Array<string>\n tagParent?: string\n tagRelated?: string\n syncObjects?: Array<string>\n tagExclude?: Array<string>\n tagExcludeSearch?: Array<string>\n tagExcludeCollection?: Array<string>\n tagSeparator?: string\n metafieldWhitelist?: Array<string>\n externalAppReactifyImageAI: boolean\n suggestionsExclude?: Array<string>;\n automaticCleanCurations?: boolean;\n\n merchandisingCalloutAutofillBehaviour: MerchandisingCalloutAutofillBehaviour;\n}\n\nexport enum MerchandisingCalloutAutofillBehaviour {\n Always = \"always\",\n MoreResults = \"more_results\",\n}\n\nexport interface ManageAutomation {\n sync: boolean\n webhooks: boolean\n mappings: boolean\n curations: boolean\n analytics: boolean\n syncFrequency: string\n syncThreshold: number\n notificationEnabled?: boolean;\n notificationEmail?: string;\n\n syncCatalogueCompletedAt?: number;\n syncAnalyticsCompletedAt?: number;\n syncConfigCompletedAt?: number;\n\n syncSpecialResourcePendingAt?: number | null;\n\n syncConfigHash?: string;\n}\n\nexport interface ManageAccount {\n shopifyPlanCustomCost?: number;\n shopifyPlanType?: \"general\" | \"partner\" | \"custom\";\n shopifyPlanStore?: \"primary\" | \"addon\";\n shopifyPlan?: \"non-plus\" | \"plus\" | \"development\";\n shopifyPlanSubscriptionShareCode?: string;\n stripeCustomerId?: string\n googleAnalyticsId?: string\n googleEmail?: string\n googleAccessToken?: string\n googleRefreshToken?: string\n googleAccessTokenExpiryDate?: number\n googleAnalyticsType?: \"UA\" | \"GA4\"\n googleIdField?: \"shopify_code\" | \"product_id\" | \"variant_id\" | \"variant_sku\" | \"variant_barcode\"\n}\n\nexport enum SettingsCurationsImageOption {\n Index = \"index\",\n Suffix = \"suffix\",\n}\n\nexport interface SettingsCurations {\n pageSize?: number\n gridColumns?: number\n imageOption: SettingsCurationsImageOption\n imagePosition: number\n imageSuffix: string\n imageSize?: \"small\" | \"medium\" | \"large\"\n imageSizePx: number;\n\n showCardDetailTitle?: boolean;\n showCardDetailContent?: boolean;\n showCardDetailPrice?: boolean;\n showCardDetailVendor?: boolean;\n showCardDetailPreorder?: boolean;\n showCardDetailDiscount?: boolean;\n showCardDetailInventory?: boolean;\n showCardDetailAvailability?: boolean;\n showCardDetailProfitMargin?: boolean;\n showCardDetailPublishedDays?: boolean;\n showCardDetailAnalyticsSales7Days?: boolean;\n showCardDetailAnalyticsSales30Days?: boolean;\n showCardDetailAnalyticsRevenue7Days?: boolean;\n showCardDetailAnalyticsRevenue30Days?: boolean;\n}\n\nexport interface Relevance extends ResourceDocument {\n field: string\n enabled: boolean\n importance: number\n searchType: \"always_search\" | \"search_page\" | \"instant_search\"\n hidden?: boolean\n}\n\nexport interface DefinedField {\n label: string\n value: string\n type: ElasticDataType | string\n}\n\nexport interface Sort extends ResourceDocument {\n name: string\n handle: string\n field: string\n position: number\n enabled: boolean\n direction: \"desc\" | \"asc\"\n visibility: \"all\" | \"search\" | \"collection\"\n hidden?: boolean\n}\n\nexport interface FilterGroup extends ResourceDocument {\n name: string\n handle: string\n enabled: boolean\n pageSize: number\n keywords: Array<string>\n collections: Array<string>\n type: \"search\" | \"collection\"\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\"\n inventoryVisibility: \"show_all\" | \"hide_products\" | \"hide_variants\" | \"hide_all\"\n}\n\nexport interface FilterFacet extends ResourceDocument {\n name: string\n field: string\n handle: string\n position: number\n enabled: boolean\n keywords: Array<string>\n customSortOrder?: string\n displayType: \"multi\" | \"single\" | \"slider\"\n displayView: \"list\" | \"check\" | \"swatch\" | \"range\" | \"box\"\n displaySize: string\n displaySliderStep: string\n displaySliderPrefix: string\n displaySliderSuffix: string\n displayRangeOptions: Array<string>\n settingsShowMore: boolean\n settingsUppercase: boolean\n settingsShowSearch: boolean\n settingsShowFilter: boolean\n settingsShowEmptyValues: boolean\n settingsHideUnavailable: boolean\n settingsCollapsedMobile: boolean\n settingsCollapsedDesktop: boolean\n settingsFilterLogic: \"and\" | \"or\"\n valuesShow: \"all\" | \"manual\"\n valuesManual: Array<string>\n valuesExclude: Array<string>\n}\n\nexport interface Redirect extends ResourceDocument {\n url: string\n query: string\n enabled: boolean\n keywords: Array<string>\n hidden?: boolean\n}\n\nexport interface Curation extends ResourceDocument {\n title: string\n status: CurationStatus\n published: boolean\n keywords: Array<string>\n searchTerm?: string\n longRunningTask?: boolean\n collectionHandle?: string\n collectionId?: string\n type: CurationType;\n boosting?: {\n groupings?: BoostGrouping[]\n sortings?: BoostSorting[]\n }\n sort?: CurationSort\n schedule?: CurationSchedule\n hidden?: boolean\n\n markets?: Array<string>;\n}\n\nexport enum CurationType {\n Search = \"search\",\n Collection = \"collection\",\n};\n\nexport const CurationTypeLabel: Record<CurationType, string> = {\n [CurationType.Search]: \"Search\",\n [CurationType.Collection]: \"Collection\",\n};\n\nexport interface CurationSort {\n sortTag?: string\n sortOption: string\n sortDirection: \"asc\" | \"desc\"\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\"\n}\n\nexport interface CurationSchedule {\n schedulePublish: string\n schedulePublishEnabled: boolean\n scheduleUnpublish: string\n scheduleUnpublishEnabled: boolean\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Error = \"error\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport const CurationStatusLabel: Record<CurationStatus, string> = {\n [CurationStatus.Draft]: \"Draft\",\n [CurationStatus.Publishing]: \"Publishing\",\n [CurationStatus.Published]: \"Published\",\n [CurationStatus.Error]: \"Error\",\n [CurationStatus.Unpublishing]: \"Unpublishing\",\n [CurationStatus.Resetting]: \"Resetting\",\n [CurationStatus.Pinning]: \"Pinning\",\n [CurationStatus.Sorting]: \"Sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n}\n\nexport interface Market {\n id: string;\n label: string;\n enabled: boolean;\n publicationId: string;\n}\n\nexport interface BoostGrouping {\n key: string\n value: string\n field: string\n position: number\n operation: string\n}\n\nexport interface BoostSorting {\n key: string\n field: string\n query?: string\n position: number\n direction: \"asc\" | \"desc\"\n}\n\nexport type Pin = PinProduct | PinCallout\n\nexport enum PinSource {\n Manual = \"manual\",\n Automatic = \"automatic\",\n}\n\nexport enum PinType {\n Product = \"product\",\n Callout = \"callout\",\n}\n\nexport type PinTypeOnly = Pick<Pin, \"type\">\n\nexport function isPinProduct(pin: PinTypeOnly): pin is PinProduct {\n return PinType.Product === pin.type;\n}\n\nexport function isPinCallout(pin: PinTypeOnly): pin is PinCallout {\n return PinType.Callout === pin.type;\n}\n\nexport interface PinProduct {\n key: string\n type: PinType.Product\n position: number\n productId: number\n source?: PinSource // @todo migrate and change to non-optional field\n}\n\nexport interface PinCallout {\n key: string\n type: PinType.Callout\n position: number\n calloutId: string\n source?: PinSource // @todo migrate and change to non-optional field\n}\n\nexport interface Link {\n content: string\n url: string\n key: string\n}\n\nexport interface Callout extends ResourceDocument {\n id: string;\n type: CalloutType;\n link: string;\n links: Array<Link>;\n // name: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n keywords: Array<string>;\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: string;\n start: string;\n };\n hidden?: boolean;\n}\n\nexport enum CalloutType {\n Standard = \"standard\",\n Filler = \"filler\",\n}\n\nexport enum SynonymType {\n Group = \"group\",\n Oneway = \"oneway\",\n}\nexport interface Synonym extends ResourceDocument {\n id: string\n name: string\n enabled: boolean\n keywords: Array<string>\n synonyms: Array<string>\n type: SynonymType\n hidden?: boolean\n}\nexport interface Antonym extends ResourceDocument {\n id: string\n name: string\n enabled: boolean\n keywords: Array<string>\n antonyms: Array<string>\n hidden?: boolean\n}\n\nexport interface MergedValue extends ResourceDocument {\n id: string\n name: string\n field: string\n enabled: boolean\n keywords: Array<string>\n values: Array<string>\n hidden?: boolean\n}\n\nexport interface Collection extends ResourceDocument {\n title: string\n handle: string\n shopifyId: string\n productIds: Array<string>\n storefrontId: string\n legacyResourceId: number\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\"\n syncAt?: string\n}\n\n// product is the shopify product with edges and nodes normalised\n\nexport type Product = ResourceDocument & Omit<ShopifyProduct, \"variants\" | \"images\" | \"media\" | \"metafields\" | \"category\" | \"unpublishedPublications\"> & {\n category: string;\n unpublishedPublications: ShopifyProduct[\"unpublishedPublications\"][\"edges\"][0][\"node\"][]\n variants: (Omit<ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"], \"presentmentPrices\"> & {\n images?: Array<ShopifyProductImage> // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][]\n productId?: string\n })[]\n related?: Array<string>\n images: Array<ShopifyProductImage>\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][]\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][]\n keywords: Array<string>\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\"\n syncAt?: string;\n markets?: Array<string>;\n}\n\nexport interface Analytics {\n query: AnalyticsQueryDoc & {\n items: AnalyticsDownloadItem[]\n }\n}\n\nexport interface AnalyticsQueryDoc {\n tableId: string\n accountId: string\n profileId: string\n profileName: string\n webPropertyId: string\n internalWebPropertyId: string\n}\n\nexport interface AnalyticsDownloadItem {\n id: string\n name: string\n value: number\n externalId: string\n type: AnalyticsReports\n}\n\nexport interface AnalyticsUploadItems {\n id: string\n [AnalyticsReports.Sales7Days]: number\n [AnalyticsReports.Sales30Days]: number\n [AnalyticsReports.Revenue7Days]: number\n [AnalyticsReports.Revenue30Days]: number\n}\n\nexport enum AnalyticsReports {\n Sales7Days = \"sales_7days\",\n Sales30Days = \"sales_30days\",\n Revenue7Days = \"revenue_7days\",\n Revenue30Days = \"revenue_30days\",\n}\n\nexport enum ActivityLogAction {\n Create = \"create\",\n Delete = \"delete\",\n Duplicate = \"duplicate\",\n Sync = \"sync\",\n Trigger = \"trigger\",\n Update = \"update\",\n}\n\nexport interface ShopifyUser {\n account_owner: boolean\n bio: string\n email: string\n first_name: string\n id: string\n im: string\n last_name: string\n permissions: Array<string>\n phone: string\n receive_announcements: number\n screen_name: string\n url: string\n locale: string\n user_type: string\n}\n\nexport interface ActivityLog extends ResourceDocument {\n action: ActivityLogAction\n resourceDisplayName: string\n resourceId: string\n resourceType: ResourceType\n shopifyStaffMemberId: string | undefined\n}\n\nexport type BillingAppSubscription = ShopifyAppSubscription\nexport type BillingAppPurchaseOneTime = ShopifyAppPurchaseOneTime\nexport type BillingAppPurchaseCredit = {\n id: string;\n name: string;\n status: AppPurchaseStatus;\n amount: string;\n}"]}
1
+ {"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../src/types/firestore.ts"],"names":[],"mappings":"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","sourcesContent":["import { ShopifyAppPurchaseOneTime, ShopifyAppSubscription, ShopifyProduct, ShopifyProductImage } from \"./shopify\";\nimport { ElasticDataType } from \"./elastic\";\nimport { AppPurchaseStatus } from \"./graphql\";\n\nexport interface ResourceDocument {\n id: string;\n keywords: Array<string>;\n version?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport enum ResourceType {\n ActivityLog = \"activity_log\",\n Product = \"product\",\n Collection = \"collection\",\n Curation = \"curation\",\n Callout = \"callout\",\n SettingsAccount = \"account_settings\",\n SettingsAutomation = \"automation_settings\",\n SettingsProduct = \"product_settings\",\n FilterGroup = \"filter_group\",\n FilterFacet = \"filter_facet\",\n MergedValue = \"merged_value\",\n Redirect = \"redirect\",\n Relevancy = \"relevancy\",\n Sort = \"sort\",\n Antonym = \"antonym\",\n Synonym = \"synonym\",\n Task = \"task\",\n}\n\nexport const ResourceTypeLabel: Record<ResourceType, string> = {\n [ResourceType.ActivityLog]: \"Activity log\",\n [ResourceType.Product]: \"Product\",\n [ResourceType.Collection]: \"Collection\",\n [ResourceType.Curation]: \"Curation\",\n [ResourceType.Callout]: \"Callout\",\n [ResourceType.SettingsAccount]: \"Settings account\",\n [ResourceType.SettingsAutomation]: \"Settings automation\",\n [ResourceType.SettingsProduct]: \"Settings product\",\n [ResourceType.FilterGroup]: \"Filter group\",\n [ResourceType.FilterFacet]: \"Filter facet\",\n [ResourceType.MergedValue]: \"Merged value\",\n [ResourceType.Redirect]: \"Redirect\",\n [ResourceType.Relevancy]: \"Relevancy\",\n [ResourceType.Sort]: \"Sort\",\n [ResourceType.Antonym]: \"Antonym\",\n [ResourceType.Synonym]: \"Synonym\",\n [ResourceType.Task]: \"Task\",\n};\n\nexport interface Log {\n id: string\n keywords: Array<string>\n message: string\n platform: \"reactify\" | \"shopify\" | \"google\" | \"elastic\"\n percentCompleted: number\n action?: {\n type: \"retry\"\n label: string\n task: Task[\"taskId\"]\n }\n step:\n | \"syncMainDownload\"\n | \"syncBulkStart\"\n | \"syncBulkDownload\"\n | \"syncBulkTransform\"\n | \"syncBulkMerge\"\n | \"syncBulkUpload\"\n | \"syncBulkCleanup\"\n | \"syncBulkCleanupCurations\"\n | \"analyticsDownload\"\n | \"analyticsTransform\"\n | \"analyticsUpload\"\n | \"complete\"\n | \"analyticsStart\"\n title: string\n type: \"bulk\" | \"analytics\"\n data?: string // JSON sringified data\n progress: \"new\" | \"error\" | \"complete\" | \"partiallyComplete\"\n status: \"success\" | \"info\" | \"warning\" | \"critical\" // polaris banner status\n createdAt: string;\n updatedAt?: string;\n finishedAt?: string;\n}\n\nexport interface Task {\n logId: string\n taskId:\n | \"setupInstall\"\n | \"setupWebhook\"\n | \"syncCollectionId\"\n | \"syncProductId\"\n | \"syncMainDownload\"\n | \"syncBulkReset\"\n | \"syncBulkStart\"\n | \"syncBulkDownload\"\n | \"syncBulkTransform\"\n | \"syncBulkMerge\"\n | \"syncBulkUpload\"\n | \"syncBulkCleanup\"\n | \"syncBulkCleanupCurations\"\n | \"cleanCuration\"\n | \"cleanCurationId\"\n | \"plantSeeds\"\n | \"refreshMappings\"\n | \"refreshDefinedFields\"\n | \"refreshCurations\"\n | \"analyticsStart\"\n | \"analyticsDownload\"\n | \"analyticsTransform\"\n | \"analyticsUpload\"\n | \"indexCleanup\"\n | \"cacheClear\"\n | \"syncMarkets\"\n | \"syncConfig\"\n | \"syncShop\"\n firstRun?: boolean\n createdAt: string;\n updatedAt?: string;\n}\nexport interface TaskSub extends Task {\n taskSubId: string;\n}\n\nexport interface TaskSubSyncCollectionId extends TaskSub {\n taskId: \"syncCollectionId\"\n collectionGid: string\n}\nexport interface TaskSubSyncProductId extends TaskSub {\n taskId: \"syncProductId\"\n productGid: string\n}\nexport interface TaskSyncShop extends Task {\n taskId: \"syncShop\"\n manual?: boolean\n}\n\nexport interface TaskSyncMainDownload extends Task {\n taskId: \"syncMainDownload\"\n type: \"product_download\" | \"product_polling\" | \"collection_download\" | \"collection_polling\";\n productUrl?: string\n collectionUrl?: string\n manual?: boolean\n}\n\nexport interface TaskSyncBulkReset extends Task {\n taskId: \"syncBulkReset\"\n manual?: boolean\n}\n\nexport interface TaskSyncBulkStart extends Task {\n taskId: \"syncBulkStart\"\n manual?: boolean\n}\n\nexport interface TaskSyncBulkDownload extends Task {\n taskId: \"syncBulkDownload\"\n type: \"collection\" | \"product\" | \"product_market\"\n productUrl?: string\n productMarketUrl?: string\n collectionUrl?: string\n syncAt: string\n}\n\nexport const TaskSyncBulkDownloadTypeLabel: Record<\"collection\" | \"product\" | \"product_market\", string> = {\n collection: \"collection details\",\n product: \"product details\",\n product_market: \"product market details\",\n};\n\nexport interface TaskSyncBulkTransform extends Task {\n taskId: \"syncBulkTransform\"\n productUrl: string\n productMarketUrl?: string\n collectionUrl: string\n collectionCount?: number\n lastCollectionCursor?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkMerge extends Task {\n taskId: \"syncBulkMerge\"\n productCount: number\n collectionCount: number\n productCompletedCount?: number\n startAfterId?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkUpload extends Task {\n taskId: \"syncBulkUpload\"\n productCount: number\n collectionCount: number\n productCompletedCount?: number\n startAfterId?: string\n syncAt: string\n}\n\nexport interface TaskSyncBulkCleanup extends Task {\n taskId: \"syncBulkCleanup\"\n syncAt: string\n}\n\nexport interface TaskSyncBulkCleanupCurations extends Task {\n taskId: \"syncBulkCleanupCurations\"\n}\n\nexport interface TaskCleanCuration extends Task {\n taskId: \"cleanCuration\";\n startAfterId?: string;\n manual?: boolean;\n}\nexport interface TaskSubCleanCurationId extends TaskSub {\n taskId: \"cleanCurationId\";\n curationId: string;\n manual?: boolean;\n}\nexport interface TaskSetupInstall extends Task {\n taskId: \"setupInstall\"\n}\n\nexport interface TaskSetupWebhook extends Task {\n taskId: \"setupWebhook\"\n}\n\nexport interface TaskPlantSeeds extends Task {\n taskId: \"plantSeeds\"\n}\n\nexport interface TaskRefreshMappings extends Task {\n taskId: \"refreshMappings\"\n manual?: boolean\n}\n\nexport interface TaskRefreshDefinedFields extends Task {\n taskId: \"refreshDefinedFields\"\n manual?: boolean\n}\n\nexport interface TaskRefreshCurations extends Task {\n taskId: \"refreshCurations\"\n manual?: boolean\n}\n\nexport interface TaskAnalyticsStart extends Task {\n taskId: \"analyticsStart\"\n manual?: boolean\n}\n\nexport interface TaskAnalyticsDownload extends Task {\n taskId: \"analyticsDownload\"\n reports: AnalyticsReports[]\n manual?: boolean\n}\n\nexport interface TaskAnalyticsTransform extends Task {\n taskId: \"analyticsTransform\"\n startAfterId?: string\n manual?: boolean\n}\n\nexport interface TaskAnalyticsUpload extends Task {\n taskId: \"analyticsUpload\"\n startAfterId?: string\n manual?: boolean\n}\n\nexport interface TaskIndexCleanup extends Task {\n taskId: \"indexCleanup\"\n manual?: boolean\n}\n\nexport interface TaskCacheClear extends Task {\n taskId: \"cacheClear\"\n manual?: boolean\n}\n\nexport interface TaskSyncMarkets extends Task {\n taskId: \"syncMarkets\"\n manual?: boolean\n}\n\nexport interface TaskSyncConfig extends Task {\n taskId: \"syncConfig\"\n manual?: boolean\n}\nexport interface Lock {\n logId: string\n taskType: \"sync\" | \"syncConfig\" | \"syncCollectionId\" | \"syncProductId\" | \"analytics\"\n createdAt: string;\n expiresAt: string\n}\n\nexport enum ManageAdminFlag {\n Example = \"example\",\n}\nexport interface ManageAdmin {\n installed: boolean;\n indexRead: string;\n indexWrite: string;\n indexAlias: string;\n indexAutomatic: boolean;\n indexRollback: Array<{\n indexName: string;\n documentCount: number;\n createdAt: number;\n }>;\n indexRefreshInterval: string;\n // indexSettingsPending: boolean;\n endpoint: string;\n cluster: string;\n customMappings: string; // JSON sringified data\n customFilters: string; // JSON sringified data\n timezone: string;\n cacheEnabled: boolean;\n cacheSeconds: number;\n flags?: Array<ManageAdminFlag>;\n production: boolean;\n}\n\nexport interface ManageProduct {\n tagChild?: string\n tagKeys?: Array<string>\n tagParent?: string\n tagRelated?: string\n syncObjects?: Array<string>\n tagExclude?: Array<string>\n tagExcludeSearch?: Array<string>\n tagExcludeCollection?: Array<string>\n tagSeparator?: string\n metafieldWhitelist?: Array<string>\n externalAppReactifyImageAI: boolean\n suggestionsExclude?: Array<string>;\n automaticCleanCurations?: boolean;\n\n merchandisingCalloutAutofillBehaviour: MerchandisingCalloutAutofillBehaviour;\n}\n\nexport enum MerchandisingCalloutAutofillBehaviour {\n Always = \"always\",\n MoreResults = \"more_results\",\n}\n\nexport interface ManageAutomation {\n sync: boolean\n webhooks: boolean\n mappings: boolean\n curations: boolean\n analytics: boolean\n syncFrequency: string\n syncThreshold: number\n notificationEnabled?: boolean;\n notificationEmail?: string;\n\n syncCatalogueCompletedAt?: number;\n syncAnalyticsCompletedAt?: number;\n syncConfigCompletedAt?: number;\n\n syncSpecialResourcePendingAt?: number | null;\n\n syncConfigHash?: string;\n}\n\nexport interface ManageAccount {\n shopifyPlanCustomCost?: number;\n shopifyPlanType?: \"general\" | \"partner\" | \"custom\";\n shopifyPlanStore?: \"primary\" | \"addon\";\n shopifyPlan?: \"non-plus\" | \"plus\" | \"development\";\n shopifyPlanSubscriptionShareCode?: string;\n stripeCustomerId?: string\n googleAnalyticsId?: string\n googleEmail?: string\n googleAccessToken?: string\n googleRefreshToken?: string\n googleAccessTokenExpiryDate?: number\n googleAnalyticsType?: \"UA\" | \"GA4\"\n googleIdField?: \"shopify_code\" | \"product_id\" | \"variant_id\" | \"variant_sku\" | \"variant_barcode\"\n}\n\nexport enum SettingsCurationsImageOption {\n Index = \"index\",\n Suffix = \"suffix\",\n}\n\nexport interface SettingsCurations {\n pageSize?: number\n gridColumns?: number\n imageOption: SettingsCurationsImageOption\n imagePosition: number\n imageSuffix: string\n imageSize?: \"small\" | \"medium\" | \"large\"\n imageSizePx: number;\n\n showCardDetailTitle?: boolean;\n showCardDetailContent?: boolean;\n showCardDetailPrice?: boolean;\n showCardDetailVendor?: boolean;\n showCardDetailPreorder?: boolean;\n showCardDetailDiscount?: boolean;\n showCardDetailInventory?: boolean;\n showCardDetailAvailability?: boolean;\n showCardDetailProfitMargin?: boolean;\n showCardDetailPublishedDays?: boolean;\n showCardDetailAnalyticsSales7Days?: boolean;\n showCardDetailAnalyticsSales30Days?: boolean;\n showCardDetailAnalyticsRevenue7Days?: boolean;\n showCardDetailAnalyticsRevenue30Days?: boolean;\n}\n\nexport interface Relevance extends ResourceDocument {\n field: string\n enabled: boolean\n importance: number\n searchType: \"always_search\" | \"search_page\" | \"instant_search\"\n hidden?: boolean\n}\n\nexport interface DefinedField {\n label: string\n value: string\n type: ElasticDataType | string\n}\n\nexport interface Sort extends ResourceDocument {\n name: string\n handle: string\n field: string\n position: number\n enabled: boolean\n direction: \"desc\" | \"asc\"\n visibility: \"all\" | \"search\" | \"collection\"\n hidden?: boolean\n}\n\nexport interface FilterGroup extends ResourceDocument {\n name: string\n handle: string\n enabled: boolean\n pageSize: number\n keywords: Array<string>\n collections: Array<string>\n type: \"search\" | \"collection\"\n paginationType: \"pagination\" | \"load_more\" | \"next_prev\" | \"infinite_scroll\"\n inventoryVisibility: \"show_all\" | \"hide_products\" | \"hide_variants\" | \"hide_all\"\n}\n\nexport interface FilterFacet extends ResourceDocument {\n name: string\n field: string\n handle: string\n position: number\n enabled: boolean\n keywords: Array<string>\n customSortOrder?: string\n displayType: \"multi\" | \"single\" | \"slider\"\n displayView: \"list\" | \"check\" | \"swatch\" | \"range\" | \"box\"\n displaySize: string\n displaySliderStep: string\n displaySliderPrefix: string\n displaySliderSuffix: string\n displayRangeOptions: Array<string>\n settingsShowMore: boolean\n settingsUppercase: boolean\n settingsShowSearch: boolean\n settingsShowFilter: boolean\n settingsShowEmptyValues: boolean\n settingsHideUnavailable: boolean\n settingsCollapsedMobile: boolean\n settingsCollapsedDesktop: boolean\n settingsFilterLogic: \"and\" | \"or\"\n valuesShow: \"all\" | \"manual\"\n valuesManual: Array<string>\n valuesExclude: Array<string>\n}\n\nexport interface Redirect extends ResourceDocument {\n url: string\n query: string\n enabled: boolean\n keywords: Array<string>\n hidden?: boolean\n}\n\nexport interface Curation extends ResourceDocument {\n title: string\n status: CurationStatus\n published: boolean\n keywords: Array<string>\n searchTerm?: string\n longRunningTask?: boolean\n collectionHandle?: string\n collectionId?: string\n type: CurationType;\n boosting?: {\n groupings?: BoostGrouping[]\n sortings?: BoostSorting[]\n }\n sort?: CurationSort\n schedule?: CurationSchedule\n hidden?: boolean\n\n markets?: Array<string>;\n}\n\nexport enum CurationType {\n Search = \"search\",\n Collection = \"collection\",\n};\n\nexport const CurationTypeLabel: Record<CurationType, string> = {\n [CurationType.Search]: \"Search\",\n [CurationType.Collection]: \"Collection\",\n};\n\nexport interface CurationSort {\n sortTag?: string\n sortOption: string\n sortDirection: \"asc\" | \"desc\"\n sortVariantOption?: \"option1\" | \"option2\" | \"option3\"\n}\n\nexport interface CurationSchedule {\n schedulePublish: string\n schedulePublishEnabled: boolean\n scheduleUnpublish: string\n scheduleUnpublishEnabled: boolean\n}\n\nexport enum CurationStatus {\n Draft = \"draft\",\n Publishing = \"publishing\",\n Published = \"published\",\n Error = \"error\",\n Unpublishing = \"unpublishing\",\n Resetting = \"resetting\",\n Pinning = \"pinning\",\n Sorting = \"sorting\",\n}\n\nexport const CurationStatusLabel: Record<CurationStatus, string> = {\n [CurationStatus.Draft]: \"Draft\",\n [CurationStatus.Publishing]: \"Publishing\",\n [CurationStatus.Published]: \"Published\",\n [CurationStatus.Error]: \"Error\",\n [CurationStatus.Unpublishing]: \"Unpublishing\",\n [CurationStatus.Resetting]: \"Resetting\",\n [CurationStatus.Pinning]: \"Pinning\",\n [CurationStatus.Sorting]: \"Sorting\",\n}\n\nexport interface CurationHiding {\n productId: number;\n}\n\nexport interface Market {\n id: string;\n label: string;\n enabled: boolean;\n publicationId: string;\n locationId?: string;\n currencyCode?: string;\n}\n\nexport interface BoostGrouping {\n key: string\n value: string\n field: string\n position: number\n operation: string\n}\n\nexport interface BoostSorting {\n key: string\n field: string\n query?: string\n position: number\n direction: \"asc\" | \"desc\"\n}\n\nexport type Pin = PinProduct | PinCallout\n\nexport enum PinSource {\n Manual = \"manual\",\n Automatic = \"automatic\",\n}\n\nexport enum PinType {\n Product = \"product\",\n Callout = \"callout\",\n}\n\nexport type PinTypeOnly = Pick<Pin, \"type\">\n\nexport function isPinProduct(pin: PinTypeOnly): pin is PinProduct {\n return PinType.Product === pin.type;\n}\n\nexport function isPinCallout(pin: PinTypeOnly): pin is PinCallout {\n return PinType.Callout === pin.type;\n}\n\nexport interface PinProduct {\n key: string\n type: PinType.Product\n position: number\n productId: number\n source?: PinSource // @todo migrate and change to non-optional field\n}\n\nexport interface PinCallout {\n key: string\n type: PinType.Callout\n position: number\n calloutId: string\n source?: PinSource // @todo migrate and change to non-optional field\n}\n\nexport interface Link {\n content: string\n url: string\n key: string\n}\n\nexport interface Callout extends ResourceDocument {\n id: string;\n type: CalloutType;\n link: string;\n links: Array<Link>;\n // name: string;\n title: string;\n content: string;\n enabled: boolean;\n textColor: string;\n keywords: Array<string>;\n mobileImage: string;\n mobileVideo: string;\n desktopVideo: string;\n desktopImage: string;\n backgroundColor: string;\n visibility: \"desktop\" | \"mobile\" | \"all\";\n displayColumns: string; // @todo this should be a number\n displayRows: string; // @todo this should be a number\n selectedDates?: {\n end: string;\n start: string;\n };\n hidden?: boolean;\n}\n\nexport enum CalloutType {\n Standard = \"standard\",\n Filler = \"filler\",\n}\n\nexport enum SynonymType {\n Group = \"group\",\n Oneway = \"oneway\",\n}\nexport interface Synonym extends ResourceDocument {\n id: string\n name: string\n enabled: boolean\n keywords: Array<string>\n synonyms: Array<string>\n type: SynonymType\n hidden?: boolean\n}\nexport interface Antonym extends ResourceDocument {\n id: string\n name: string\n enabled: boolean\n keywords: Array<string>\n antonyms: Array<string>\n hidden?: boolean\n}\n\nexport interface MergedValue extends ResourceDocument {\n id: string\n name: string\n field: string\n enabled: boolean\n keywords: Array<string>\n values: Array<string>\n hidden?: boolean\n}\n\nexport interface Collection extends ResourceDocument {\n title: string\n handle: string\n shopifyId: string\n productIds: Array<string>\n storefrontId: string\n legacyResourceId: number\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\"\n syncAt?: string\n}\n\n// product is the shopify product with edges and nodes normalised\n\nexport type Product = ResourceDocument & Omit<ShopifyProduct, \"variants\" | \"images\" | \"media\" | \"metafields\" | \"category\" | \"unpublishedPublications\"> & {\n category: string;\n unpublishedPublications: ShopifyProduct[\"unpublishedPublications\"][\"edges\"][0][\"node\"][]\n variants: (Omit<ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"], \"presentmentPrices\"> & {\n images?: Array<ShopifyProductImage> // from child product if this variant is from a child\n presentmentPrices: ShopifyProduct[\"variants\"][\"edges\"][0][\"node\"][\"presentmentPrices\"][\"edges\"][0][\"node\"][]\n productId?: string\n })[]\n related?: Array<string>\n images: Array<ShopifyProductImage>\n media: ShopifyProduct[\"media\"][\"edges\"][0][\"node\"][]\n metafields: ShopifyProduct[\"metafields\"][\"edges\"][0][\"node\"][]\n keywords: Array<string>\n syncStatus?: \"error\" | \"complete\" | \"partiallyComplete\"\n syncAt?: string;\n markets?: Array<string>;\n}\n\nexport interface Analytics {\n query: AnalyticsQueryDoc & {\n items: AnalyticsDownloadItem[]\n }\n}\n\nexport interface AnalyticsQueryDoc {\n tableId: string\n accountId: string\n profileId: string\n profileName: string\n webPropertyId: string\n internalWebPropertyId: string\n}\n\nexport interface AnalyticsDownloadItem {\n id: string\n name: string\n value: number\n externalId: string\n type: AnalyticsReports\n}\n\nexport interface AnalyticsUploadItems {\n id: string\n [AnalyticsReports.Sales7Days]: number\n [AnalyticsReports.Sales30Days]: number\n [AnalyticsReports.Revenue7Days]: number\n [AnalyticsReports.Revenue30Days]: number\n}\n\nexport enum AnalyticsReports {\n Sales7Days = \"sales_7days\",\n Sales30Days = \"sales_30days\",\n Revenue7Days = \"revenue_7days\",\n Revenue30Days = \"revenue_30days\",\n}\n\nexport enum ActivityLogAction {\n Create = \"create\",\n Delete = \"delete\",\n Duplicate = \"duplicate\",\n Sync = \"sync\",\n Trigger = \"trigger\",\n Update = \"update\",\n}\n\nexport interface ShopifyUser {\n account_owner: boolean\n bio: string\n email: string\n first_name: string\n id: string\n im: string\n last_name: string\n permissions: Array<string>\n phone: string\n receive_announcements: number\n screen_name: string\n url: string\n locale: string\n user_type: string\n}\n\nexport interface ActivityLog extends ResourceDocument {\n action: ActivityLogAction\n resourceDisplayName: string\n resourceId: string\n resourceType: ResourceType\n shopifyStaffMemberId: string | undefined\n}\n\nexport type BillingAppSubscription = ShopifyAppSubscription\nexport type BillingAppPurchaseOneTime = ShopifyAppPurchaseOneTime\nexport type BillingAppPurchaseCredit = {\n id: string;\n name: string;\n status: AppPurchaseStatus;\n amount: string;\n}"]}
@@ -28,6 +28,9 @@ const generateSortSort = (options) => {
28
28
  if (options.provider.mode !== "instant-search") {
29
29
  if (options.sortOption &&
30
30
  !["_score", "collections.position"].includes(options.sortOption.field)) {
31
+ if (["price_min", "price_max"].includes(options.sortOption.field) && options.provider.market) {
32
+ return [{ [`${options.sortOption.field}_market_${options.provider.market}`]: options.sortOption.direction }];
33
+ }
31
34
  return [{ [options.sortOption.field]: options.sortOption.direction }];
32
35
  }
33
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sortOption.js","sourceRoot":"","sources":["../../../src/utility/sortOption.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactifySearchProviderProps } from \"../components\";\nimport { Config, ConfigCuration, ConfigSort } from \"../types\";\n\nexport const getSortOptions = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n sortOption?: string;\n}) => {\n return options.config.sort\n .sort((a, b) => {\n const aInt =\n typeof a.position === \"string\"\n ? parseInt(a.position, 10)\n : a.position;\n const bInt =\n typeof b.position === \"string\"\n ? parseInt(b.position, 10)\n : b.position;\n return aInt - bInt;\n })\n .filter(({ visibility }) => [\"all\", options.provider.mode].includes(visibility));\n\n}\n\nexport const getSortOption = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n sortOption?: string;\n query?: Record<string, string>;\n}) => {\n const sortOptions = getSortOptions(options);\n\n return sortOptions.find(({ handle }) => handle === options.sortOption || handle === options.query?.sort) ?? sortOptions[0];\n}\n\nexport const generateSortSort = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n curation?: ConfigCuration;\n sortOption?: ConfigSort;\n}) => {\n // curation positions are only applied for the default `collections.position` or `_score` sort\n // if the sort is something else, apply a normal sort which applies what the user has requested\n if (options.provider.mode !== \"instant-search\") {\n if (\n options.sortOption &&\n ![\"_score\", \"collections.position\"].includes(options.sortOption.field)\n ) {\n return [{ [options.sortOption.field]: options.sortOption.direction }];\n }\n }\n\n const sorts = [];\n\n // collection curation pin sorting\n if (options.provider.mode === \"collection\" && options.provider.collectionHandle) {\n if (options.curation?.collectionHandle) {\n const queriesMust: Array<unknown> = [{\n term: {\n \"curations.collectionHandle.keyword\": options.curation.collectionHandle,\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n });\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\"\n },\n })\n }\n sorts.push({\n \"curations.position\": {\n unmapped_type: \"long\",\n order: \"asc\",\n nested: {\n path: \"curations\",\n filter: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n }\n }\n },\n },\n });\n }\n }\n\n // search options.curation pin sorting\n if (options.provider.mode === \"search\" || options.provider.mode === \"instant-search\") {\n if (options.curation?.searchTerm) {\n const queriesMust: Array<unknown> = [{\n term: {\n \"curations.searchTerm.keyword\": options.curation.searchTerm.toLowerCase(),\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n });\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\"\n },\n })\n }\n sorts.push({\n \"curations.position\": {\n unmapped_type: \"long\",\n order: \"asc\",\n nested: {\n path: \"curations\",\n filter: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n }\n }\n },\n },\n });\n }\n }\n\n // options.curation boost sorting\n if (options.curation) {\n if (0 < options.curation.boosting.groupings.length) {\n const groupings = options.curation.boosting.groupings.sort((a, b) =>\n a.position > b.position ? 1 : -1\n );\n\n for (const grouping of groupings) {\n try {\n const query = JSON.parse(grouping.query);\n if (query) sorts.push(query);\n } catch {\n console.error(\n `query could not be parsed for boost grouping`,\n grouping\n );\n }\n }\n }\n\n if (0 < options.curation.boosting.sortings.length) {\n const sortings = options.curation.boosting.sortings.sort((a, b) =>\n a.position > b.position ? 1 : -1\n );\n\n for (const sorting of sortings) {\n try {\n let query = JSON.parse(sorting.query);\n\n if (options.provider.market && sorting.field === \"inventory_total\") {\n query = {\n [`inventory_quantity_market_${options.provider.market}`]: query.inventory_total,\n };\n }\n if (query) {\n sorts.push(query);\n }\n } catch {\n console.error(`query could not be parsed for boost sorting`, sorting);\n }\n }\n }\n }\n\n // default collection sorting\n if (options.provider.mode === \"collection\" && options.provider.collectionHandle) {\n sorts.push({\n \"collections.position\": {\n order: \"asc\",\n nested: {\n path: \"collections\",\n filter: {\n term: {\n \"collections.handle.keyword\": options.provider.collectionHandle,\n },\n },\n },\n },\n });\n }\n\n // default search sorting\n if (options.provider.mode === \"search\" || options.provider.mode === \"instant-search\") {\n sorts.push(\"_score\");\n }\n\n return sorts;\n}\n\nexport const generateSortQuery = (options: {\n provider: ReactifySearchProviderProps;\n curation?: ConfigCuration;\n sortOption?: ConfigSort;\n}): Record<string, any> | undefined => {\n if (!options.curation || options.curation.id.includes(\"global\")) {\n return { match_all: {} };\n }\n\n const queriesMust: Array<unknown> = [{\n term: {\n [`curations.${\n \"collection\" === options.curation.type\n ? \"collectionHandle\"\n : \"searchTerm\"\n }.keyword`]:\n \"collection\" === options.curation.type\n ? options.curation.collectionHandle\n : options.curation.searchTerm?.toLowerCase(),\n },\n },\n {\n term: {\n \"curations.hidden\": true,\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n })\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\",\n },\n });\n }\n\n return {\n bool: {\n must_not: [\n {\n nested: {\n path: \"curations\",\n query: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n },\n },\n },\n },\n // hide callout when not sorting by _score or collections.position\n ...(options.sortOption &&\n ![\"_score\", \"collections.position\"].includes(options.sortOption.field)\n ? [\n {\n term: {\n type: \"callout\",\n },\n },\n ]\n : []),\n ],\n },\n };\n};\n"]}
1
+ {"version":3,"file":"sortOption.js","sourceRoot":"","sources":["../../../src/utility/sortOption.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactifySearchProviderProps } from \"../components\";\nimport { Config, ConfigCuration, ConfigSort } from \"../types\";\n\nexport const getSortOptions = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n sortOption?: string;\n}) => {\n return options.config.sort\n .sort((a, b) => {\n const aInt =\n typeof a.position === \"string\"\n ? parseInt(a.position, 10)\n : a.position;\n const bInt =\n typeof b.position === \"string\"\n ? parseInt(b.position, 10)\n : b.position;\n return aInt - bInt;\n })\n .filter(({ visibility }) => [\"all\", options.provider.mode].includes(visibility));\n\n}\n\nexport const getSortOption = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n sortOption?: string;\n query?: Record<string, string>;\n}) => {\n const sortOptions = getSortOptions(options);\n\n return sortOptions.find(({ handle }) => handle === options.sortOption || handle === options.query?.sort) ?? sortOptions[0];\n}\n\nexport const generateSortSort = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n curation?: ConfigCuration;\n sortOption?: ConfigSort;\n}) => {\n // curation positions are only applied for the default `collections.position` or `_score` sort\n // if the sort is something else, apply a normal sort which applies what the user has requested\n if (options.provider.mode !== \"instant-search\") {\n if (\n options.sortOption &&\n ![\"_score\", \"collections.position\"].includes(options.sortOption.field)\n ) {\n if ([\"price_min\", \"price_max\"].includes(options.sortOption.field) && options.provider.market) {\n return [{ [`${options.sortOption.field}_market_${options.provider.market}`]: options.sortOption.direction }];\n }\n return [{ [options.sortOption.field]: options.sortOption.direction }];\n }\n }\n\n const sorts = [];\n\n // collection curation pin sorting\n if (options.provider.mode === \"collection\" && options.provider.collectionHandle) {\n if (options.curation?.collectionHandle) {\n const queriesMust: Array<unknown> = [{\n term: {\n \"curations.collectionHandle.keyword\": options.curation.collectionHandle,\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n });\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\"\n },\n })\n }\n sorts.push({\n \"curations.position\": {\n unmapped_type: \"long\",\n order: \"asc\",\n nested: {\n path: \"curations\",\n filter: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n }\n }\n },\n },\n });\n }\n }\n\n // search options.curation pin sorting\n if (options.provider.mode === \"search\" || options.provider.mode === \"instant-search\") {\n if (options.curation?.searchTerm) {\n const queriesMust: Array<unknown> = [{\n term: {\n \"curations.searchTerm.keyword\": options.curation.searchTerm.toLowerCase(),\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n });\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\"\n },\n })\n }\n sorts.push({\n \"curations.position\": {\n unmapped_type: \"long\",\n order: \"asc\",\n nested: {\n path: \"curations\",\n filter: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n }\n }\n },\n },\n });\n }\n }\n\n // options.curation boost sorting\n if (options.curation) {\n if (0 < options.curation.boosting.groupings.length) {\n const groupings = options.curation.boosting.groupings.sort((a, b) =>\n a.position > b.position ? 1 : -1\n );\n\n for (const grouping of groupings) {\n try {\n const query = JSON.parse(grouping.query);\n if (query) sorts.push(query);\n } catch {\n console.error(\n `query could not be parsed for boost grouping`,\n grouping\n );\n }\n }\n }\n\n if (0 < options.curation.boosting.sortings.length) {\n const sortings = options.curation.boosting.sortings.sort((a, b) =>\n a.position > b.position ? 1 : -1\n );\n\n for (const sorting of sortings) {\n try {\n let query = JSON.parse(sorting.query);\n\n if (options.provider.market && sorting.field === \"inventory_total\") {\n query = {\n [`inventory_quantity_market_${options.provider.market}`]: query.inventory_total,\n };\n }\n if (query) {\n sorts.push(query);\n }\n } catch {\n console.error(`query could not be parsed for boost sorting`, sorting);\n }\n }\n }\n }\n\n // default collection sorting\n if (options.provider.mode === \"collection\" && options.provider.collectionHandle) {\n sorts.push({\n \"collections.position\": {\n order: \"asc\",\n nested: {\n path: \"collections\",\n filter: {\n term: {\n \"collections.handle.keyword\": options.provider.collectionHandle,\n },\n },\n },\n },\n });\n }\n\n // default search sorting\n if (options.provider.mode === \"search\" || options.provider.mode === \"instant-search\") {\n sorts.push(\"_score\");\n }\n\n return sorts;\n}\n\nexport const generateSortQuery = (options: {\n provider: ReactifySearchProviderProps;\n curation?: ConfigCuration;\n sortOption?: ConfigSort;\n}): Record<string, any> | undefined => {\n if (!options.curation || options.curation.id.includes(\"global\")) {\n return { match_all: {} };\n }\n\n const queriesMust: Array<unknown> = [{\n term: {\n [`curations.${\n \"collection\" === options.curation.type\n ? \"collectionHandle\"\n : \"searchTerm\"\n }.keyword`]:\n \"collection\" === options.curation.type\n ? options.curation.collectionHandle\n : options.curation.searchTerm?.toLowerCase(),\n },\n },\n {\n term: {\n \"curations.hidden\": true,\n },\n }];\n const queriesMustNot: Array<unknown> = [];\n\n if (options.provider.market) {\n queriesMust.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n })\n } else {\n queriesMustNot.push({\n exists: {\n field: \"curations.markets.keyword\",\n },\n });\n }\n\n return {\n bool: {\n must_not: [\n {\n nested: {\n path: \"curations\",\n query: {\n bool: {\n must: queriesMust,\n ...queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {},\n },\n },\n },\n },\n // hide callout when not sorting by _score or collections.position\n ...(options.sortOption &&\n ![\"_score\", \"collections.position\"].includes(options.sortOption.field)\n ? [\n {\n term: {\n type: \"callout\",\n },\n },\n ]\n : []),\n ],\n },\n };\n};\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@usereactify/search",
3
3
  "description": "React UI library for Reactify Search",
4
- "version": "5.57.1",
4
+ "version": "5.58.0-beta.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
@@ -1,21 +0,0 @@
1
- export declare enum Flags {
2
- SENSOR_SORT = "reactify-search:flag_sensor_sort",
3
- SENSOR_COLLECTION = "reactify-search:flag_sensor_collection",
4
- SENSOR_PUBLISHED = "reactify-search:flag_sensor_published",
5
- SENSOR_INVENTORYAVAILABLE = "reactify-search:flag_sensor_inventoryavailable",
6
- SENSOR_SEARCHTERM = "reactify-search:flag_sensor_searchterm",
7
- SENSOR_SEARCHTERM_VALUE = "reactify-search:flag_sensor_searchterm_value",
8
- SENSOR_SEARCHTERM_PHRASE = "reactify-search:flag_sensor_searchterm_phrase",
9
- SENSOR_SEARCHTERM_PHRASE_SYNONYMS = "reactify-search:flag_sensor_searchterm_phrase_synonyms",
10
- SENSOR_SEARCHTERM_PHRASE_PREFIX = "reactify-search:flag_sensor_searchterm_phrase_prefix",
11
- SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS = "reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms",
12
- SENSOR_SEARCHTERM_CROSS_FIELDS = "reactify-search:flag_sensor_searchterm_cross_fields",
13
- SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS = "reactify-search:flag_sensor_searchterm_cross_fields_synonyms",
14
- SENSOR_SEARCHTERM_SPAN_FIRST = "reactify-search:flag_sensor_searchterm_span_first",
15
- SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS = "reactify-search:flag_sensor_searchterm_span_first_synonyms"
16
- }
17
- export declare const useFlags: () => {
18
- flags: Record<Flags, boolean>;
19
- setFlag: (flag: Flags, value: boolean) => void;
20
- getFlag: (flag: Flags) => boolean;
21
- };
@@ -1,65 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useFlags = exports.Flags = void 0;
7
- const react_1 = __importDefault(require("react"));
8
- const useReactifySearchContext_1 = require("./useReactifySearchContext");
9
- const utility_1 = require("../utility");
10
- var Flags;
11
- (function (Flags) {
12
- Flags["SENSOR_SORT"] = "reactify-search:flag_sensor_sort";
13
- Flags["SENSOR_COLLECTION"] = "reactify-search:flag_sensor_collection";
14
- Flags["SENSOR_PUBLISHED"] = "reactify-search:flag_sensor_published";
15
- Flags["SENSOR_INVENTORYAVAILABLE"] = "reactify-search:flag_sensor_inventoryavailable";
16
- Flags["SENSOR_SEARCHTERM"] = "reactify-search:flag_sensor_searchterm";
17
- Flags["SENSOR_SEARCHTERM_VALUE"] = "reactify-search:flag_sensor_searchterm_value";
18
- Flags["SENSOR_SEARCHTERM_PHRASE"] = "reactify-search:flag_sensor_searchterm_phrase";
19
- Flags["SENSOR_SEARCHTERM_PHRASE_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_phrase_synonyms";
20
- Flags["SENSOR_SEARCHTERM_PHRASE_PREFIX"] = "reactify-search:flag_sensor_searchterm_phrase_prefix";
21
- Flags["SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms";
22
- Flags["SENSOR_SEARCHTERM_CROSS_FIELDS"] = "reactify-search:flag_sensor_searchterm_cross_fields";
23
- Flags["SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_cross_fields_synonyms";
24
- Flags["SENSOR_SEARCHTERM_SPAN_FIRST"] = "reactify-search:flag_sensor_searchterm_span_first";
25
- Flags["SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS"] = "reactify-search:flag_sensor_searchterm_span_first_synonyms";
26
- })(Flags || (exports.Flags = Flags = {}));
27
- const useFlags = () => {
28
- const { options } = (0, useReactifySearchContext_1.useReactifySearchContext)();
29
- const [delta, setDelta] = react_1.default.useState(Date.now());
30
- const getFlag = react_1.default.useCallback((flag) => {
31
- var _a;
32
- if (typeof window === "undefined") {
33
- return true;
34
- }
35
- const flagFromOptions = (_a = options.flags) === null || _a === void 0 ? void 0 : _a[flag];
36
- const flagFromSession = window.sessionStorage.getItem(flag) === "false" ? false : true;
37
- if (typeof flagFromOptions === "undefined") {
38
- return flagFromSession;
39
- }
40
- return flagFromOptions;
41
- }, [delta]);
42
- const setFlag = react_1.default.useCallback((flag, value) => {
43
- if (typeof window === "undefined") {
44
- return;
45
- }
46
- window.sessionStorage.setItem(flag, `${value}`);
47
- setDelta(Date.now());
48
- }, [delta]);
49
- const flags = react_1.default.useMemo(() => {
50
- return Object.values(Flags).reduce((acc, flag) => (Object.assign(Object.assign({}, acc), { [flag]: getFlag(flag) })), {});
51
- }, [delta]);
52
- react_1.default.useEffect(() => {
53
- for (const flag of Object.values(Flags)) {
54
- setFlag(flag, getFlag(flag));
55
- }
56
- }, []);
57
- utility_1.debug.hookOnce("useFlags", "flags", flags);
58
- return {
59
- flags: flags,
60
- setFlag: setFlag,
61
- getFlag: getFlag,
62
- };
63
- };
64
- exports.useFlags = useFlags;
65
- //# sourceMappingURL=useFlags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFlags.js","sourceRoot":"","sources":["../../../src/hooks/useFlags.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,yEAAsE;AACtE,wCAAmC;AAEnC,IAAY,KAeX;AAfD,WAAY,KAAK;IACf,yDAAgD,CAAA;IAChD,qEAA4D,CAAA;IAC5D,mEAA0D,CAAA;IAC1D,qFAA4E,CAAA;IAC5E,qEAA4D,CAAA;IAC5D,iFAAwE,CAAA;IACxE,mFAA0E,CAAA;IAC1E,qGAA4F,CAAA;IAC5F,iGAAwF,CAAA;IACxF,mHAA0G,CAAA;IAC1G,+FAAsF,CAAA;IACtF,iHAAwG,CAAA;IACxG,2FAAkF,CAAA;IAClF,6GAAoG,CAAA;AACtG,CAAC,EAfW,KAAK,qBAAL,KAAK,QAehB;AAEM,MAAM,QAAQ,GAAG,GAAG,EAAE;IAC3B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,mDAAwB,GAAE,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAS,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAE7D,MAAM,OAAO,GAAG,eAAK,CAAC,WAAW,CAC/B,CAAC,IAAW,EAAW,EAAE;;QACvB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,eAAe,GAAG,MAAA,OAAO,CAAC,KAAK,0CAAG,IAAI,CAAC,CAAC;QAC9C,MAAM,eAAe,GACnB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjE,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;YAC3C,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,OAAO,GAAG,eAAK,CAAC,WAAW,CAC/B,CAAC,IAAW,EAAE,KAAc,EAAE,EAAE;QAC9B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,MAAM,KAAK,GAAG,eAAK,CAAC,OAAO,CAAyB,GAAG,EAAE;QACvD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,iCACV,GAAG,KACN,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,IACrB,EACF,EAA4B,CAC7B,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO;KACjB,CAAC;AACJ,CAAC,CAAC;AA1DW,QAAA,QAAQ,YA0DnB","sourcesContent":["import React from \"react\";\nimport { useReactifySearchContext } from \"./useReactifySearchContext\";\nimport { debug } from \"../utility\";\n\nexport enum Flags {\n SENSOR_SORT = \"reactify-search:flag_sensor_sort\",\n SENSOR_COLLECTION = \"reactify-search:flag_sensor_collection\",\n SENSOR_PUBLISHED = \"reactify-search:flag_sensor_published\",\n SENSOR_INVENTORYAVAILABLE = \"reactify-search:flag_sensor_inventoryavailable\",\n SENSOR_SEARCHTERM = \"reactify-search:flag_sensor_searchterm\",\n SENSOR_SEARCHTERM_VALUE = \"reactify-search:flag_sensor_searchterm_value\",\n SENSOR_SEARCHTERM_PHRASE = \"reactify-search:flag_sensor_searchterm_phrase\",\n SENSOR_SEARCHTERM_PHRASE_SYNONYMS = \"reactify-search:flag_sensor_searchterm_phrase_synonyms\",\n SENSOR_SEARCHTERM_PHRASE_PREFIX = \"reactify-search:flag_sensor_searchterm_phrase_prefix\",\n SENSOR_SEARCHTERM_PHRASE_PREFIX_SYNONYMS = \"reactify-search:flag_sensor_searchterm_phrase_prefix_synonyms\",\n SENSOR_SEARCHTERM_CROSS_FIELDS = \"reactify-search:flag_sensor_searchterm_cross_fields\",\n SENSOR_SEARCHTERM_CROSS_FIELDS_SYNONYMS = \"reactify-search:flag_sensor_searchterm_cross_fields_synonyms\",\n SENSOR_SEARCHTERM_SPAN_FIRST = \"reactify-search:flag_sensor_searchterm_span_first\",\n SENSOR_SEARCHTERM_SPAN_FIRST_SYNONYMS = \"reactify-search:flag_sensor_searchterm_span_first_synonyms\",\n}\n\nexport const useFlags = () => {\n const { options } = useReactifySearchContext();\n const [delta, setDelta] = React.useState<number>(Date.now());\n\n const getFlag = React.useCallback(\n (flag: Flags): boolean => {\n if (typeof window === \"undefined\") {\n return true;\n }\n\n const flagFromOptions = options.flags?.[flag];\n const flagFromSession =\n window.sessionStorage.getItem(flag) === \"false\" ? false : true;\n\n if (typeof flagFromOptions === \"undefined\") {\n return flagFromSession;\n }\n\n return flagFromOptions;\n },\n [delta]\n );\n\n const setFlag = React.useCallback(\n (flag: Flags, value: boolean) => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.sessionStorage.setItem(flag, `${value}`);\n setDelta(Date.now());\n },\n [delta]\n );\n\n const flags = React.useMemo<Record<Flags, boolean>>(() => {\n return Object.values(Flags).reduce<Record<Flags, boolean>>(\n (acc, flag) => ({\n ...acc,\n [flag]: getFlag(flag),\n }),\n {} as Record<Flags, boolean>\n );\n }, [delta]);\n\n React.useEffect(() => {\n for (const flag of Object.values(Flags)) {\n setFlag(flag, getFlag(flag));\n }\n }, []);\n\n debug.hookOnce(\"useFlags\", \"flags\", flags);\n\n return {\n flags: flags,\n setFlag: setFlag,\n getFlag: getFlag,\n };\n};\n"]}