@esolve/ng-esolve-connect 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/README.md +23 -0
  2. package/bundles/esolve-ng-esolve-connect.umd.js +3032 -0
  3. package/bundles/esolve-ng-esolve-connect.umd.js.map +1 -0
  4. package/esm2015/esolve-ng-esolve-connect.js +5 -0
  5. package/esm2015/lib/auth/esolve-account.service.js +60 -0
  6. package/esm2015/lib/auth/esolve-address-record.js +2 -0
  7. package/esm2015/lib/auth/esolve-address.js +19 -0
  8. package/esm2015/lib/auth/esolve-auth-interceptor.service.js +43 -0
  9. package/esm2015/lib/auth/esolve-auth.service.js +200 -0
  10. package/esm2015/lib/auth/esolve-session.js +27 -0
  11. package/esm2015/lib/auth/esolve-session.service.js +85 -0
  12. package/esm2015/lib/auth/esolve-stored-session.js +2 -0
  13. package/esm2015/lib/banners/esolve-banner-image-hotspot-record.js +2 -0
  14. package/esm2015/lib/banners/esolve-banner-image-hotspot.js +9 -0
  15. package/esm2015/lib/banners/esolve-banner-image-record.js +2 -0
  16. package/esm2015/lib/banners/esolve-banner-image.js +14 -0
  17. package/esm2015/lib/banners/esolve-banner-record.js +2 -0
  18. package/esm2015/lib/banners/esolve-banner-type.js +2 -0
  19. package/esm2015/lib/banners/esolve-banner.js +25 -0
  20. package/esm2015/lib/banners/esolve-banner.service.js +104 -0
  21. package/esm2015/lib/cart/esolve-cart-item-record.js +2 -0
  22. package/esm2015/lib/cart/esolve-cart-item.js +24 -0
  23. package/esm2015/lib/cart/esolve-cart-stock-item.js +43 -0
  24. package/esm2015/lib/cart/esolve-cart-totals-record.js +2 -0
  25. package/esm2015/lib/cart/esolve-cart-totals.js +39 -0
  26. package/esm2015/lib/cart/esolve-cart.service.js +371 -0
  27. package/esm2015/lib/cart/esolve-checkout.js +2 -0
  28. package/esm2015/lib/cart/esolve-payment-method-record.js +2 -0
  29. package/esm2015/lib/cart/esolve-payment-method.js +49 -0
  30. package/esm2015/lib/cart/esolve-shipping-cost-record.js +2 -0
  31. package/esm2015/lib/cart/esolve-shipping-cost.js +18 -0
  32. package/esm2015/lib/cart/esolve-shipping-method-record.js +2 -0
  33. package/esm2015/lib/cart/esolve-shipping-method.js +33 -0
  34. package/esm2015/lib/cart/esolve-stock-location-record.js +2 -0
  35. package/esm2015/lib/cart/esolve-stock-location.js +76 -0
  36. package/esm2015/lib/category-tree/esolve-category-tree-item-record.js +2 -0
  37. package/esm2015/lib/category-tree/esolve-category-tree-item.js +48 -0
  38. package/esm2015/lib/category-tree/esolve-category-tree.service.js +126 -0
  39. package/esm2015/lib/esolve-connect.config.js +9 -0
  40. package/esm2015/lib/media/esolve-media-article.js +16 -0
  41. package/esm2015/lib/media/esolve-media-record.js +2 -0
  42. package/esm2015/lib/media/esolve-media.service.js +94 -0
  43. package/esm2015/lib/menu/esolve-menu-item.js +9 -0
  44. package/esm2015/lib/menu/esolve-menu-tree-record.js +2 -0
  45. package/esm2015/lib/menu/esolve-menu.service.js +48 -0
  46. package/esm2015/lib/news/esolve-news-article-author-record.js +2 -0
  47. package/esm2015/lib/news/esolve-news-article-author.js +9 -0
  48. package/esm2015/lib/news/esolve-news-article-list.js +8 -0
  49. package/esm2015/lib/news/esolve-news-article-record.js +2 -0
  50. package/esm2015/lib/news/esolve-news-article.js +20 -0
  51. package/esm2015/lib/news/esolve-news-group-record.js +2 -0
  52. package/esm2015/lib/news/esolve-news-group.js +9 -0
  53. package/esm2015/lib/news/esolve-news-manufacturer-record.js +2 -0
  54. package/esm2015/lib/news/esolve-news-range-record.js +2 -0
  55. package/esm2015/lib/news/esolve-news.service.js +107 -0
  56. package/esm2015/lib/ng-esolve-connect.module.js +43 -0
  57. package/esm2015/lib/shared/esolve-response.js +2 -0
  58. package/esm2015/lib/shared/esolve-url-target.js +2 -0
  59. package/esm2015/lib/shared/seo/esolve-seo-info.js +11 -0
  60. package/esm2015/lib/shared/seo/esolve-seo.service.js +114 -0
  61. package/esm2015/lib/stock/esolve-stock-badge-record.js +2 -0
  62. package/esm2015/lib/stock/esolve-stock-badge.js +11 -0
  63. package/esm2015/lib/stock/esolve-stock-item-list.js +11 -0
  64. package/esm2015/lib/stock/esolve-stock-item-options.js +2 -0
  65. package/esm2015/lib/stock/esolve-stock-item.js +130 -0
  66. package/esm2015/lib/stock/esolve-stock-price.js +43 -0
  67. package/esm2015/lib/stock/esolve-stock-record.js +2 -0
  68. package/esm2015/lib/stock/esolve-stock.service.js +146 -0
  69. package/esm2015/lib/tags/esolve-tag-record.js +2 -0
  70. package/esm2015/lib/tags/esolve-tag.js +9 -0
  71. package/esm2015/lib/topics/esolve-topic-record.js +2 -0
  72. package/esm2015/lib/topics/esolve-topic.js +9 -0
  73. package/esm2015/lib/topics/esolve-topic.service.js +57 -0
  74. package/esm2015/public-api.js +54 -0
  75. package/esolve-ng-esolve-connect.d.ts +5 -0
  76. package/fesm2015/esolve-ng-esolve-connect.js +2226 -0
  77. package/fesm2015/esolve-ng-esolve-connect.js.map +1 -0
  78. package/lib/auth/esolve-account.service.d.ts +17 -0
  79. package/lib/auth/esolve-address-record.d.ts +18 -0
  80. package/lib/auth/esolve-address.d.ts +18 -0
  81. package/lib/auth/esolve-auth-interceptor.service.d.ts +13 -0
  82. package/lib/auth/esolve-auth.service.d.ts +34 -0
  83. package/lib/auth/esolve-session.d.ts +11 -0
  84. package/lib/auth/esolve-session.service.d.ts +22 -0
  85. package/lib/auth/esolve-stored-session.d.ts +5 -0
  86. package/lib/banners/esolve-banner-image-hotspot-record.d.ts +8 -0
  87. package/lib/banners/esolve-banner-image-hotspot.d.ts +12 -0
  88. package/lib/banners/esolve-banner-image-record.d.ts +10 -0
  89. package/lib/banners/esolve-banner-image.d.ts +12 -0
  90. package/lib/banners/esolve-banner-record.d.ts +17 -0
  91. package/lib/banners/esolve-banner-type.d.ts +7 -0
  92. package/lib/banners/esolve-banner.d.ts +21 -0
  93. package/lib/banners/esolve-banner.service.d.ts +26 -0
  94. package/lib/cart/esolve-cart-item-record.d.ts +43 -0
  95. package/lib/cart/esolve-cart-item.d.ts +31 -0
  96. package/lib/cart/esolve-cart-stock-item.d.ts +31 -0
  97. package/lib/cart/esolve-cart-totals-record.d.ts +7 -0
  98. package/lib/cart/esolve-cart-totals.d.ts +50 -0
  99. package/lib/cart/esolve-cart.service.d.ts +112 -0
  100. package/lib/cart/esolve-checkout.d.ts +7 -0
  101. package/lib/cart/esolve-payment-method-record.d.ts +47 -0
  102. package/lib/cart/esolve-payment-method.d.ts +47 -0
  103. package/lib/cart/esolve-shipping-cost-record.d.ts +14 -0
  104. package/lib/cart/esolve-shipping-cost.d.ts +12 -0
  105. package/lib/cart/esolve-shipping-method-record.d.ts +37 -0
  106. package/lib/cart/esolve-shipping-method.d.ts +32 -0
  107. package/lib/cart/esolve-stock-location-record.d.ts +47 -0
  108. package/lib/cart/esolve-stock-location.d.ts +61 -0
  109. package/lib/category-tree/esolve-category-tree-item-record.d.ts +51 -0
  110. package/lib/category-tree/esolve-category-tree-item.d.ts +23 -0
  111. package/lib/category-tree/esolve-category-tree.service.d.ts +47 -0
  112. package/lib/esolve-connect.config.d.ts +49 -0
  113. package/lib/media/esolve-media-article.d.ts +13 -0
  114. package/lib/media/esolve-media-record.d.ts +31 -0
  115. package/lib/media/esolve-media.service.d.ts +28 -0
  116. package/lib/menu/esolve-menu-item.d.ts +8 -0
  117. package/lib/menu/esolve-menu-tree-record.d.ts +20 -0
  118. package/lib/menu/esolve-menu.service.d.ts +14 -0
  119. package/lib/news/esolve-news-article-author-record.d.ts +9 -0
  120. package/lib/news/esolve-news-article-author.d.ts +7 -0
  121. package/lib/news/esolve-news-article-list.d.ts +7 -0
  122. package/lib/news/esolve-news-article-record.d.ts +27 -0
  123. package/lib/news/esolve-news-article.d.ts +16 -0
  124. package/lib/news/esolve-news-group-record.d.ts +6 -0
  125. package/lib/news/esolve-news-group.d.ts +7 -0
  126. package/lib/news/esolve-news-manufacturer-record.d.ts +8 -0
  127. package/lib/news/esolve-news-range-record.d.ts +9 -0
  128. package/lib/news/esolve-news.service.d.ts +31 -0
  129. package/lib/ng-esolve-connect.module.d.ts +11 -0
  130. package/lib/shared/esolve-response.d.ts +34 -0
  131. package/lib/shared/esolve-url-target.d.ts +1 -0
  132. package/lib/shared/seo/esolve-seo-info.d.ts +12 -0
  133. package/lib/shared/seo/esolve-seo.service.d.ts +28 -0
  134. package/lib/stock/esolve-stock-badge-record.d.ts +8 -0
  135. package/lib/stock/esolve-stock-badge.d.ts +9 -0
  136. package/lib/stock/esolve-stock-item-list.d.ts +10 -0
  137. package/lib/stock/esolve-stock-item-options.d.ts +10 -0
  138. package/lib/stock/esolve-stock-item.d.ts +164 -0
  139. package/lib/stock/esolve-stock-price.d.ts +45 -0
  140. package/lib/stock/esolve-stock-record.d.ts +45 -0
  141. package/lib/stock/esolve-stock.service.d.ts +39 -0
  142. package/lib/tags/esolve-tag-record.d.ts +6 -0
  143. package/lib/tags/esolve-tag.d.ts +7 -0
  144. package/lib/topics/esolve-topic-record.d.ts +6 -0
  145. package/lib/topics/esolve-topic.d.ts +7 -0
  146. package/lib/topics/esolve-topic.service.d.ts +20 -0
  147. package/package.json +20 -0
  148. package/public-api.d.ts +40 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"esolve-ng-esolve-connect.js","sources":["../../../projects/ng-esolve-connect/src/lib/esolve-connect.config.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-session.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-address.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-account.service.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-session.service.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth-interceptor.service.ts","../../../projects/ng-esolve-connect/src/lib/ng-esolve-connect.module.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo-info.ts","../../../projects/ng-esolve-connect/src/lib/shared/seo/esolve-seo.service.ts","../../../projects/ng-esolve-connect/src/lib/auth/esolve-auth.service.ts","../../../projects/ng-esolve-connect/src/lib/media/esolve-media-article.ts","../../../projects/ng-esolve-connect/src/lib/tags/esolve-tag.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.ts","../../../projects/ng-esolve-connect/src/lib/media/esolve-media.service.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-group.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-list.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news-article-author.ts","../../../projects/ng-esolve-connect/src/lib/news/esolve-news.service.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner-image-hotspot.ts","../../../projects/ng-esolve-connect/src/lib/banners/esolve-banner.service.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu-item.ts","../../../projects/ng-esolve-connect/src/lib/menu/esolve-menu.service.ts","../../../projects/ng-esolve-connect/src/lib/topics/esolve-topic.service.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock-badge.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock-price.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock-item.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock-item-list.ts","../../../projects/ng-esolve-connect/src/lib/stock/esolve-stock.service.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree-item.ts","../../../projects/ng-esolve-connect/src/lib/category-tree/esolve-category-tree.service.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-stock-location.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart-item.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-shipping-method.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-payment-method.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-shipping-cost.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart-totals.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart-stock-item.ts","../../../projects/ng-esolve-connect/src/lib/cart/esolve-cart.service.ts","../../../projects/ng-esolve-connect/src/public-api.ts","../../../projects/ng-esolve-connect/src/esolve-ng-esolve-connect.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Configuration settings to eSolve Connect Module\r\n */\r\nexport interface EsolveConnectConfig {\r\n /**\r\n * URL to the eSolve instance\r\n */\r\n api_url: string;\r\n\r\n /**\r\n * eSolve Web Service ID. This code in required to authenticate your instance\r\n */\r\n wsid: string;\r\n\r\n /**\r\n * [optional] Text to be prefixed to the page title\r\n */\r\n title_prefix?: string;\r\n\r\n /**\r\n * [optional] Text to be suffixed to the page title\r\n */\r\n title_suffix?: string;\r\n\r\n /**\r\n * [optional] String to separate the title from prefix and suffix. Default is the `|` character\r\n */\r\n title_separator?: string;\r\n\r\n /**\r\n * [optional] Default SEO page title\r\n */\r\n default_seo_title?: string;\r\n\r\n /**\r\n * [optional] Default SEO page description\r\n */\r\n default_seo_description?: string;\r\n\r\n /**\r\n * [optional] Default SEO keywords\r\n */\r\n default_seo_keywords?: string;\r\n\r\n /**\r\n * [optional] Key for user session local storage (Default is `ngEslvUserSession`)\r\n */\r\n user_session_storage_key?: string;\r\n}\r\n\r\nexport const ESOLVE_CONNECT_CONFIG = new InjectionToken<EsolveConnectConfig>('esolve.connect.config');\r\n\r\nexport const GLOBAL_CONFIG = {\r\n images_url: '',\r\n media_path: '/media',\r\n stock_path: '/stock',\r\n banner_path: '/banners'\r\n};\r\n","export class EsolveSession {\r\n constructor(\r\n public id: number = -1,\r\n private _key: string = '',\r\n private _key_expiration_date?: Date\r\n ) { }\r\n\r\n get key(): string {\r\n return this._key;\r\n }\r\n\r\n get expired(): boolean {\r\n const current_date = new Date();\r\n\r\n return (\r\n (this._key_expiration_date === undefined) ||\r\n (current_date >= this._key_expiration_date)\r\n );\r\n }\r\n\r\n get authenticated(): boolean {\r\n return (this.id > 0);\r\n }\r\n\r\n get valid(): boolean {\r\n return (\r\n (this._key !== '') &&\r\n (this._key_expiration_date !== undefined) &&\r\n (this.id >= 0)\r\n );\r\n }\r\n\r\n updateUser(user_id: number): void {\r\n this.id = user_id;\r\n }\r\n}\r\n","import { EsolveAddressType } from './esolve-address-record';\r\n\r\nexport class EsolveAddress {\r\n constructor(\r\n public id: number,\r\n public recipient: string,\r\n public address_type: EsolveAddressType,\r\n public pobox: string,\r\n public place_name: string,\r\n public street_number: string,\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { iif, Observable, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveAddress } from './esolve-address';\r\nimport { EsolveAddressRecord } from './esolve-address-record';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveAccountService {\r\n private _user_id = 0;\r\n\r\n public get user_id(): number {\r\n return this._user_id;\r\n }\r\n\r\n public set user_id(value: number) {\r\n value = ((value > 0) ? value : 0);\r\n\r\n if (this._user_id !== value) {\r\n this._user_id = value;\r\n }\r\n }\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n private processUserAddress(records: EsolveAddressRecord[]): EsolveAddress[] {\r\n const user_addesses: EsolveAddress[] = [];\r\n\r\n if (records && (this._user_id > 0)) {\r\n for (const record of records) {\r\n if (+record.userid === this._user_id) {\r\n user_addesses.push(new EsolveAddress(\r\n +record.id,\r\n record.recipient,\r\n record.address_type,\r\n record.pobox,\r\n record.place_name,\r\n record.street_number,\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude\r\n ));\r\n }\r\n }\r\n }\r\n\r\n return user_addesses;\r\n }\r\n\r\n public getAddress(): Observable<EsolveAddress[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n params = params.set('user_id', this.user_id.toString());\r\n\r\n return iif(\r\n () => (this.user_id > 0),\r\n this.http.get<EsolveGetResponse<EsolveAddressRecord[]>>(\r\n `${this.config.api_url}/service/get-addresses.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processUserAddress(response.records);\r\n }),\r\n catchError((err) => {\r\n return throwError(err);\r\n })\r\n ),\r\n throwError('Log in is required')\r\n );\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\n\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveAccountService } from './esolve-account.service';\r\nimport { EsolveStoredSession } from './esolve-stored-session';\r\nimport { EsolveSession } from './esolve-session';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveSessionService {\r\n private key_expiration_timer: any;\r\n private storage_key = 'ngEslvUserSession';\r\n\r\n private _session: BehaviorSubject<EsolveSession>;\r\n public session: Observable<EsolveSession>;\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n account: EsolveAccountService\r\n ) {\r\n this.setStorageKey();\r\n this._session = new BehaviorSubject<EsolveSession>(new EsolveSession(0, ''));\r\n this.session = this._session.asObservable();\r\n\r\n this._session.subscribe((session) => {\r\n if (session.key !== '') {\r\n account.user_id = session.id;\r\n }\r\n });\r\n }\r\n\r\n public get currentSession(): EsolveSession {\r\n return this._session.value;\r\n }\r\n\r\n private setStorageKey(): void {\r\n if (\r\n (typeof this.config.user_session_storage_key === 'string') &&\r\n (this.config.user_session_storage_key !== '')\r\n ) {\r\n this.storage_key = this.config.user_session_storage_key;\r\n }\r\n }\r\n\r\n private startTimer(callback: () => void, duration: number): void {\r\n this.key_expiration_timer = setTimeout(callback, duration);\r\n }\r\n\r\n clearTimer(): void {\r\n if (this.key_expiration_timer) {\r\n clearTimeout(this.key_expiration_timer);\r\n }\r\n }\r\n\r\n restore(\r\n expirationCallback: (session?: EsolveSession) => void,\r\n invalidSessionCallback: () => void\r\n ): void {\r\n if (!this.currentSession.valid) {\r\n const stored_session_json = localStorage.getItem(this.storage_key);\r\n const stored_session: EsolveStoredSession = (stored_session_json ? JSON.parse(stored_session_json) : null);\r\n\r\n if (!stored_session) {\r\n invalidSessionCallback();\r\n return;\r\n }\r\n\r\n const expiration_date = new Date(stored_session._key_expiration_date);\r\n\r\n const loaded_session = new EsolveSession(\r\n stored_session.id,\r\n stored_session._key,\r\n expiration_date\r\n );\r\n\r\n if (!loaded_session.expired) {\r\n this._session.next(loaded_session);\r\n const expiration_duration = expiration_date.getTime() - new Date().getTime();\r\n this.startTimer(expirationCallback, expiration_duration);\r\n } else {\r\n expirationCallback(loaded_session);\r\n }\r\n }\r\n }\r\n\r\n handleSession(\r\n user_id: number,\r\n key: string,\r\n expiry_time: number,\r\n expires: number,\r\n expirationCallback: () => void\r\n ): void {\r\n const expiration_date = new Date(expiry_time * 1000);\r\n const session = new EsolveSession(user_id, key, expiration_date);\r\n\r\n localStorage.setItem(this.storage_key, JSON.stringify(session));\r\n this._session.next(session);\r\n this.startTimer(expirationCallback, expires * 1000);\r\n }\r\n\r\n handleUpdateSession(user_id: number, callback?: () => void): void {\r\n const current_session = this.currentSession;\r\n current_session.updateUser(user_id);\r\n\r\n localStorage.setItem(this.storage_key, JSON.stringify(current_session));\r\n this._session.next(current_session);\r\n\r\n if (typeof callback === 'function') {\r\n callback();\r\n }\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpInterceptor,\r\n HttpRequest,\r\n HttpHandler,\r\n HttpParams,\r\n HttpEvent\r\n} from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveSessionService } from './esolve-session.service';\r\n\r\n@Injectable()\r\nexport class EsolveAuthInterceptorService implements HttpInterceptor {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private session: EsolveSessionService\r\n ) { }\r\n\r\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (req.url.startsWith(`${this.config.api_url}/service/`)) {\r\n const service_identifier = req.url.replace(`${this.config.api_url}/service/`, '');\r\n\r\n const old_parms_keys = req.params.keys();\r\n const modified_url = req.url;\r\n let params = new HttpParams();\r\n\r\n const session = this.session.currentSession;\r\n\r\n if (session.valid) {\r\n if (service_identifier !== 'get-access-token.php') {\r\n params = params.set('key', session.key);\r\n }\r\n }\r\n\r\n old_parms_keys.forEach(key => {\r\n params = params.set(key, req.params.get(key) || '');\r\n });\r\n\r\n const modified_req = req.clone({\r\n url: modified_url,\r\n params\r\n });\r\n\r\n return next.handle(modified_req);\r\n }\r\n\r\n return next.handle(req);\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\n\r\nimport { EsolveAuthInterceptorService } from './auth/esolve-auth-interceptor.service';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from './esolve-connect.config';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule\r\n ],\r\n exports: []\r\n})\r\nexport class NgEsolveConnectModule {\r\n static forRoot(config: EsolveConnectConfig): ModuleWithProviders<NgEsolveConnectModule> {\r\n return {\r\n ngModule: NgEsolveConnectModule,\r\n providers: [\r\n {\r\n provide: ESOLVE_CONNECT_CONFIG,\r\n useValue: config\r\n },\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: EsolveAuthInterceptorService,\r\n multi: true\r\n }\r\n ]\r\n };\r\n }\r\n}\r\n","/**\r\n * Search Engine Optimization information.\r\n */\r\nexport class EsolveSEOInfo {\r\n constructor(\r\n public title: string = '',\r\n public description: string = '',\r\n public keywords: string = ''\r\n ) { }\r\n}\r\n\r\nexport interface EsolveSEODetails {\r\n seo_details: EsolveSEOInfo;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../../esolve-connect.config';\r\nimport { EsolveSEOInfo } from './esolve-seo-info';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveSeoService {\r\n private title_prefix = '';\r\n private title_suffix = '';\r\n private title_separator = '|';\r\n\r\n private default_seo_title = '';\r\n private default_seo_description = '';\r\n private default_seo_keywords = '';\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private title: Title,\r\n private meta: Meta\r\n ) {\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n if (typeof this.config.title_prefix !== 'undefined') {\r\n this.title_prefix = this.config.title_prefix;\r\n }\r\n\r\n if (typeof this.config.title_suffix !== 'undefined') {\r\n this.title_suffix = this.config.title_suffix;\r\n }\r\n\r\n if (typeof this.config.title_separator !== 'undefined') {\r\n this.title_separator = this.config.title_separator;\r\n }\r\n\r\n if (typeof this.config.default_seo_title !== 'undefined') {\r\n this.default_seo_title = this.config.default_seo_title;\r\n }\r\n\r\n if (typeof this.config.default_seo_description !== 'undefined') {\r\n this.default_seo_description = this.config.default_seo_description;\r\n }\r\n\r\n if (typeof this.config.default_seo_keywords !== 'undefined') {\r\n this.default_seo_keywords = this.config.default_seo_keywords;\r\n }\r\n }\r\n\r\n private setPageTitleTags(title: string): void {\r\n this.title.setTitle(title);\r\n this.meta.updateTag({ property: 'og:title', content: title });\r\n }\r\n\r\n private setPageDescriptionTags(description: string): void {\r\n this.meta.updateTag({ name: 'description', content: description });\r\n this.meta.updateTag({ property: 'og:description', content: description });\r\n }\r\n\r\n private setPageKeywordsTags(keywords: string): void {\r\n this.meta.updateTag({ name: 'keywords', content: keywords });\r\n }\r\n\r\n private validateAndSanitizeSeoInfo(seoInfo: EsolveSEOInfo): EsolveSEOInfo {\r\n const pageSeo = new EsolveSEOInfo(this.default_seo_title, this.default_seo_description, this.default_seo_keywords);\r\n\r\n if (seoInfo.description.trim() !== '') {\r\n pageSeo.description = seoInfo.description;\r\n }\r\n\r\n if (seoInfo.title.trim() !== '') {\r\n const titlePartsArray = [];\r\n\r\n if (this.title_prefix !== '') {\r\n titlePartsArray.push(this.title_prefix);\r\n\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n }\r\n\r\n titlePartsArray.push(seoInfo.title);\r\n\r\n if (this.title_suffix !== '') {\r\n if (this.title_separator !== '') {\r\n titlePartsArray.push(this.title_separator);\r\n }\r\n\r\n titlePartsArray.push(this.title_suffix);\r\n }\r\n\r\n pageSeo.title = titlePartsArray.join(' ');\r\n\r\n if (seoInfo.keywords.trim() === '') {\r\n const clean_title = seoInfo.title.replace(/[^a-zA-Z0-9\\. ]+/gi, '').trim();\r\n const keywords = clean_title.split(' ');\r\n const clean_keywords: string[] = [];\r\n\r\n for (let keyword of keywords) {\r\n keyword = keyword.trim();\r\n if (keyword.length > 2) {\r\n keyword = keyword.toLocaleLowerCase();\r\n if (!clean_keywords.includes(keyword)) {\r\n clean_keywords.push(keyword);\r\n }\r\n }\r\n }\r\n\r\n seoInfo.keywords = clean_keywords.join(',');\r\n }\r\n }\r\n\r\n if (seoInfo.keywords.trim() !== '') {\r\n pageSeo.keywords = seoInfo.keywords;\r\n }\r\n\r\n return pageSeo;\r\n }\r\n\r\n /**\r\n * Sets SEO tags for page\r\n * @param seoInfo SEO object\r\n */\r\n public setTags(seoInfo: EsolveSEOInfo): void {\r\n seoInfo = this.validateAndSanitizeSeoInfo(seoInfo);\r\n\r\n this.setPageTitleTags(seoInfo.title);\r\n this.setPageDescriptionTags(seoInfo.description);\r\n this.setPageKeywordsTags(seoInfo.keywords);\r\n }\r\n\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n HttpClient,\r\n HttpParams,\r\n HttpErrorResponse,\r\n HttpHeaders\r\n} from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { tap, catchError, map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveSetResponse, EsolvePostResponseItem } from '../shared/esolve-response';\r\nimport { EsolveSessionService } from './esolve-session.service';\r\nimport { EsolveSession } from './esolve-session';\r\n\r\ninterface EsolveAuthResponseData {\r\n service_type: string;\r\n type: string;\r\n message: string;\r\n additional_data: {\r\n expires: number,\r\n expiry_time: number,\r\n user_id: number,\r\n key?: string,\r\n key_okay?: boolean,\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveAuthService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient,\r\n private session: EsolveSessionService\r\n ) { }\r\n\r\n private checkAccessToken(session?: EsolveSession): Promise<EsolveAuthResponseData> {\r\n session = session || this.session.currentSession;\r\n\r\n const token = session?.key ?? '';\r\n\r\n const params = new HttpParams({\r\n fromObject: {\r\n key: token,\r\n ws_id: this.config.wsid\r\n }\r\n });\r\n\r\n return this.http.get<EsolveAuthResponseData>(\r\n `${this.config.api_url}/service/get-access-token.php`,\r\n {\r\n params,\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*'\r\n })\r\n }\r\n ).pipe(\r\n map(responseData => {\r\n if ((responseData.type === 'error') || (responseData.type === 'exception') || (!responseData.additional_data.key_okay)) {\r\n throw responseData;\r\n }\r\n\r\n responseData.additional_data.key = token;\r\n\r\n return responseData;\r\n })\r\n ).toPromise();\r\n }\r\n\r\n getAccessToken(email: string, password: string, anonymous: boolean = false): Observable<EsolveAuthResponseData> {\r\n let params = new HttpParams();\r\n\r\n if (anonymous) {\r\n params = params.set('anonymous', '1');\r\n }\r\n\r\n if (email !== '') {\r\n params = params.set('email', email);\r\n }\r\n\r\n if (password !== '') {\r\n params = params.set('password', password);\r\n }\r\n\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveAuthResponseData>(\r\n `${this.config.api_url}/service/get-access-token.php`,\r\n {\r\n params,\r\n headers: new HttpHeaders({\r\n 'Accept-Language': '*'\r\n })\r\n }\r\n ).pipe(\r\n tap(responseData => {\r\n if ((responseData.type === 'error') || (responseData.type === 'exception')) {\r\n throw responseData;\r\n }\r\n }),\r\n catchError(this.handleError),\r\n tap(responseData => {\r\n this.handleAuthentication(responseData);\r\n })\r\n );\r\n }\r\n\r\n autoLogin(): void {\r\n this.session.restore(\r\n this.handleExpiration(),\r\n () => {\r\n this.getAccessToken('', '', true).toPromise().then(\r\n _ => { },\r\n error => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n login(email: string, password: string): Observable<number> {\r\n const body = {\r\n login: {\r\n email,\r\n password\r\n }\r\n };\r\n\r\n return this.http.post<EsolveSetResponse<EsolvePostResponseItem>>(\r\n `${this.config.api_url}/service/set-login.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'\r\n },\r\n params: {\r\n ws_id: this.config.wsid\r\n },\r\n responseType: 'json',\r\n observe: 'body'\r\n }\r\n ).pipe(\r\n map(response => {\r\n if ((response.responses === undefined) || (response.responses.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const login_response = response.responses[0];\r\n\r\n if ((login_response.status.state !== 'success') && (login_response.status.state !== 'warning')) {\r\n throw login_response;\r\n }\r\n\r\n for (const response_log of login_response.log) {\r\n if ((response_log.type === 'success') && (response_log.message_code === 'login_success')) {\r\n this.session.handleUpdateSession(login_response.esolve_id as number);\r\n\r\n return login_response.esolve_id as number;\r\n }\r\n }\r\n\r\n throw login_response;\r\n }),\r\n catchError((errorRes) => {\r\n const parseException = (exception: EsolveSetResponse) => {\r\n const exception_type = exception.additional_data.exception_type;\r\n const error = {\r\n type: 'exception',\r\n message: exception.message || '',\r\n error_code: exception_type || 'unknown'\r\n };\r\n\r\n return error;\r\n };\r\n\r\n const parseLoginErrors = (login_response: EsolvePostResponseItem) => {\r\n const error = {\r\n type: 'error',\r\n message: 'Unknown error has occured',\r\n error_code: 'unknown'\r\n };\r\n\r\n if ((login_response.status.state === 'none') && (login_response.log.length > 0)) {\r\n error.error_code = 'no_response';\r\n error.message = 'Response was provided';\r\n } else if (login_response.status.state === 'error') {\r\n const login_error_log = login_response.log[0];\r\n\r\n error.error_code = login_error_log.message_code;\r\n error.message = login_error_log.message;\r\n }\r\n\r\n return error;\r\n };\r\n\r\n if (errorRes instanceof HttpErrorResponse) {\r\n if (errorRes.status === 500) {\r\n const server_error = errorRes.error;\r\n\r\n if (\r\n (server_error.service_type === 'set-login') ||\r\n (server_error.type !== undefined) ||\r\n (server_error.message !== undefined) ||\r\n (server_error.additional_data !== undefined)\r\n ) {\r\n return throwError(parseException(server_error));\r\n }\r\n }\r\n } else {\r\n if (errorRes.type !== undefined) {\r\n if (errorRes.type === 'exception') {\r\n return throwError(parseException(errorRes));\r\n }\r\n } else if (errorRes.transaction_type === 'Login') {\r\n return throwError(parseLoginErrors(errorRes));\r\n }\r\n }\r\n\r\n return throwError(errorRes);\r\n })\r\n );\r\n }\r\n\r\n logout(): void {\r\n this.session.clearTimer();\r\n this.getAccessToken('', '', true).toPromise().then(\r\n _ => { },\r\n error => {\r\n console.log(error);\r\n }\r\n );\r\n }\r\n\r\n private handleExpiration(): (session?: EsolveSession) => void {\r\n return (session?: EsolveSession) => {\r\n this.checkAccessToken(session).then(\r\n (response) => {\r\n this.handleAuthentication(response);\r\n },\r\n () => {\r\n this.logout();\r\n }\r\n );\r\n };\r\n }\r\n\r\n private handleAuthentication(responseData: EsolveAuthResponseData): void {\r\n if (responseData.additional_data.key) {\r\n this.session.handleSession(\r\n responseData.additional_data.user_id,\r\n responseData.additional_data.key,\r\n +responseData.additional_data.expiry_time,\r\n +responseData.additional_data.expires,\r\n this.handleExpiration()\r\n );\r\n }\r\n }\r\n\r\n private handleError(errorRes: EsolveAuthResponseData): Observable<never> {\r\n const error = {\r\n message: 'An unknown error occurred',\r\n data: {}\r\n };\r\n\r\n if ((!errorRes.type) || (!errorRes.service_type) || (!errorRes.message)) {\r\n return throwError(error);\r\n }\r\n\r\n if (errorRes.message.trim() !== '') {\r\n error.message = errorRes.message;\r\n }\r\n\r\n if (errorRes.additional_data) {\r\n error.data = errorRes.additional_data;\r\n }\r\n\r\n return throwError(error);\r\n }\r\n}\r\n","import { EsolveSEODetails, EsolveSEOInfo } from '../shared/seo/esolve-seo-info';\r\nimport { EsolveTag } from '../tags/esolve-tag';\r\nimport { EsolveTopic } from '../topics/esolve-topic';\r\n\r\nexport class EsolveMediaArticle implements EsolveSEODetails {\r\n public seo_details: EsolveSEOInfo;\r\n\r\n constructor(\r\n public identifier: string,\r\n public title: string,\r\n public article: string,\r\n public image_url: string = '',\r\n public tags: EsolveTag[] = [],\r\n public topics: EsolveTopic[] = [],\r\n seo_title: string = '',\r\n seo_keywords: string = '',\r\n seo_description: string = '',\r\n ) {\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSEOInfo(seo_title, seo_description, seo_keywords);\r\n }\r\n}\r\n","export class EsolveTag {\r\n constructor(\r\n public id: number,\r\n public tag_phrase: string,\r\n public tag_weight: number,\r\n public description: string\r\n ) {}\r\n}\r\n","export class EsolveTopic {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public short_description: string,\r\n public sort_priority: number\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveMediaArticle } from './esolve-media-article';\r\nimport { EsolveMediaRecord } from './esolve-media-record';\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveTag } from '../tags/esolve-tag';\r\nimport { EsolveTopic } from '../topics/esolve-topic';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveMediaService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n private processMediaRecord(record: EsolveMediaRecord): EsolveMediaArticle {\r\n const tags: EsolveTag[] = [];\r\n const topics: EsolveTopic[] = [];\r\n\r\n if ((record.tags) && (record.tags.length > 0)) {\r\n for (const tag of record.tags) {\r\n tags.push(new EsolveTag(\r\n +tag.id,\r\n tag.tag_phrase,\r\n +tag.tag_weight,\r\n tag.description\r\n ));\r\n }\r\n }\r\n\r\n if ((record.topics) && (record.topics.length > 0)) {\r\n for (const topic of record.topics) {\r\n topics.push(new EsolveTopic(\r\n +topic.id,\r\n topic.name,\r\n topic.short_description,\r\n +topic.sort_priority\r\n ));\r\n }\r\n }\r\n\r\n return new EsolveMediaArticle(\r\n record.identifier,\r\n record.title,\r\n record.article,\r\n record.image_url,\r\n tags,\r\n topics,\r\n record.seo_page_title,\r\n record.seo_keywords,\r\n record.seo_description\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves media records from eSolve instance.\r\n * @param params Header params\r\n */\r\n private getMediaRecords(params: HttpParams): Observable<EsolveGetResponse<EsolveMediaRecord[]>> {\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveMediaRecord[]>>(`${this.config.api_url}/service/get-media.php`, { params });\r\n }\r\n\r\n /**\r\n * Retrieves the media record from the eSolve instance using the identifier.\r\n * @param identifier String representing the eSolve media indentifier\r\n */\r\n getMediaArticle(identifier: string): Observable<EsolveMediaArticle> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n identifier\r\n }\r\n });\r\n\r\n // TODO: Error Handling\r\n return this.getMediaRecords(params).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const mediaRecord = response.records[0];\r\n\r\n if (!mediaRecord.active) {\r\n throw response;\r\n }\r\n\r\n return this.processMediaRecord(mediaRecord);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a group of media records from the eSolve instance linked to a group.\r\n * @param media_group String representing the eSolve media group\r\n */\r\n getGroupedMediaArticles(media_group: string): Observable<EsolveMediaArticle[]> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n media_group_sef: media_group\r\n }\r\n });\r\n\r\n return this.getMediaRecords(params).pipe(\r\n map(response => {\r\n const mediaArticles: EsolveMediaArticle[] = [];\r\n\r\n if ((response.records !== undefined) && (response.records.length > 0)) {\r\n for (const mediaRecord of response.records) {\r\n if (mediaRecord.active) {\r\n mediaArticles.push(this.processMediaRecord(mediaRecord));\r\n }\r\n }\r\n }\r\n\r\n return mediaArticles;\r\n })\r\n );\r\n }\r\n}\r\n","import { EsolveSEODetails, EsolveSEOInfo } from '../shared/seo/esolve-seo-info';\r\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author';\r\n\r\nexport class EsolveNewsArticle implements EsolveSEODetails {\r\n seo_details: EsolveSEOInfo;\r\n\r\n constructor(\r\n public id: number,\r\n public title: string,\r\n public sef_title: string,\r\n public article: string,\r\n public short_description: string,\r\n public txdate: string,\r\n public active: boolean,\r\n public image: string,\r\n public featured: boolean,\r\n public author: EsolveNewsArticleAuthor,\r\n seo_title: string = '',\r\n seo_keywords: string = ''\r\n ) {\r\n if (seo_title.trim() === '') {\r\n seo_title = this.title;\r\n }\r\n\r\n this.seo_details = new EsolveSEOInfo(seo_title, short_description, seo_keywords);\r\n }\r\n\r\n}\r\n","export class EsolveNewsGroup {\r\n constructor(\r\n public id: number,\r\n public name: string,\r\n public description: string,\r\n public sef_name: string\r\n ) { }\r\n}\r\n","import { EsolveNewsArticle } from './esolve-news-article';\r\n\r\nexport class EsolveNewsArticleList {\r\n constructor(\r\n public newsArticles: EsolveNewsArticle[],\r\n public total: number,\r\n public page: number\r\n ) { }\r\n}\r\n","export class EsolveNewsArticleAuthor {\r\n constructor(\r\n public userid: number,\r\n public email: string,\r\n public firstname: string,\r\n public surname: string\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveNewsArticle } from './esolve-news-article';\r\nimport { EsolveNewsGroup } from './esolve-news-group';\r\nimport { EsolveNewsArticleRecord } from './esolve-news-article-record';\r\nimport { EsolveNewsArticleAuthor } from './esolve-news-article-author';\r\nimport { EsolveNewsGroupRecord } from './esolve-news-group-record';\r\nimport { EsolveNewsArticleList } from './esolve-news-article-list';\r\n\r\ninterface EsolveNewsArticleOptions {\r\n rows?: number;\r\n page?: number;\r\n news_group_id?: number;\r\n news_group_sef?: string;\r\n feature_only?: boolean;\r\n manufacturers_id?: number;\r\n ranges_id?: number;\r\n from_date?: string;\r\n to_date?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveNewsService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n private getNewsRecords(params: HttpParams): Observable<EsolveGetResponse<EsolveNewsArticleRecord[]>> {\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveNewsArticleRecord[]>>(\r\n `${this.config.api_url}/service/get-news.php`,\r\n { params }\r\n );\r\n }\r\n\r\n getNewsArticle(identifier: string): Observable<EsolveNewsArticle> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n sef_title: identifier\r\n }\r\n });\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const newsRecord = response.records[0];\r\n\r\n if (!newsRecord.active) {\r\n throw response;\r\n }\r\n\r\n return this.processNewsArticle(newsRecord);\r\n })\r\n );\r\n }\r\n\r\n getNewsArticles(options: EsolveNewsArticleOptions): Observable<EsolveNewsArticleList> {\r\n let params = new HttpParams();\r\n\r\n if (options.news_group_id) {\r\n params = params.set('news_group_id', options.news_group_id.toString());\r\n } else if (options.news_group_sef) {\r\n params = params.set('news_group_sef', options.news_group_sef.toString());\r\n }\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page.toString());\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows.toString());\r\n }\r\n\r\n if (options.feature_only) {\r\n params = params.set('feature_only', options.feature_only.toString());\r\n }\r\n\r\n if (options.manufacturers_id) {\r\n params = params.set('manufacturers_id', options.manufacturers_id.toString());\r\n }\r\n\r\n if (options.ranges_id) {\r\n params = params.set('ranges_id', options.ranges_id.toString());\r\n }\r\n\r\n if (options.from_date) {\r\n params = params.set('from_date', options.from_date.toString());\r\n }\r\n\r\n if (options.to_date) {\r\n params = params.set('to_date', options.to_date.toString());\r\n }\r\n\r\n return this.getNewsRecords(params).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const newsArticles: EsolveNewsArticle[] = [];\r\n\r\n response.records.forEach(newsArticleRecord => {\r\n newsArticles.push(this.processNewsArticle(newsArticleRecord));\r\n });\r\n\r\n return new EsolveNewsArticleList(newsArticles, response.additional_data.total_records, options.page || 0);\r\n })\r\n );\r\n }\r\n\r\n getNewsGroups(): Observable<EsolveNewsGroup[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveNewsGroupRecord[]>>(\r\n `${this.config.api_url}/service/get-news-groups.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n const newsGroups: EsolveNewsGroup[] = [];\r\n response.records.forEach(newsGroupRecord => {\r\n newsGroups.push(new EsolveNewsGroup(\r\n newsGroupRecord.id,\r\n newsGroupRecord.name,\r\n newsGroupRecord.description,\r\n newsGroupRecord.sef_name\r\n ));\r\n });\r\n\r\n return newsGroups;\r\n })\r\n );\r\n }\r\n\r\n private processNewsArticle(newsRecord: EsolveNewsArticleRecord): EsolveNewsArticle {\r\n const author = new EsolveNewsArticleAuthor(\r\n newsRecord.user.userid,\r\n newsRecord.user.email,\r\n newsRecord.user.firstname,\r\n newsRecord.user.surname\r\n );\r\n\r\n return new EsolveNewsArticle(\r\n newsRecord.id,\r\n newsRecord.title,\r\n newsRecord.sef_title,\r\n newsRecord.article,\r\n newsRecord.short_description,\r\n newsRecord.txdate,\r\n newsRecord.active,\r\n newsRecord.image,\r\n newsRecord.featured,\r\n author,\r\n newsRecord.seo_page_title,\r\n newsRecord.seo_keywords\r\n );\r\n }\r\n}\r\n","import { EsolveBannerLink, EsolveBannerType } from './esolve-banner-type';\r\nimport { EsolveBannerImage } from './esolve-banner-image';\r\n\r\nexport interface EsolveBannerImageSet {\r\n desktop?: EsolveBannerImage[];\r\n mobile?: EsolveBannerImage[];\r\n sub?: EsolveBannerImage[];\r\n}\r\n\r\nexport class EsolveBanner {\r\n public desktop_images: EsolveBannerImage[] = [];\r\n public mobile_images: EsolveBannerImage[] = [];\r\n public sub_images: EsolveBannerImage[] = [];\r\n\r\n constructor(\r\n public id: number,\r\n public banner_display_container: string,\r\n public identifier: string,\r\n public type: EsolveBannerType,\r\n public title: string,\r\n public article: string,\r\n public sort_priority: number,\r\n public link: EsolveBannerLink,\r\n images: EsolveBannerImageSet\r\n ) {\r\n if (images.desktop) {\r\n this.desktop_images = images.desktop;\r\n }\r\n\r\n if (images.mobile) {\r\n this.mobile_images = images.mobile;\r\n }\r\n\r\n if (images.sub) {\r\n this.sub_images = images.sub;\r\n }\r\n }\r\n}\r\n","import { EsolveBannerImageType } from './esolve-banner-type';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot';\r\n\r\nexport class EsolveBannerImage {\r\n constructor(\r\n public id: number,\r\n public image_type: EsolveBannerImageType,\r\n public width: number,\r\n public height: number,\r\n public filename: string,\r\n public hotspots?: EsolveBannerImageHotspot[]\r\n ) { }\r\n\r\n public get src(): string {\r\n return '/images/banners/' + this.filename;\r\n }\r\n\r\n}\r\n","import { EsolveUrlTarget } from '../shared/esolve-url-target';\r\n\r\nexport class EsolveBannerImageHotspot {\r\n constructor(\r\n public url: string,\r\n public target: EsolveUrlTarget,\r\n public coords: EsolveBannerImageHotspotCoords[],\r\n public coords_string: string\r\n ) { }\r\n}\r\n\r\nexport interface EsolveBannerImageHotspotCoords {\r\n x: number;\r\n y: number;\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveBannerType } from './esolve-banner-type';\r\nimport { EsolveBanner, EsolveBannerImageSet } from './esolve-banner';\r\nimport { EsolveBannerImage } from './esolve-banner-image';\r\nimport { EsolveBannerImageHotspot } from './esolve-banner-image-hotspot';\r\nimport { EsolveBannerRecord } from './esolve-banner-record';\r\nimport { EsolveBannerImageHotspotRecord } from './esolve-banner-image-hotspot-record';\r\nimport { EsolveBannerImageRecord } from './esolve-banner-image-record';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveBannerService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n private processBannerImageHotspots(hotspot_records: EsolveBannerImageHotspotRecord[]): EsolveBannerImageHotspot[] {\r\n const hotspots: EsolveBannerImageHotspot[] = [];\r\n\r\n if (hotspot_records.length > 0) {\r\n for (const hotspot_record of hotspot_records) {\r\n const hotspot = new EsolveBannerImageHotspot(\r\n hotspot_record.url,\r\n hotspot_record.target,\r\n hotspot_record.coords,\r\n hotspot_record.coords_string\r\n );\r\n\r\n hotspots.push(hotspot);\r\n }\r\n }\r\n\r\n return hotspots;\r\n }\r\n\r\n private processBannerImages(image_records: EsolveBannerImageRecord[], banner_type: EsolveBannerType): EsolveBannerImage[] {\r\n const images: EsolveBannerImage[] = [];\r\n\r\n if (image_records.length > 0) {\r\n for (const image_record of image_records) {\r\n const image = new EsolveBannerImage(\r\n +image_record.id,\r\n image_record.image_type,\r\n +image_record.width,\r\n +image_record.height,\r\n image_record.filename\r\n );\r\n\r\n if ((banner_type === 'hotspot') && (image_record.hotspots)) {\r\n const hotspots = this.processBannerImageHotspots(image_record.hotspots);\r\n image.hotspots = hotspots;\r\n }\r\n\r\n images.push(image);\r\n }\r\n }\r\n\r\n return images;\r\n }\r\n\r\n /**\r\n * Process banner records into banner objects\r\n * @param records Array of records\r\n * @returns List of banners\r\n */\r\n private processBanners(records: EsolveBannerRecord[]): EsolveBanner[] {\r\n const banners: EsolveBanner[] = [];\r\n\r\n if ((records) && (records.length > 0)) {\r\n for (const record of records) {\r\n const image_sets: EsolveBannerImageSet = {};\r\n\r\n if (record.images.desktop) {\r\n image_sets.desktop = this.processBannerImages(record.images.desktop, record.type);\r\n }\r\n\r\n if (record.images.mobile) {\r\n image_sets.mobile = this.processBannerImages(record.images.mobile, record.type);\r\n }\r\n\r\n if (record.images.sub) {\r\n image_sets.sub = this.processBannerImages(record.images.sub, record.type);\r\n }\r\n\r\n const banner = new EsolveBanner(\r\n +record.id,\r\n record.banner_display_container,\r\n record.identifier,\r\n record.type,\r\n record.title,\r\n record.article,\r\n +record.sort_priority,\r\n {\r\n url: record.link.url,\r\n target: record.link.target\r\n },\r\n image_sets\r\n );\r\n\r\n banners.push(banner);\r\n }\r\n }\r\n\r\n return banners;\r\n }\r\n\r\n /**\r\n * Retrieves banners records from eSolve instance\r\n *\r\n * @returns An observable of eSolve banners.\r\n */\r\n public getBanners(\r\n identifier?: string,\r\n banner_display_container?: string,\r\n enable_date_filter: boolean = false\r\n ): Observable<EsolveBanner[]> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n ws_id: this.config.wsid,\r\n enable_date_filter\r\n }\r\n });\r\n\r\n if (identifier) {\r\n params = params.set('identifier', identifier);\r\n }\r\n\r\n if (banner_display_container) {\r\n params = params.set('banner_display_container', banner_display_container);\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolveBannerRecord[]>>(\r\n `${this.config.api_url}/service/get-banners.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processBanners(response.records);\r\n })\r\n );\r\n }\r\n}\r\n","export class EsolveMenuItem {\r\n constructor(\r\n public url: string,\r\n public name: string,\r\n public target: string,\r\n public children: EsolveMenuItem[] = []\r\n ) { }\r\n}\r\n\r\nexport type EsolveMenu = EsolveMenuItem[];\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveMenuTreeRecord } from './esolve-menu-tree-record';\r\nimport { EsolveMenu, EsolveMenuItem } from './esolve-menu-item';\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveMenuService {\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n getMenuTree(identifier: string): Observable<EsolveMenu> {\r\n let menuParams = new HttpParams();\r\n menuParams = menuParams.set('identifier', identifier);\r\n menuParams = menuParams.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveMenuTreeRecord[]>>(\r\n `${this.config.api_url}/service/get-menu-tree.php`, {params: menuParams}\r\n ).pipe(\r\n map(response => {\r\n if ((!response) || (response.records === undefined)) {\r\n throw response;\r\n } else if (response.records.length === 0) {\r\n return [];\r\n }\r\n\r\n return this.handleMenu(response.records);\r\n })\r\n );\r\n }\r\n\r\n private handleMenu(records?: EsolveMenuTreeRecord[]): EsolveMenu {\r\n const menu: EsolveMenu = [];\r\n\r\n if (typeof records !== 'undefined') {\r\n for (const menuTreeRecord of records) {\r\n menu.push(new EsolveMenuItem(\r\n menuTreeRecord.sef_url,\r\n menuTreeRecord.name,\r\n menuTreeRecord.target,\r\n this.handleMenu(menuTreeRecord.children)\r\n ));\r\n }\r\n }\r\n\r\n return menu;\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\n\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveTopic } from './esolve-topic';\r\nimport { EsolveTopicRecord } from './esolve-topic-record';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveTopicService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n private processTopics(records: EsolveTopicRecord[]): EsolveTopic[] {\r\n const topics: EsolveTopic[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const topic = new EsolveTopic(\r\n +record.id,\r\n record.name,\r\n record.short_description,\r\n +record.sort_priority\r\n );\r\n\r\n topics.push(topic);\r\n }\r\n }\r\n\r\n return topics;\r\n }\r\n\r\n\r\n /**\r\n * Retrieves active topics from the list of topic ID's. Note that inactive or expired\r\n * topics will not be retrieved.\r\n *\r\n * @param topic_id_list List of topic ID's that need to be retrieved\r\n */\r\n public getTopics(topic_id_list: readonly number[] = []): Observable<EsolveTopic[]> {\r\n let params = new HttpParams({\r\n fromObject: {\r\n ws_id: this.config.wsid\r\n }\r\n });\r\n\r\n if (topic_id_list.length > 0) {\r\n params = params.append('topic_id', topic_id_list.join(','));\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolveTopicRecord[]>>(\r\n `${this.config.api_url}/service/get-topics.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTopics(response.records);\r\n })\r\n );\r\n }\r\n}\r\n","export class EsolveStockBadge {\r\n constructor(\r\n public id: number,\r\n public text: string,\r\n public identifier: string,\r\n public font_colour: string,\r\n public badge_colour: string,\r\n public sort_priority: number\r\n ) { }\r\n}\r\n","/**\r\n * Price of eSolve stock item\r\n */\r\nexport class EsolveStockPrice {\r\n /**\r\n * Create stock price instance\r\n * @param base_price Price without tax\r\n * @param base_price_with_tax Price with tax\r\n * @param sell_price Price without tax and with discounts applied if appilcable\r\n * @param sell_price_with_tax Price with tax and with discounts applied if appilcable\r\n */\r\n constructor(\r\n /**\r\n * Price without tax\r\n */\r\n public base_price: number,\r\n\r\n /**\r\n * Price with tax\r\n */\r\n public base_price_with_tax: number,\r\n\r\n /**\r\n * Price without tax and with discounts applied if appilcable\r\n */\r\n public sell_price: number,\r\n\r\n /**\r\n * Price with tax and with discounts applied if appilcable\r\n */\r\n public sell_price_with_tax: number\r\n ) {\r\n if ((this.base_price === 0) && (this.sell_price > 0)) {\r\n this.base_price = this.sell_price;\r\n this.base_price_with_tax = this.sell_price_with_tax;\r\n } else if ((this.base_price > 0) && (this.sell_price === 0)) {\r\n this.sell_price = this.base_price;\r\n this.sell_price_with_tax = this.base_price_with_tax;\r\n }\r\n }\r\n}\r\n","import { EsolveSEODetails, EsolveSEOInfo } from '../shared/seo/esolve-seo-info';\r\nimport { EsolveTag } from '../tags/esolve-tag';\r\nimport { EsolveTopic } from '../topics/esolve-topic';\r\nimport { EsolveStockBadge } from './esolve-stock-badge';\r\nimport { EsolveStockPrice } from './esolve-stock-price';\r\n\r\n/**\r\n * Stock Item object. It can be a service or a product (physical and/or digital).\r\n */\r\nexport class EsolveStockItem implements EsolveSEODetails {\r\n /**\r\n * SEO page details\r\n */\r\n public seo_details: EsolveSEOInfo;\r\n\r\n /**\r\n * Constructs an instance of EsolveStockItem\r\n *\r\n * @param id eSolve Generated ID\r\n * @param code Code identifying the stock item\r\n * @param name Name of the stock item\r\n * @param sef_name Search engine friendly name\r\n * @param description Short description of stock item\r\n * @param active Active state\r\n * @param featured Featured state\r\n * @param image_name Image filename\r\n * @param price Default price\r\n * @param tags Linked tags\r\n * @param topics Linked topics\r\n * @param seo_title SEO page title\r\n * @param seo_keywords SEO page keywords\r\n */\r\n constructor(\r\n /**\r\n * eSolve Generated ID\r\n */\r\n public id: number,\r\n\r\n /**\r\n * Code identifying the stock item\r\n */\r\n public code: string,\r\n\r\n /**\r\n * Name of the stock item\r\n */\r\n public name: string,\r\n\r\n /**\r\n * Search engine friendly name\r\n */\r\n public sef_name: string,\r\n\r\n /**\r\n * Short description of stock item\r\n */\r\n public description: string,\r\n\r\n /**\r\n * Active state\r\n */\r\n public active: boolean,\r\n\r\n /**\r\n * Featured state\r\n */\r\n public featured: boolean,\r\n\r\n /**\r\n * Image filename\r\n */\r\n private image_name: string,\r\n\r\n /**\r\n * Default price\r\n */\r\n public price: EsolveStockPrice,\r\n\r\n /**\r\n * Linked tags\r\n */\r\n public tags: EsolveTag[],\r\n\r\n /**\r\n * Linked topics\r\n */\r\n public topics: EsolveTopic[],\r\n\r\n /**\r\n * Stock badges\r\n */\r\n public badges: EsolveStockBadge[],\r\n\r\n /**\r\n * ID of default category linked to the stock item\r\n */\r\n public category_id: string,\r\n\r\n /**\r\n * ID of default subcategory linked to the stock item\r\n */\r\n public subcategory_id: number,\r\n seo_title: string = '',\r\n seo_keywords: string = ''\r\n ) {\r\n if (seo_title.trim() === '') {\r\n seo_title = this.name;\r\n }\r\n\r\n this.seo_details = new EsolveSEOInfo(seo_title, description, seo_keywords);\r\n }\r\n\r\n /**\r\n * Path to tiny stock image\r\n */\r\n get tiny_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/tiny/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n get thumbnail_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/thumb/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n get small_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/small/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n get big_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/big/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n get original_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/original/' + this.image_name : 'no_image.jpg');\r\n }\r\n}\r\n","import { EsolveStockItem } from './esolve-stock-item';\r\n\r\n/**\r\n * Stock item object list\r\n */\r\nexport class EsolveStockItemList {\r\n constructor(\r\n public stock_items: EsolveStockItem[],\r\n public total: number,\r\n public page: number\r\n ) { }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveStockBadge } from './esolve-stock-badge';\r\nimport { EsolveStockRecord } from './esolve-stock-record';\r\nimport { EsolveStockItem } from './esolve-stock-item';\r\nimport { EsolveStockItemList } from './esolve-stock-item-list';\r\nimport { EsolveStockItemOptions } from './esolve-stock-item-options';\r\nimport { EsolveTag } from '../tags/esolve-tag';\r\nimport { EsolveTopic } from '../topics/esolve-topic';\r\nimport { EsolveStockPrice } from './esolve-stock-price';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveStockService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Processes the eSolve stock item record and converts it to StockItem object.\r\n * @param record eSolve stock item record\r\n */\r\n private processStockItem(record: EsolveStockRecord): EsolveStockItem {\r\n const tags: EsolveTag[] = [];\r\n const topics: EsolveTopic[] = [];\r\n const badges: EsolveStockBadge[] = [];\r\n\r\n if ((record.tags) && (record.tags.length > 0)) {\r\n for (const tag of record.tags) {\r\n tags.push(new EsolveTag(\r\n +tag.id,\r\n tag.tag_phrase,\r\n +tag.tag_weight,\r\n tag.description\r\n ));\r\n }\r\n }\r\n\r\n if ((record.topics) && (record.topics.length > 0)) {\r\n for (const topic of record.topics) {\r\n topics.push(new EsolveTopic(\r\n +topic.id,\r\n topic.name,\r\n topic.short_description,\r\n +topic.sort_priority\r\n ));\r\n }\r\n }\r\n\r\n if ((record.badges) && (record.badges.length > 0)) {\r\n for (const badge of record.badges) {\r\n badges.push(new EsolveStockBadge(\r\n +badge.id,\r\n badge.text,\r\n badge.identifier,\r\n badge.font_colour,\r\n badge.badge_colour,\r\n +badge.sort_priority\r\n ));\r\n }\r\n }\r\n\r\n const price = new EsolveStockPrice(\r\n record.regular_sellprice,\r\n record.regular_sellprice_inclusive,\r\n record.sellprice,\r\n record.sellprice_inclusive\r\n );\r\n\r\n return new EsolveStockItem(\r\n +record.id,\r\n record.code,\r\n record.name,\r\n record.sef_name,\r\n record.description,\r\n !!+record.is_active,\r\n !!+record.is_featured,\r\n record.image_name,\r\n price,\r\n tags,\r\n topics,\r\n badges,\r\n record.category_id,\r\n +record.subcategory_id,\r\n record.seo_page_title,\r\n record.seo_keywords\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves stock records from HTTP params.\r\n * @param params HTTP client parameters\r\n */\r\n private getStockRecords(params: HttpParams): Observable<EsolveGetResponse<EsolveStockRecord[]>> {\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveStockRecord[]>>(\r\n `${this.config.api_url}/service/get-items.php`,\r\n { params }\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the code.\r\n * @param code eSolve stock code\r\n */\r\n getStockItem(code: string): Observable<EsolveStockItem> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n code\r\n }\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the stock record from the eSolve instance using the SEF name.\r\n * @param sef_name SEF name of the stock item\r\n */\r\n getStockItemFromSEF(sef_name: string): Observable<EsolveStockItem> {\r\n const params = new HttpParams({\r\n fromObject: {\r\n sef_name\r\n }\r\n });\r\n\r\n return this.getStockRecords(params).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const stockRecord = response.records[0];\r\n\r\n return this.processStockItem(stockRecord);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves list of stock from the eSolve instance using info provided\r\n * @param options Stock filter options\r\n */\r\n getStockItems(options: EsolveStockItemOptions): Observable<EsolveStockItemList> {\r\n let params = new HttpParams();\r\n\r\n if (options.page) {\r\n params = params.set('page', options.page);\r\n }\r\n\r\n if (options.rows) {\r\n params = params.set('rows', options.rows);\r\n }\r\n\r\n if (options.display_only) {\r\n params = params.set('display_only', options.display_only);\r\n }\r\n\r\n if (options.is_active) {\r\n params = params.set('is_active', options.is_active);\r\n }\r\n\r\n if (options.category_id) {\r\n params = params.set('category_id', options.category_id);\r\n }\r\n\r\n if (options.subcategory_id) {\r\n params = params.set('subcategory_id', options.subcategory_id);\r\n }\r\n\r\n if (options.tag_id_list) {\r\n if (options.tag_id_list.length > 0) {\r\n params = params.set('tag_id', options.tag_id_list.join(','));\r\n }\r\n }\r\n\r\n if (options.topic_id_list) {\r\n if (options.topic_id_list.length > 0) {\r\n params = params.set('topic_id', options.topic_id_list.join(','));\r\n }\r\n }\r\n\r\n return this.getStockRecords(params).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const stockItems: EsolveStockItem[] = [];\r\n\r\n response.records.forEach(stockRecord => {\r\n stockItems.push(this.processStockItem(stockRecord));\r\n });\r\n\r\n return new EsolveStockItemList(\r\n stockItems,\r\n +response.additional_data.total_records,\r\n options.page ?? 0\r\n );\r\n })\r\n );\r\n }\r\n}\r\n","import { EsolveSEODetails, EsolveSEOInfo } from '../shared/seo/esolve-seo-info';\r\n\r\nexport class EsolveCategoryTreeItem implements EsolveSEODetails {\r\n\r\n private image_path = '';\r\n public id = '';\r\n public seo_details: EsolveSEOInfo;\r\n\r\n public total_stock?: number;\r\n public children?: EsolveCategoryTreeItem[];\r\n\r\n\r\n constructor(\r\n public type: 'category' | 'subcategory',\r\n public esolve_id: string | number,\r\n public parent_id: string,\r\n public description: string,\r\n public sef_description: string,\r\n public short_description: string,\r\n public sort_priority: number,\r\n public active: boolean,\r\n public display_only: boolean,\r\n private image_name: string,\r\n seo_title: string,\r\n seo_keywords: string,\r\n seo_description: string,\r\n children?: EsolveCategoryTreeItem[]\r\n ) {\r\n if (this.type === 'category') {\r\n this.id = `<<CAT>>${this.esolve_id}`;\r\n\r\n if (children != null) {\r\n this.children = children;\r\n }\r\n\r\n this.image_path = '/images/categories/';\r\n } else {\r\n this.id = `<<SUB>>${this.esolve_id}`;\r\n this.image_path = '/images/subcategories/';\r\n }\r\n\r\n if (seo_title.trim() === '') {\r\n seo_title = this.description;\r\n }\r\n\r\n this.seo_details = new EsolveSEOInfo(seo_title, seo_description, seo_keywords);\r\n }\r\n\r\n private generateImagePath(image_size: 'small' | 'thumb' | 'tiny'): string {\r\n if (this.image_name !== '') {\r\n return `${this.image_path}${image_size}/${this.image_name}`;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n public get small_image_src(): string {\r\n return this.generateImagePath('small');\r\n }\r\n\r\n public get thumbnail_image_src(): string {\r\n return this.generateImagePath('thumb');\r\n }\r\n\r\n public get tiny_image_src(): string {\r\n return this.generateImagePath('tiny');\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpParams } from '@angular/common/http';\r\n\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { EsolveGetResponse } from '../shared/esolve-response';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveCategoryRecord, EsolveCategoryTreeItemRecord, EsolveSubcategoryRecord } from './esolve-category-tree-item-record';\r\nimport { EsolveCategoryTreeItem } from './esolve-category-tree-item';\r\n\r\ninterface EsolveCategoryTreeItemOptions {\r\n /**\r\n * Generated ID. Does not require type to be set.\r\n */\r\n id?: string;\r\n /**\r\n * Type category tree item. Required for if esolve_id or sef_description is set\r\n */\r\n type?: 'category' | 'subcategory';\r\n /**\r\n * Search engine friendly description. Requires type to be set.\r\n */\r\n sef_description?: string;\r\n /**\r\n * ID from eSolve. Requires type to be set.\r\n */\r\n esolve_id?: number | string;\r\n}\r\n\r\ninterface EsolveCategoryIdentifier {\r\n type: 'category' | 'subcategory';\r\n esolve_id: number | string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveCategoryTreeService {\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Processes the eSolve tree records and converts them into the correct format.\r\n * @param tree_records Records to process\r\n */\r\n private processTree(tree_records: (EsolveCategoryRecord | EsolveSubcategoryRecord)[]): EsolveCategoryTreeItem[] {\r\n const tree_items: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_records) {\r\n for (const tree_record of tree_records) {\r\n let esolve_id: string | number = '';\r\n let parent_id = '';\r\n let children: EsolveCategoryTreeItem[] = [];\r\n\r\n if (tree_record.type === 'category') {\r\n children = this.processTree(tree_record.children);\r\n esolve_id = tree_record.menu_id;\r\n parent_id = tree_record.owner_menu_id;\r\n } else {\r\n esolve_id = tree_record.id;\r\n parent_id = tree_record.menu_id;\r\n }\r\n\r\n tree_items.push(new EsolveCategoryTreeItem(\r\n tree_record.type,\r\n esolve_id,\r\n parent_id,\r\n tree_record.description,\r\n tree_record.sef_description,\r\n tree_record.seo_description,\r\n tree_record.sort_priority,\r\n tree_record.active,\r\n tree_record.display_only,\r\n tree_record.image,\r\n tree_record.seo_page_title,\r\n tree_record.seo_keywords,\r\n tree_record.short_description,\r\n children\r\n ));\r\n }\r\n }\r\n\r\n return tree_items;\r\n }\r\n\r\n private processTreeItem(record: EsolveCategoryTreeItemRecord): EsolveCategoryTreeItem{\r\n return new EsolveCategoryTreeItem(\r\n record.type,\r\n record.id,\r\n record.parent_id,\r\n record.description,\r\n record.sef_description,\r\n record.short_description,\r\n record.sort_priority,\r\n record.active,\r\n record.display_only,\r\n '',\r\n record.seo_page_title,\r\n record.seo_keywords,\r\n record.seo_description\r\n );\r\n }\r\n\r\n private processID(id: string): EsolveCategoryIdentifier | null {\r\n let type: 'category' | 'subcategory';\r\n let esolve_id: number | string;\r\n\r\n const type_code_regex = /^\\<\\<(CAT|SUB)\\>\\>/g;\r\n const match_results = id.match(type_code_regex);\r\n\r\n if (match_results) {\r\n const type_code = match_results[0];\r\n\r\n type = (type_code === '<<CAT>>' ? 'category' : 'subcategory');\r\n esolve_id = id.replace(type_code_regex, '');\r\n\r\n return {\r\n type,\r\n esolve_id\r\n };\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Retrieves the category tree from eSolve instance and coverts it to the correct format.\r\n */\r\n public getCategoryTree(): Observable<EsolveCategoryTreeItem[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<(EsolveCategoryRecord | EsolveSubcategoryRecord)[]>>(\r\n `${this.config.api_url}/service/get-tree.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processTree(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve the details of a category tree item from the eSolve instance and converts it to the correct format.\r\n * @param options Filter options\r\n */\r\n public getCategoryTreeItem(options: EsolveCategoryTreeItemOptions): Observable<EsolveCategoryTreeItem> {\r\n let type!: 'category' | 'subcategory';\r\n let esolve_id!: number | string;\r\n let sef_description;\r\n\r\n if (options.id) {\r\n const categoryIdentifier = this.processID(options.id);\r\n\r\n if (categoryIdentifier) {\r\n type = categoryIdentifier.type;\r\n esolve_id = categoryIdentifier.esolve_id;\r\n }\r\n } else if (options.type) {\r\n type = options.type;\r\n\r\n if (options.esolve_id) {\r\n esolve_id = options.esolve_id;\r\n } else if (options.sef_description) {\r\n sef_description = options.sef_description;\r\n }\r\n }\r\n\r\n if (type && (esolve_id || sef_description)) {\r\n let params = new HttpParams();\r\n\r\n params = params.set('ws_id', this.config.wsid.toString());\r\n params = params.set('type', type.toString());\r\n\r\n if (esolve_id) {\r\n params = params.set('id', esolve_id.toString());\r\n }\r\n\r\n if (sef_description) {\r\n params = params.set('sef_description', sef_description.toString());\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolveCategoryTreeItemRecord[]>>(\r\n `${this.config.api_url}/service/get-tree-item.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if ((response.records === undefined) || (response.records.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n return this.processTreeItem(response.records[0]);\r\n })\r\n );\r\n }\r\n\r\n return throwError('Invalid options');\r\n }\r\n\r\n}\r\n","import { EsolveStockLocationRecord } from './esolve-stock-location-record';\r\n\r\nexport class EsolveStockLocation {\r\n public id: number;\r\n public identifier: string;\r\n public description: string;\r\n public head_office: boolean;\r\n public default_location_for_payment_methods: boolean;\r\n public external_system_code: string;\r\n public erp_identifier: string;\r\n public userid: number;\r\n public importance: number;\r\n public active: boolean;\r\n public website_url: string;\r\n\r\n public address: EsolveStockLocationAddress;\r\n public pobox_address: EsolveStockLocationPOBoxAddress;\r\n public contact_info: EsolveStockLocationContactInfo;\r\n public trading_times: EsolveStockLocationTradingTimes;\r\n\r\n constructor(record: EsolveStockLocationRecord) {\r\n this.id = +record.id;\r\n this.identifier = record.identifier;\r\n this.description = record.description;\r\n this.head_office = record.head_office;\r\n this.erp_identifier = record.erp_identifier;\r\n this.external_system_code = record.external_system_code;\r\n this.default_location_for_payment_methods = record.default_location_for_payment_methods;\r\n this.userid = +record.userid;\r\n this.importance = +record.importance;\r\n this.active = record.is_active;\r\n this.website_url = record.website_url;\r\n\r\n this.address = new EsolveStockLocationAddress(\r\n record.street,\r\n record.suburb,\r\n record.city,\r\n record.province,\r\n record.country,\r\n record.postal_code,\r\n +record.latitude,\r\n +record.longitude\r\n );\r\n\r\n this.pobox_address = new EsolveStockLocationPOBoxAddress(\r\n record.pobox,\r\n record.pobox_city,\r\n record.pobox_postal_code\r\n );\r\n\r\n const telnumbers = [];\r\n\r\n if (record.branch_telnumber.length > 0) {\r\n telnumbers.push(record.branch_telnumber);\r\n }\r\n\r\n if (record.branch_telnumber_2.length > 0) {\r\n telnumbers.push(record.branch_telnumber_2);\r\n }\r\n\r\n if (record.branch_telnumber_3.length > 0) {\r\n telnumbers.push(record.branch_telnumber_3);\r\n }\r\n\r\n this.contact_info = new EsolveStockLocationContactInfo(\r\n telnumbers,\r\n record.branch_cellnumber,\r\n record.branch_email,\r\n record.branch_fax\r\n );\r\n\r\n this.trading_times = new EsolveStockLocationTradingTimes(\r\n record.monday_open_time,\r\n record.monday_close_time,\r\n record.tuesday_open_time,\r\n record.tuesday_close_time,\r\n record.wednesday_open_time,\r\n record.wednesday_close_time,\r\n record.thursday_open_time,\r\n record.thursday_close_time,\r\n record.friday_open_time,\r\n record.friday_close_time,\r\n record.saturday_open_time,\r\n record.saturday_close_time,\r\n record.sunday_open_time,\r\n record.sunday_close_time,\r\n record.public_holiday_open_time,\r\n record.public_holiday_close_time,\r\n record.trading_hours_additional_in\r\n );\r\n }\r\n}\r\n\r\nclass EsolveStockLocationAddress {\r\n constructor(\r\n public street: string,\r\n public suburb: string,\r\n public city: string,\r\n public province: string,\r\n public country: string,\r\n public postal_code: string,\r\n public latitude: number,\r\n public longitude: number\r\n ) { }\r\n}\r\n\r\nclass EsolveStockLocationPOBoxAddress {\r\n constructor(\r\n public pobox: string,\r\n public city: string,\r\n public postal_code: string\r\n ) { }\r\n}\r\n\r\nclass EsolveStockLocationContactInfo {\r\n constructor(\r\n public telnumber: string[],\r\n public cellnumber: string,\r\n public email: string,\r\n public fax: string\r\n ) { }\r\n}\r\n\r\nclass EsolveStockLocationTradingTimes {\r\n public monday: EsolveStockLocationTradingTimesDay;\r\n public tuesday: EsolveStockLocationTradingTimesDay;\r\n public wednesday: EsolveStockLocationTradingTimesDay;\r\n public thursday: EsolveStockLocationTradingTimesDay;\r\n public friday: EsolveStockLocationTradingTimesDay;\r\n public saturday: EsolveStockLocationTradingTimesDay;\r\n public sunday: EsolveStockLocationTradingTimesDay;\r\n public public_holiday: EsolveStockLocationTradingTimesDay;\r\n\r\n constructor(\r\n monday_open_time: string,\r\n monday_close_time: string,\r\n tuesday_open_time: string,\r\n tuesday_close_time: string,\r\n wednesday_open_time: string,\r\n wednesday_close_time: string,\r\n thursday_open_time: string,\r\n thursday_close_time: string,\r\n friday_open_time: string,\r\n friday_close_time: string,\r\n saturday_open_time: string,\r\n saturday_close_time: string,\r\n sunday_open_time: string,\r\n sunday_close_time: string,\r\n public_holiday_open_time: string,\r\n public_holiday_close_time: string,\r\n public trading_hours_additional_info: string = ''\r\n ) {\r\n this.monday = new EsolveStockLocationTradingTimesDay(monday_open_time, monday_close_time);\r\n this.tuesday = new EsolveStockLocationTradingTimesDay(tuesday_open_time, tuesday_close_time);\r\n this.wednesday = new EsolveStockLocationTradingTimesDay(wednesday_open_time, wednesday_close_time);\r\n this.thursday = new EsolveStockLocationTradingTimesDay(thursday_open_time, thursday_close_time);\r\n this.friday = new EsolveStockLocationTradingTimesDay(friday_open_time, friday_close_time);\r\n this.saturday = new EsolveStockLocationTradingTimesDay(saturday_open_time, saturday_close_time);\r\n this.sunday = new EsolveStockLocationTradingTimesDay(sunday_open_time, sunday_close_time);\r\n this.public_holiday = new EsolveStockLocationTradingTimesDay(public_holiday_open_time, public_holiday_close_time);\r\n }\r\n}\r\n\r\nclass EsolveStockLocationTradingTimesDay {\r\n constructor(\r\n public open: string,\r\n public close: string\r\n ) { }\r\n}\r\n","import { EsolveCartStockItem } from './esolve-cart-stock-item';\r\n\r\nexport type EsolveCart = EsolveCartItem[];\r\n\r\nexport class EsolveCartItem {\r\n constructor(\r\n public id: number,\r\n public stock_item: EsolveCartStockItem,\r\n public qty: number,\r\n public type: string,\r\n\r\n public price: number,\r\n public discount: number,\r\n public discount_interval: number,\r\n public vat_rate: number,\r\n\r\n public allow_quotes: boolean,\r\n public allow_orders: boolean,\r\n public must_collect: boolean,\r\n public requested_assembly: boolean,\r\n\r\n public price_incl: number,\r\n public discount_price: number,\r\n public discount_price_incl: number,\r\n public discount_total: number,\r\n public vat_total: number,\r\n public total: number,\r\n public total_incl: number\r\n ) {}\r\n}\r\n\r\nexport type EsolveCartSetAction = 'add' | 'edit' | 'remove';\r\n\r\nexport interface EsolveCartSetItem {\r\n code: string;\r\n id?: number;\r\n qty?: number;\r\n action?: EsolveCartSetAction;\r\n}\r\n","import {\r\n EsolveInsuranceCostCalculationMethod,\r\n EsolveLocationType,\r\n EsolveShippingCostCalculationMethod\r\n} from './esolve-shipping-method-record';\r\n\r\nexport class EsolveShippingMethod {\r\n constructor(\r\n public id: number,\r\n public carrier_name: string,\r\n public delivery_category: string,\r\n public description: string,\r\n public location: EsolveLocationType,\r\n public pricing: string,\r\n public link_to_carrier_website: string,\r\n public days_to_deliver: number,\r\n public shipping_cost_calculation_method: EsolveShippingCostCalculationMethod,\r\n public insurance_cost_calculation_method: EsolveInsuranceCostCalculationMethod,\r\n public insurance_cost_percentage: number,\r\n public metric_factor: number,\r\n public allow_immediate_payment_processing: boolean,\r\n public allow_postal_address: boolean,\r\n public allow_physical_address: boolean,\r\n public client_to_collect: boolean,\r\n public is_default: boolean,\r\n public location_id: number,\r\n public use_zones: boolean,\r\n public min_distance: number,\r\n public max_distance: number,\r\n public shipping_surge_condition: number,\r\n public shipping_surge_percentage: number,\r\n public sort_priority: number,\r\n public shipping_group: string,\r\n public shipping_slot_identifier: string,\r\n public shipping_slot_delay_hours: number,\r\n public image_url: string\r\n ) { }\r\n}\r\n","import { EsolveIntegrationType, EsolvePaymentMethodRecord } from './esolve-payment-method-record';\r\n\r\nexport class EsolvePaymentMethod {\r\n public id: number;\r\n public location_id: number;\r\n public paymethod_name: string;\r\n public description: string;\r\n public display_banking_details: boolean;\r\n public currency_code: string;\r\n public terminal_id: string;\r\n public terminal_id_secondary: string;\r\n public merchant_id: string;\r\n public application_id: string;\r\n public api_username: string;\r\n public api_password: string;\r\n public api_signature: string;\r\n public is_gateway: boolean;\r\n public must_store_card_details: boolean;\r\n public allow_budget: boolean;\r\n public integration_type: EsolveIntegrationType;\r\n public bank_gateway_id: string;\r\n public accepted_card_types: string[];\r\n public post_transactions_to_gateway: boolean;\r\n public three_d_secure_url: string;\r\n public gateway_url: string;\r\n public generate_token_url: string;\r\n public widget_url: string;\r\n public successful_url: string;\r\n public failed_url: string;\r\n public enable_callback: boolean;\r\n public live: boolean;\r\n public default_module_id: number;\r\n public service_provider: string;\r\n public on_account: boolean;\r\n public sort_priority: number;\r\n public image_url: string;\r\n\r\n public banking_details: BankingDetails;\r\n\r\n constructor(record: EsolvePaymentMethodRecord) {\r\n this.id = +record.id;\r\n this.location_id = +record.location_id;\r\n this.paymethod_name = record.paymethod_name;\r\n this.description = record.description;\r\n this.display_banking_details = record.display_banking_details;\r\n this.currency_code = record.currency_code;\r\n this.terminal_id = record.terminal_id;\r\n this.terminal_id_secondary = record.terminal_id_secondary;\r\n this.merchant_id = record.merchant_id;\r\n this.application_id = record.application_id;\r\n this.api_username = record.api_username;\r\n this.api_password = record.api_password;\r\n this.api_signature = record.api_signature;\r\n this.is_gateway = record.is_gateway;\r\n this.must_store_card_details = record.must_store_card_details;\r\n this.allow_budget = record.allow_budget;\r\n this.integration_type = record.integration_type;\r\n this.bank_gateway_id = record.bank_gateway_id;\r\n this.accepted_card_types = record.accepted_card_types;\r\n this.post_transactions_to_gateway = record.post_transactions_to_gateway;\r\n this.three_d_secure_url = record.three_d_secure_url;\r\n this.gateway_url = record.gateway_url;\r\n this.generate_token_url = record.generate_token_url;\r\n this.widget_url = record.widget_url;\r\n this.successful_url = record.successful_url;\r\n this.failed_url = record.failed_url;\r\n this.enable_callback = record.enable_callback;\r\n this.live = record.live;\r\n this.default_module_id = +record.default_module_id;\r\n this.service_provider = record.service_provider;\r\n this.on_account = record.on_account;\r\n this.sort_priority = +record.sort_priority;\r\n this.image_url = record.image_url;\r\n\r\n this.banking_details = new BankingDetails(\r\n record.bank_name,\r\n record.account_holder,\r\n record.account,\r\n record.account_type,\r\n record.swift_number,\r\n record.branch_code\r\n );\r\n }\r\n}\r\n\r\nexport class BankingDetails {\r\n constructor(\r\n public bank_name: string,\r\n public account_holder: string,\r\n public account: string,\r\n public account_type: string,\r\n public swift_number: string,\r\n public branch_code: string\r\n ) { }\r\n}\r\n","export class EsolveShippingCost {\r\n public shipping: EsolveShippingTotals;\r\n public insurance: EsolveShippingTotals;\r\n\r\n constructor(\r\n // Shipping\r\n shipping_total: number = 0,\r\n shipping_vat: number = 0,\r\n shipping_total_savings: number = 0,\r\n // Insurance\r\n insurance_total: number = 0,\r\n insurance_vat: number = 0,\r\n insurance_total_savings: number = 0\r\n ) {\r\n this.shipping = new EsolveShippingTotals(\r\n shipping_total,\r\n shipping_vat,\r\n shipping_total_savings\r\n );\r\n\r\n this.insurance = new EsolveShippingTotals(\r\n insurance_total,\r\n insurance_vat,\r\n insurance_total_savings\r\n );\r\n }\r\n}\r\n\r\nclass EsolveShippingTotals {\r\n constructor(\r\n public total: number,\r\n public vat: number,\r\n public savings: number\r\n ) { }\r\n}\r\n","/**\r\n * Totals in cart\r\n */\r\nexport class EsolveCartTotals {\r\n constructor(\r\n /**\r\n * Number of unique records in cart\r\n */\r\n public records: number = 0,\r\n /**\r\n * Total quantity of all items in a cart\r\n */\r\n public items: number = 0,\r\n /**\r\n * Total in cart before discount and VAT is added\r\n */\r\n public sub_total: number = 0,\r\n /**\r\n * Total VAT of all the items in the cart\r\n */\r\n public vat_total: number = 0,\r\n /**\r\n * Total discount of all the item in the cart\r\n */\r\n public discount_total: number = 0\r\n ) { }\r\n\r\n /**\r\n * Grand total of cart which includes discount and VAT (NOTE: shipping and insurance is not included)\r\n */\r\n get total(): number {\r\n return this.sub_total + this.vat_total - this.discount_total;\r\n }\r\n}\r\n","export class EsolveCartStockItem {\r\n constructor(\r\n public code: string,\r\n public name: string,\r\n public sef_name: string,\r\n public description: string,\r\n public active: boolean,\r\n public items_in_pack: number,\r\n public delivery_category: string,\r\n private image_name: string\r\n ) { }\r\n\r\n /**\r\n * Path to tiny stock image\r\n */\r\n get tiny_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/tiny/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to thumbnail stock image\r\n */\r\n get thumbnail_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/thumb/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to small stock image\r\n */\r\n get small_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/small/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to big stock image\r\n */\r\n get big_image_src(): string {\r\n return '/images/' + (this.image_name ? 'stock/big/' + this.image_name : 'no_image.jpg');\r\n }\r\n\r\n /**\r\n * Path to original stock image\r\n */\r\n get original_image_src(): string {\r\n return 'images/' + (this.image_name ? 'stock/original/' + this.image_name : 'no_image.jpg');\r\n }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpParams } from '@angular/common/http';\r\n\r\nimport { iif, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\n\r\nimport { EsolveGetResponse, EsolveSetResponse, EsolvePostResponseItem } from '../shared/esolve-response';\r\nimport { EsolveConnectConfig, ESOLVE_CONNECT_CONFIG } from '../esolve-connect.config';\r\nimport { EsolveCart, EsolveCartItem, EsolveCartSetAction, EsolveCartSetItem } from './esolve-cart-item';\r\nimport { EsolveCartStockItem } from './esolve-cart-stock-item';\r\nimport { EsolveCartItemRecord, EsolveCartItemResponse } from './esolve-cart-item-record';\r\nimport { EsolveStockLocation } from './esolve-stock-location';\r\nimport { EsolveStockLocationRecord } from './esolve-stock-location-record';\r\nimport { EsolvePaymentMethod } from './esolve-payment-method';\r\nimport { EsolvePaymentMethodOptions, EsolvePaymentMethodRecord } from './esolve-payment-method-record';\r\nimport { EsolveShippingMethod } from './esolve-shipping-method';\r\nimport { EsolveShippingMethodOptions, EsolveShippingMethodRecord } from './esolve-shipping-method-record';\r\nimport { EsolveShippingCost } from './esolve-shipping-cost';\r\nimport { EsolveShippingCostOptions, EsolveShippingCostRecord } from './esolve-shipping-cost-record';\r\nimport { EsolveCartTotals } from './esolve-cart-totals';\r\nimport { EsolveCartTotalsRecord } from './esolve-cart-totals-record';\r\nimport { EsolveCheckoutResponse, EsolveTrackingCode } from './esolve-checkout';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class EsolveCartService {\r\n private _cached_tracking = 0;\r\n\r\n constructor(\r\n @Inject(ESOLVE_CONNECT_CONFIG) private config: EsolveConnectConfig,\r\n private http: HttpClient\r\n ) { }\r\n\r\n /**\r\n * Processes the eSolve tree records.\r\n * @param cart_item_records Records to process\r\n * @returns An array of processed cart items\r\n */\r\n private processCart(cart_item_records: EsolveCartItemRecord[]): EsolveCart {\r\n const cart_items: EsolveCartItem[] = [];\r\n\r\n if (cart_item_records) {\r\n for (const cart_item_record of cart_item_records) {\r\n const cart_stock_item = new EsolveCartStockItem(\r\n cart_item_record.code,\r\n cart_item_record.name,\r\n cart_item_record.sef_name,\r\n cart_item_record.description,\r\n cart_item_record.is_active,\r\n +cart_item_record.items_in_pack,\r\n cart_item_record.delivery_category,\r\n cart_item_record.image_name\r\n );\r\n\r\n cart_items.push(new EsolveCartItem(\r\n +cart_item_record.id,\r\n cart_stock_item,\r\n +cart_item_record.qty,\r\n cart_item_record.type,\r\n +cart_item_record.price,\r\n +cart_item_record.discount,\r\n +cart_item_record.discount_interval,\r\n cart_item_record.vat_rate,\r\n cart_item_record.allow_quotes,\r\n cart_item_record.allow_orders,\r\n cart_item_record.must_collect,\r\n cart_item_record.requested_assembly,\r\n +cart_item_record.price_incl,\r\n +cart_item_record.discount_price,\r\n +cart_item_record.discount_price_incl,\r\n +cart_item_record.discount_total,\r\n +cart_item_record.vat_total,\r\n +cart_item_record.line_total,\r\n +cart_item_record.line_total_incl\r\n ));\r\n }\r\n }\r\n\r\n return cart_items;\r\n }\r\n\r\n /**\r\n * Processes the eSolve stock location records.\r\n * @param records Records to process\r\n * @returns An array of processed stock location records\r\n */\r\n private processStockLocations(records: EsolveStockLocationRecord[]): EsolveStockLocation[] {\r\n const stock_locations: EsolveStockLocation[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n stock_locations.push(new EsolveStockLocation(record));\r\n }\r\n }\r\n\r\n return stock_locations;\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping method records.\r\n * @param records Records to process\r\n * @returns An array of processed shipping methods\r\n */\r\n private processShippingMethods(records: EsolveShippingMethodRecord[]): EsolveShippingMethod[] {\r\n const shipping_methods: EsolveShippingMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const shipping_method = new EsolveShippingMethod(\r\n +record.id,\r\n record.carrier_name,\r\n record.delivery_category,\r\n record.description,\r\n record.location,\r\n record.pricing,\r\n record.link_to_carrier_website,\r\n +record.days_to_deliver,\r\n record.shipping_cost_calculation_method,\r\n record.insurance_cost_calculation_method,\r\n +record.insurance_cost_percentage,\r\n +record.metric_factor,\r\n record.allow_immediate_payment_processing,\r\n record.allow_postal_address,\r\n record.allow_physical_address,\r\n record.client_to_collect,\r\n record.is_default_shipping_method,\r\n +record.location_id,\r\n record.use_zones,\r\n +record.min_distance,\r\n +record.max_distance,\r\n +record.shipping_surge_condition,\r\n +record.shipping_surge_percentage,\r\n +record.sort_priority,\r\n record.shipping_group,\r\n record.shipping_slot_identifier,\r\n +record.shipping_slot_delay_hours,\r\n record.image_url\r\n );\r\n\r\n shipping_methods.push(shipping_method);\r\n }\r\n }\r\n\r\n return shipping_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve payment method records.\r\n * @param records Records to process\r\n * @returns An array of processed payment methods.\r\n */\r\n private processPaymentMethods(records: EsolvePaymentMethodRecord[]): EsolvePaymentMethod[] {\r\n const payment_methods: EsolvePaymentMethod[] = [];\r\n\r\n if (records) {\r\n for (const record of records) {\r\n const payment_method = new EsolvePaymentMethod(record);\r\n\r\n payment_methods.push(payment_method);\r\n }\r\n }\r\n\r\n return payment_methods;\r\n }\r\n\r\n /**\r\n * Processes the eSolve shipping costs record.\r\n * @param record Data to process\r\n * @returns Processed shipping costs\r\n */\r\n private processShippingCost(record: EsolveShippingCostRecord): EsolveShippingCost {\r\n const shipping_cost = new EsolveShippingCost(\r\n +record.shipping_total,\r\n +record.vat_on_shipping,\r\n +record.total_saving_on_shipping,\r\n +record.insurance_total,\r\n +record.vat_on_insurance,\r\n +record.total_saving_on_insurance\r\n );\r\n\r\n return shipping_cost;\r\n }\r\n\r\n /**\r\n * Processes the eSolve cart totals\r\n * @param record Data to process\r\n * @returns Processed cart totals\r\n */\r\n private processCartTotals(record: EsolveCartTotalsRecord): EsolveCartTotals {\r\n const cart_totals = new EsolveCartTotals(\r\n +record.records,\r\n +record.items,\r\n +record.total,\r\n +record.vat,\r\n +record.discount\r\n );\r\n\r\n return cart_totals;\r\n }\r\n\r\n /**\r\n * Retrieves the current cart\r\n * @returns An `Observable` with an array of cart items\r\n */\r\n public getCart(): Observable<EsolveCart> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveCartItemRecord[]>>(\r\n `${this.config.api_url}/service/get-cart.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCart(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Updates the cart by preforming various actions, such as adding, editing or removing items from the cart.\r\n * @param items An array of options to update the cart\r\n * @param action The default action to preform\r\n * @returns An `Observable` with an array of responses that gives feedback on the requested changes\r\n */\r\n public setCart(items: EsolveCartSetItem[], action: EsolveCartSetAction = 'add'): Observable<EsolveCartItemResponse[]> {\r\n const body = {\r\n items,\r\n action\r\n };\r\n\r\n return this.http.post<EsolveSetResponse<EsolveCartItemResponse>>(\r\n `${this.config.api_url}/service/set-cart-item.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'\r\n },\r\n params: {\r\n ws_id: this.config.wsid\r\n },\r\n responseType: 'json',\r\n observe: 'body'\r\n }\r\n ).pipe(\r\n map(response => {\r\n if (response.responses === undefined) {\r\n throw response;\r\n }\r\n\r\n return response.responses;\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of stock locations\r\n * @returns An `Observable` with an array of stock locations\r\n */\r\n public getStockLocations(): Observable<EsolveStockLocation[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveStockLocationRecord[]>>(\r\n `${this.config.api_url}/service/get-locations.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processStockLocations(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of shipping methods\r\n * @returns An `Observable` with an array of shipping methods\r\n */\r\n public getShippingMethods(options?: EsolveShippingMethodOptions): Observable<EsolveShippingMethod[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n if (options) {\r\n if (typeof options.addresses_id !== 'undefined') {\r\n params = params.set('addresses_id', options.addresses_id.toString());\r\n }\r\n\r\n if (typeof options.location_id !== 'undefined') {\r\n params = params.set('location_id', options.location_id.toString());\r\n }\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolveShippingMethodRecord[]>>(\r\n `${this.config.api_url}/service/get-shipping-methods.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingMethods(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a list of payment methods\r\n * @returns An `Observable` with an array of payment methods\r\n */\r\n public getPaymentMethods(options?: EsolvePaymentMethodOptions): Observable<EsolvePaymentMethod[]> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n if (options) {\r\n if (typeof options.live !== 'undefined') {\r\n params = params.set('live', options.live.toString());\r\n }\r\n\r\n if (typeof options.location_id !== 'undefined') {\r\n params = params.set('location_id', options.location_id.toString());\r\n }\r\n\r\n if (typeof options.is_gateway !== 'undefined') {\r\n params = params.set('is_gateway', options.is_gateway.toString());\r\n }\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolvePaymentMethodRecord[]>>(\r\n `${this.config.api_url}/service/get-payment-methods.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processPaymentMethods(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the shipping costs\r\n * @param options Shipping cost options\r\n * @returns An `Observable` with the shipping costs\r\n */\r\n public getShippingCost(options: EsolveShippingCostOptions): Observable<EsolveShippingCost> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n if (options) {\r\n if (typeof options.addresses_id !== 'undefined') {\r\n params = params.set('addresses_id', options.addresses_id.toString());\r\n } else {\r\n return throwError(new Error('Address ID is required'));\r\n }\r\n\r\n if (typeof options.shipping_id !== 'undefined') {\r\n params = params.set('shipping_id', options.shipping_id.toString());\r\n } else {\r\n return throwError(new Error('Shipping ID is required'));\r\n }\r\n\r\n if (typeof options.location_id !== 'undefined') {\r\n params = params.set('location_id', options.location_id.toString());\r\n }\r\n } else {\r\n return throwError(new Error('Options are invalid'));\r\n }\r\n\r\n return this.http.get<EsolveGetResponse<EsolveShippingCostRecord[]>>(\r\n `${this.config.api_url}/service/get-shipping-cost.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processShippingCost(response.records[0]);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves the totals of the cart with all the totals calculated\r\n * @returns An `Observable` with an object containing cart totals\r\n */\r\n public getTotals(): Observable<EsolveCartTotals> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return this.http.get<EsolveGetResponse<EsolveCartTotalsRecord>>(\r\n `${this.config.api_url}/service/get-cart-totals.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n return this.processCartTotals(response.records);\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Retrieves a tracking code for the cart\r\n * @returns An `Observable` with the cart tracking code\r\n */\r\n public getTrackingCode(): Observable<number> {\r\n let params = new HttpParams();\r\n params = params.set('ws_id', this.config.wsid);\r\n\r\n return iif(\r\n () => this._cached_tracking > 0,\r\n of(this._cached_tracking),\r\n this.http.get<EsolveGetResponse<EsolveTrackingCode>>(\r\n `${this.config.api_url}/service/get-checkout-tracking.php`,\r\n { params }\r\n ).pipe(\r\n map(response => {\r\n if (response.records === undefined) {\r\n throw response;\r\n }\r\n\r\n this._cached_tracking = response.records.tracking;\r\n\r\n return response.records.tracking;\r\n })\r\n )\r\n );\r\n }\r\n\r\n /**\r\n * Initiates checkout of the cart items\r\n * @param type The cart type that needs to be checked out\r\n * @param addresses_id The ID of the delivery address\r\n * @param shipping_id The ID of the shipping method\r\n * @param payment_method_id The ID of the selected payment method\r\n * @param location_id The ID of the selected branch from with shipping needs to be calculated\r\n * @param comments Additional comments on the cart\r\n * @returns An `Observable` with the transaction ID\r\n */\r\n public checkout(\r\n type: 'order' | 'quote',\r\n addresses_id: number,\r\n shipping_id: number,\r\n payment_method_id = 0,\r\n location_id = 0,\r\n comments = ''\r\n ): Observable<number> {\r\n const body = {\r\n type,\r\n addresses_id,\r\n shipping_id,\r\n payment_method_id,\r\n location_id,\r\n comments,\r\n tracking: 0\r\n };\r\n\r\n return this.getTrackingCode().pipe(\r\n switchMap((tracking) => {\r\n if (tracking <= 0) {\r\n throw tracking;\r\n }\r\n\r\n body.tracking = tracking;\r\n\r\n return this.http.post<EsolveSetResponse<EsolveCheckoutResponse>>(\r\n `${this.config.api_url}/service/set-checkout.php`,\r\n body,\r\n {\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'\r\n },\r\n params: {\r\n ws_id: this.config.wsid\r\n },\r\n responseType: 'json',\r\n observe: 'body'\r\n }\r\n ).pipe(\r\n map(response => {\r\n if ((response.responses === undefined) || (response.responses.length <= 0)) {\r\n throw response;\r\n }\r\n\r\n const checkout_result = response.responses[0];\r\n\r\n if (checkout_result.status.state !== 'success') {\r\n throw checkout_result;\r\n }\r\n\r\n return checkout_result.esolve_id;\r\n }),\r\n catchError((errorRes: HttpErrorResponse | any) => {\r\n const parseException = (exception: EsolveSetResponse) => {\r\n const exception_type = exception.additional_data.exception_type;\r\n const error = {\r\n type: 'exception',\r\n message: exception.message || '',\r\n error_code: exception_type || 'unknown'\r\n };\r\n\r\n return error;\r\n };\r\n\r\n const parseCheckoutErrors = (response: EsolvePostResponseItem) => {\r\n const error = {\r\n type: 'error',\r\n message: 'Unknown error has occured',\r\n error_code: 'unknown'\r\n };\r\n\r\n if ((response.status.state === 'none') || (response.log.length === 0)) {\r\n error.error_code = 'no_response';\r\n error.message = 'Response was provided';\r\n } else if (response.status.state === 'error') {\r\n const error_log = response.log[0];\r\n\r\n error.error_code = error_log.message_code;\r\n error.message = error_log.message;\r\n }\r\n\r\n return error;\r\n };\r\n\r\n if (errorRes instanceof HttpErrorResponse) {\r\n if (errorRes.status === 500) {\r\n const server_error = errorRes.error;\r\n\r\n if (\r\n (server_error.service_type === 'set-checkout') ||\r\n (server_error.type !== undefined) ||\r\n (server_error.message !== undefined) ||\r\n (server_error.additional_data !== undefined)\r\n ) {\r\n return throwError(parseException(server_error));\r\n }\r\n }\r\n } else {\r\n if (errorRes.type !== undefined) {\r\n if (errorRes.type === 'exception') {\r\n return throwError(parseException(errorRes));\r\n }\r\n } else if (errorRes.transaction_type !== undefined) {\r\n return throwError(parseCheckoutErrors(errorRes));\r\n }\r\n }\r\n\r\n return throwError(errorRes);\r\n })\r\n );\r\n })\r\n );\r\n }\r\n}\r\n","/*\r\n * Public API Surface of ng-esolve-connect\r\n */\r\n\r\nexport * from './lib/ng-esolve-connect.module';\r\nexport { EsolveConnectConfig } from './lib/esolve-connect.config';\r\n\r\nexport * from './lib/shared/esolve-response';\r\n\r\n// SEO\r\nexport * from './lib/shared/seo/esolve-seo-info';\r\nexport * from './lib/shared/seo/esolve-seo.service';\r\n\r\n// Auth\r\nexport * from './lib/auth/esolve-session';\r\nexport * from './lib/auth/esolve-address';\r\nexport * from './lib/auth/esolve-auth.service';\r\nexport * from './lib/auth/esolve-session.service';\r\nexport * from './lib/auth/esolve-account.service';\r\n\r\n// Media\r\nexport * from './lib/media/esolve-media-article';\r\nexport * from './lib/media/esolve-media.service';\r\n\r\n// News\r\nexport * from './lib/news/esolve-news-article';\r\nexport * from './lib/news/esolve-news-group';\r\nexport * from './lib/news/esolve-news-article-list';\r\nexport * from './lib/news/esolve-news-article-author';\r\nexport * from './lib/news/esolve-news.service';\r\n\r\n// Banners\r\nexport * from './lib/banners/esolve-banner';\r\nexport * from './lib/banners/esolve-banner-image';\r\nexport * from './lib/banners/esolve-banner-image-hotspot';\r\nexport * from './lib/banners/esolve-banner.service';\r\n\r\n// Menu\r\nexport * from './lib/menu/esolve-menu-item';\r\nexport * from './lib/menu/esolve-menu.service';\r\n\r\n// Topics\r\nexport * from './lib/topics/esolve-topic';\r\nexport * from './lib/topics/esolve-topic.service';\r\n\r\n// Tags\r\nexport * from './lib/tags/esolve-tag';\r\n\r\n// Stock\r\nexport * from './lib/stock/esolve-stock-badge';\r\nexport * from './lib/stock/esolve-stock-price';\r\nexport * from './lib/stock/esolve-stock-item';\r\nexport * from './lib/stock/esolve-stock-item-list';\r\nexport * from './lib/stock/esolve-stock.service';\r\n\r\n// Category Tree\r\nexport * from './lib/category-tree/esolve-category-tree-item';\r\nexport * from './lib/category-tree/esolve-category-tree.service';\r\n\r\n// Cart\r\nexport * from './lib/cart/esolve-stock-location';\r\nexport * from './lib/cart/esolve-cart-item';\r\nexport * from './lib/cart/esolve-shipping-method';\r\nexport * from './lib/cart/esolve-payment-method';\r\nexport * from './lib/cart/esolve-shipping-cost';\r\nexport * from './lib/cart/esolve-cart-totals';\r\nexport * from './lib/cart/esolve-cart.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { EsolveConnectConfig } from '../esolve-connect.config';
4
+ import { EsolveAddress } from './esolve-address';
5
+ import * as i0 from "@angular/core";
6
+ export declare class EsolveAccountService {
7
+ private config;
8
+ private http;
9
+ private _user_id;
10
+ get user_id(): number;
11
+ set user_id(value: number);
12
+ constructor(config: EsolveConnectConfig, http: HttpClient);
13
+ private processUserAddress;
14
+ getAddress(): Observable<EsolveAddress[]>;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<EsolveAccountService, never>;
16
+ static ɵprov: i0.ɵɵInjectableDeclaration<EsolveAccountService>;
17
+ }
@@ -0,0 +1,18 @@
1
+ export interface EsolveAddressRecord {
2
+ id: number;
3
+ userid: number;
4
+ recipient: string;
5
+ address_type: EsolveAddressType;
6
+ pobox: string;
7
+ place_name: string;
8
+ street_number: string;
9
+ street: string;
10
+ suburb: string;
11
+ city: string;
12
+ province: string;
13
+ country: string;
14
+ postal_code: string;
15
+ latitude: number;
16
+ longitude: number;
17
+ }
18
+ export declare type EsolveAddressType = 'physical' | 'postal';
@@ -0,0 +1,18 @@
1
+ import { EsolveAddressType } from './esolve-address-record';
2
+ export declare class EsolveAddress {
3
+ id: number;
4
+ recipient: string;
5
+ address_type: EsolveAddressType;
6
+ pobox: string;
7
+ place_name: string;
8
+ street_number: string;
9
+ street: string;
10
+ suburb: string;
11
+ city: string;
12
+ province: string;
13
+ country: string;
14
+ postal_code: string;
15
+ latitude: number;
16
+ longitude: number;
17
+ constructor(id: number, recipient: string, address_type: EsolveAddressType, pobox: string, place_name: string, street_number: string, street: string, suburb: string, city: string, province: string, country: string, postal_code: string, latitude: number, longitude: number);
18
+ }
@@ -0,0 +1,13 @@
1
+ import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { EsolveConnectConfig } from '../esolve-connect.config';
4
+ import { EsolveSessionService } from './esolve-session.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class EsolveAuthInterceptorService implements HttpInterceptor {
7
+ private config;
8
+ private session;
9
+ constructor(config: EsolveConnectConfig, session: EsolveSessionService);
10
+ intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<EsolveAuthInterceptorService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<EsolveAuthInterceptorService>;
13
+ }
@@ -0,0 +1,34 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { EsolveConnectConfig } from '../esolve-connect.config';
4
+ import { EsolveSessionService } from './esolve-session.service';
5
+ import * as i0 from "@angular/core";
6
+ interface EsolveAuthResponseData {
7
+ service_type: string;
8
+ type: string;
9
+ message: string;
10
+ additional_data: {
11
+ expires: number;
12
+ expiry_time: number;
13
+ user_id: number;
14
+ key?: string;
15
+ key_okay?: boolean;
16
+ };
17
+ }
18
+ export declare class EsolveAuthService {
19
+ private config;
20
+ private http;
21
+ private session;
22
+ constructor(config: EsolveConnectConfig, http: HttpClient, session: EsolveSessionService);
23
+ private checkAccessToken;
24
+ getAccessToken(email: string, password: string, anonymous?: boolean): Observable<EsolveAuthResponseData>;
25
+ autoLogin(): void;
26
+ login(email: string, password: string): Observable<number>;
27
+ logout(): void;
28
+ private handleExpiration;
29
+ private handleAuthentication;
30
+ private handleError;
31
+ static ɵfac: i0.ɵɵFactoryDeclaration<EsolveAuthService, never>;
32
+ static ɵprov: i0.ɵɵInjectableDeclaration<EsolveAuthService>;
33
+ }
34
+ export {};
@@ -0,0 +1,11 @@
1
+ export declare class EsolveSession {
2
+ id: number;
3
+ private _key;
4
+ private _key_expiration_date?;
5
+ constructor(id?: number, _key?: string, _key_expiration_date?: Date | undefined);
6
+ get key(): string;
7
+ get expired(): boolean;
8
+ get authenticated(): boolean;
9
+ get valid(): boolean;
10
+ updateUser(user_id: number): void;
11
+ }
@@ -0,0 +1,22 @@
1
+ import { Observable } from 'rxjs';
2
+ import { EsolveConnectConfig } from '../esolve-connect.config';
3
+ import { EsolveAccountService } from './esolve-account.service';
4
+ import { EsolveSession } from './esolve-session';
5
+ import * as i0 from "@angular/core";
6
+ export declare class EsolveSessionService {
7
+ private config;
8
+ private key_expiration_timer;
9
+ private storage_key;
10
+ private _session;
11
+ session: Observable<EsolveSession>;
12
+ constructor(config: EsolveConnectConfig, account: EsolveAccountService);
13
+ get currentSession(): EsolveSession;
14
+ private setStorageKey;
15
+ private startTimer;
16
+ clearTimer(): void;
17
+ restore(expirationCallback: (session?: EsolveSession) => void, invalidSessionCallback: () => void): void;
18
+ handleSession(user_id: number, key: string, expiry_time: number, expires: number, expirationCallback: () => void): void;
19
+ handleUpdateSession(user_id: number, callback?: () => void): void;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<EsolveSessionService, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<EsolveSessionService>;
22
+ }
@@ -0,0 +1,5 @@
1
+ export interface EsolveStoredSession {
2
+ id: number;
3
+ _key: string;
4
+ _key_expiration_date: string;
5
+ }