@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
@@ -0,0 +1,136 @@
1
+ import { getState, register } from "../state-register.js";
2
+
3
+ import { BaseCollection } from "./base.js";
4
+ import _ from "lodash";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias collections.AppointmentTagsCollection
9
+ * @extends collections.BaseCollection
10
+ * @see models.AppointmentTagsModel
11
+ */
12
+ export const AppointmentTagsCollection = BaseCollection.extend(
13
+ /** @lends collections.AppointmentTagsCollection# */ {
14
+ model: "AppointmentTagsModel",
15
+
16
+ tagNameCollectionMapping: {
17
+ deckversion: "AppointmentDeckVersionTagsCollection",
18
+ section: "AppointmentSectionTagsCollection",
19
+ slide: "AppointmentSlideTagsCollection",
20
+ adjunct: "AppointmentAdjunctTagsCollection",
21
+ },
22
+
23
+ _mapResultsToModel(result) {
24
+ // Maps a model from a content specific tag to a more generic one.
25
+ // It's generally the same thing, except instead of something like:
26
+ //
27
+ // slide: "/api/slides/1/"
28
+ //
29
+ // It becomes:
30
+ //
31
+ // content_type: "slide",
32
+ // content_url: "/api/slides/1/"
33
+ //
34
+ // So that we can return the list side by side.
35
+ const AppointmentTagsModel = getState("AppointmentTagsModel");
36
+ const resultType = Object.keys(result).find((key) => {
37
+ return Object.keys(this.tagNameCollectionMapping).includes(key);
38
+ });
39
+ if (!resultType) {
40
+ throw new Error("Unknown type of result found");
41
+ }
42
+ return new AppointmentTagsModel({
43
+ tags: result.tags,
44
+ content_type: resultType,
45
+ content_url: result[resultType],
46
+ appointment: result.appointment,
47
+ user: result.user,
48
+ url: result.url,
49
+ });
50
+ },
51
+
52
+ // These methods don't quite make sense right now, disable it for development.
53
+ async fetchSet() {
54
+ throw new Error("Not implemented");
55
+ },
56
+
57
+ async fetchModels() {
58
+ throw new Error("Not implemented");
59
+ },
60
+
61
+ async delete() {
62
+ throw new Error("Cannot delete using this collection");
63
+ },
64
+
65
+ async save() {
66
+ throw new Error("Not implemented");
67
+ },
68
+
69
+ async fetch(options) {
70
+ const AppointmentModel = getState("AppointmentModel");
71
+
72
+ let hasAppointment =
73
+ this._options?.appointment instanceof AppointmentModel ||
74
+ options?.appointment instanceof AppointmentModel;
75
+
76
+ if (!hasAppointment && this.parent instanceof AppointmentModel) {
77
+ options.appointment = this.parent;
78
+ hasAppointment = true;
79
+ }
80
+
81
+ if (!hasAppointment) {
82
+ throw new Error(
83
+ "Requires an appointment model in collection options to fetch."
84
+ );
85
+ }
86
+
87
+ const tagModels = Object.values(this.tagNameCollectionMapping);
88
+ // Fetch all the separate tag models and combine them into a single collection
89
+ const results = (
90
+ await Promise.all(
91
+ tagModels.map((tagModel) => {
92
+ const Collection = getState(tagModel);
93
+ const tags = new Collection({}, this._options);
94
+ return tags.fetch(options);
95
+ })
96
+ )
97
+ )
98
+ .flatMap((collection) => collection.results)
99
+ .map(this._mapResultsToModel.bind(this));
100
+
101
+ this.add(results);
102
+
103
+ return {
104
+ count: results.length,
105
+ next: null,
106
+ previous: null,
107
+ results: this.toJSON(),
108
+ };
109
+ },
110
+
111
+ // Used by Telepresenter to add the tags in the hostedpreso bundle to
112
+ // the appointment tags collection
113
+ addFromAppointment(appointment) {
114
+ const tagCollectionNames = [
115
+ "appointmentdeckversiontags_set",
116
+ "appointmentsectiontags_set",
117
+ "appointmentslidetags_set",
118
+ "appointmentadjuncttags_set",
119
+ ];
120
+
121
+ // flatMap currently doesn't work in TelePresenter
122
+ const results = _.flatten(
123
+ tagCollectionNames.map((collectionName) => {
124
+ const collection = appointment[collectionName];
125
+ return collection?._data || [];
126
+ })
127
+ ).map(this._mapResultsToModel.bind(this));
128
+
129
+ this.add(results);
130
+ },
131
+ }
132
+ );
133
+
134
+ AppointmentTagsCollection.canBeEmpty = true;
135
+
136
+ register("AppointmentTagsCollection", AppointmentTagsCollection);
@@ -1,11 +1,10 @@
1
1
  import "../models/appointment.js";
