@livepreso/api 6.41.0 → 6.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/.eslintrc.js +5 -0
  2. package/.rush/temp/build-cache-tar.log +7 -0
  3. package/.rush/temp/package-deps_test.json +170 -0
  4. package/.rush/temp/shrinkwrap-deps.json +957 -0
  5. package/CHANGELOG.json +53 -0
  6. package/CHANGELOG.md +32 -0
  7. package/api.build.log +4 -0
  8. package/babel.config.js +9 -18
  9. package/cjs/api.js +1 -1
  10. package/cjs/api.js.map +1 -1
  11. package/cjs/api.spec.js +2 -2
  12. package/cjs/api.spec.js.map +1 -1
  13. package/cjs/auth.js +6 -5
  14. package/cjs/auth.js.map +1 -1
  15. package/cjs/auth.spec.js +25 -23
  16. package/cjs/auth.spec.js.map +1 -1
  17. package/cjs/caching.js +3 -3
  18. package/cjs/collections/activity.js +22 -27
  19. package/cjs/collections/activity.js.map +1 -1
  20. package/cjs/collections/adjunct-sections.js +2 -2
  21. package/cjs/collections/adjunct-sections.js.map +1 -1
  22. package/cjs/collections/adjunct-slides.js +2 -2
  23. package/cjs/collections/adjunct-slides.js.map +1 -1
  24. package/cjs/collections/adjunct-sub-slides.js +2 -2
  25. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  26. package/cjs/collections/appointment-adjunct-tags.js +28 -0
  27. package/cjs/collections/appointment-adjunct-tags.js.map +1 -0
  28. package/cjs/collections/appointment-deckversion-tags.js +28 -0
  29. package/cjs/collections/appointment-deckversion-tags.js.map +1 -0
  30. package/cjs/collections/appointment-duplicates.js +2 -2
  31. package/cjs/collections/appointment-duplicates.js.map +1 -1
  32. package/cjs/collections/appointment-editors.js +2 -2
  33. package/cjs/collections/appointment-editors.js.map +1 -1
  34. package/cjs/collections/appointment-section-tags.js +28 -0
  35. package/cjs/collections/appointment-section-tags.js.map +1 -0
  36. package/cjs/collections/appointment-slide-tags.js +28 -0
  37. package/cjs/collections/appointment-slide-tags.js.map +1 -0
  38. package/cjs/collections/appointment-tags.js +208 -0
  39. package/cjs/collections/appointment-tags.js.map +1 -0
  40. package/cjs/collections/appointments.js +10 -6
  41. package/cjs/collections/appointments.js.map +1 -1
  42. package/cjs/collections/assets.js +2 -2
  43. package/cjs/collections/assets.js.map +1 -1
  44. package/cjs/collections/auto-adjuncts.js +7 -3
  45. package/cjs/collections/auto-adjuncts.js.map +1 -1
  46. package/cjs/collections/base.js +103 -25
  47. package/cjs/collections/base.js.map +1 -1
  48. package/cjs/collections/base.spec.js +231 -123
  49. package/cjs/collections/base.spec.js.map +1 -1
  50. package/cjs/collections/cms-vals.js +2 -2
  51. package/cjs/collections/cms-vals.js.map +1 -1
  52. package/cjs/collections/contacts.js +2 -2
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +2 -2
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +2 -2
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +2 -2
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-versions.js +20 -8
  61. package/cjs/collections/deck-versions.js.map +1 -1
  62. package/cjs/collections/decks.js +2 -2
  63. package/cjs/collections/decks.js.map +1 -1
  64. package/cjs/collections/deleted-assets.js +2 -2
  65. package/cjs/collections/deleted-assets.js.map +1 -1
  66. package/cjs/collections/dispatches.js +4 -4
  67. package/cjs/collections/dispatches.js.map +1 -1
  68. package/cjs/collections/event-objects.js +2 -2
  69. package/cjs/collections/event-objects.js.map +1 -1
  70. package/cjs/collections/events.js +2 -2
  71. package/cjs/collections/events.js.map +1 -1
  72. package/cjs/collections/groups.js +2 -2
  73. package/cjs/collections/groups.js.map +1 -1
  74. package/cjs/collections/images.js +2 -2
  75. package/cjs/collections/images.js.map +1 -1
  76. package/cjs/collections/locations.js +2 -2
  77. package/cjs/collections/locations.js.map +1 -1
  78. package/cjs/collections/opportunities.js +2 -2
  79. package/cjs/collections/opportunities.js.map +1 -1
  80. package/cjs/collections/pack-diffs.js +2 -2
  81. package/cjs/collections/pack-diffs.js.map +1 -1
  82. package/cjs/collections/packs.js +2 -2
  83. package/cjs/collections/packs.js.map +1 -1
  84. package/cjs/collections/presets.js +2 -2
  85. package/cjs/collections/presets.js.map +1 -1
  86. package/cjs/collections/section-selections.js +2 -2
  87. package/cjs/collections/section-selections.js.map +1 -1
  88. package/cjs/collections/sections.js +2 -2
  89. package/cjs/collections/sections.js.map +1 -1
  90. package/cjs/collections/slide-selections.js +2 -2
  91. package/cjs/collections/slide-selections.js.map +1 -1
  92. package/cjs/collections/slides.js +2 -2
  93. package/cjs/collections/slides.js.map +1 -1
  94. package/cjs/collections/snapshots.js +2 -2
  95. package/cjs/collections/snapshots.js.map +1 -1
  96. package/cjs/collections/sub-slides.js +2 -2
  97. package/cjs/collections/sub-slides.js.map +1 -1
  98. package/cjs/collections/tags.js +28 -0
  99. package/cjs/collections/tags.js.map +1 -0
  100. package/cjs/collections/teams.js +2 -2
  101. package/cjs/collections/teams.js.map +1 -1
  102. package/cjs/collections/templates.js +2 -2
  103. package/cjs/collections/templates.js.map +1 -1
  104. package/cjs/collections/uploads.js +2 -2
  105. package/cjs/collections/uploads.js.map +1 -1
  106. package/cjs/collections/users.js +2 -2
  107. package/cjs/collections/users.js.map +1 -1
  108. package/cjs/collections.js +115 -0
  109. package/cjs/collections.js.map +1 -1
  110. package/cjs/index.js +3 -0
  111. package/cjs/index.js.map +1 -1
  112. package/cjs/middleware.js.map +1 -1
  113. package/cjs/middlewares/auth.js +10 -6
  114. package/cjs/middlewares/auth.js.map +1 -1
  115. package/cjs/middlewares/base.js +1 -3
  116. package/cjs/middlewares/base.js.map +1 -1
  117. package/cjs/middlewares/json.js +10 -6
  118. package/cjs/middlewares/json.js.map +1 -1
  119. package/cjs/middlewares/redirect.js +10 -6
  120. package/cjs/middlewares/redirect.js.map +1 -1
  121. package/cjs/models/activity-item.js +6 -2
  122. package/cjs/models/activity-item.js.map +1 -1
  123. package/cjs/models/adjunct-section.js +2 -2
  124. package/cjs/models/adjunct-section.js.map +1 -1
  125. package/cjs/models/adjunct-slide.js +2 -2
  126. package/cjs/models/adjunct-slide.js.map +1 -1
  127. package/cjs/models/adjunct-sub-slide.js +2 -2
  128. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  129. package/cjs/models/adjunct.js +2 -2
  130. package/cjs/models/adjunct.js.map +1 -1
  131. package/cjs/models/api.js.map +1 -1
  132. package/cjs/models/appointment-adjunct-tags.js +52 -0
  133. package/cjs/models/appointment-adjunct-tags.js.map +1 -0
  134. package/cjs/models/appointment-deckversion-tags.js +52 -0
  135. package/cjs/models/appointment-deckversion-tags.js.map +1 -0
  136. package/cjs/models/appointment-duplicate.js +8 -3
  137. package/cjs/models/appointment-duplicate.js.map +1 -1
  138. package/cjs/models/appointment-editor.js +2 -2
  139. package/cjs/models/appointment-editor.js.map +1 -1
  140. package/cjs/models/appointment-section-tags.js +52 -0
  141. package/cjs/models/appointment-section-tags.js.map +1 -0
  142. package/cjs/models/appointment-slide-tags.js +52 -0
  143. package/cjs/models/appointment-slide-tags.js.map +1 -0
  144. package/cjs/models/appointment-stats.js +2 -2
  145. package/cjs/models/appointment-stats.js.map +1 -1
  146. package/cjs/models/appointment-tags.js +48 -0
  147. package/cjs/models/appointment-tags.js.map +1 -0
  148. package/cjs/models/appointment-viewing.js +2 -2
  149. package/cjs/models/appointment-viewing.js.map +1 -1
  150. package/cjs/models/appointment.js +16 -7
  151. package/cjs/models/appointment.js.map +1 -1
  152. package/cjs/models/asset.js +2 -2
  153. package/cjs/models/asset.js.map +1 -1
  154. package/cjs/models/auto-adjunct-key-check.js +2 -2
  155. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  156. package/cjs/models/auto-adjunct.js +2 -2
  157. package/cjs/models/auto-adjunct.js.map +1 -1
  158. package/cjs/models/base.js +25 -36
  159. package/cjs/models/base.js.map +1 -1
  160. package/cjs/models/base.spec.js +45 -45
  161. package/cjs/models/base.spec.js.map +1 -1
  162. package/cjs/models/choicelist.js.map +1 -1
  163. package/cjs/models/cms-val.js.map +1 -1
  164. package/cjs/models/contact.js +2 -2
  165. package/cjs/models/contact.js.map +1 -1
  166. package/cjs/models/customer.js +2 -2
  167. package/cjs/models/customer.js.map +1 -1
  168. package/cjs/models/deck-note.js +2 -2
  169. package/cjs/models/deck-note.js.map +1 -1
  170. package/cjs/models/deck-tags.js +61 -0
  171. package/cjs/models/deck-tags.js.map +1 -0
  172. package/cjs/models/deck-version.js +5 -3
  173. package/cjs/models/deck-version.js.map +1 -1
  174. package/cjs/models/deck.js +6 -3
  175. package/cjs/models/deck.js.map +1 -1
  176. package/cjs/models/dispatch-preview.js +3 -3
  177. package/cjs/models/dispatch-preview.js.map +1 -1
  178. package/cjs/models/dispatch.js +2 -2
  179. package/cjs/models/dispatch.js.map +1 -1
  180. package/cjs/models/envs.js.map +1 -1
  181. package/cjs/models/event-object.js +2 -2
  182. package/cjs/models/event-object.js.map +1 -1
  183. package/cjs/models/event.js +2 -2
  184. package/cjs/models/event.js.map +1 -1
  185. package/cjs/models/feed-data.js +2 -2
  186. package/cjs/models/feed-data.js.map +1 -1
  187. package/cjs/models/file.js +2 -2
  188. package/cjs/models/file.js.map +1 -1
  189. package/cjs/models/group.js +2 -2
  190. package/cjs/models/group.js.map +1 -1
  191. package/cjs/models/handover.js +2 -2
  192. package/cjs/models/handover.js.map +1 -1
  193. package/cjs/models/hosted-preso.js +2 -2
  194. package/cjs/models/hosted-preso.js.map +1 -1
  195. package/cjs/models/image.js +2 -2
  196. package/cjs/models/image.js.map +1 -1
  197. package/cjs/models/location.js +2 -2
  198. package/cjs/models/location.js.map +1 -1
  199. package/cjs/models/manifest-json.js +83 -58
  200. package/cjs/models/manifest-json.js.map +1 -1
  201. package/cjs/models/onshare.js +2 -2
  202. package/cjs/models/onshare.js.map +1 -1
  203. package/cjs/models/opportunity.js +2 -2
  204. package/cjs/models/opportunity.js.map +1 -1
  205. package/cjs/models/pack-diff.js +2 -2
  206. package/cjs/models/pack-diff.js.map +1 -1
  207. package/cjs/models/pack.js +2 -2
  208. package/cjs/models/pack.js.map +1 -1
  209. package/cjs/models/preset.js +22 -2
  210. package/cjs/models/preset.js.map +1 -1
  211. package/cjs/models/refresh-request.js +2 -2
  212. package/cjs/models/refresh-request.js.map +1 -1
  213. package/cjs/models/room.js +2 -2
  214. package/cjs/models/room.js.map +1 -1
  215. package/cjs/models/salesforce-lookup.js +2 -2
  216. package/cjs/models/salesforce-lookup.js.map +1 -1
  217. package/cjs/models/section-selection.js +2 -2
  218. package/cjs/models/section-selection.js.map +1 -1
  219. package/cjs/models/section.js +2 -2
  220. package/cjs/models/section.js.map +1 -1
  221. package/cjs/models/slide-selection.js +2 -2
  222. package/cjs/models/slide-selection.js.map +1 -1
  223. package/cjs/models/slide.js +2 -2
  224. package/cjs/models/slide.js.map +1 -1
  225. package/cjs/models/snapshot.js +2 -2
  226. package/cjs/models/snapshot.js.map +1 -1
  227. package/cjs/models/sub-slide.js +2 -2
  228. package/cjs/models/sub-slide.js.map +1 -1
  229. package/cjs/models/support-ticket.js +2 -2
  230. package/cjs/models/support-ticket.js.map +1 -1
  231. package/cjs/models/tag.js +54 -0
  232. package/cjs/models/tag.js.map +1 -0
  233. package/cjs/models/team.js +2 -2
  234. package/cjs/models/team.js.map +1 -1
  235. package/cjs/models/template.js +2 -2
  236. package/cjs/models/template.js.map +1 -1
  237. package/cjs/models/tenancy.js +2 -2
  238. package/cjs/models/tenancy.js.map +1 -1
  239. package/cjs/models/timing-log.js +20 -41
  240. package/cjs/models/timing-log.js.map +1 -1
  241. package/cjs/models/timing-log.spec.js +18 -86
  242. package/cjs/models/timing-log.spec.js.map +1 -1
  243. package/cjs/models/transcribe-socket.js +2 -2
  244. package/cjs/models/transcribe-socket.js.map +1 -1
  245. package/cjs/models/upload.js +2 -2
  246. package/cjs/models/upload.js.map +1 -1
  247. package/cjs/models/user.js +4 -3
  248. package/cjs/models/user.js.map +1 -1
  249. package/cjs/models/user.spec.js +10 -8
  250. package/cjs/models/user.spec.js.map +1 -1
  251. package/cjs/models.js +148 -0
  252. package/cjs/models.js.map +1 -1
  253. package/cjs/presentation/appointment-presentation.js +13 -5
  254. package/cjs/presentation/appointment-presentation.js.map +1 -1
  255. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  256. package/cjs/presentation/base-presentation-model.js +65 -0
  257. package/cjs/presentation/base-presentation-model.js.map +1 -1
  258. package/cjs/presentation/base-presentation-model.spec.js +87 -0
  259. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  260. package/cjs/presentation/presentation-deck.js +31 -20
  261. package/cjs/presentation/presentation-deck.js.map +1 -1
  262. package/cjs/presentation/presentation-deck.spec.js +15 -13
  263. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  264. package/cjs/presentation/presentation-decks.js +2 -2
  265. package/cjs/presentation/presentation-decks.js.map +1 -1
  266. package/cjs/presentation/presentation-section.js +36 -17
  267. package/cjs/presentation/presentation-section.js.map +1 -1
  268. package/cjs/presentation/presentation-section.spec.js +418 -0
  269. package/cjs/presentation/presentation-section.spec.js.map +1 -0
  270. package/cjs/presentation/presentation-sections.js +2 -2
  271. package/cjs/presentation/presentation-sections.js.map +1 -1
  272. package/cjs/presentation/presentation-slide.js +35 -18
  273. package/cjs/presentation/presentation-slide.js.map +1 -1
  274. package/cjs/presentation/presentation-slide.spec.js +294 -0
  275. package/cjs/presentation/presentation-slide.spec.js.map +1 -0
  276. package/cjs/presentation/presentation-slides.js +2 -2
  277. package/cjs/presentation/presentation-slides.js.map +1 -1
  278. package/cjs/presentation/presentation-subslide.js +11 -7
  279. package/cjs/presentation/presentation-subslide.js.map +1 -1
  280. package/cjs/presentation/presentation-subslide.spec.js +68 -20
  281. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  282. package/cjs/presentation/presentation-subslides.js +2 -2
  283. package/cjs/presentation/presentation-subslides.js.map +1 -1
  284. package/cjs/presentation/presentation.js +19 -9
  285. package/cjs/presentation/presentation.js.map +1 -1
  286. package/cjs/presentation.js +10 -0
  287. package/cjs/presentation.js.map +1 -1
  288. package/cjs/state-register.js +11 -1
  289. package/cjs/state-register.js.map +1 -1
  290. package/cjs/sync.js +7 -7
  291. package/cjs/sync.js.map +1 -1
  292. package/cjs/utils.js +7 -7
  293. package/cjs/utils.js.map +1 -1
  294. package/cjs/utils.spec.js.map +1 -1
  295. package/config/rush-project.json +11 -0
  296. package/index.js +0 -1
  297. package/jest.config.js +4 -4
  298. package/package.json +19 -59
  299. package/setup-tests.js +2 -1
  300. package/src/api.js +3 -3
  301. package/src/api.spec.js +3 -4
  302. package/src/auth.js +6 -7
  303. package/src/auth.spec.js +3 -4
  304. package/src/collections/activity.js +5 -6
  305. package/src/collections/adjunct-sections.js +4 -4
  306. package/src/collections/adjunct-slides.js +4 -4
  307. package/src/collections/adjunct-sub-slides.js +2 -2
  308. package/src/collections/appointment-adjunct-tags.js +18 -0
  309. package/src/collections/appointment-deckversion-tags.js +21 -0
  310. package/src/collections/appointment-duplicates.js +2 -2
  311. package/src/collections/appointment-editors.js +2 -2
  312. package/src/collections/appointment-section-tags.js +18 -0
  313. package/src/collections/appointment-slide-tags.js +18 -0
  314. package/src/collections/appointment-tags.js +136 -0
  315. package/src/collections/appointments.js +18 -23
  316. package/src/collections/assets.js +2 -2
  317. package/src/collections/auto-adjuncts.js +5 -5
  318. package/src/collections/base.js +88 -18
  319. package/src/collections/base.spec.js +100 -8
  320. package/src/collections/cms-vals.js +3 -3
  321. package/src/collections/contacts.js +2 -2
  322. package/src/collections/created-assets.js +2 -2
  323. package/src/collections/customers.js +2 -2
  324. package/src/collections/deck-notes.js +2 -2
  325. package/src/collections/deck-versions.js +18 -15
  326. package/src/collections/decks.js +2 -2
  327. package/src/collections/deleted-assets.js +2 -2
  328. package/src/collections/dispatches.js +8 -13
  329. package/src/collections/event-objects.js +2 -2
  330. package/src/collections/events.js +2 -2
  331. package/src/collections/groups.js +2 -2
  332. package/src/collections/images.js +2 -2
  333. package/src/collections/locations.js +2 -2
  334. package/src/collections/opportunities.js +2 -2
  335. package/src/collections/pack-diffs.js +2 -2
  336. package/src/collections/packs.js +2 -2
  337. package/src/collections/presets.js +2 -2
  338. package/src/collections/section-selections.js +4 -4
  339. package/src/collections/sections.js +2 -2
  340. package/src/collections/slide-selections.js +4 -4
  341. package/src/collections/slides.js +2 -2
  342. package/src/collections/snapshots.js +2 -2
  343. package/src/collections/sub-slides.js +2 -2
  344. package/src/collections/tags.js +18 -0
  345. package/src/collections/teams.js +2 -2
  346. package/src/collections/templates.js +2 -2
  347. package/src/collections/uploads.js +2 -2
  348. package/src/collections/users.js +2 -2
  349. package/src/collections.js +6 -0
  350. package/src/index.js +1 -4
  351. package/src/middleware.js +1 -1
  352. package/src/middlewares/json.js +2 -2
  353. package/src/middlewares/redirect.js +1 -2
  354. package/src/models/activity-item.js +6 -6
  355. package/src/models/adjunct-section.js +5 -5
  356. package/src/models/adjunct-slide.js +5 -5
  357. package/src/models/adjunct-sub-slide.js +5 -5
  358. package/src/models/adjunct.js +4 -4
  359. package/src/models/api.js +1 -1
  360. package/src/models/appointment-adjunct-tags.js +41 -0
  361. package/src/models/appointment-deckversion-tags.js +41 -0
  362. package/src/models/appointment-duplicate.js +7 -7
  363. package/src/models/appointment-editor.js +6 -6
  364. package/src/models/appointment-section-tags.js +41 -0
  365. package/src/models/appointment-slide-tags.js +41 -0
  366. package/src/models/appointment-stats.js +5 -5
  367. package/src/models/appointment-tags.js +39 -0
  368. package/src/models/appointment-viewing.js +3 -3
  369. package/src/models/appointment.js +35 -29
  370. package/src/models/asset.js +5 -5
  371. package/src/models/auto-adjunct-key-check.js +5 -5
  372. package/src/models/auto-adjunct.js +4 -4
  373. package/src/models/base.js +36 -37
  374. package/src/models/base.spec.js +61 -62
  375. package/src/models/choicelist.js +2 -2
  376. package/src/models/cms-val.js +3 -3
  377. package/src/models/contact.js +9 -9
  378. package/src/models/customer.js +13 -13
  379. package/src/models/deck-note.js +4 -4
  380. package/src/models/deck-tags.js +52 -0
  381. package/src/models/deck-version.js +9 -8
  382. package/src/models/deck.js +8 -6
  383. package/src/models/dispatch-preview.js +6 -7
  384. package/src/models/dispatch.js +6 -7
  385. package/src/models/envs.js +1 -1
  386. package/src/models/event-object.js +6 -6
  387. package/src/models/event.js +7 -7
  388. package/src/models/feed-data.js +5 -5
  389. package/src/models/file.js +4 -4
  390. package/src/models/group.js +3 -3
  391. package/src/models/handover.js +5 -5
  392. package/src/models/hosted-preso.js +5 -5
  393. package/src/models/image.js +4 -4
  394. package/src/models/location.js +5 -5
  395. package/src/models/manifest-json.js +77 -30
  396. package/src/models/onshare.js +5 -5
  397. package/src/models/opportunity.js +5 -5
  398. package/src/models/pack-diff.js +5 -5
  399. package/src/models/pack.js +4 -4
  400. package/src/models/preset.js +24 -5
  401. package/src/models/refresh-request.js +6 -6
  402. package/src/models/room.js +3 -3
  403. package/src/models/salesforce-lookup.js +3 -3
  404. package/src/models/section-selection.js +6 -6
  405. package/src/models/section.js +7 -7
  406. package/src/models/slide-selection.js +6 -6
  407. package/src/models/slide.js +7 -7
  408. package/src/models/snapshot.js +5 -5
  409. package/src/models/sub-slide.js +5 -5
  410. package/src/models/support-ticket.js +4 -4
  411. package/src/models/tag.js +42 -0
  412. package/src/models/team.js +4 -4
  413. package/src/models/template.js +4 -4
  414. package/src/models/tenancy.js +5 -5
  415. package/src/models/timing-log.js +18 -18
  416. package/src/models/timing-log.spec.js +28 -29
  417. package/src/models/transcribe-socket.js +3 -3
  418. package/src/models/upload.js +3 -3
  419. package/src/models/user.js +19 -17
  420. package/src/models/user.spec.js +2 -2
  421. package/src/models.js +7 -0
  422. package/src/presentation/appointment-presentation.js +14 -10
  423. package/src/presentation/base-presentation-model.js +67 -5
  424. package/src/presentation/base-presentation-model.spec.js +114 -22
  425. package/src/presentation/presentation-deck.js +54 -52
  426. package/src/presentation/presentation-deck.spec.js +26 -27
  427. package/src/presentation/presentation-decks.js +2 -2
  428. package/src/presentation/presentation-section.js +62 -48
  429. package/src/presentation/presentation-section.spec.js +363 -0
  430. package/src/presentation/presentation-sections.js +2 -2
  431. package/src/presentation/presentation-slide.js +51 -36
  432. package/src/presentation/presentation-slide.spec.js +250 -0
  433. package/src/presentation/presentation-slides.js +2 -2
  434. package/src/presentation/presentation-subslide.js +24 -17
  435. package/src/presentation/presentation-subslide.spec.js +40 -12
  436. package/src/presentation/presentation-subslides.js +2 -2
  437. package/src/presentation/presentation.js +27 -15
  438. package/src/state-register.js +7 -0
  439. package/src/sync.js +21 -23
  440. package/src/utils.js +8 -7
  441. package/src/utils.spec.js +15 -15
  442. package/.editorconfig +0 -9
  443. package/.eslintrc +0 -25
  444. package/.prettierrc.js +0 -3
  445. package/jsdoc.json +0 -12
  446. package/yarn.lock +0 -8099
