@usereactify/search 5.57.0-beta.0 → 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.
- package/CHANGELOG.md +26 -2
- package/dist/package.json +2 -2
- package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.d.ts +0 -2
- package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js +3 -8
- package/dist/src/components/ReactifySearchProvider/ReactifySearchProvider.js.map +1 -1
- package/dist/src/components/Sensor/SensorInventoryAvailable.js +0 -4
- package/dist/src/components/Sensor/SensorInventoryAvailable.js.map +1 -1
- package/dist/src/components/Sensor/SensorPublished.js +0 -4
- package/dist/src/components/Sensor/SensorPublished.js.map +1 -1
- package/dist/src/components/Sensor/SensorSearchTerm.js +5 -26
- package/dist/src/components/Sensor/SensorSearchTerm.js.map +1 -1
- package/dist/src/components/Sensor/SensorSort.js +0 -4
- package/dist/src/components/Sensor/SensorSort.js.map +1 -1
- package/dist/src/hooks/index.d.ts +0 -1
- package/dist/src/hooks/index.js +0 -1
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/useProductPrice.d.ts +2 -1
- package/dist/src/hooks/useProductPrice.js +50 -31
- package/dist/src/hooks/useProductPrice.js.map +1 -1
- package/dist/src/hooks/useReactifySearchContext.d.ts +0 -3
- package/dist/src/hooks/useReactifySearchContext.js.map +1 -1
- package/dist/src/types/elastic.d.ts +4 -0
- package/dist/src/types/elastic.js.map +1 -1
- package/dist/src/types/firestore.d.ts +2 -0
- package/dist/src/types/firestore.js.map +1 -1
- package/dist/src/utility/curation.js +38 -22
- package/dist/src/utility/curation.js.map +1 -1
- package/dist/src/utility/sortOption.js +44 -17
- package/dist/src/utility/sortOption.js.map +1 -1
- package/package.json +1 -1
- package/dist/src/hooks/useFlags.d.ts +0 -21
- package/dist/src/hooks/useFlags.js +0 -65
- package/dist/src/hooks/useFlags.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useReactifySearchContext.js","sourceRoot":"","sources":["../../../src/hooks/useReactifySearchContext.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;
|
|
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;
|
|
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"]}
|
|
@@ -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}"]}
|
|
@@ -34,29 +34,45 @@ const getCuration = (options) => {
|
|
|
34
34
|
}
|
|
35
35
|
return false;
|
|
36
36
|
});
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
const findCuration = () => {
|
|
38
|
+
const curationsMatchingQuery = options.config.curations.filter((curation) => {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
const normalisedSearchTerm = (_a = curation.searchTerm) === null || _a === void 0 ? void 0 : _a.toLowerCase().trim();
|
|
41
|
+
const normalisedCollectionHandle = (_b = curation.collectionHandle) === null || _b === void 0 ? void 0 : _b.toLowerCase().trim();
|
|
42
|
+
if ("instant-search" === options.provider.mode) {
|
|
43
|
+
return ("search" === curation.type &&
|
|
44
|
+
normalisedHandleOrSearchTerm === normalisedSearchTerm);
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
46
|
+
if ("search" === options.provider.mode) {
|
|
47
|
+
return ("search" === curation.type &&
|
|
48
|
+
normalisedHandleOrSearchTerm === normalisedSearchTerm);
|
|
49
|
+
}
|
|
50
|
+
if ("collection" === options.provider.mode) {
|
|
51
|
+
return ("collection" === curation.type &&
|
|
52
|
+
normalisedHandleOrSearchTerm === normalisedCollectionHandle);
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
});
|
|
56
|
+
const curationsMatchingMarketOrNoMarket = curationsMatchingQuery.filter((curation) => {
|
|
57
|
+
var _a, _b, _c;
|
|
58
|
+
if (options.provider.market) {
|
|
59
|
+
if (((_a = curation.markets) === null || _a === void 0 ? void 0 : _a.length) === 0) {
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return (_b = curation.markets) === null || _b === void 0 ? void 0 : _b.includes(options.provider.market);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
return ((_c = curation.markets) === null || _c === void 0 ? void 0 : _c.length) === 0;
|
|
68
|
+
}
|
|
69
|
+
}).sort((curationA, curationB) => {
|
|
70
|
+
var _a, _b, _c, _d;
|
|
71
|
+
return ((_b = (_a = curationB.markets) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = curationA.markets) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);
|
|
72
|
+
});
|
|
73
|
+
return curationsMatchingMarketOrNoMarket[0];
|
|
74
|
+
};
|
|
75
|
+
const curation = findCuration();
|
|
60
76
|
const addGlobalBoosting = (curation) => {
|
|
61
77
|
if (!globalCuration) {
|
|
62
78
|
return curation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curation.js","sourceRoot":"","sources":["../../../src/utility/curation.ts"],"names":[],"mappings":";;;AAGO,MAAM,WAAW,GAAG,CAAC,OAI3B,EAA8B,EAAE;;IAC/B,MAAM,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAA,OAAO,CAAC,UAAU,mCAAI,EAAE,CAAC;IAEjI,MAAM,4BAA4B,GAAG,kBAAkB;SACpD,WAAW,EAAE;SACb,IAAI,EAAE,CAAC;IAEV,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC,EAAE,KAAK,UAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,OAAO,QAAQ,CAAC,EAAE,KAAK,eAAe,CAAC;YACzC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC,EAAE,KAAK,UAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,SAAS,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,OAAO,QAAQ,CAAC,EAAE,KAAK,eAAe,CAAC;YACzC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC5B,OAAO,QAAQ,CAAC,EAAE,KAAK,UAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,OAAO,QAAQ,CAAC,EAAE,KAAK,mBAAmB,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,
|
|
1
|
+
{"version":3,"file":"curation.js","sourceRoot":"","sources":["../../../src/utility/curation.ts"],"names":[],"mappings":"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","sourcesContent":["import { ReactifySearchProviderProps } from \"../components\";\nimport { Config, ConfigCuration } from \"../types\";\n\nexport const getCuration = (options: {\n provider: ReactifySearchProviderProps;\n config: Config;\n searchTerm?: string;\n}): ConfigCuration | undefined => {\n const handleOrSearchTerm = options.provider.mode === \"collection\" ? options.provider.collectionHandle : options.searchTerm ?? \"\";\n\n const normalisedHandleOrSearchTerm = handleOrSearchTerm\n .toLowerCase()\n .trim();\n\n const globalCuration = options.config.curations.find((curation) => {\n if (options.provider.mode === \"search\") {\n if (options.provider.market) {\n return curation.id === `global_${options.provider.market}_search`;\n } else {\n return curation.id === \"global_search\";\n }\n }\n if (options.provider.mode === \"instant-search\") {\n if (options.provider.market) {\n return curation.id === `global_${options.provider.market}_search`;\n } else {\n return curation.id === \"global_search\";\n }\n }\n if (options.provider.mode === \"collection\") {\n if (options.provider.market) {\n return curation.id === `global_${options.provider.market}_collection`;\n } else {\n return curation.id === \"global_collection\";\n }\n }\n return false;\n });\n\n const findCuration = () => {\n const curationsMatchingQuery = options.config.curations.filter((curation) => {\n const normalisedSearchTerm = curation.searchTerm?.toLowerCase().trim();\n const normalisedCollectionHandle = curation.collectionHandle?.toLowerCase().trim();\n\n if (\"instant-search\" === options.provider.mode) {\n return (\n \"search\" === curation.type &&\n normalisedHandleOrSearchTerm === normalisedSearchTerm\n );\n }\n \n if (\"search\" === options.provider.mode) {\n return (\n \"search\" === curation.type &&\n normalisedHandleOrSearchTerm === normalisedSearchTerm\n );\n }\n \n if (\"collection\" === options.provider.mode) {\n return (\n \"collection\" === curation.type &&\n normalisedHandleOrSearchTerm === normalisedCollectionHandle\n );\n }\n\n return false;\n });\n\n const curationsMatchingMarketOrNoMarket = curationsMatchingQuery.filter((curation) => {\n if (options.provider.market) {\n if (curation.markets?.length === 0) {\n return true;\n } else {\n return curation.markets?.includes(options.provider.market);\n }\n } else {\n return curation.markets?.length === 0;\n }\n }).sort((curationA, curationB) => {\n return (curationB.markets?.length ?? 0) - (curationA.markets?.length ?? 0);\n });\n\n return curationsMatchingMarketOrNoMarket[0];\n }\n\n const curation = findCuration();\n\n const addGlobalBoosting = (curation: ConfigCuration) => {\n if (!globalCuration) {\n return curation;\n }\n\n const curationHasRules =\n !!curation.boosting.groupings.length ||\n !!curation.boosting.sortings.length;\n\n if (curationHasRules) {\n return curation;\n }\n\n const curationWithGlobalBoosting = {\n ...curation,\n boosting: globalCuration.boosting,\n } as ConfigCuration;\n\n return curationWithGlobalBoosting;\n };\n\n if (curation) {\n return addGlobalBoosting(curation);\n }\n\n if (globalCuration) {\n return globalCuration;\n }\n\n return undefined;\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
|
}
|
|
@@ -35,18 +38,26 @@ const generateSortSort = (options) => {
|
|
|
35
38
|
// collection curation pin sorting
|
|
36
39
|
if (options.provider.mode === "collection" && options.provider.collectionHandle) {
|
|
37
40
|
if ((_a = options.curation) === null || _a === void 0 ? void 0 : _a.collectionHandle) {
|
|
38
|
-
const
|
|
41
|
+
const queriesMust = [{
|
|
39
42
|
term: {
|
|
40
43
|
"curations.collectionHandle.keyword": options.curation.collectionHandle,
|
|
41
44
|
},
|
|
42
45
|
}];
|
|
46
|
+
const queriesMustNot = [];
|
|
43
47
|
if (options.provider.market) {
|
|
44
|
-
|
|
48
|
+
queriesMust.push({
|
|
45
49
|
term: {
|
|
46
50
|
"curations.markets.keyword": options.provider.market,
|
|
47
51
|
},
|
|
48
52
|
});
|
|
49
53
|
}
|
|
54
|
+
else {
|
|
55
|
+
queriesMustNot.push({
|
|
56
|
+
exists: {
|
|
57
|
+
field: "curations.markets.keyword"
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
50
61
|
sorts.push({
|
|
51
62
|
"curations.position": {
|
|
52
63
|
unmapped_type: "long",
|
|
@@ -54,9 +65,7 @@ const generateSortSort = (options) => {
|
|
|
54
65
|
nested: {
|
|
55
66
|
path: "curations",
|
|
56
67
|
filter: {
|
|
57
|
-
bool: {
|
|
58
|
-
must: queries
|
|
59
|
-
}
|
|
68
|
+
bool: Object.assign({ must: queriesMust }, queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {})
|
|
60
69
|
}
|
|
61
70
|
},
|
|
62
71
|
},
|
|
@@ -66,18 +75,26 @@ const generateSortSort = (options) => {
|
|
|
66
75
|
// search options.curation pin sorting
|
|
67
76
|
if (options.provider.mode === "search" || options.provider.mode === "instant-search") {
|
|
68
77
|
if ((_b = options.curation) === null || _b === void 0 ? void 0 : _b.searchTerm) {
|
|
69
|
-
const
|
|
78
|
+
const queriesMust = [{
|
|
70
79
|
term: {
|
|
71
80
|
"curations.searchTerm.keyword": options.curation.searchTerm.toLowerCase(),
|
|
72
81
|
},
|
|
73
82
|
}];
|
|
83
|
+
const queriesMustNot = [];
|
|
74
84
|
if (options.provider.market) {
|
|
75
|
-
|
|
85
|
+
queriesMust.push({
|
|
76
86
|
term: {
|
|
77
87
|
"curations.markets.keyword": options.provider.market,
|
|
78
88
|
},
|
|
79
89
|
});
|
|
80
90
|
}
|
|
91
|
+
else {
|
|
92
|
+
queriesMustNot.push({
|
|
93
|
+
exists: {
|
|
94
|
+
field: "curations.markets.keyword"
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
81
98
|
sorts.push({
|
|
82
99
|
"curations.position": {
|
|
83
100
|
unmapped_type: "long",
|
|
@@ -85,9 +102,7 @@ const generateSortSort = (options) => {
|
|
|
85
102
|
nested: {
|
|
86
103
|
path: "curations",
|
|
87
104
|
filter: {
|
|
88
|
-
bool: {
|
|
89
|
-
must: queries
|
|
90
|
-
}
|
|
105
|
+
bool: Object.assign({ must: queriesMust }, queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {})
|
|
91
106
|
}
|
|
92
107
|
},
|
|
93
108
|
},
|
|
@@ -113,9 +128,15 @@ const generateSortSort = (options) => {
|
|
|
113
128
|
const sortings = options.curation.boosting.sortings.sort((a, b) => a.position > b.position ? 1 : -1);
|
|
114
129
|
for (const sorting of sortings) {
|
|
115
130
|
try {
|
|
116
|
-
|
|
117
|
-
if (
|
|
131
|
+
let query = JSON.parse(sorting.query);
|
|
132
|
+
if (options.provider.market && sorting.field === "inventory_total") {
|
|
133
|
+
query = {
|
|
134
|
+
[`inventory_quantity_market_${options.provider.market}`]: query.inventory_total,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (query) {
|
|
118
138
|
sorts.push(query);
|
|
139
|
+
}
|
|
119
140
|
}
|
|
120
141
|
catch (_d) {
|
|
121
142
|
console.error(`query could not be parsed for boost sorting`, sorting);
|
|
@@ -151,7 +172,7 @@ const generateSortQuery = (options) => {
|
|
|
151
172
|
if (!options.curation || options.curation.id.includes("global")) {
|
|
152
173
|
return { match_all: {} };
|
|
153
174
|
}
|
|
154
|
-
const
|
|
175
|
+
const queriesMust = [{
|
|
155
176
|
term: {
|
|
156
177
|
[`curations.${"collection" === options.curation.type
|
|
157
178
|
? "collectionHandle"
|
|
@@ -165,13 +186,21 @@ const generateSortQuery = (options) => {
|
|
|
165
186
|
"curations.hidden": true,
|
|
166
187
|
},
|
|
167
188
|
}];
|
|
189
|
+
const queriesMustNot = [];
|
|
168
190
|
if (options.provider.market) {
|
|
169
|
-
|
|
191
|
+
queriesMust.push({
|
|
170
192
|
term: {
|
|
171
193
|
"curations.markets.keyword": options.provider.market,
|
|
172
194
|
},
|
|
173
195
|
});
|
|
174
196
|
}
|
|
197
|
+
else {
|
|
198
|
+
queriesMustNot.push({
|
|
199
|
+
exists: {
|
|
200
|
+
field: "curations.markets.keyword",
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
}
|
|
175
204
|
return {
|
|
176
205
|
bool: {
|
|
177
206
|
must_not: [
|
|
@@ -179,9 +208,7 @@ const generateSortQuery = (options) => {
|
|
|
179
208
|
nested: {
|
|
180
209
|
path: "curations",
|
|
181
210
|
query: {
|
|
182
|
-
bool: {
|
|
183
|
-
must: queries,
|
|
184
|
-
},
|
|
211
|
+
bool: Object.assign({ must: queriesMust }, queriesMustNot.length > 0 ? { must_not: queriesMustNot } : {}),
|
|
185
212
|
},
|
|
186
213
|
},
|
|
187
214
|
},
|
|
@@ -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 queries: Array<unknown> = [{\n term: {\n \"curations.collectionHandle.keyword\": options.curation.collectionHandle,\n },\n }];\n if (options.provider.market) {\n queries.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\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: queries\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 queries: Array<unknown> = [{\n term: {\n \"curations.searchTerm.keyword\": options.curation.searchTerm.toLowerCase(),\n },\n }];\n if (options.provider.market) {\n queries.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\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: queries\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 const query = JSON.parse(sorting.query);\n if (query) sorts.push(query);\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 queries = [{\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\n if (options.provider.market) {\n queries.push({\n term: {\n \"curations.markets.keyword\": options.provider.market,\n },\n })\n }\n\n return {\n bool: {\n must_not: [\n {\n nested: {\n path: \"curations\",\n query: {\n bool: {\n must: queries,\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,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
|
-
};
|