2
2
 
3
- import moment from "moment";
4
-
5
3
  import { Auth } from "../auth.js";
4
+ import { BaseCollection } from "./base.js";
6
5
  import log from "../log.js";
6
+ import moment from "moment";
7
7
  import { register } from "../state-register.js";
8
- import { BaseCollection } from "./base.js";
9
8
 
10
9
  /**
11
10
  * @constructor
@@ -47,7 +46,11 @@ export const AppointmentCollection = BaseCollection.extend(
47
46
  ) {
48
47
  return this.fetch({
49
48
  ...options,
50
- data: AppointmentCollection.monthParametersForUser(date, userID, "sort")
49
+ data: AppointmentCollection.monthParametersForUser(
50
+ date,
51
+ userID,
52
+ "sort"
53
+ ),
51
54
  });
52
55
  },
53
56
 
@@ -62,7 +65,7 @@ export const AppointmentCollection = BaseCollection.extend(
62
65
  date,
63
66
  userID,
64
67
  "sort"
65
- )
68
+ ),
66
69
  });
67
70
  },
68
71
 
@@ -78,9 +81,9 @@ export const AppointmentCollection = BaseCollection.extend(
78
81
  date,
79
82
  userID,
80
83
  "created"
81
- )
84
+ ),
82
85
  });
83
- }
86
+ },
84
87
  }
85
88
  );
86
89
 
@@ -93,22 +96,18 @@ export const AppointmentCollection = BaseCollection.extend(
93
96
  * @param {string} [parameter="sort"]
94
97
  * @returns {object}
95
98
  */
