@sd-angular/core 0.0.1006 → 0.0.1010

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 (303) hide show
  1. package/api/sd-angular-core-api.metadata.json +1 -1
  2. package/api/src/lib/token.service.d.ts +1 -2
  3. package/autocomplete/sd-angular-core-autocomplete.metadata.json +1 -1
  4. package/autocomplete/src/lib/autocomplete.component.d.ts +14 -9
  5. package/autocomplete/src/lib/autocomplete.module.d.ts +0 -1
  6. package/bundles/sd-angular-core-api.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-api.umd.min.js.map +1 -1
  8. package/bundles/sd-angular-core-autocomplete.umd.js +121 -117
  9. package/bundles/sd-angular-core-autocomplete.umd.js.map +1 -1
  10. package/bundles/sd-angular-core-autocomplete.umd.min.js +2 -2
  11. package/bundles/sd-angular-core-autocomplete.umd.min.js.map +1 -1
  12. package/bundles/sd-angular-core-cache.umd.js +4 -4
  13. package/bundles/sd-angular-core-cache.umd.js.map +1 -1
  14. package/bundles/sd-angular-core-cache.umd.min.js +2 -2
  15. package/bundles/sd-angular-core-cache.umd.min.js.map +1 -1
  16. package/bundles/sd-angular-core-chart.umd.js +4 -8
  17. package/bundles/sd-angular-core-chart.umd.js.map +1 -1
  18. package/bundles/sd-angular-core-chart.umd.min.js +1 -1
  19. package/bundles/sd-angular-core-chart.umd.min.js.map +1 -1
  20. package/bundles/sd-angular-core-common.umd.js +378 -4
  21. package/bundles/sd-angular-core-common.umd.js.map +1 -1
  22. package/bundles/sd-angular-core-common.umd.min.js +2 -2
  23. package/bundles/sd-angular-core-common.umd.min.js.map +1 -1
  24. package/bundles/sd-angular-core-date-range.umd.js +4 -4
  25. package/bundles/sd-angular-core-date-range.umd.js.map +1 -1
  26. package/bundles/sd-angular-core-date-range.umd.min.js +2 -2
  27. package/bundles/sd-angular-core-date-range.umd.min.js.map +1 -1
  28. package/bundles/sd-angular-core-date-time.umd.js +57 -35
  29. package/bundles/sd-angular-core-date-time.umd.js.map +1 -1
  30. package/bundles/sd-angular-core-date-time.umd.min.js +2 -2
  31. package/bundles/sd-angular-core-date-time.umd.min.js.map +1 -1
  32. package/bundles/sd-angular-core-export.umd.js +4 -4
  33. package/bundles/sd-angular-core-export.umd.js.map +1 -1
  34. package/bundles/sd-angular-core-export.umd.min.js +1 -1
  35. package/bundles/sd-angular-core-export.umd.min.js.map +1 -1
  36. package/bundles/sd-angular-core-form.umd.js +4 -4
  37. package/bundles/sd-angular-core-form.umd.min.js +1 -1
  38. package/bundles/sd-angular-core-form.umd.min.js.map +1 -1
  39. package/bundles/sd-angular-core-grid-material.umd.js +32 -70
  40. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  41. package/bundles/sd-angular-core-grid-material.umd.min.js +2 -2
  42. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  43. package/bundles/sd-angular-core-grid.umd.js +5 -4
  44. package/bundles/sd-angular-core-grid.umd.js.map +1 -1
  45. package/bundles/sd-angular-core-grid.umd.min.js +1 -1
  46. package/bundles/sd-angular-core-grid.umd.min.js.map +1 -1
  47. package/bundles/sd-angular-core-input-upload-file.umd.js +4 -4
  48. package/bundles/sd-angular-core-input-upload-file.umd.js.map +1 -1
  49. package/bundles/sd-angular-core-input-upload-file.umd.min.js +2 -2
  50. package/bundles/sd-angular-core-input-upload-file.umd.min.js.map +1 -1
  51. package/bundles/sd-angular-core-input.umd.js +35 -17
  52. package/bundles/sd-angular-core-input.umd.js.map +1 -1
  53. package/bundles/sd-angular-core-input.umd.min.js +2 -2
  54. package/bundles/sd-angular-core-input.umd.min.js.map +1 -1
  55. package/bundles/sd-angular-core-modal.umd.js +4 -4
  56. package/bundles/sd-angular-core-modal.umd.js.map +1 -1
  57. package/bundles/sd-angular-core-modal.umd.min.js +1 -1
  58. package/bundles/sd-angular-core-modal.umd.min.js.map +1 -1
  59. package/bundles/sd-angular-core-radio.umd.js +4 -8
  60. package/bundles/sd-angular-core-radio.umd.js.map +1 -1
  61. package/bundles/sd-angular-core-radio.umd.min.js +2 -2
  62. package/bundles/sd-angular-core-radio.umd.min.js.map +1 -1
  63. package/bundles/sd-angular-core-select-editor.umd.js +4 -4
  64. package/bundles/sd-angular-core-select-editor.umd.js.map +1 -1
  65. package/bundles/sd-angular-core-select-editor.umd.min.js +2 -2
  66. package/bundles/sd-angular-core-select-editor.umd.min.js.map +1 -1
  67. package/bundles/sd-angular-core-select.umd.js +116 -129
  68. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  69. package/bundles/sd-angular-core-select.umd.min.js +2 -2
  70. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  71. package/bundles/sd-angular-core-service.umd.js +8 -202
  72. package/bundles/sd-angular-core-service.umd.js.map +1 -1
  73. package/bundles/sd-angular-core-service.umd.min.js +1 -1
  74. package/bundles/sd-angular-core-service.umd.min.js.map +1 -1
  75. package/bundles/sd-angular-core-side-drawer.umd.js +4 -4
  76. package/bundles/sd-angular-core-side-drawer.umd.js.map +1 -1
  77. package/bundles/sd-angular-core-side-drawer.umd.min.js +2 -2
  78. package/bundles/sd-angular-core-side-drawer.umd.min.js.map +1 -1
  79. package/bundles/sd-angular-core-time.umd.js +4 -4
  80. package/bundles/sd-angular-core-time.umd.js.map +1 -1
  81. package/bundles/sd-angular-core-time.umd.min.js +2 -2
  82. package/bundles/sd-angular-core-time.umd.min.js.map +1 -1
  83. package/bundles/sd-angular-core-upload-excel.umd.js +4 -4
  84. package/bundles/sd-angular-core-upload-excel.umd.js.map +1 -1
  85. package/bundles/sd-angular-core-upload-excel.umd.min.js +1 -1
  86. package/bundles/sd-angular-core-upload-excel.umd.min.js.map +1 -1
  87. package/bundles/sd-angular-core-upload-file.umd.js +4 -4
  88. package/bundles/sd-angular-core-upload-file.umd.js.map +1 -1
  89. package/bundles/sd-angular-core-upload-file.umd.min.js +2 -2
  90. package/bundles/sd-angular-core-upload-file.umd.min.js.map +1 -1
  91. package/bundles/sd-angular-core-utility.umd.js +4 -4
  92. package/bundles/sd-angular-core-utility.umd.js.map +1 -1
  93. package/bundles/sd-angular-core-utility.umd.min.js +1 -1
  94. package/bundles/sd-angular-core-utility.umd.min.js.map +1 -1
  95. package/bundles/sd-angular-core.umd.js +4 -8
  96. package/bundles/sd-angular-core.umd.js.map +1 -1
  97. package/bundles/sd-angular-core.umd.min.js +1 -1
  98. package/bundles/sd-angular-core.umd.min.js.map +1 -1
  99. package/cache/sd-angular-core-cache.metadata.json +1 -1
  100. package/cache/src/lib/cache.service.d.ts +0 -1
  101. package/cache/src/public-api.d.ts +1 -0
  102. package/chart/sd-angular-core-chart.metadata.json +1 -1
  103. package/chart/src/lib/chart.component.d.ts +0 -1
  104. package/chart/src/public-api.d.ts +1 -0
  105. package/common/sd-angular-core-common.metadata.json +1 -1
  106. package/common/src/lib/common.module.d.ts +2 -0
  107. package/{grid-material → common}/src/lib/directives/sd-let.directive.d.ts +0 -0
  108. package/common/src/lib/directives/view-def.directive.d.ts +5 -0
  109. package/common/src/lib/typings/array.extension.d.ts +20 -0
  110. package/{service → common}/src/lib/typings/date.extension.d.ts +0 -0
  111. package/{service → common}/src/lib/typings/number.extension.d.ts +0 -0
  112. package/{typing/src/lib/typing → common/src/lib/typings}/string.extension.d.ts +2 -0
  113. package/common/src/public-api.d.ts +7 -0
  114. package/date-range/index.d.ts +0 -1
  115. package/date-range/sd-angular-core-date-range.metadata.json +1 -1
  116. package/date-range/src/lib/date-range.component.d.ts +0 -1
  117. package/date-range/src/lib/date-range.module.d.ts +0 -1
  118. package/date-range/src/public-api.d.ts +1 -1
  119. package/date-time/sd-angular-core-date-time.metadata.json +1 -1
  120. package/date-time/src/lib/date-time.component.d.ts +14 -7
  121. package/date-time/src/lib/date-time.module.d.ts +0 -1
  122. package/date-time/src/public-api.d.ts +0 -1
  123. package/esm2015/api/src/lib/token.service.js +1 -1
  124. package/esm2015/autocomplete/src/lib/autocomplete.component.js +111 -89
  125. package/esm2015/autocomplete/src/lib/autocomplete.module.js +6 -4
  126. package/esm2015/cache/src/lib/cache.service.js +1 -2
  127. package/esm2015/cache/src/public-api.js +2 -1
  128. package/esm2015/chart/src/lib/chart.component.js +1 -2
  129. package/esm2015/chart/src/public-api.js +2 -4
  130. package/esm2015/common/src/lib/common.module.js +24 -0
  131. package/esm2015/common/src/lib/directives/sd-let.directive.js +29 -0
  132. package/esm2015/common/src/lib/directives/view-def.directive.js +16 -0
  133. package/esm2015/common/src/lib/typings/array.extension.js +65 -0
  134. package/esm2015/common/src/lib/typings/date.extension.js +143 -0
  135. package/esm2015/common/src/lib/typings/number.extension.js +33 -0
  136. package/esm2015/common/src/lib/typings/string.extension.js +42 -0
  137. package/esm2015/common/src/public-api.js +8 -1
  138. package/esm2015/date-range/index.js +1 -2
  139. package/esm2015/date-range/src/lib/date-range.component.js +1 -2
  140. package/esm2015/date-range/src/lib/date-range.module.js +1 -2
  141. package/esm2015/date-range/src/public-api.js +2 -2
  142. package/esm2015/date-time/src/lib/date-time.component.js +55 -35
  143. package/esm2015/date-time/src/lib/date-time.module.js +5 -3
  144. package/esm2015/date-time/src/public-api.js +1 -2
  145. package/esm2015/export/src/lib/export.service.js +1 -2
  146. package/esm2015/form/src/public-api.js +2 -1
  147. package/esm2015/grid/src/lib/components/grid-date-picker-control/grid-date-picker-control.component.js +1 -2
  148. package/esm2015/grid/src/lib/grid.module.js +1 -2
  149. package/esm2015/grid/src/lib/models/handler-dotnet.js +1 -2
  150. package/esm2015/grid-material/sd-angular-core-grid-material.js +27 -28
  151. package/esm2015/grid-material/src/lib/grid-material.module.js +4 -5
  152. package/esm2015/grid-material/src/public-api.js +2 -4
  153. package/esm2015/input/src/lib/input.component.js +26 -6
  154. package/esm2015/input/src/lib/input.module.js +6 -3
  155. package/esm2015/input-upload-file/src/lib/input-upload-file.component.js +2 -2
  156. package/esm2015/input-upload-file/src/lib/input-upload-file.module.js +1 -2
  157. package/esm2015/lib/controls/date-picker-control/date-picker-control.component.js +1 -2
  158. package/esm2015/lib/pipes/sd-date.pipe.js +1 -2
  159. package/esm2015/modal/src/lib/modal.module.js +1 -2
  160. package/esm2015/public-api.js +11 -14
  161. package/esm2015/radio/src/lib/radio.module.js +1 -2
  162. package/esm2015/radio/src/public-api.js +2 -4
  163. package/esm2015/select/src/lib/select.component.js +78 -100
  164. package/esm2015/select/src/lib/select.module.js +6 -4
  165. package/esm2015/select-editor/src/lib/select-editor.module.js +1 -2
  166. package/esm2015/service/src/lib/service.module.js +6 -4
  167. package/esm2015/service/src/public-api.js +2 -2
  168. package/esm2015/side-drawer/src/lib/side-drawer.module.js +1 -2
  169. package/esm2015/time/src/lib/time.component.js +1 -2
  170. package/esm2015/time/src/public-api.js +2 -1
  171. package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -2
  172. package/esm2015/upload-excel/src/lib/upload-excel.module.js +1 -2
  173. package/esm2015/upload-file/src/lib/upload-file.module.js +1 -2
  174. package/esm2015/utility/src/lib/pipes/currency.pipe.js +1 -2
  175. package/esm2015/utility/src/lib/pipes/time-different.pipe.js +1 -2
  176. package/esm2015/utility/src/lib/utility.service.js +1 -2
  177. package/esm2015/utility/src/public-api.js +2 -1
  178. package/export/sd-angular-core-export.metadata.json +1 -1
  179. package/export/src/lib/export.service.d.ts +0 -1
  180. package/fesm2015/sd-angular-core-api.js.map +1 -1
  181. package/fesm2015/sd-angular-core-autocomplete.js +114 -91
  182. package/fesm2015/sd-angular-core-autocomplete.js.map +1 -1
  183. package/fesm2015/sd-angular-core-cache.js +1 -1
  184. package/fesm2015/sd-angular-core-cache.js.map +1 -1
  185. package/fesm2015/sd-angular-core-chart.js +1 -5
  186. package/fesm2015/sd-angular-core-chart.js.map +1 -1
  187. package/fesm2015/sd-angular-core-common.js +346 -2
  188. package/fesm2015/sd-angular-core-common.js.map +1 -1
  189. package/fesm2015/sd-angular-core-date-range.js +1 -1
  190. package/fesm2015/sd-angular-core-date-range.js.map +1 -1
  191. package/fesm2015/sd-angular-core-date-time.js +57 -36
  192. package/fesm2015/sd-angular-core-date-time.js.map +1 -1
  193. package/fesm2015/sd-angular-core-export.js +0 -1
  194. package/fesm2015/sd-angular-core-export.js.map +1 -1
  195. package/fesm2015/sd-angular-core-form.js +1 -0
  196. package/fesm2015/sd-angular-core-form.js.map +1 -1
  197. package/fesm2015/sd-angular-core-grid-material.js +5 -37
  198. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  199. package/fesm2015/sd-angular-core-grid.js +1 -1
  200. package/fesm2015/sd-angular-core-grid.js.map +1 -1
  201. package/fesm2015/sd-angular-core-input-upload-file.js +0 -1
  202. package/fesm2015/sd-angular-core-input-upload-file.js.map +1 -1
  203. package/fesm2015/sd-angular-core-input.js +29 -8
  204. package/fesm2015/sd-angular-core-input.js.map +1 -1
  205. package/fesm2015/sd-angular-core-modal.js +0 -1
  206. package/fesm2015/sd-angular-core-modal.js.map +1 -1
  207. package/fesm2015/sd-angular-core-radio.js +1 -5
  208. package/fesm2015/sd-angular-core-radio.js.map +1 -1
  209. package/fesm2015/sd-angular-core-select-editor.js +0 -1
  210. package/fesm2015/sd-angular-core-select-editor.js.map +1 -1
  211. package/fesm2015/sd-angular-core-select.js +81 -102
  212. package/fesm2015/sd-angular-core-select.js.map +1 -1
  213. package/fesm2015/sd-angular-core-service.js +5 -198
  214. package/fesm2015/sd-angular-core-service.js.map +1 -1
  215. package/fesm2015/sd-angular-core-side-drawer.js +0 -1
  216. package/fesm2015/sd-angular-core-side-drawer.js.map +1 -1
  217. package/fesm2015/sd-angular-core-time.js +1 -1
  218. package/fesm2015/sd-angular-core-time.js.map +1 -1
  219. package/fesm2015/sd-angular-core-upload-excel.js +0 -1
  220. package/fesm2015/sd-angular-core-upload-excel.js.map +1 -1
  221. package/fesm2015/sd-angular-core-upload-file.js +0 -1
  222. package/fesm2015/sd-angular-core-upload-file.js.map +1 -1
  223. package/fesm2015/sd-angular-core-utility.js +1 -1
  224. package/fesm2015/sd-angular-core-utility.js.map +1 -1
  225. package/fesm2015/sd-angular-core.js +15 -20
  226. package/fesm2015/sd-angular-core.js.map +1 -1
  227. package/form/src/public-api.d.ts +1 -0
  228. package/grid/sd-angular-core-grid.metadata.json +1 -1
  229. package/grid/src/lib/components/grid-date-picker-control/grid-date-picker-control.component.d.ts +0 -1
  230. package/grid/src/lib/grid.module.d.ts +0 -1
  231. package/grid/src/lib/models/handler-dotnet.d.ts +0 -1
  232. package/grid-material/sd-angular-core-grid-material.d.ts +26 -27
  233. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  234. package/grid-material/src/lib/grid-material.module.d.ts +0 -1
  235. package/grid-material/src/public-api.d.ts +1 -0
  236. package/input/sd-angular-core-input.metadata.json +1 -1
  237. package/input/src/lib/input.component.d.ts +5 -0
  238. package/input-upload-file/sd-angular-core-input-upload-file.metadata.json +1 -1
  239. package/input-upload-file/src/lib/input-upload-file.module.d.ts +0 -1
  240. package/lib/controls/date-picker-control/date-picker-control.component.d.ts +0 -1
  241. package/lib/pipes/sd-date.pipe.d.ts +0 -1
  242. package/modal/sd-angular-core-modal.metadata.json +1 -1
  243. package/modal/src/lib/modal.module.d.ts +0 -1
  244. package/package.json +1 -1
  245. package/public-api.d.ts +10 -10
  246. package/radio/sd-angular-core-radio.metadata.json +1 -1
  247. package/radio/src/lib/radio.module.d.ts +0 -1
  248. package/radio/src/public-api.d.ts +1 -0
  249. package/{sd-angular-core-0.0.1006.tgz → sd-angular-core-0.0.1010.tgz} +0 -0
  250. package/sd-angular-core.metadata.json +1 -1
  251. package/select/sd-angular-core-select.metadata.json +1 -1
  252. package/select/src/lib/select.component.d.ts +12 -5
  253. package/select/src/lib/select.module.d.ts +0 -1
  254. package/select-editor/sd-angular-core-select-editor.metadata.json +1 -1
  255. package/select-editor/src/lib/select-editor.module.d.ts +0 -1
  256. package/service/sd-angular-core-service.metadata.json +1 -1
  257. package/service/src/lib/service.module.d.ts +0 -1
  258. package/service/src/public-api.d.ts +1 -1
  259. package/side-drawer/sd-angular-core-side-drawer.metadata.json +1 -1
  260. package/side-drawer/src/lib/side-drawer.module.d.ts +0 -1
  261. package/time/sd-angular-core-time.metadata.json +1 -1
  262. package/time/src/lib/time.component.d.ts +0 -1
  263. package/time/src/public-api.d.ts +1 -0
  264. package/upload-excel/sd-angular-core-upload-excel.metadata.json +1 -1
  265. package/upload-excel/src/lib/upload-excel.component.d.ts +0 -1
  266. package/upload-excel/src/lib/upload-excel.module.d.ts +0 -1
  267. package/upload-file/sd-angular-core-upload-file.metadata.json +1 -1
  268. package/upload-file/src/lib/upload-file.module.d.ts +0 -1
  269. package/utility/sd-angular-core-utility.metadata.json +1 -1
  270. package/utility/src/lib/pipes/currency.pipe.d.ts +0 -1
  271. package/utility/src/lib/pipes/time-different.pipe.d.ts +0 -1
  272. package/utility/src/lib/utility.service.d.ts +0 -1
  273. package/utility/src/public-api.d.ts +1 -0
  274. package/bundles/sd-angular-core-typing.umd.js +0 -226
  275. package/bundles/sd-angular-core-typing.umd.js.map +0 -1
  276. package/bundles/sd-angular-core-typing.umd.min.js +0 -2
  277. package/bundles/sd-angular-core-typing.umd.min.js.map +0 -1
  278. package/esm2015/grid-material/src/lib/directives/sd-let.directive.js +0 -29
  279. package/esm2015/service/src/lib/typings/date.extension.js +0 -143
  280. package/esm2015/service/src/lib/typings/index.js +0 -4
  281. package/esm2015/service/src/lib/typings/number.extension.js +0 -33
  282. package/esm2015/service/src/lib/typings/string.extension.js +0 -23
  283. package/esm2015/typing/index.js +0 -2
  284. package/esm2015/typing/sd-angular-core-typing.js +0 -5
  285. package/esm2015/typing/src/lib/typing/date.extension.js +0 -143
  286. package/esm2015/typing/src/lib/typing/index.js +0 -4
  287. package/esm2015/typing/src/lib/typing/number.extension.js +0 -33
  288. package/esm2015/typing/src/lib/typing/string.extension.js +0 -23
  289. package/esm2015/typing/src/lib/typing.service.js +0 -13
  290. package/esm2015/typing/src/public-api.js +0 -3
  291. package/fesm2015/sd-angular-core-typing.js +0 -215
  292. package/fesm2015/sd-angular-core-typing.js.map +0 -1
  293. package/service/src/lib/typings/index.d.ts +0 -3
  294. package/service/src/lib/typings/string.extension.d.ts +0 -8
  295. package/typing/index.d.ts +0 -1
  296. package/typing/package.json +0 -12
  297. package/typing/sd-angular-core-typing.d.ts +0 -4
  298. package/typing/sd-angular-core-typing.metadata.json +0 -1
  299. package/typing/src/lib/typing/date.extension.d.ts +0 -24
  300. package/typing/src/lib/typing/index.d.ts +0 -3
  301. package/typing/src/lib/typing/number.extension.d.ts +0 -9
  302. package/typing/src/lib/typing.service.d.ts +0 -3
  303. package/typing/src/public-api.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sd-angular-core-api.js","sources":["../../../../projects/sd-core/api/src/lib/api.model.ts","../../../../projects/sd-core/api/src/lib/token.service.ts","../../../../projects/sd-core/api/src/lib/http.interceptor.ts","../../../../projects/sd-core/api/src/lib/api.module.ts","../../../../projects/sd-core/api/src/lib/api.service.ts","../../../../projects/sd-core/api/src/lib/http.service.ts","../../../../projects/sd-core/api/src/public-api.ts","../../../../projects/sd-core/api/sd-angular-core-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport hash from 'object-hash';\r\n\r\nexport interface IApiConfiguration {\r\n host?: string;\r\n tokenHeader?: string;\r\n customHeaders?: () => HttpHeaders;\r\n beforeRemote?: (request: HttpRequest<any>) => void | Promise<void>;\r\n afterRemote?: (response: HttpResponse<any> | HttpErrorResponse) => void | Promise<void>;\r\n translate?: (value: string) => string;\r\n}\r\n\r\nexport const API_CONFIG = new InjectionToken<IApiConfiguration>('api.configuration');\r\n\r\nexport const TOKEN = hash({\r\n origin: location.origin,\r\n key: 'ed4a2ffc-af43-41fb-9ac9-970f43d99571'\r\n});","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http';\r\nimport { timeout } from 'rxjs/operators';\r\nimport $ from 'jquery';\r\nimport * as hash from 'object-hash';\r\nimport { IApiConfiguration, API_CONFIG, TOKEN } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTokenService {\r\n\r\n get token() {\r\n const { get } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n return get();\r\n }\r\n\r\n set = (token: string) => {\r\n const { set } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n set(token);\r\n }\r\n\r\n clear = () => {\r\n const { remove } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n remove();\r\n }\r\n\r\n get customHeaders() {\r\n return this.configuration?.customHeaders?.() || null;\r\n }\r\n\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService) {\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { from, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { API_CONFIG, IApiConfiguration } from './api.model';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable()\r\nexport class SdHttpInterceptor implements HttpInterceptor {\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private tokenService: SdTokenService\r\n ) { }\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.configuration?.tokenHeader && this.tokenService.token) {\r\n request = request.clone({ headers: request.headers.set(this.configuration.tokenHeader, this.tokenService.token) });\r\n }\r\n\r\n if (!request.url.startsWith('http')) {\r\n request = request.clone({\r\n url: (this.configuration?.host || location.host) + request.url\r\n });\r\n }\r\n if (request.body instanceof FormData) {\r\n request = request.clone({\r\n headers: request.headers.delete('Content-Type')\r\n });\r\n }\r\n const beforeRemote = this.configuration?.beforeRemote?.(request);\r\n if (beforeRemote instanceof Promise) {\r\n return from(beforeRemote).pipe(\r\n switchMap(() => next.handle(request)),\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n return next.handle(request).pipe(\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { SdHttpInterceptor } from './http.interceptor';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule,\r\n ],\r\n exports: [\r\n HttpClientModule\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: SdHttpInterceptor, multi: true }\r\n ],\r\n})\r\nexport class SdApiModule { }\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { take, timeout } from 'rxjs/operators';\r\nimport $ from 'jquery';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\nimport { SdTokenService } from './token.service';\r\nimport { Subject } from 'rxjs';\r\nimport * as hash from 'object-hash';\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdApiService {\r\n private uploadId = 'U118fefb1-3085-4641-8cb8-f7fe5c28f509';\r\n\r\n #timeout = 120000; // 120s\r\n\r\n #cacheDuration = 2000; // 2s\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n subject: Subject<any>;\r\n response?: {\r\n status?: 'success' | 'error';\r\n result: any,\r\n }\r\n }\r\n } = {};\r\n\r\n private translate = (value: string): string => {\r\n return this.configuration?.translate(value) || value;\r\n }\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n post = async <T = any>(url: string, body?: any, headers?: HttpHeaders, options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }): Promise<T> => {\r\n headers = headers || this.tokenService.customHeaders;\r\n let hashKey = uuid.v4();\r\n if (!(body instanceof FormData)) {\r\n hashKey = hash({\r\n url,\r\n headers,\r\n body\r\n });\r\n }\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient.post(encodeURI(url), body, {\r\n observe: 'body',\r\n headers,\r\n responseType: options?.responseType as any\r\n }).pipe(timeout(this.#timeout)).subscribe((res) => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n } else {\r\n this.httpClient.post(encodeURI(url), body, {\r\n observe: 'response',\r\n headers\r\n }).pipe(timeout(this.#timeout)).subscribe((res) => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n }\r\n\r\n postCache = async <T = any>(url: string, body?: any, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }): Promise<T> => {\r\n const headers = options?.headers || this.tokenService.customHeaders;\r\n const { get, set, has } = this.cacheService.create({\r\n url,\r\n headers,\r\n body\r\n }, {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours\r\n });\r\n if (!has()) {\r\n const result = await this.post(url, body, options?.headers);\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n }\r\n\r\n put<T = any>(url: string, body?: any, headers?: HttpHeaders): Promise<T> {\r\n headers = headers || this.tokenService.customHeaders;\r\n return new Promise<any>((resolve, reject) => {\r\n this.httpClient.put(encodeURI(url), body, {\r\n observe: 'response',\r\n headers\r\n }).pipe(timeout(this.#timeout)).toPromise().then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n }).catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n }\r\n\r\n #defineParams = (request: any) => {\r\n const rq = [];\r\n for (const [key, value] of Object.entries(request)) {\r\n if (value || value === 0) {\r\n rq.push(\r\n `${encodeURIComponent(key as string)}=${encodeURIComponent(\r\n value as string\r\n )}`\r\n );\r\n }\r\n }\r\n return `?${rq?.join('&')}`;\r\n }\r\n\r\n getWithParams = <T = any>(url: string, params: any, options?: {\r\n headers?: HttpHeaders,\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }): Promise<T> => {\r\n return this.get(`${url}${this.#defineParams(params)}`, options?.headers, { ...options, encodeURI: false });\r\n }\r\n\r\n getCacheWithParams = <T = any>(url: string, params: any, headers?: HttpHeaders, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }): Promise<T> => {\r\n return this.getCache(`${url}${this.#defineParams(params)}`, { ...options, encodeURI: false });\r\n }\r\n\r\n get = <T = any>(url: string, headers?: HttpHeaders, options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n encodeURI?: boolean\r\n }): Promise<T> => {\r\n headers = headers || this.tokenService.customHeaders;\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n // const hashKey = hash({\r\n // encodedUrl,\r\n // headers\r\n // });\r\n const hashKey = hash({\r\n encodedUrl,\r\n headers\r\n });\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject()\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient.get(encodedUrl, { observe: 'body', headers, responseType: options?.responseType as any })\r\n .pipe(timeout(this.#timeout)).subscribe((res) => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n } else {\r\n this.httpClient.get(encodedUrl, { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout)).subscribe((res) => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n }\r\n\r\n getCache = async <T = any>(url: string, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n encodeURI?: boolean\r\n }): Promise<T> => {\r\n const headers = options?.headers || this.tokenService.customHeaders;\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n const { get, set, has } = this.cacheService.create({\r\n encodedUrl,\r\n headers\r\n }, {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours\r\n });\r\n if (!has()) {\r\n const result = await this.get(encodedUrl, options?.headers);\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n }\r\n\r\n delete<T = any>(url: string, headers?: HttpHeaders): Promise<T> {\r\n headers = headers || this.tokenService.customHeaders;\r\n return new Promise<any>((resolve, reject) => {\r\n this.httpClient.delete(encodeURI(url), { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise().then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n }).catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n }\r\n\r\n uploadSingle = (url: string, option?: {\r\n extensions?: string[],\r\n maxSizeInMb?: number,\r\n validator?: (fileName: string) => string\r\n }): Promise<any> => {\r\n return new Promise((resolve, reject) => {\r\n if ($(`#${this.uploadId}`).length) {\r\n $('body').children(`#${this.uploadId}`).remove();\r\n }\r\n $('body').append(`<input id='${this.uploadId}' style='display: none' type='file' />`);\r\n $(`#${this.uploadId}`).on('change', (evt: any) => {\r\n try {\r\n const target: DataTransfer = evt.target;\r\n const fileToUpload = target.files.item(0);\r\n this.upload(url, fileToUpload, option).then(resolve).catch(reject);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n $(`#${this.uploadId}`).trigger('click');\r\n });\r\n }\r\n\r\n upload = async (url: string, file: File, option?: {\r\n extensions?: string[],\r\n maxSizeInMb?: number,\r\n validator?: (fileName: string) => string\r\n }) => {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n const message = this.translate(`Invalid file extension`);\r\n throw new Error(message);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n const message = `[${file.name}] ${this.translate('Uploaded file is not match extension')} ${option.extensions.join(', ')}`;\r\n throw new Error(message);\r\n }\r\n if (option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] ${this.translate('Max file size')} ${option.maxSizeInMb} Mbs`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n return await this.post(url, formData);\r\n }\r\n}\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { Observable } from 'rxjs';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdHttpService {\r\n constructor(\r\n private httpClient: HttpClient,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n get =<T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.get<T>(url, option);\r\n }\r\n\r\n post = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.post<T>(url, body, option);\r\n }\r\n\r\n put = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.put<T>(url, body, option);\r\n }\r\n\r\n delete = <T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.delete<T>(url, option);\r\n }\r\n\r\n request = <T = any>(method: string, url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.request<T>(method, url, option);\r\n }\r\n}\r\n\r\ninterface ObservableOption {\r\n body?: any;\r\n headers?: HttpHeaders | {\r\n [header: string]: string | string[];\r\n };\r\n observe?: 'body';\r\n params?: HttpParams | {\r\n [param: string]: string | string[];\r\n };\r\n reportProgress?: boolean;\r\n responseType?: 'json';\r\n withCredentials?: boolean;\r\n}","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/api.module';\r\nexport * from './lib/token.service';\r\nexport * from './lib/api.model';\r\nexport * from './lib/api.service';\r\nexport * from './lib/http.service';\r\nexport * from './lib/http.interceptor';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["hash","uuid.v4"],"mappings":"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"}