@@ -7,32 +7,50 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.BaseCollection = void 0;
9
9
 
10
- var _objectSpread5 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
13
 
12
14
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
13
15
 
16
+ var _api = require("../api.js");
17
+
18
+ var _base = require("../models/base.js");
19
+
14
20
  var _ampersandRestCollection = _interopRequireDefault(require("ampersand-rest-collection"));
15
21
 
16
22
  var _bluebird = _interopRequireDefault(require("bluebird"));
17
23
 
18
24
  var _lodash = _interopRequireDefault(require("lodash"));
19
25
 
20
- var _qs = _interopRequireDefault(require("qs"));
21
-
22
- var _api = require("../api.js");
23
-
24
26
  var _log = _interopRequireDefault(require("../log.js"));
25
27
 
26
- var _base = require("../models/base.js");
28
+ var _qs = _interopRequireDefault(require("qs"));
27
29
 
28
30
  var _stateRegister = require("../state-register.js");
29
31
 
30
32
  var _sync2 = require("../sync.js");
31
33
 
34
+ var _excluded = ["data"];
35
+
36
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
37
+
38
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
39
+
40
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
41
+
42
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
43
+
44
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
45
+
46
+ // Current hardcoded limit for maximum number of pages fetched
47
+ // automatically by fetchAll
48
+ var pageLimit = 20;
32
49
  /**
33
50
  * @constructor
34
51
  * @alias collections.BaseCollection
35
52
  */