96
- AppointmentCollection.fortnightParametersForUser = function(
99
+ AppointmentCollection.fortnightParametersForUser = function (
97
100
  date,
98
101
  userID = Auth.user.id,
99
102
  parameter = "sort"
100
103
  ) {
101
- const dateFrom = moment(date)
102
- .subtract(1, "week")
103
- .format();
104
- const dateTo = moment(date)
105
- .add(1, "week")
106
- .format();
104
+ const dateFrom = moment(date).subtract(1, "week").format();
105
+ const dateTo = moment(date).add(1, "week").format();
107
106
 
108
107
  // The server only returns apts with 'ready' creation status by default
109
108
  const data = {
110
109
  user: userID,
111
- creation_status: ["processing", "ready"]
110
+ creation_status: ["processing", "ready"],
112
111
  };
113
112
 
114
113
  data[`${parameter}_date__gte`] = dateFrom;
@@ -126,22 +125,18 @@ AppointmentCollection.fortnightParametersForUser = function(
126
125
  * @param {string} [parameter="sort"]
127
126
  * @returns {object}
128
127
  */
129
- AppointmentCollection.monthParametersForUser = function(
128
+ AppointmentCollection.monthParametersForUser = function (
130
129
  date,
131
130
  userID = Auth.user.id,
132
131
  parameter = "sort"
133
132
  ) {
134
- const dateFrom = moment(date)
135
- .startOf("month")
136
- .format();
137
- const dateTo = moment(date)
138
- .endOf("month")
139
- .format();
133
+ const dateFrom = moment(date).startOf("month").format();
134
+ const dateTo = moment(date).endOf("month").format();
140
135
 
141
136
  // The server only returns apts with 'ready' creation status by default
142
137
  const data = {
143
138
  user: userID,
144
- creation_status: ["processing", "ready"]
139
+ creation_status: ["processing", "ready"],
145
140
  };
146
141
 
147
142
  data[`${parameter}_date__gte`] = dateFrom;
@@ -1,7 +1,7 @@
1
1
  import "../models/asset.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
11
11
  */
12
12
  export const AssetCollection = BaseCollection.extend(
13
13
  /** @lends collections.AssetCollection# */ {
14
- model: "AssetModel"
14
+ model: "AssetModel",
15
15
  }
16
16
  );
17
17
 
@@ -1,8 +1,8 @@
1
1
  import "../models/auto-adjunct.js";
2
2
 
3
3
  import Auth from "../auth.js";
4
- import { register } from "../state-register.js";
5
4
  import { BaseCollection } from "./base.js";
5
+ import { register } from "../state-register.js";
6
6
 
7
7
  /**
8
8
  * @constructor
@@ -19,8 +19,8 @@ export const AutoAdjunctCollection = BaseCollection.extend(
19
19
  return this.fetch({
20
20
  ...options,
21
21
  data: {
22
- deck: deckID
23
- }
22
+ deck: deckID,
23
+ },
24
24
  });
25
25
  },
26
26
 
@@ -39,11 +39,11 @@ export const AutoAdjunctCollection = BaseCollection.extend(
39
39
  // the authorized user is a part of. This is mostly for the case where
40
40
  // a 'global' temp slide admin could end up seeing autoadjuncts for
41
41
  // many teams - which would be increadibly confusing.
42
- opts.data.team = [null].concat(user.team_set.map(team => team.id));
42
+ opts.data.team = [null].concat(user.team_set.map((team) => team.id));
43
43
  }
44
44
 
45
45
  return BaseCollection.prototype.fetch.call(this, opts);
46
- }
46
+ },
47
47
  }
48
48
  );
49
49
 
@@ -1,14 +1,17 @@
1
+ import { Api } from "../api.js";
2
+ import { BaseModel } from "../models/base.js";
1
3
  import Collection from "ampersand-rest-collection";
2
4
  import Promise from "bluebird";
3
5
  import _ from "lodash";
4
- import qs from "qs";
5
-
6
- import { Api } from "../api.js";
7
6
  import log from "../log.js";
8
- import { BaseModel } from "../models/base.js";
7
+ import qs from "qs";
9
8
  import { registeredStates } from "../state-register.js";
10
9
  import { sync } from "../sync.js";
11
10
 
11
+ // Current hardcoded limit for maximum number of pages fetched
12
+ // automatically by fetchAll
13
+ const pageLimit = 20;
14
+
12
15
  /**
13
16
  * @constructor
14
17
  * @alias collections.BaseCollection
@@ -32,12 +35,12 @@ export const BaseCollection = Collection.extend(
32
35
  urlMatchKeys: {},
33
36
 
34
37
  defaultFetchData: {
35
- per_page: 1000
38
+ per_page: 1000,
36
39
  },
37
40
 
38
41
  constructor(data = {}, opts = {}) {
39
42
  const options = _.defaults(opts, {
40
- data: {}
43
+ data: {},
41
44
  });
42
45
 
43
46
  // We ensure that we pass an array because we don't want the collection constructor to
@@ -175,11 +178,11 @@ export const BaseCollection = Collection.extend(
175
178
  },
176
179
 
177
180
  fetchModels(options = {}) {
178
- return Promise.all(this.models.map(model => model.fetch(options)));
181
+ return Promise.all(this.models.map((model) => model.fetch(options)));
179
182
  },
180
183
 
181
184
  fetchSet(opts = {}) {
182
- const idSet = this.models.map(model => model.id);
185
+ const idSet = this.models.map((model) => model.id);
183
186
 
184
187
  if (!idSet.length) {
185
188
  log.warn(`Tried to fetch ${this.modelName} set with no models`);
@@ -191,14 +194,14 @@ export const BaseCollection = Collection.extend(
191
194
  const options = {
192
195
  data: {
193
196
  ...data,
194
- id: idSet
197
+ id: idSet,
195
198
  },
196
- ...otherOpts
199
+ ...otherOpts,
197
200
  };
198
201
 
199
202
  // Necessary because these models were already initialised before the fetch,
200
203
  // and the children weren't updated correctly with the new data.
201
- return this.fetch(options).tap(data => {
204
+ return this.fetch(options).tap((data) => {
202
205
  this.reset();
203
206
  this.add(data.results);
204
207
  });
@@ -216,13 +219,80 @@ export const BaseCollection = Collection.extend(
216
219
  this._url = options.url;
217
220
  }
218
221
 
219
- return Collection.prototype.fetch.call(this, options).tap(response => {
222
+ return Collection.prototype.fetch.call(this, options).tap((response) => {
220
223
  this._data = response;
221
224
  });
222
225
  },
223
226
 
227
+ fetchAll(opts = {}) {
228
+ const options = _.cloneDeep(opts);
229
+
230
+ // Add default params to the fetch (ie ?per_page=1000)
231
+ options.data = _.extend({}, this.queryData, options.data || {});
232
+ this._options = _.extend({}, this._options, options);
233
+
234
+ this.queryData = { ...this._options.data };
235
+
236
+ if (this._options.url) {
237
+ this._url = options.url;
238
+ }
239
+
240
+ const checkPages = (response) => {
241
+ const notLastPage = response.total_pages > response.page;
242
+ const belowPageLimit = response.page < pageLimit;
243
+
244
+ if (notLastPage && belowPageLimit) {
245
+ const options = {
246
+ ...this._options,
247
+ data: {
248
+ ...this._options.data,
249
+ page: response.page + 1,
250
+ },
251
+ };
252
+
253
+ // Update the collection with the new data & page number
254
+ this._options = options;
255
+ this.queryData = { ...options.data };
256
+
257
+ return this.fetchPage().then((response) => {
258
+ checkPages(response);
259
+ });
260
+ } else {
261
+ // The collection's models are replaced with the latest
262
+ // batch of models every time a new page is fetched.
263
+ // Here we add back all of the previously-fetched models.
264
+ this.add(this._data.results);
265
+ return this._data;
266
+ }
267
+ };
268
+
269
+ return this.fetchPage().then((response) => {
270
+ return checkPages(response);
271
+ });
272
+ },
273
+
274
+ fetchPage() {
275
+ return Collection.prototype.fetch
276
+ .call(this, this._options)
277
+ .then((response) => {
278
+ // Add the response data to this._data - if we're fetching
279
+ // multiple pages, this._data.results will contain all of the
280
+ // results fetched from all pages so far
281
+ if (this._data.results?.length) {
282
+ this._data = {
283
+ ...response,
284
+ results: [...this._data.results, ...response.results],
285
+ };
286
+ } else {
287
+ this._data = response;
288
+ }
289
+
290
+ return response;
291
+ });
292
+ },
293
+
224
294
  toServer() {
225
- return this.map(function(model) {
295
+ return this.map(function (model) {
226
296
  if (model.toServer) {
227
297
  return model.toServer();
228
298
  } else if (model.serialize) {
@@ -261,7 +331,7 @@ export const BaseCollection = Collection.extend(
261
331
  }
262
332
 
263
333
  return Promise.all(
264
- this.map(model => {
334
+ this.map((model) => {
265
335
  return model.save(model.toServer(), options);
266
336
  })
267
337
  );
@@ -275,7 +345,7 @@ export const BaseCollection = Collection.extend(
275
345
  }
276
346
 
277
347
  return Promise.all(
278
- this.map(model => {
348
+ this.map((model) => {
279
349
  return model.delete(model.toServer(), options);
280
350
  })
281
351
  );
@@ -293,17 +363,17 @@ export const BaseCollection = Collection.extend(
293
363
  // can be passed to the model.
294
364
  //
295
365
  // TODO: Regex match for URLs
296
- return results.map(function(attr) {
366
+ return results.map(function (attr) {
297
367
  return { url: attr };
298
368
  });
299
369
  }
300
370
 
301
371
  return results;
302
- }
372
+ },
303
373
  }
304
374
  );
305
375
 
306
376
  // Make matchesURL available as a static method
307
- BaseCollection.matchesURL = function(url) {
377
+ BaseCollection.matchesURL = function (url) {
308
378
  return this.prototype.matchesURL(url);
309
379
  };
@@ -1,19 +1,20 @@
1
+ import { BaseCollection } from "./base.js";
2
+ import { BaseModel } from "../models/base.js";
3
+ import AmpersandCollection from "ampersand-rest-collection";
1
4
  import { G } from "sp-test/api";
2
5
  import td from "testdouble";
3
-
4
- import { BaseModel } from "../models/base.js";
5
- import { BaseCollection } from "./base.js";
6
+ import Promise from "bluebird";
6
7
 
7
8
  it("should parse an array of urls into models", () => {
8
9
  G(BaseModel, "TestModel").extend({ modelName: "tests" });
9
10
  const Collection = G(BaseCollection).extend({
10
- model: "TestModel"
11
+ model: "TestModel",
11
12
  });
12
13
  const collection = new Collection(["/api/tests/1/", "/api/tests/2/"]);
13
14
  expect(collection.models).toHaveLength(2);
14
15
  });
15
16
 
16
- it("should fetch the individual models in the collection", async function() {
17
+ it("should fetch the individual models in the collection", async function () {
17
18
  G(BaseModel, "TestModel");
18
19
  const Collection = G(BaseCollection).extend({ model: "TestModel" });
19
20
  const collection = new Collection([{ id: 1 }, { id: 2 }]);
@@ -86,12 +87,12 @@ it("should query multiple values if using an array", () => {
86
87
  const Collection = G(BaseCollection);
87
88
  const collection = new Collection(
88
89
  {
89
- url: "/api/appointments/"
90
+ url: "/api/appointments/",
90
91
  },
91
92
  {
92
93
  data: {
93
- foo: [1, 2, null]
94
- }
94
+ foo: [1, 2, null],
95
+ },
95
96
  }
96
97
  );
97
98
  expect(collection.url()).toEqual(
@@ -120,3 +121,94 @@ it("should be empty on initialize", () => {
120
121
  const collection = new Collection();
121
122
  expect(collection.length).toEqual(0);
122
123
  });
124
+
125
+ const mockFetchResults = (dataFn) => {
126
+ jest
127
+ .spyOn(AmpersandCollection.prototype, "fetch")
128
+ .mockImplementation((opts) => {
129
+ const fetchResults = dataFn(opts);
130
+ return Promise.resolve(fetchResults);
131
+ });
132
+ };
133
+
134
+ describe("fetchAll", () => {
135
+ it("calls Collection.prototype.fetch", async () => {
136
+ mockFetchResults(() => {
137
+ return {
138
+ results: [{ id: 20 }, { id: 21 }, { id: 22 }],
139
+ };
140
+ });
141
+
142
+ G(BaseModel, "TestModel");
143
+ const Collection = G(BaseCollection.extend({ model: "TestModel" }));
144
+ const baseCollection = new Collection();
145
+
146
+ await baseCollection.fetchAll();
147
+
148
+ expect(baseCollection.length).toEqual(3);
149
+ expect(baseCollection.first().id).toEqual(20);
150
+ });
151
+
152
+ it("adds results to existing results", async () => {
153
+ mockFetchResults(() => {
154
+ return {
155
+ results: [{ id: 22 }],
156
+ };
157
+ });
158
+
159
+ G(BaseModel, "TestModel");
160
+ const Collection = G(BaseCollection.extend({ model: "TestModel" }));
161
+ const baseCollection = new Collection([{ id: 15 }]);
162
+
163
+ await baseCollection.fetchAll();
164
+
165
+ expect(baseCollection.length).toEqual(2);
166
+ // The models are sorted by ID
167
+ expect(baseCollection.first().id).toEqual(15);
168
+ expect(baseCollection.last().id).toEqual(22);
169
+ });
170
+
171
+ it("fetches multiple pages", async () => {
172
+ mockFetchResults((opts) => {
173
+ const page = opts.data.page || 1;
174
+ const fetchResults = {
175
+ total_pages: 5,
176
+ page,
177
+ results: [{ id: page + 10 }],
178
+ };
179
+ return Promise.resolve(fetchResults);
180
+ });
181
+
182
+ G(BaseModel, "TestModel");
183
+ const Collection = G(BaseCollection.extend({ model: "TestModel" }));
184
+ const baseCollection = new Collection();
185
+
186
+ await baseCollection.fetchAll();
187
+
188
+ expect(baseCollection.length).toEqual(5);
189
+ expect(baseCollection.first().id).toEqual(11);
190
+ expect(baseCollection.last().id).toEqual(15);
191
+ });
192
+
193
+ it("stops fetching pages at the hardcoded limit", async () => {
194
+ mockFetchResults((opts) => {
195
+ const page = opts.data.page || 1;
196
+ const fetchResults = {
197
+ total_pages: 50,
198
+ page,
199
+ results: [{ id: page + 10 }],
200
+ };
201
+ return Promise.resolve(fetchResults);
202
+ });
203
+
204
+ G(BaseModel, "TestModel");
205
+ const Collection = G(BaseCollection.extend({ model: "TestModel" }));
206
+ const baseCollection = new Collection();
207
+
208
+ await baseCollection.fetchAll();
209
+
210
+ expect(baseCollection.length).toEqual(20);
211
+ expect(baseCollection.first().id).toEqual(11);
212
+ expect(baseCollection.last().id).toEqual(30);
213
+ });
214
+ });
@@ -1,8 +1,8 @@
1
1
  import "../models/cms-val.js";
2
2
 
3
3
  import Auth from "../auth.js";
4
- import { register } from "../state-register.js";
5
4
  import { BaseCollection } from "./base.js";
5
+ import { register } from "../state-register.js";
6
6
 
7
7
  /**
8
8
  * @constructor
@@ -29,11 +29,11 @@ export const CMSValCollection = BaseCollection.extend(
29
29
  // the authorized user is a part of. This is mostly for the case where
30
30
  // a 'global' temp slide admin could end up seeing autoadjuncts for
31
31
  // many teams - which would be increadibly confusing.
32
- opts.data.team = [null].concat(user.team_set.map(team => team.id));
32
+ opts.data.team = [null].concat(user.team_set.map((team) => team.id));
33
33
  }
34
34
 
35
35
  return BaseCollection.prototype.fetch.call(this, opts);
36
- }
36
+ },
37
37
  }
38
38
  );
39
39
 
@@ -1,7 +1,7 @@
1
1
  import "../models/contact.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
11
11
  */
12
12
  export const ContactCollection = BaseCollection.extend(
13
13
  /** @lends collections.ContactCollection# */ {
14
- model: "ContactModel"
14
+ model: "ContactModel",
15
15
  }
16
16
  );
17
17
 
@@ -1,7 +1,7 @@
1
1
  import "../models/asset.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -19,7 +19,7 @@ export const CreatedAssetCollection = BaseCollection.extend(
19
19
  }
20
20
 
21
21
  return BaseCollection.prototype.url.call(this);
22
- }
22
+ },
23
23
  }
24
24
  );
25
25
 
@@ -1,7 +1,7 @@
1
1
  import "../models/customer.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseCollection } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
11
11
  */
12
12
  export const CustomerCollection = BaseCollection.extend(
13
13
  /** @lends collections.CustomerCollection# */ {
14
- model: "CustomerModel"
14
+ model: "CustomerModel",
15
15
  }
16
16
  );
17
17