1
+ {"version":3,"file":"sd-angular-core-api.js","sources":["../../../../projects/sd-core/api/src/lib/api.model.ts","../../../../projects/sd-core/api/src/lib/token.service.ts","../../../../projects/sd-core/api/src/lib/http.interceptor.ts","../../../../projects/sd-core/api/src/lib/api.module.ts","../../../../projects/sd-core/api/src/lib/api.service.ts","../../../../projects/sd-core/api/src/lib/http.service.ts","../../../../projects/sd-core/api/src/public-api.ts","../../../../projects/sd-core/api/sd-angular-core-api.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport hash from 'object-hash';\r\n\r\nexport interface IApiConfiguration {\r\n host?: string;\r\n tokenHeader?: string;\r\n customHeaders?: () => HttpHeaders;\r\n beforeRemote?: (request: HttpRequest<any>) => void | Promise<void>;\r\n afterRemote?: (response: HttpResponse<any> | HttpErrorResponse) => void | Promise<void>;\r\n translate?: (value: string) => string;\r\n}\r\n\r\nexport const API_CONFIG = new InjectionToken<IApiConfiguration>('api.configuration');\r\n\r\nexport const TOKEN = hash({\r\n origin: location.origin,\r\n key: 'ed4a2ffc-af43-41fb-9ac9-970f43d99571'\r\n});","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { IApiConfiguration, API_CONFIG, TOKEN } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTokenService {\r\n\r\n get token() {\r\n const { get } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n return get();\r\n }\r\n\r\n set = (token: string) => {\r\n const { set } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n set(token);\r\n }\r\n\r\n clear = () => {\r\n const { remove } = this.cacheService.create<string>(TOKEN, {\r\n type: 'local',\r\n hours: 240\r\n });\r\n remove();\r\n }\r\n\r\n get customHeaders() {\r\n return this.configuration?.customHeaders?.() || null;\r\n }\r\n\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService) {\r\n }\r\n}\r\n","import { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional } from '@angular/core';\r\nimport { from, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { API_CONFIG, IApiConfiguration } from './api.model';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable()\r\nexport class SdHttpInterceptor implements HttpInterceptor {\r\n constructor(\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private tokenService: SdTokenService\r\n ) { }\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this.configuration?.tokenHeader && this.tokenService.token) {\r\n request = request.clone({ headers: request.headers.set(this.configuration.tokenHeader, this.tokenService.token) });\r\n }\r\n\r\n if (!request.url.startsWith('http')) {\r\n request = request.clone({\r\n url: (this.configuration?.host || location.host) + request.url\r\n });\r\n }\r\n if (request.body instanceof FormData) {\r\n request = request.clone({\r\n headers: request.headers.delete('Content-Type')\r\n });\r\n }\r\n const beforeRemote = this.configuration?.beforeRemote?.(request);\r\n if (beforeRemote instanceof Promise) {\r\n return from(beforeRemote).pipe(\r\n switchMap(() => next.handle(request)),\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n return next.handle(request).pipe(\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n this.configuration?.afterRemote?.(event);\r\n }\r\n return event;\r\n }),\r\n catchError((error: HttpErrorResponse) => {\r\n this.configuration?.afterRemote?.(error);\r\n return throwError(error);\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { SdHttpInterceptor } from './http.interceptor';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule,\r\n ],\r\n exports: [\r\n HttpClientModule\r\n ],\r\n providers: [\r\n { provide: HTTP_INTERCEPTORS, useClass: SdHttpInterceptor, multi: true }\r\n ],\r\n})\r\nexport class SdApiModule { }\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { take, timeout } from 'rxjs/operators';\r\nimport $ from 'jquery';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { SdCacheService } from '@sd-angular/core/cache';\r\nimport { SdTokenService } from './token.service';\r\nimport { Subject } from 'rxjs';\r\nimport * as hash from 'object-hash';\r\nimport * as uuid from 'uuid';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdApiService {\r\n private uploadId = 'U118fefb1-3085-4641-8cb8-f7fe5c28f509';\r\n\r\n #timeout = 120000; // 120s\r\n\r\n #cacheDuration = 2000; // 2s\r\n #cache: {\r\n [key: string]: {\r\n createdDate: Date;\r\n subject: Subject<any>;\r\n response?: {\r\n status?: 'success' | 'error';\r\n result: any,\r\n }\r\n }\r\n } = {};\r\n\r\n private translate = (value: string): string => {\r\n return this.configuration?.translate(value) || value;\r\n }\r\n\r\n constructor(\r\n private httpClient: HttpClient,\r\n @Inject(API_CONFIG) @Optional() private configuration: IApiConfiguration,\r\n private cacheService: SdCacheService,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n post = async <T = any>(url: string, body?: any, headers?: HttpHeaders, options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }): Promise<T> => {\r\n headers = headers || this.tokenService.customHeaders;\r\n let hashKey = uuid.v4();\r\n if (!(body instanceof FormData)) {\r\n hashKey = hash({\r\n url,\r\n headers,\r\n body\r\n });\r\n }\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject(),\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient.post(encodeURI(url), body, {\r\n observe: 'body',\r\n headers,\r\n responseType: options?.responseType as any\r\n }).pipe(timeout(this.#timeout)).subscribe((res) => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n } else {\r\n this.httpClient.post(encodeURI(url), body, {\r\n observe: 'response',\r\n headers\r\n }).pipe(timeout(this.#timeout)).subscribe((res) => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n }\r\n\r\n postCache = async <T = any>(url: string, body?: any, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }): Promise<T> => {\r\n const headers = options?.headers || this.tokenService.customHeaders;\r\n const { get, set, has } = this.cacheService.create({\r\n url,\r\n headers,\r\n body\r\n }, {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours\r\n });\r\n if (!has()) {\r\n const result = await this.post(url, body, options?.headers);\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n }\r\n\r\n put<T = any>(url: string, body?: any, headers?: HttpHeaders): Promise<T> {\r\n headers = headers || this.tokenService.customHeaders;\r\n return new Promise<any>((resolve, reject) => {\r\n this.httpClient.put(encodeURI(url), body, {\r\n observe: 'response',\r\n headers\r\n }).pipe(timeout(this.#timeout)).toPromise().then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n }).catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n }\r\n\r\n #defineParams = (request: any) => {\r\n const rq = [];\r\n for (const [key, value] of Object.entries(request)) {\r\n if (value || value === 0) {\r\n rq.push(\r\n `${encodeURIComponent(key as string)}=${encodeURIComponent(\r\n value as string\r\n )}`\r\n );\r\n }\r\n }\r\n return `?${rq?.join('&')}`;\r\n }\r\n\r\n getWithParams = <T = any>(url: string, params: any, options?: {\r\n headers?: HttpHeaders,\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n }): Promise<T> => {\r\n return this.get(`${url}${this.#defineParams(params)}`, options?.headers, { ...options, encodeURI: false });\r\n }\r\n\r\n getCacheWithParams = <T = any>(url: string, params: any, headers?: HttpHeaders, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n }): Promise<T> => {\r\n return this.getCache(`${url}${this.#defineParams(params)}`, { ...options, encodeURI: false });\r\n }\r\n\r\n get = <T = any>(url: string, headers?: HttpHeaders, options?: {\r\n responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';\r\n encodeURI?: boolean\r\n }): Promise<T> => {\r\n headers = headers || this.tokenService.customHeaders;\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n // const hashKey = hash({\r\n // encodedUrl,\r\n // headers\r\n // });\r\n const hashKey = hash({\r\n encodedUrl,\r\n headers\r\n });\r\n if (!this.#cache[hashKey] || Date.addMiliseconds(this.#cache[hashKey].createdDate, this.#cacheDuration) < new Date()) {\r\n this.#cache[hashKey] = {\r\n createdDate: new Date(),\r\n subject: new Subject()\r\n };\r\n if (options?.responseType && options.responseType !== 'json') {\r\n this.httpClient.get(encodedUrl, { observe: 'body', headers, responseType: options?.responseType as any })\r\n .pipe(timeout(this.#timeout)).subscribe((res) => {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res\r\n };\r\n this.#cache[hashKey].subject.next(res);\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n } else {\r\n this.httpClient.get(encodedUrl, { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout)).subscribe((res) => {\r\n if (res.ok) {\r\n this.#cache[hashKey].response = {\r\n status: 'success',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.next(res.body);\r\n } else {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: res.body\r\n };\r\n this.#cache[hashKey].subject.error(res.body);\r\n }\r\n }, err => {\r\n this.#cache[hashKey].response = {\r\n status: 'error',\r\n result: err\r\n };\r\n this.#cache[hashKey].subject.error(err);\r\n });\r\n }\r\n }\r\n if (this.#cache[hashKey].response?.status) {\r\n if (this.#cache[hashKey].response?.status === 'success') {\r\n return this.#cache[hashKey].response.result;\r\n }\r\n throw this.#cache[hashKey].response.result;\r\n }\r\n return this.#cache[hashKey].subject.pipe(take(1)).toPromise();\r\n }\r\n\r\n getCache = async <T = any>(url: string, options?: {\r\n cacheType?: 'default' | 'session' | 'local';\r\n cacheHours?: number;\r\n headers?: HttpHeaders;\r\n encodeURI?: boolean\r\n }): Promise<T> => {\r\n const headers = options?.headers || this.tokenService.customHeaders;\r\n const encodedUrl = options?.encodeURI === false ? url : encodeURI(url);\r\n const { get, set, has } = this.cacheService.create({\r\n encodedUrl,\r\n headers\r\n }, {\r\n type: options?.cacheType,\r\n hours: options?.cacheHours\r\n });\r\n if (!has()) {\r\n const result = await this.get(encodedUrl, options?.headers);\r\n set(result);\r\n return result;\r\n }\r\n return get();\r\n }\r\n\r\n delete<T = any>(url: string, headers?: HttpHeaders): Promise<T> {\r\n headers = headers || this.tokenService.customHeaders;\r\n return new Promise<any>((resolve, reject) => {\r\n this.httpClient.delete(encodeURI(url), { observe: 'response', headers })\r\n .pipe(timeout(this.#timeout))\r\n .toPromise().then(result => {\r\n if (result.ok) {\r\n resolve(result.body);\r\n } else {\r\n reject(result.body);\r\n }\r\n }).catch((httpErrorResponse: HttpErrorResponse) => {\r\n reject(httpErrorResponse);\r\n });\r\n });\r\n }\r\n\r\n uploadSingle = (url: string, option?: {\r\n extensions?: string[],\r\n maxSizeInMb?: number,\r\n validator?: (fileName: string) => string\r\n }): Promise<any> => {\r\n return new Promise((resolve, reject) => {\r\n if ($(`#${this.uploadId}`).length) {\r\n $('body').children(`#${this.uploadId}`).remove();\r\n }\r\n $('body').append(`<input id='${this.uploadId}' style='display: none' type='file' />`);\r\n $(`#${this.uploadId}`).on('change', (evt: any) => {\r\n try {\r\n const target: DataTransfer = evt.target;\r\n const fileToUpload = target.files.item(0);\r\n this.upload(url, fileToUpload, option).then(resolve).catch(reject);\r\n } catch (error) {\r\n reject(error);\r\n }\r\n });\r\n $(`#${this.uploadId}`).trigger('click');\r\n });\r\n }\r\n\r\n upload = async (url: string, file: File, option?: {\r\n extensions?: string[],\r\n maxSizeInMb?: number,\r\n validator?: (fileName: string) => string\r\n }) => {\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n const message = this.translate(`Invalid file extension`);\r\n throw new Error(message);\r\n }\r\n const extension = file.name.substring(lastDot + 1);\r\n if (option) {\r\n if (option.extensions?.length && !option.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n const message = `[${file.name}] ${this.translate('Uploaded file is not match extension')} ${option.extensions.join(', ')}`;\r\n throw new Error(message);\r\n }\r\n if (option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {\r\n const message = `[${file.name}] ${this.translate('Max file size')} ${option.maxSizeInMb} Mbs`;\r\n throw new Error(message);\r\n }\r\n if (option.validator && option.validator(file.name)) {\r\n const message = option.validator(file.name);\r\n throw new Error(message);\r\n }\r\n }\r\n const formData: FormData = new FormData();\r\n formData.append('file', file, file.name);\r\n return await this.post(url, formData);\r\n }\r\n}\r\n","import { Injectable, Inject, Optional } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { IApiConfiguration, API_CONFIG } from './api.model';\r\nimport { Observable } from 'rxjs';\r\nimport { SdTokenService } from './token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdHttpService {\r\n constructor(\r\n private httpClient: HttpClient,\r\n private tokenService: SdTokenService) {\r\n }\r\n\r\n get =<T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.get<T>(url, option);\r\n }\r\n\r\n post = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.post<T>(url, body, option);\r\n }\r\n\r\n put = <T = any>(url: string, body?: any, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.put<T>(url, body, option);\r\n }\r\n\r\n delete = <T = any>(url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.delete<T>(url, option);\r\n }\r\n\r\n request = <T = any>(method: string, url: string, option?: ObservableOption): Observable<T> => {\r\n option = {\r\n ...option,\r\n headers: option.headers || this.tokenService.customHeaders\r\n }\r\n return this.httpClient.request<T>(method, url, option);\r\n }\r\n}\r\n\r\ninterface ObservableOption {\r\n body?: any;\r\n headers?: HttpHeaders | {\r\n [header: string]: string | string[];\r\n };\r\n observe?: 'body';\r\n params?: HttpParams | {\r\n [param: string]: string | string[];\r\n };\r\n reportProgress?: boolean;\r\n responseType?: 'json';\r\n withCredentials?: boolean;\r\n}","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\nexport * from './lib/api.module';\r\nexport * from './lib/token.service';\r\nexport * from './lib/api.model';\r\nexport * from './lib/api.service';\r\nexport * from './lib/http.service';\r\nexport * from './lib/http.interceptor';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["hash","uuid.v4"],"mappings":"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"}
@@ -3,14 +3,12 @@ import { CommonModule } from '@angular/common';
3
3
  import { FormControl, NgForm, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatFormFieldModule } from '@angular/material/form-field';
5
5
  import { MatInputModule } from '@angular/material/input';
6
- import { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet } from 'tslib';
7
- import { debounceTime, switchMap, startWith } from 'rxjs/operators';
6
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from 'tslib';
7
+ import { debounceTime, switchMap, map, finalize, startWith } from 'rxjs/operators';
8
8
  import { v4 } from 'uuid';
9
- import { Subscription } from 'rxjs';
10
- import { SdUtilityService } from '@sd-angular/core/utility';
9
+ import { BehaviorSubject, Subscription, combineLatest, defer, from, of } from 'rxjs';
11
10
  import { MatAutocompleteTrigger, MatAutocompleteModule } from '@angular/material/autocomplete';
12
- import { SdFormControl } from '@sd-angular/core/common';
13
- import '@sd-angular/core/typing';
11
+ import { SdFormControl, SdViewDefDirective, SdCommonModule } from '@sd-angular/core/common';
14
12
  import { MatIconModule } from '@angular/material/icon';
15
13
  import { SdTranslateModule } from '@sd-angular/core/translate';
16
14
  import { MatTooltipModule } from '@angular/material/tooltip';
@@ -30,7 +28,7 @@ SdAutocompleteDisplayDefDirective.ctorParameters = () => [
30
28
  { type: TemplateRef }
31
29
  ];
32
30
 
33
- var _model, _items, _currentItems, _delay, _name, _form, _subscription, _loadItems;
31
+ var _model, _delay, _name, _form, _itemsChanges, _subscription, _cache, _item;
34
32
  class SdAutocompleteErrotStateMatcher {
35
33
  constructor(formControl) {
36
34
  this.formControl = formControl;
@@ -42,20 +40,18 @@ class SdAutocompleteErrotStateMatcher {
42
40
  }
43
41
  }
44
42
  class SdAutocomplete {
45
- constructor(ref, utilityService) {
43
+ constructor(ref) {
46
44
  this.ref = ref;
47
- this.utilityService = utilityService;
48
45
  this.id = `I${v4()}`;
49
46
  _model.set(this, void 0);
50
- _items.set(this, []);
51
- _currentItems.set(this, []);
52
- _delay.set(this, 500); // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm
47
+ _delay.set(this, 0); // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm
53
48
  _name.set(this, v4());
54
49
  this.loading = false;
55
50
  this.inputControl = new FormControl();
56
51
  this.formControl = new SdFormControl();
57
52
  this.matcher = new SdAutocompleteErrotStateMatcher(this.formControl);
58
53
  _form.set(this, void 0);
54
+ _itemsChanges.set(this, new BehaviorSubject([]));
59
55
  this.limit = 100;
60
56
  this.action = new EventEmitter();
61
57
  this.modelChange = new EventEmitter();
@@ -63,12 +59,9 @@ class SdAutocomplete {
63
59
  this.isRequired = false;
64
60
  this.disableErrorMessage = false;
65
61
  _subscription.set(this, new Subscription());
66
- _loadItems.set(this, (searchText, items) => __awaiter(this, void 0, void 0, function* () {
67
- this.loading = true;
68
- return yield items(searchText).finally(() => this.loading = false);
69
- // this.ref.detectChanges();
70
- // return this.#previousResults;
71
- }));
62
+ this.isFocused = false;
63
+ _cache.set(this, {});
64
+ _item.set(this, {});
72
65
  this.onSelect = (item) => {
73
66
  if (item) {
74
67
  if (typeof (item) === 'string' || typeof (item) === 'number') {
@@ -89,21 +82,39 @@ class SdAutocomplete {
89
82
  this.inputControl.setValue('', {
90
83
  emitEvent: false
91
84
  });
92
- // this.ref.markForCheck();
93
- // this.inputControl.setValue('', {
94
- // emitEvent: false
95
- // });
96
85
  }
97
86
  };
98
87
  this.onFocus = () => {
88
+ this.isFocused = true;
99
89
  this.inputControl.setValue('');
100
90
  // this.inputControl.updateValueAndValidity();
101
91
  };
102
92
  this.onBlur = () => {
93
+ this.isFocused = false;
103
94
  this.inputControl.setValue('', {
104
95
  emitEvent: false
105
96
  });
106
97
  };
98
+ this.onClick = () => {
99
+ var _a;
100
+ if ((_a = this.sdView) === null || _a === void 0 ? void 0 : _a.templateRef) {
101
+ if (!this.formControl.disabled && !this.isFocused) {
102
+ this.focus();
103
+ }
104
+ }
105
+ };
106
+ this.blur = () => {
107
+ var _a, _b;
108
+ (_b = (_a = this.input) === null || _a === void 0 ? void 0 : _a.nativeElement) === null || _b === void 0 ? void 0 : _b.blur();
109
+ };
110
+ this.focus = () => {
111
+ this.isFocused = true;
112
+ setTimeout(() => {
113
+ var _a, _b, _c;
114
+ (_a = this.autocompleteTrigger) === null || _a === void 0 ? void 0 : _a.openPanel();
115
+ (_c = (_b = this.input) === null || _b === void 0 ? void 0 : _b.nativeElement) === null || _c === void 0 ? void 0 : _c.focus();
116
+ }, 100);
117
+ };
107
118
  this.clear = ($event) => {
108
119
  var _a;
109
120
  $event === null || $event === void 0 ? void 0 : $event.stopPropagation();
@@ -124,20 +135,10 @@ class SdAutocomplete {
124
135
  this.inputControl.updateValueAndValidity({ emitEvent: true });
125
136
  };
126
137
  }
127
- get isNumber() {
128
- var _a;
129
- if (__classPrivateFieldGet(this, _model) || __classPrivateFieldGet(this, _model) === 0) {
130
- return typeof (__classPrivateFieldGet(this, _model)) === 'number';
131
- }
132
- if ((_a = __classPrivateFieldGet(this, _currentItems)) === null || _a === void 0 ? void 0 : _a.length) {
133
- if (this.valueField) {
134
- return typeof (__classPrivateFieldGet(this, _currentItems)[0][this.valueField]) === 'number';
135
- }
136
- else {
137
- return typeof (__classPrivateFieldGet(this, _currentItems)[0]) === 'number';
138
- }
138
+ set name(val) {
139
+ if (val) {
140
+ __classPrivateFieldSet(this, _name, val);
139
141
  }
140
- return false;
141
142
  }
142
143
  set form(val) {
143
144
  if (val) {
@@ -151,16 +152,16 @@ class SdAutocomplete {
151
152
  }
152
153
  set items(items) {
153
154
  if (!items) {
154
- __classPrivateFieldSet(this, _items, []);
155
+ __classPrivateFieldGet(this, _itemsChanges).next([]);
155
156
  }
156
157
  else if (Array.isArray(items)) {
157
- __classPrivateFieldSet(this, _items, items.filter(e => e !== null && e !== undefined));
158
+ __classPrivateFieldGet(this, _itemsChanges).next(items.filter(e => e !== null && e !== undefined));
158
159
  }
159
160
  else {
160
- __classPrivateFieldSet(this, _items, items);
161
+ __classPrivateFieldGet(this, _itemsChanges).next(items);
162
+ __classPrivateFieldSet(this, _delay, 500);
161
163
  }
162
164
  this.formControl.updateValueAndValidity();
163
- this.inputControl.updateValueAndValidity();
164
165
  }
165
166
  set model(value) {
166
167
  __classPrivateFieldSet(this, _model, value);
@@ -171,9 +172,11 @@ class SdAutocomplete {
171
172
  val = (val === '') || val;
172
173
  if (val) {
173
174
  this.inputControl.disable();
175
+ this.formControl.disable();
174
176
  }
175
177
  else {
176
178
  this.inputControl.enable();
179
+ this.formControl.disable();
177
180
  }
178
181
  }
179
182
  set required(val) {
@@ -193,55 +196,73 @@ class SdAutocomplete {
193
196
  __classPrivateFieldGet(this, _subscription).add(this.formControl.touchedChanges.subscribe(() => {
194
197
  this.ref.markForCheck();
195
198
  }));
196
- }
197
- ngAfterViewInit() {
198
- var _a;
199
- __classPrivateFieldGet(this, _subscription).add(this.formControl.statusChanges.subscribe(() => this.ref.markForCheck()));
200
- this.filteredItems = this.inputControl.valueChanges.pipe(debounceTime(typeof (__classPrivateFieldGet(this, _items)) === 'function' ? __classPrivateFieldGet(this, _delay) : 0),
201
- // distinctUntilChanged(), Dùng sẽ gây ra bug khi items changes
202
- switchMap(() => __awaiter(this, void 0, void 0, function* () {
203
- const val = this.inputControl.value || '';
204
- if (typeof (__classPrivateFieldGet(this, _items)) === 'function') {
205
- const items = yield __classPrivateFieldGet(this, _loadItems).call(this, val, __classPrivateFieldGet(this, _items));
206
- __classPrivateFieldSet(this, _currentItems, items.filter((item, index) => index < this.limit));
207
- return __classPrivateFieldGet(this, _currentItems);
208
- }
209
- const { changeAliasLowerCase } = this.utilityService;
210
- __classPrivateFieldSet(this, _currentItems, __classPrivateFieldGet(this, _items).filter(item => {
211
- const value = item[this.valueField];
212
- const display = item[this.displayField];
213
- const searchText = changeAliasLowerCase(val);
214
- return changeAliasLowerCase(value).indexOf(searchText) !== -1 || changeAliasLowerCase(display).indexOf(searchText) !== -1;
215
- }).filter((item, index) => index < this.limit));
216
- return __classPrivateFieldGet(this, _currentItems);
217
- })));
218
- this.controlPlaceHolder = this.formControl.valueChanges.pipe(startWith(''),
219
- // distinctUntilChanged(), Dùng sẽ gây ra bug khi items changes
220
- switchMap(() => __awaiter(this, void 0, void 0, function* () {
221
- const val = this.formControl.value;
222
- if (val || val === 0) {
223
- let currentItems = [];
224
- const items = __classPrivateFieldGet(this, _items);
225
- if (typeof (items) === 'function') {
226
- currentItems = yield __classPrivateFieldGet(this, _loadItems).call(this, val, items);
227
- }
228
- else {
229
- currentItems = items || [];
199
+ this.filteredItems = combineLatest([
200
+ __classPrivateFieldGet(this, _itemsChanges).asObservable(),
201
+ this.inputControl.valueChanges.pipe(debounceTime(__classPrivateFieldGet(this, _delay)))
202
+ ]).pipe(switchMap(([items, searchText]) => {
203
+ searchText = searchText || '';
204
+ if (typeof (items) === 'function') {
205
+ if (__classPrivateFieldGet(this, _cache)[searchText] !== undefined) {
206
+ return __classPrivateFieldGet(this, _cache)[searchText].asObservable();
230
207
  }
231
- if (this.valueField && this.displayField) {
232
- const item = currentItems.find(e => e[this.valueField] === val);
233
- return (item === null || item === void 0 ? void 0 : item[this.displayField]) || val;
208
+ let obs;
209
+ const func = items(searchText, true);
210
+ if (func instanceof Promise) {
211
+ obs = defer(() => from(func));
234
212
  }
235
213
  else {
236
- return currentItems.find(e => e === val) || val;
214
+ obs = func;
237
215
  }
216
+ this.loading = true;
217
+ return obs.pipe(map(data => {
218
+ __classPrivateFieldGet(this, _cache)[searchText] = data || [];
219
+ Object.assign(__classPrivateFieldGet(this, _item), Array.toObject(__classPrivateFieldGet(this, _cache)[searchText], this.valueField));
220
+ return __classPrivateFieldGet(this, _cache)[searchText];
221
+ }), finalize(() => this.loading = false));
238
222
  }
239
- else {
240
- return this.placeholder || this.label || '';
223
+ return items
224
+ .search(searchText, [this.valueField, this.displayField])
225
+ .paging(this.limit)
226
+ .asObservable();
227
+ }));
228
+ this.selected = combineLatest([
229
+ __classPrivateFieldGet(this, _itemsChanges).asObservable(),
230
+ this.formControl.valueChanges.pipe(startWith(this.formControl.value))
231
+ ])
232
+ .pipe(switchMap(([items, val]) => {
233
+ if (!this.valueField) {
234
+ return of(val);
241
235
  }
242
- })));
236
+ if (val || val === 0) {
237
+ if (typeof (items) === 'function') {
238
+ if (__classPrivateFieldGet(this, _item)[val]) {
239
+ return of(__classPrivateFieldGet(this, _item)[val]);
240
+ }
241
+ let obs;
242
+ const func = items(val, true);
243
+ if (func instanceof Promise) {
244
+ obs = defer(() => from(func));
245
+ }
246
+ else {
247
+ obs = func;
248
+ }
249
+ return obs.pipe(map(data => {
250
+ Object.assign(__classPrivateFieldGet(this, _item), Array.toObject(data, this.valueField));
251
+ return __classPrivateFieldGet(this, _item)[val] || {
252
+ [this.valueField]: val,
253
+ [this.displayField]: val
254
+ };
255
+ }));
256
+ }
257
+ return of(items.find(e => e[this.valueField] === val));
258
+ }
259
+ return of('');
260
+ }));
261
+ this.controlPlaceHolder = this.selected.pipe(map(item => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = item === null || item === void 0 ? void 0 : item[this.displayField]) !== null && _a !== void 0 ? _a : item) !== null && _b !== void 0 ? _b : this.placeholder) !== null && _c !== void 0 ? _c : this.label) !== null && _d !== void 0 ? _d : ''; }));
262
+ }
263
+ ngAfterViewInit() {
264
+ var _a;
243
265
  (_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.addControl(__classPrivateFieldGet(this, _name), this.formControl);
244
- this.ref.detectChanges();
245
266
  }
246
267
  ngOnDestroy() {
247
268
  var _a;
@@ -249,29 +270,27 @@ class SdAutocomplete {
249
270
  (_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.removeControl(__classPrivateFieldGet(this, _name));
250
271
  }
251
272
  }
252
- _model = new WeakMap(), _items = new WeakMap(), _currentItems = new WeakMap(), _delay = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _subscription = new WeakMap(), _loadItems = new WeakMap();
273
+ _model = new WeakMap(), _delay = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _itemsChanges = new WeakMap(), _subscription = new WeakMap(), _cache = new WeakMap(), _item = new WeakMap();
253
274
  SdAutocomplete.decorators = [
254
275
  { type: Component, args: [{
255
276
  selector: 'sd-autocomplete',
256
- template: "<div class=\"d-flex align-items-center\">\r\n <div class=\"mat-label mr-12 mb-12\" *ngIf=\"leftLabel\" [ngStyle]=\"{'min-width': labelMinWidth}\">{{leftLabel}}</div>\r\n <div class=\"media-body\">\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [floatLabel]=\"size === 'sm' || formControl.value ? 'always':'auto'\" appearance=\"outline\">\r\n <mat-label *ngIf=\"label && !leftLabel\">{{ label }}</mat-label>\r\n <input [id]=\"id\" #autocompleteTrigger [formControl]=\"inputControl\" [placeholder]=\"controlPlaceHolder | async\"\r\n [ngClass]=\"{'c-selected': formControl?.value}\" [matAutocomplete]=\"auto\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n matInput [autocomplete]=\"id\" autocorrect=\"off\" [errorStateMatcher]=\"matcher\" [required]=\"isRequired\" />\r\n <mat-icon *ngIf=\"!loading && formControl?.value && !inputControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-icon *ngIf=\"actionIcon && !loading && !formControl?.value && !inputControl.disabled\"\r\n class=\"pointer sd-suffix-icon\" (click)=\"onAction($event)\" matSuffix>{{actionIcon}}\r\n </mat-icon>\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\" matSuffix>\r\n </mat-spinner>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelect($event.option.value)\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"item[displayField]\">\r\n <ng-container *ngIf=\"autocompleteDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"autocompleteDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!autocompleteDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"formControl?.errors?.required && !disableErrorMessage\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n</div>",
277
+ template: "<div class=\"d-flex align-items-center\" [class.sd-view]=\"sdView?.templateRef\" [class.c-focused]=\"isFocused\"\r\n[class.c-disabled]=\"formControl.disabled\" (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !autocompleteTrigger?.panelOpen && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef;context: { value: formControl.value, selectedItem: selected | async }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field class=\"sd-md\" [ngClass]=\"{'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage}\"\r\n [floatLabel]=\"size === 'sm' || formControl.value ? 'always':'auto'\" appearance=\"outline\">\r\n <mat-label *ngIf=\"label\">{{ label }}</mat-label>\r\n <input [id]=\"id\" #autocompleteTrigger [formControl]=\"inputControl\" [placeholder]=\"controlPlaceHolder | async\"\r\n [ngClass]=\"{'c-selected': formControl?.value}\" [matAutocomplete]=\"auto\" (focus)=\"onFocus()\" (blur)=\"onBlur()\"\r\n matInput [autocomplete]=\"id\" autocorrect=\"off\" [errorStateMatcher]=\"matcher\" [required]=\"isRequired\" #input />\r\n <mat-icon *ngIf=\"!loading && formControl?.value && !inputControl.disabled\" class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\" matSuffix>cancel\r\n </mat-icon>\r\n <mat-icon *ngIf=\"actionIcon && !loading && !formControl?.value && !inputControl.disabled\"\r\n class=\"pointer sd-suffix-icon\" (click)=\"onAction($event)\" matSuffix>{{actionIcon}}\r\n </mat-icon>\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\" matSuffix>\r\n </mat-spinner>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onSelect($event.option.value)\">\r\n <mat-option *ngFor=\"let item of filteredItems | async\" [value]=\"item\" matTooltipPosition=\"above\"\r\n [matTooltip]=\"displayField ? item[displayField] : item\">\r\n <ng-container *ngIf=\"autocompleteDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"autocompleteDisplayDef.templateRef;context:{item: item}\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!autocompleteDisplayDef?.templateRef\">\r\n {{ displayField ? item[displayField] : item }}\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"formControl?.errors?.required && !disableErrorMessage\">\r\n {{ \"This field is required\" | sdTranslate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>",
257
278
  changeDetection: ChangeDetectionStrategy.OnPush,
258
- styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field input.c-selected::-moz-placeholder{color:#000;opacity:1}:host ::ng-deep .mat-form-field input.c-selected::placeholder{color:#000;opacity:1}:host ::ng-deep .mat-form-field input.c-selected:-ms-input-placeholder{color:#000}:host ::ng-deep .mat-form-field input.c-selected::-ms-input-placeholder{color:#000}:host ::ng-deep .mat-form-field input.mat-input-element:disabled{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::-moz-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected:-ms-input-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::-ms-input-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}"]
279
+ styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field input.c-selected::-moz-placeholder{color:#000;opacity:1}:host ::ng-deep .mat-form-field input.c-selected::placeholder{color:#000;opacity:1}:host ::ng-deep .mat-form-field input.c-selected:-ms-input-placeholder{color:#000}:host ::ng-deep .mat-form-field input.c-selected::-ms-input-placeholder{color:#000}:host ::ng-deep .mat-form-field input.mat-input-element:disabled{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::-moz-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected:-ms-input-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field input.mat-input-element:disabled.c-selected::-ms-input-placeholder{color:#4d4d4d}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}"]
259
280
  },] }
260
281
  ];
261
282
  SdAutocomplete.ctorParameters = () => [
262
- { type: ChangeDetectorRef },
263
- { type: SdUtilityService }
283
+ { type: ChangeDetectorRef }
264
284
  ];
265
285
  SdAutocomplete.propDecorators = {
266
286
  autocompleteTrigger: [{ type: ViewChild, args: [MatAutocompleteTrigger, { read: MatAutocompleteTrigger },] }],
287
+ name: [{ type: Input }],
267
288
  size: [{ type: Input }],
268
289
  form: [{ type: Input }],
269
290
  label: [{ type: Input }],
270
291
  valueField: [{ type: Input }],
271
292
  displayField: [{ type: Input }],
272
293
  placeholder: [{ type: Input }],
273
- leftLabel: [{ type: Input }],
274
- labelMinWidth: [{ type: Input }],
275
294
  items: [{ type: Input }],
276
295
  limit: [{ type: Input }],
277
296
  model: [{ type: Input }],
@@ -282,7 +301,9 @@ SdAutocomplete.propDecorators = {
282
301
  sdChange: [{ type: Output }],
283
302
  disabled: [{ type: Input }],
284
303
  required: [{ type: Input }],
285
- _disableErrorMessage: [{ type: Input, args: ['disableErrorMessage',] }]
304
+ _disableErrorMessage: [{ type: Input, args: ['disableErrorMessage',] }],
305
+ input: [{ type: ViewChild, args: ['input',] }],
306
+ sdView: [{ type: ContentChild, args: [SdViewDefDirective,] }]
286
307
  };
287
308
 
288
309
  class SdAutocompleteModule {
@@ -299,7 +320,8 @@ SdAutocompleteModule.decorators = [
299
320
  MatAutocompleteModule,
300
321
  MatIconModule,
301
322
  MatProgressSpinnerModule,
302
- SdTranslateModule
323
+ SdTranslateModule,
324
+ SdCommonModule
303
325
  ],
304
326
  declarations: [
305
327
  SdAutocomplete,
@@ -307,7 +329,8 @@ SdAutocompleteModule.decorators = [
307
329
  ],
308
330
  exports: [
309
331
  SdAutocomplete,
310
- SdAutocompleteDisplayDefDirective
332
+ SdAutocompleteDisplayDefDirective,
333
+ SdCommonModule
311
334
  ],
312
335
  providers: []
313
336
  },] }