53
+
36
54
  var BaseCollection = _ampersandRestCollection.default.extend(
37
55
  /** @lends collections.BaseCollection# */
38
56
  {
@@ -162,12 +180,12 @@ var BaseCollection = _ampersandRestCollection.default.extend(
162
180
 
163
181
  var re = /(\{(?:\w+\.?)+\})/g;
164
182
  var matches = resp.match(re) || [];
165
- var _iteratorNormalCompletion = true;
166
- var _didIteratorError = false;
167
- var _iteratorError = undefined;
183
+
184
+ var _iterator = _createForOfIteratorHelper(matches),
185
+ _step;
168
186
 
169
187
  try {
170
- for (var _iterator = matches[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
188
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
171
189
  var match = _step.value;
172
190
  var path = match.slice(1, -1);
173
191
 
@@ -182,18 +200,9 @@ var BaseCollection = _ampersandRestCollection.default.extend(
182
200
  resp = resp.replace(match, replacement);
183
201
  }
184
202
  } catch (err) {
185
- _didIteratorError = true;
186
- _iteratorError = err;
203
+ _iterator.e(err);
187
204
  } finally {
188
- try {
189
- if (!_iteratorNormalCompletion && _iterator.return != null) {
190
- _iterator.return();
191
- }
192
- } finally {
193
- if (_didIteratorError) {
194
- throw _iteratorError;
195
- }
196
- }
205
+ _iterator.f();
197
206
  }
198
207
 
199
208
  return this.getFullURLPath(resp);
@@ -231,14 +240,16 @@ var BaseCollection = _ampersandRestCollection.default.extend(
231
240
  }
232
241
 
233
242
  var data = opts.data,
234
- otherOpts = (0, _objectWithoutProperties2.default)(opts, ["data"]);
235
- var options = (0, _objectSpread5.default)({
236
- data: (0, _objectSpread5.default)({}, data, {
243
+ otherOpts = (0, _objectWithoutProperties2.default)(opts, _excluded);
244
+
245
+ var options = _objectSpread({
246
+ data: _objectSpread(_objectSpread({}, data), {}, {
237
247
  id: idSet
238
248
  })
239
249
  }, otherOpts); // Necessary because these models were already initialised before the fetch,
240
250
  // and the children weren't updated correctly with the new data.
241
251
 
252
+
242
253
  return this.fetch(options).tap(function (data) {
243
254
  _this.reset();
244
255
 
@@ -255,7 +266,7 @@ var BaseCollection = _ampersandRestCollection.default.extend(
255
266
 
256
267
  options.data = _lodash.default.extend({}, this.queryData, options.data || {});
257
268
  this._options = _lodash.default.extend({}, this._options, options);
258
- this.queryData = (0, _objectSpread5.default)({}, options.data);
269
+ this.queryData = _objectSpread({}, options.data);
259
270
 
260
271
  if (options.url) {
261
272
  this._url = options.url;
@@ -265,6 +276,73 @@ var BaseCollection = _ampersandRestCollection.default.extend(
265
276
  _this2._data = response;
266
277
  });
267
278
  },
279
+ fetchAll: function fetchAll() {
280
+ var _this3 = this;
281
+
282
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
283
+
284
+ var options = _lodash.default.cloneDeep(opts); // Add default params to the fetch (ie ?per_page=1000)
285
+
286
+
287
+ options.data = _lodash.default.extend({}, this.queryData, options.data || {});
288
+ this._options = _lodash.default.extend({}, this._options, options);
289
+ this.queryData = _objectSpread({}, this._options.data);
290
+
291
+ if (this._options.url) {
292
+ this._url = options.url;
293
+ }
294
+
295
+ var checkPages = function checkPages(response) {
296
+ var notLastPage = response.total_pages > response.page;
297
+ var belowPageLimit = response.page < pageLimit;
298
+
299
+ if (notLastPage && belowPageLimit) {
300
+ var _options = _objectSpread(_objectSpread({}, _this3._options), {}, {
301
+ data: _objectSpread(_objectSpread({}, _this3._options.data), {}, {
302
+ page: response.page + 1
303
+ })
304
+ }); // Update the collection with the new data & page number
305
+
306
+
307
+ _this3._options = _options;
308
+ _this3.queryData = _objectSpread({}, _options.data);
309
+ return _this3.fetchPage().then(function (response) {
310
+ checkPages(response);
311
+ });
312
+ } else {
313
+ // The collection's models are replaced with the latest
314
+ // batch of models every time a new page is fetched.
315
+ // Here we add back all of the previously-fetched models.
316
+ _this3.add(_this3._data.results);
317
+
318
+ return _this3._data;
319
+ }
320
+ };
321
+
322
+ return this.fetchPage().then(function (response) {
323
+ return checkPages(response);
324
+ });
325
+ },
326
+ fetchPage: function fetchPage() {
327
+ var _this4 = this;
328
+
329
+ return _ampersandRestCollection.default.prototype.fetch.call(this, this._options).then(function (response) {
330
+ var _this4$_data$results;
331
+
332
+ // Add the response data to this._data - if we're fetching
333
+ // multiple pages, this._data.results will contain all of the
334
+ // results fetched from all pages so far
335
+ if ((_this4$_data$results = _this4._data.results) !== null && _this4$_data$results !== void 0 && _this4$_data$results.length) {
336
+ _this4._data = _objectSpread(_objectSpread({}, response), {}, {
337
+ results: [].concat((0, _toConsumableArray2.default)(_this4._data.results), (0, _toConsumableArray2.default)(response.results))
338
+ });
339
+ } else {
340
+ _this4._data = response;
341
+ }
342
+
343
+ return response;
344
+ });
345
+ },
268
346
  toServer: function toServer() {
269
347
  return this.map(function (model) {
270
348
  if (model.toServer) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/collections/base.js"],"names":["BaseCollection","Collection","extend","modelName","model","BaseModel","fetchEmpty","urlMatchKeys","defaultFetchData","per_page","constructor","data","opts","options","_","defaults","newData","toJSON","_data","_options","queryData","url","_url","length","registerStates","prototype","call","add","values","args","arguments","apply","_prepareModel","attrs","omit","Model","registeredStates","Error","urlRoot","getResourceURL","matchesURL","_matchesURL","getFullURLPath","path","Object","keys","query","queryIndex","indexOf","slice","qs","parse","stringify","arrayFormat","resp","re","matches","match","replacement","get","replace","isNew","log","error","Api","getURL","sync","fetchModels","Promise","all","models","map","fetch","fetchSet","idSet","id","warn","resolve","otherOpts","tap","reset","results","cloneDeep","response","toServer","serialize","out","collection","isObject","save","batch","patch","delete","Array","isArray","attr"],"mappings":"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","sourcesContent":["import Collection from \"ampersand-rest-collection\";\nimport Promise from \"bluebird\";\nimport _ from \"lodash\";\nimport qs from \"qs\";\n\nimport { Api } from \"../api.js\";\nimport log from \"../log.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\n\n/**\n * @constructor\n * @alias collections.BaseCollection\n */\nexport const BaseCollection = Collection.extend(\n\t/** @lends collections.BaseCollection# */ {\n\t\tmodelName: null,\n\t\tmodel: BaseModel,\n\t\tfetchEmpty: false,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tdefaultFetchData: {\n\t\t\tper_page: 1000\n\t\t},\n\n\t\tconstructor(data = {}, opts = {}) {\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {}\n\t\t\t});\n\n\t\t\t// We ensure that we pass an array because we don't want the collection constructor to\n\t\t\t// create an empty model using a data object\n\t\t\tlet newData = [];\n\n\t\t\t// Allow passing in collections\n\t\t\tif (data instanceof Collection) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis._data = data;\n\t\t\tthis._options = options;\n\n\t\t\t// Remove reference to the prototype, or this can accidentally\n\t\t\t// apply to all collections\n\t\t\tthis.queryData = _.extend({}, this.defaultFetchData, options.data);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (data && data.url) {\n\t\t\t\tthis._url = data.url;\n\t\t\t} else if (data && data.length) {\n\t\t\t\tnewData = data;\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tCollection.prototype.constructor.call(this, newData, opts);\n\n\t\t\t// Get the name for the collection based on the model\n\t\t\tif (!this.modelName && typeof this.model === \"function\") {\n\t\t\t\tthis.modelName = this.model.prototype.modelName;\n\t\t\t}\n\t\t},\n\n\t\tadd(values) {\n\t\t\tconst args = [...arguments];\n\n\t\t\tif (values && values instanceof Collection) {\n\t\t\t\targs[0] = values.toJSON();\n\t\t\t}\n\n\t\t\treturn Collection.prototype.add.apply(this, args);\n\t\t},\n\n\t\t_prepareModel(attrs, options) {\n\t\t\tconst opts = _.omit(options, [\"data\"]);\n\t\t\treturn Collection.prototype._prepareModel.call(this, attrs, opts);\n\t\t},\n\n\t\tregisterStates() {\n\t\t\tif (typeof this.model === \"string\") {\n\t\t\t\tconst Model = registeredStates[this.model];\n\t\t\t\tif (!Model) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`'${this.model}' not found! Did you forget to import it on the '${this.modelName}' model?`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.model = Model;\n\t\t\t}\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tmatchesURL(url) {\n\t\t\treturn this.model.prototype._matchesURL(url, false);\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tlet url = path;\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\tlet query = this.queryData;\n\t\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\t\tif (queryIndex > -1) {\n\t\t\t\t\turl = url.slice(0, queryIndex);\n\t\t\t\t\tquery = _.extend(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tqs.parse(url.slice(queryIndex + 1)),\n\t\t\t\t\t\tthis.queryData\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (url.slice(-1) !== \"/\") {\n\t\t\t\t\turl += \"/\";\n\t\t\t\t}\n\t\t\t\turl += `?${qs.stringify(query, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\turl() {\n\t\t\tif (this._url) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\tlet resp = this.urlRoot();\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the collection's options.\n\t\t\t// So if you have /path/to/{model.id}/models/\n\t\t\t// It will check the collection options for \"model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this._options, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(\n\t\t\t\t\t\t`Collection ${this.modelName} is missing value ${path} as an option`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t}\n\n\t\t\treturn this.getFullURLPath(resp);\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\t// If no name is present, assume we want the root API.\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tsync() {\n\t\t\t// Use our own sync instead of the default ampersand one\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tfetchModels(options = {}) {\n\t\t\treturn Promise.all(this.models.map(model => model.fetch(options)));\n\t\t},\n\n\t\tfetchSet(opts = {}) {\n\t\t\tconst idSet = this.models.map(model => model.id);\n\n\t\t\tif (!idSet.length) {\n\t\t\t\tlog.warn(`Tried to fetch ${this.modelName} set with no models`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst { data, ...otherOpts } = opts;\n\n\t\t\tconst options = {\n\t\t\t\tdata: {\n\t\t\t\t\t...data,\n\t\t\t\t\tid: idSet\n\t\t\t\t},\n\t\t\t\t...otherOpts\n\t\t\t};\n\n\t\t\t// Necessary because these models were already initialised before the fetch,\n\t\t\t// and the children weren't updated correctly with the new data.\n\t\t\treturn this.fetch(options).tap(data => {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.add(data.results);\n\t\t\t});\n\t\t},\n\n\t\tfetch(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...options.data };\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\treturn Collection.prototype.fetch.call(this, options).tap(response => {\n\t\t\t\tthis._data = response;\n\t\t\t});\n\t\t},\n\n\t\ttoServer() {\n\t\t\treturn this.map(function(model) {\n\t\t\t\tif (model.toServer) {\n\t\t\t\t\treturn model.toServer();\n\t\t\t\t} else if (model.serialize) {\n\t\t\t\t\treturn model.serialize();\n\t\t\t\t}\n\n\t\t\t\tconst out = {};\n\t\t\t\t_.extend(out, model);\n\t\t\t\tdelete out.collection;\n\t\t\t\treturn out;\n\t\t\t});\n\t\t},\n\n\t\tisNew() {\n\t\t\treturn true;\n\t\t},\n\n\t\tserialize() {\n\t\t\tconst collection = Collection.prototype.serialize.call(this);\n\n\t\t\tif (_.isObject(this._data) && this._data.url && !collection.length) {\n\t\t\t\treturn this._data.url;\n\t\t\t}\n\n\t\t\treturn collection;\n\t\t},\n\n\t\tsave(options = {}) {\n\t\t\tconst { batch, patch } = options;\n\n\t\t\tif (batch || !this.length) {\n\t\t\t\tif (patch) {\n\t\t\t\t\treturn this.sync(\"patch\", this, options);\n\t\t\t\t}\n\t\t\t\treturn this.sync(\"create\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map(model => {\n\t\t\t\t\treturn model.save(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tdelete(options = {}) {\n\t\t\tconst { batch } = options;\n\n\t\t\tif (batch) {\n\t\t\t\treturn this.sync(\"delete\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map(model => {\n\t\t\t\t\treturn model.delete(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tparse(attrs) {\n\t\t\tconst results = attrs.results || attrs;\n\n\t\t\tif (\n\t\t\t\tArray.isArray(results) &&\n\t\t\t\tresults.length &&\n\t\t\t\ttypeof results[0] === \"string\"\n\t\t\t) {\n\t\t\t\t// Convert any url responses from the server into an object that\n\t\t\t\t// can be passed to the model.\n\t\t\t\t//\n\t\t\t\t// TODO: Regex match for URLs\n\t\t\t\treturn results.map(function(attr) {\n\t\t\t\t\treturn { url: attr };\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn results;\n\t\t}\n\t}\n);\n\n// Make matchesURL available as a static method\nBaseCollection.matchesURL = function(url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"file":"base.js"}
1
+ {"version":3,"sources":["../../src/collections/base.js"],"names":["pageLimit","BaseCollection","Collection","extend","modelName","model","BaseModel","fetchEmpty","urlMatchKeys","defaultFetchData","per_page","constructor","data","opts","options","_","defaults","newData","toJSON","_data","_options","queryData","url","_url","length","registerStates","prototype","call","add","values","args","arguments","apply","_prepareModel","attrs","omit","Model","registeredStates","Error","urlRoot","getResourceURL","matchesURL","_matchesURL","getFullURLPath","path","Object","keys","query","queryIndex","indexOf","slice","qs","parse","stringify","arrayFormat","resp","re","matches","match","replacement","get","replace","isNew","log","error","Api","getURL","sync","fetchModels","Promise","all","models","map","fetch","fetchSet","idSet","id","warn","resolve","otherOpts","tap","reset","results","cloneDeep","response","fetchAll","checkPages","notLastPage","total_pages","page","belowPageLimit","fetchPage","then","toServer","serialize","out","collection","isObject","save","batch","patch","delete","Array","isArray","attr"],"mappings":"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","sourcesContent":["import { Api } from \"../api.js\";\nimport { BaseModel } from \"../models/base.js\";\nimport Collection from \"ampersand-rest-collection\";\nimport Promise from \"bluebird\";\nimport _ from \"lodash\";\nimport log from \"../log.js\";\nimport qs from \"qs\";\nimport { registeredStates } from \"../state-register.js\";\nimport { sync } from \"../sync.js\";\n\n// Current hardcoded limit for maximum number of pages fetched\n// automatically by fetchAll\nconst pageLimit = 20;\n\n/**\n * @constructor\n * @alias collections.BaseCollection\n */\nexport const BaseCollection = Collection.extend(\n\t/** @lends collections.BaseCollection# */ {\n\t\tmodelName: null,\n\t\tmodel: BaseModel,\n\t\tfetchEmpty: false,\n\n\t\t// Object of regexes that should be used to match a url in `matchesURL`\n\t\t// For example the URL: /api/foo/{pk}/bar/ might have the following:\n\t\t//\n\t\t// Example:\n\t\t//\n\t\t// ```\n\t\t// {\n\t\t// pk: \"number\"\n\t\t// }\n\t\t// ```\n\t\turlMatchKeys: {},\n\n\t\tdefaultFetchData: {\n\t\t\tper_page: 1000,\n\t\t},\n\n\t\tconstructor(data = {}, opts = {}) {\n\t\t\tconst options = _.defaults(opts, {\n\t\t\t\tdata: {},\n\t\t\t});\n\n\t\t\t// We ensure that we pass an array because we don't want the collection constructor to\n\t\t\t// create an empty model using a data object\n\t\t\tlet newData = [];\n\n\t\t\t// Allow passing in collections\n\t\t\tif (data instanceof Collection) {\n\t\t\t\tdata = data.toJSON();\n\t\t\t}\n\n\t\t\tthis._data = data;\n\t\t\tthis._options = options;\n\n\t\t\t// Remove reference to the prototype, or this can accidentally\n\t\t\t// apply to all collections\n\t\t\tthis.queryData = _.extend({}, this.defaultFetchData, options.data);\n\n\t\t\t// Check for specialized url returns from the server. This is for when the\n\t\t\t// server responds with an array of urls rather than object data.\n\t\t\tif (data && data.url) {\n\t\t\t\tthis._url = data.url;\n\t\t\t} else if (data && data.length) {\n\t\t\t\tnewData = data;\n\t\t\t}\n\n\t\t\tthis.registerStates();\n\n\t\t\tCollection.prototype.constructor.call(this, newData, opts);\n\n\t\t\t// Get the name for the collection based on the model\n\t\t\tif (!this.modelName && typeof this.model === \"function\") {\n\t\t\t\tthis.modelName = this.model.prototype.modelName;\n\t\t\t}\n\t\t},\n\n\t\tadd(values) {\n\t\t\tconst args = [...arguments];\n\n\t\t\tif (values && values instanceof Collection) {\n\t\t\t\targs[0] = values.toJSON();\n\t\t\t}\n\n\t\t\treturn Collection.prototype.add.apply(this, args);\n\t\t},\n\n\t\t_prepareModel(attrs, options) {\n\t\t\tconst opts = _.omit(options, [\"data\"]);\n\t\t\treturn Collection.prototype._prepareModel.call(this, attrs, opts);\n\t\t},\n\n\t\tregisterStates() {\n\t\t\tif (typeof this.model === \"string\") {\n\t\t\t\tconst Model = registeredStates[this.model];\n\t\t\t\tif (!Model) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`'${this.model}' not found! Did you forget to import it on the '${this.modelName}' model?`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.model = Model;\n\t\t\t}\n\t\t},\n\n\t\turlRoot() {\n\t\t\treturn this.getResourceURL();\n\t\t},\n\n\t\tmatchesURL(url) {\n\t\t\treturn this.model.prototype._matchesURL(url, false);\n\t\t},\n\n\t\tgetFullURLPath(path) {\n\t\t\tlet url = path;\n\t\t\tif (Object.keys(this.queryData).length) {\n\t\t\t\tlet query = this.queryData;\n\t\t\t\tconst queryIndex = url.indexOf(\"?\");\n\t\t\t\tif (queryIndex > -1) {\n\t\t\t\t\turl = url.slice(0, queryIndex);\n\t\t\t\t\tquery = _.extend(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\tqs.parse(url.slice(queryIndex + 1)),\n\t\t\t\t\t\tthis.queryData\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (url.slice(-1) !== \"/\") {\n\t\t\t\t\turl += \"/\";\n\t\t\t\t}\n\t\t\t\turl += `?${qs.stringify(query, { arrayFormat: \"repeat\" })}`;\n\t\t\t}\n\t\t\treturn url;\n\t\t},\n\n\t\turl() {\n\t\t\tif (this._url) {\n\t\t\t\treturn this.getFullURLPath(this._url);\n\t\t\t}\n\t\t\tlet resp = this.urlRoot();\n\t\t\tif (resp.slice(-1) !== \"/\" && resp.indexOf(\"?\") === -1) {\n\t\t\t\tresp += \"/\";\n\t\t\t}\n\n\t\t\t// Replace any values in a url with one from the collection's options.\n\t\t\t// So if you have /path/to/{model.id}/models/\n\t\t\t// It will check the collection options for \"model.id\" and replace\n\t\t\t// it in the url\n\t\t\tconst re = /(\\{(?:\\w+\\.?)+\\})/g;\n\t\t\tconst matches = resp.match(re) || [];\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst path = match.slice(1, -1);\n\t\t\t\tconst replacement = _.get(this._options, path);\n\t\t\t\tif (replacement) {\n\t\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t\t} else if (!this.isNew()) {\n\t\t\t\t\tlog.error(\n\t\t\t\t\t\t`Collection ${this.modelName} is missing value ${path} as an option`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tresp = resp.replace(match, replacement);\n\t\t\t}\n\n\t\t\treturn this.getFullURLPath(resp);\n\t\t},\n\n\t\tgetResourceURL() {\n\t\t\t// If no name is present, assume we want the root API.\n\t\t\tif (this.modelName === null) {\n\t\t\t\treturn Api.getURL();\n\t\t\t}\n\t\t\treturn Api.getResourceURL(this.modelName);\n\t\t},\n\n\t\tsync() {\n\t\t\t// Use our own sync instead of the default ampersand one\n\t\t\treturn sync.apply(this, arguments);\n\t\t},\n\n\t\tfetchModels(options = {}) {\n\t\t\treturn Promise.all(this.models.map((model) => model.fetch(options)));\n\t\t},\n\n\t\tfetchSet(opts = {}) {\n\t\t\tconst idSet = this.models.map((model) => model.id);\n\n\t\t\tif (!idSet.length) {\n\t\t\t\tlog.warn(`Tried to fetch ${this.modelName} set with no models`);\n\t\t\t\treturn Promise.resolve();\n\t\t\t}\n\n\t\t\tconst { data, ...otherOpts } = opts;\n\n\t\t\tconst options = {\n\t\t\t\tdata: {\n\t\t\t\t\t...data,\n\t\t\t\t\tid: idSet,\n\t\t\t\t},\n\t\t\t\t...otherOpts,\n\t\t\t};\n\n\t\t\t// Necessary because these models were already initialised before the fetch,\n\t\t\t// and the children weren't updated correctly with the new data.\n\t\t\treturn this.fetch(options).tap((data) => {\n\t\t\t\tthis.reset();\n\t\t\t\tthis.add(data.results);\n\t\t\t});\n\t\t},\n\n\t\tfetch(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...options.data };\n\t\t\tif (options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\treturn Collection.prototype.fetch.call(this, options).tap((response) => {\n\t\t\t\tthis._data = response;\n\t\t\t});\n\t\t},\n\n\t\tfetchAll(opts = {}) {\n\t\t\tconst options = _.cloneDeep(opts);\n\n\t\t\t// Add default params to the fetch (ie ?per_page=1000)\n\t\t\toptions.data = _.extend({}, this.queryData, options.data || {});\n\t\t\tthis._options = _.extend({}, this._options, options);\n\n\t\t\tthis.queryData = { ...this._options.data };\n\n\t\t\tif (this._options.url) {\n\t\t\t\tthis._url = options.url;\n\t\t\t}\n\n\t\t\tconst checkPages = (response) => {\n\t\t\t\tconst notLastPage = response.total_pages > response.page;\n\t\t\t\tconst belowPageLimit = response.page < pageLimit;\n\n\t\t\t\tif (notLastPage && belowPageLimit) {\n\t\t\t\t\tconst options = {\n\t\t\t\t\t\t...this._options,\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t...this._options.data,\n\t\t\t\t\t\t\tpage: response.page + 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\n\t\t\t\t\t// Update the collection with the new data & page number\n\t\t\t\t\tthis._options = options;\n\t\t\t\t\tthis.queryData = { ...options.data };\n\n\t\t\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\t\t\tcheckPages(response);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// The collection's models are replaced with the latest\n\t\t\t\t\t// batch of models every time a new page is fetched.\n\t\t\t\t\t// Here we add back all of the previously-fetched models.\n\t\t\t\t\tthis.add(this._data.results);\n\t\t\t\t\treturn this._data;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn this.fetchPage().then((response) => {\n\t\t\t\treturn checkPages(response);\n\t\t\t});\n\t\t},\n\n\t\tfetchPage() {\n\t\t\treturn Collection.prototype.fetch\n\t\t\t\t.call(this, this._options)\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// Add the response data to this._data - if we're fetching\n\t\t\t\t\t// multiple pages, this._data.results will contain all of the\n\t\t\t\t\t// results fetched from all pages so far\n\t\t\t\t\tif (this._data.results?.length) {\n\t\t\t\t\t\tthis._data = {\n\t\t\t\t\t\t\t...response,\n\t\t\t\t\t\t\tresults: [...this._data.results, ...response.results],\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis._data = response;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn response;\n\t\t\t\t});\n\t\t},\n\n\t\ttoServer() {\n\t\t\treturn this.map(function (model) {\n\t\t\t\tif (model.toServer) {\n\t\t\t\t\treturn model.toServer();\n\t\t\t\t} else if (model.serialize) {\n\t\t\t\t\treturn model.serialize();\n\t\t\t\t}\n\n\t\t\t\tconst out = {};\n\t\t\t\t_.extend(out, model);\n\t\t\t\tdelete out.collection;\n\t\t\t\treturn out;\n\t\t\t});\n\t\t},\n\n\t\tisNew() {\n\t\t\treturn true;\n\t\t},\n\n\t\tserialize() {\n\t\t\tconst collection = Collection.prototype.serialize.call(this);\n\n\t\t\tif (_.isObject(this._data) && this._data.url && !collection.length) {\n\t\t\t\treturn this._data.url;\n\t\t\t}\n\n\t\t\treturn collection;\n\t\t},\n\n\t\tsave(options = {}) {\n\t\t\tconst { batch, patch } = options;\n\n\t\t\tif (batch || !this.length) {\n\t\t\t\tif (patch) {\n\t\t\t\t\treturn this.sync(\"patch\", this, options);\n\t\t\t\t}\n\t\t\t\treturn this.sync(\"create\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.save(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tdelete(options = {}) {\n\t\t\tconst { batch } = options;\n\n\t\t\tif (batch) {\n\t\t\t\treturn this.sync(\"delete\", this, options);\n\t\t\t}\n\n\t\t\treturn Promise.all(\n\t\t\t\tthis.map((model) => {\n\t\t\t\t\treturn model.delete(model.toServer(), options);\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\n\t\tparse(attrs) {\n\t\t\tconst results = attrs.results || attrs;\n\n\t\t\tif (\n\t\t\t\tArray.isArray(results) &&\n\t\t\t\tresults.length &&\n\t\t\t\ttypeof results[0] === \"string\"\n\t\t\t) {\n\t\t\t\t// Convert any url responses from the server into an object that\n\t\t\t\t// can be passed to the model.\n\t\t\t\t//\n\t\t\t\t// TODO: Regex match for URLs\n\t\t\t\treturn results.map(function (attr) {\n\t\t\t\t\treturn { url: attr };\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn results;\n\t\t},\n\t}\n);\n\n// Make matchesURL available as a static method\nBaseCollection.matchesURL = function (url) {\n\treturn this.prototype.matchesURL(url);\n};\n"],"file":"base.js"}