{ "version": 3, "sources": ["src/@omnial/_services/search/product-search.service.ts"], "sourcesContent": ["import { Injectable, OnDestroy } from \"@angular/core\";\r\nimport { BehaviorSubject, Observable, Subscription } from \"rxjs\";\r\nimport { ProductFilterOption } from \"src/@omnial/_models/catalog/product-filter.model\";\r\nimport { Product } from \"src/@omnial/_models/catalog/product.model\";\r\nimport { ProductsPaged } from \"src/@omnial/_models/catalog/products.paged.model\";\r\nimport { ProductSearchResults } from \"src/@omnial/_models/search/product.search-results.model\";\r\nimport { environment } from \"src/environments/environment\";\r\nimport { RepositorySearchService } from \"../repository-search.service\";\r\n\r\n@Injectable()\r\nexport class ProductSearchService implements OnDestroy {\r\n private currentTerm: string;\r\n private pageIndex: number = 0;\r\n public totalHits: number = 0;\r\n public searchProducts: BehaviorSubject = new BehaviorSubject(null);\r\n private $searchProducts: ProductsPaged = null;\r\n\r\n private subscriptions: Subscription[] = [];\r\n\r\n constructor(public repoSearchService: RepositorySearchService) { }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => { sub.unsubscribe() });\r\n }\r\n }\r\n\r\n public load(): void {\r\n this.$searchProducts = null;\r\n this.searchProducts.next(null);\r\n }\r\n\r\n public replaceProducts(products: ProductsPaged): void {\r\n this.$searchProducts = products;\r\n this.searchProducts.next(this.$searchProducts);\r\n }\r\n\r\n public searchProductsPaged(term: string, pageIndex: number, pageSize: number, filters: ProductFilterOption[]): Observable {\r\n return new Observable((observer) => {\r\n this.subscriptions.push(this.repoSearchService.searchProductsPaged(term, pageIndex, pageSize, filters).subscribe({\r\n next: (res) => {\r\n observer.next(res);\r\n observer.complete();\r\n }\r\n }));\r\n });\r\n }\r\n\r\n public getSearchProducts(term: string, filters: ProductFilterOption[]) {\r\n this.currentTerm = term;\r\n this.pageIndex = 0;\r\n this.replaceProducts(null);\r\n this.getSearchProductsRecursive(term, filters);\r\n }\r\n\r\n private getSearchProductsRecursive(term: string, filters: ProductFilterOption[]) {\r\n if (!term || this.currentTerm !== term) { // To stop recursive calls no longer needed\r\n return;\r\n }\r\n if (this.pageIndex * environment.pageSize > this.totalHits) {\r\n if (this.subscriptions && this.subscriptions.length > 0) {\r\n this.subscriptions.forEach((sub) => {\r\n sub.unsubscribe();\r\n });\r\n }\r\n } else {\r\n const subscription = this.searchProductsPaged(term, this.pageIndex, environment.pageSize, filters).subscribe({\r\n next: (res) => {\r\n if (term && this.currentTerm === term) { // To stop recursive calls no longer needed\r\n const page = new ProductsPaged();\r\n if (this.pageIndex == 0) {\r\n this.totalHits = res.hits;\r\n page.filterGroups = res.filterGroups;\r\n }\r\n page.products = res.products as Product[];\r\n page.pageIndex = this.pageIndex;\r\n page.pageSize = environment.pageSize;\r\n page.lastPage = ((this.pageIndex + 1) * environment.pageSize > this.totalHits - 1) || this.pageIndex >= 10;\r\n page.seName = 'search';\r\n page.visible = page.pageIndex === 0;\r\n this.replaceProducts(page);\r\n try {\r\n subscription.unsubscribe();\r\n } catch (e) {\r\n // Nothing - Not initialised - TODO - Deal with this.\r\n }\r\n this.pageIndex++;\r\n if (this.pageIndex <= 10) {\r\n this.getSearchProductsRecursive(term, filters);\r\n }\r\n } else {\r\n this.replaceProducts(null);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n"], "mappings": "qJAUA,IAAaA,GAAoB,IAAA,CAA3B,MAAOA,CAAoB,CAS/BC,YAAmBC,EAA0C,CAA1C,KAAAA,kBAAAA,EAPX,KAAAC,UAAoB,EACrB,KAAAC,UAAoB,EACpB,KAAAC,eAAiD,IAAIC,EAA+B,IAAI,EACvF,KAAAC,gBAAiC,KAEjC,KAAAC,cAAgC,CAAA,CAEyB,CAEjEC,aAAW,CACL,KAAKD,eAAiB,KAAKA,cAAcE,OAAS,GACpD,KAAKF,cAAcG,QAASC,GAAO,CAAGA,EAAIC,YAAW,CAAG,CAAC,CAE7D,CAEOC,MAAI,CACT,KAAKP,gBAAkB,KACvB,KAAKF,eAAeU,KAAK,IAAI,CAC/B,CAEOC,gBAAgBC,EAAuB,CAC5C,KAAKV,gBAAkBU,EACvB,KAAKZ,eAAeU,KAAK,KAAKR,eAAe,CAC/C,CAEOW,oBAAoBC,EAAchB,EAAmBiB,EAAkBC,EAA8B,CAC1G,OAAO,IAAIC,EAAYC,GAAY,CACjC,KAAKf,cAAcgB,KAAK,KAAKtB,kBAAkBgB,oBAAoBC,EAAMhB,EAAWiB,EAAUC,CAAO,EAAEI,UAAU,CAC/GV,KAAOW,GAAO,CACZH,EAASR,KAAKW,CAAG,EACjBH,EAASI,SAAQ,CACnB,EACD,CAAC,CACJ,CAAC,CACH,CAEOC,kBAAkBT,EAAcE,EAA8B,CACnE,KAAKQ,YAAcV,EACnB,KAAKhB,UAAY,EACjB,KAAKa,gBAAgB,IAAI,EACzB,KAAKc,2BAA2BX,EAAME,CAAO,CAC/C,CAEQS,2BAA2BX,EAAcE,EAA8B,CAC7E,GAAI,GAACF,GAAQ,KAAKU,cAAgBV,GAGlC,GAAI,KAAKhB,UAAY4B,EAAYX,SAAW,KAAKhB,UAC3C,KAAKI,eAAiB,KAAKA,cAAcE,OAAS,GACpD,KAAKF,cAAcG,QAASC,GAAO,CACjCA,EAAIC,YAAW,CACjB,CAAC,MAEE,CACL,IAAMmB,EAAe,KAAKd,oBAAoBC,EAAM,KAAKhB,UAAW4B,EAAYX,SAAUC,CAAO,EAAEI,UAAU,CAC3GV,KAAOW,GAAO,CACZ,GAAIP,GAAQ,KAAKU,cAAgBV,EAAM,CACrC,IAAMc,EAAO,IAAIC,EACb,KAAK/B,WAAa,IACpB,KAAKC,UAAYsB,EAAIS,KACrBF,EAAKG,aAAeV,EAAIU,cAE1BH,EAAKhB,SAAWS,EAAIT,SACpBgB,EAAK9B,UAAY,KAAKA,UACtB8B,EAAKb,SAAWW,EAAYX,SAC5Ba,EAAKI,UAAa,KAAKlC,UAAY,GAAK4B,EAAYX,SAAW,KAAKhB,UAAY,GAAM,KAAKD,WAAa,GACxG8B,EAAKK,OAAS,SACdL,EAAKM,QAAUN,EAAK9B,YAAc,EAClC,KAAKa,gBAAgBiB,CAAI,EACzB,GAAI,CACFD,EAAanB,YAAW,CAC1B,MAAY,CACV,CAEF,KAAKV,YACD,KAAKA,WAAa,IACpB,KAAK2B,2BAA2BX,EAAME,CAAO,CAEjD,MACE,KAAKL,gBAAgB,IAAI,CAE7B,EACD,CACH,CACF,iDAtFWhB,GAAoBwC,EAAAC,CAAA,CAAA,CAAA,CAAA,iCAApBzC,EAAoB0C,QAApB1C,EAAoB2C,SAAA,CAAA,CAAA,SAApB3C,CAAoB,GAAA", "names": ["ProductSearchService", "constructor", "repoSearchService", "pageIndex", "totalHits", "searchProducts", "BehaviorSubject", "$searchProducts", "subscriptions", "ngOnDestroy", "length", "forEach", "sub", "unsubscribe", "load", "next", "replaceProducts", "products", "searchProductsPaged", "term", "pageSize", "filters", "Observable", "observer", "push", "subscribe", "res", "complete", "getSearchProducts", "currentTerm", "getSearchProductsRecursive", "environment", "subscription", "page", "ProductsPaged", "hits", "filterGroups", "lastPage", "seName", "visible", "\u0275\u0275inject", "RepositorySearchService", "factory", "\u0275fac"] }