@livepreso/api 6.44.0 → 6.46.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 (502) hide show
  1. package/.eslintrc.js +3 -0
  2. package/.rush/temp/1aebf46f78ad5c45f82f8147751890adb37bef9d.log +10 -0
  3. package/.rush/temp/256021b5963b4c0221d3dec247b697b9691a9b2c.log +10 -0
  4. package/.rush/temp/2a322f00f12cf9d1e64afe81275cc78d01c49050.log +10 -0
  5. package/.rush/temp/30061f1865447dcbb3f20a305061205f3dbe6091.log +10 -0
  6. package/.rush/temp/3cdc82c352e8ed90607952873f3aa4c200490874.log +10 -0
  7. package/.rush/temp/45522aea0dee8cb2be1a53248ba45bd235743b43.log +10 -0
  8. package/.rush/temp/5489ab737e406518983c16c57fc3e1edc07c0341.log +10 -0
  9. package/.rush/temp/58fcbb7f15a76326d40e0839ab179755da82a891.log +10 -0
  10. package/.rush/temp/5bc0bba70b733baa4dd976667ba0a1386e516186.log +10 -0
  11. package/.rush/temp/64f1bb696f8d7d7e72907b80df316b127f72e23e.log +10 -0
  12. package/.rush/temp/6f640f951414ea68adb65c17e4ed7527cde54faf.log +10 -0
  13. package/.rush/temp/7c7b958682d4ab5697530be47d0aac62efe1adf1.log +10 -0
  14. package/.rush/temp/82bfb987463fbcfebf04022e6ed00015c73879c8.log +10 -0
  15. package/.rush/temp/844034aa6e542115075e8f3dc5ffc640973e0064.log +10 -0
  16. package/.rush/temp/8b42957a7c15da1f29cb57bee125f13affa70dca.log +10 -0
  17. package/.rush/temp/924652444ab5a6063f328a2217123a2227058896.log +10 -0
  18. package/.rush/temp/9f2030f96d62f3e38052e35201819a216566f14f.log +10 -0
  19. package/.rush/temp/a769db9d81a23000c0e9b1bf4f1a9a9e721d0d7c.log +10 -0
  20. package/.rush/temp/a87d3a8b4ece87ec66f27c86226a9f205617681f.log +10 -0
  21. package/.rush/temp/bb7a5bdcc4af4ad1507f81f33774b31f5b4e4fb7.log +10 -0
  22. package/.rush/temp/c20e29ccaaa9231b38a28bb24451b4ce7562cdc0.log +10 -0
  23. package/.rush/temp/e21303db8f59b4625fd184c9114377d781fd24f8.log +10 -0
  24. package/.rush/temp/e6d303862765b6a5f41dd483d0f9ae083a1fae10.log +10 -0
  25. package/.rush/temp/eaf69fbc059d2f1258d7569136180d4a1d3c7072.log +10 -0
  26. package/.rush/temp/f85d279e2674966daaec83e1c3986a96f86ef304.log +10 -0
  27. package/.rush/temp/fc0a332c5b34c6b90006850cf2d93a48fb4b9a6e.log +10 -0
  28. package/.rush/temp/operation/test/all.log +19 -0
  29. package/.rush/temp/operation/test/state.json +3 -0
  30. package/.rush/temp/{package-deps_test.json → package-deps_build.json} +11 -11
  31. package/.rush/temp/shrinkwrap-deps.json +605 -597
  32. package/CHANGELOG.json +29 -0
  33. package/CHANGELOG.md +15 -1
  34. package/README.md +4 -4
  35. package/api.build.log +1 -1
  36. package/api.test.cache.log +1 -0
  37. package/api.test.log +19 -0
  38. package/bin/test.sh +0 -1
  39. package/cjs/api.js +18 -17
  40. package/cjs/api.js.map +1 -1
  41. package/cjs/api.spec.js +0 -4
  42. package/cjs/api.spec.js.map +1 -1
  43. package/cjs/auth.js +35 -36
  44. package/cjs/auth.js.map +1 -1
  45. package/cjs/auth.spec.js +52 -71
  46. package/cjs/auth.spec.js.map +1 -1
  47. package/cjs/caching.js +2 -7
  48. package/cjs/caching.js.map +1 -1
  49. package/cjs/collections/activity.js +16 -56
  50. package/cjs/collections/activity.js.map +1 -1
  51. package/cjs/collections/adjunct-sections.js +1 -10
  52. package/cjs/collections/adjunct-sections.js.map +1 -1
  53. package/cjs/collections/adjunct-slides.js +1 -10
  54. package/cjs/collections/adjunct-slides.js.map +1 -1
  55. package/cjs/collections/adjunct-sub-slides.js +1 -9
  56. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  57. package/cjs/collections/appointment-adjunct-tags.js +1 -9
  58. package/cjs/collections/appointment-adjunct-tags.js.map +1 -1
  59. package/cjs/collections/appointment-deckversion-tags.js +1 -9
  60. package/cjs/collections/appointment-deckversion-tags.js.map +1 -1
  61. package/cjs/collections/appointment-duplicates.js +1 -9
  62. package/cjs/collections/appointment-duplicates.js.map +1 -1
  63. package/cjs/collections/appointment-editors.js +1 -10
  64. package/cjs/collections/appointment-editors.js.map +1 -1
  65. package/cjs/collections/appointment-section-tags.js +1 -9
  66. package/cjs/collections/appointment-section-tags.js.map +1 -1
  67. package/cjs/collections/appointment-slide-tags.js +1 -9
  68. package/cjs/collections/appointment-slide-tags.js.map +1 -1
  69. package/cjs/collections/appointment-tags.js +66 -103
  70. package/cjs/collections/appointment-tags.js.map +1 -1
  71. package/cjs/collections/appointment-templates.js +27 -0
  72. package/cjs/collections/appointment-templates.js.map +1 -0
  73. package/cjs/collections/appointments.js +9 -29
  74. package/cjs/collections/appointments.js.map +1 -1
  75. package/cjs/collections/assets.js +1 -9
  76. package/cjs/collections/assets.js.map +1 -1
  77. package/cjs/collections/auto-adjuncts.js +6 -21
  78. package/cjs/collections/auto-adjuncts.js.map +1 -1
  79. package/cjs/collections/base.js +46 -112
  80. package/cjs/collections/base.js.map +1 -1
  81. package/cjs/collections/base.spec.js +204 -233
  82. package/cjs/collections/base.spec.js.map +1 -1
  83. package/cjs/collections/cms-vals.js +9 -16
  84. package/cjs/collections/cms-vals.js.map +1 -1
  85. package/cjs/collections/contact-phones.js +20 -0
  86. package/cjs/collections/contact-phones.js.map +1 -0
  87. package/cjs/collections/contacts.js +1 -9
  88. package/cjs/collections/contacts.js.map +1 -1
  89. package/cjs/collections/created-assets.js +1 -10
  90. package/cjs/collections/created-assets.js.map +1 -1
  91. package/cjs/collections/customers.js +1 -9
  92. package/cjs/collections/customers.js.map +1 -1
  93. package/cjs/collections/deck-notes.js +1 -10
  94. package/cjs/collections/deck-notes.js.map +1 -1
  95. package/cjs/collections/deck-version-screenshots.js +49 -0
  96. package/cjs/collections/deck-version-screenshots.js.map +1 -0
  97. package/cjs/collections/deck-versions.js +5 -20
  98. package/cjs/collections/deck-versions.js.map +1 -1
  99. package/cjs/collections/decks.js +1 -9
  100. package/cjs/collections/decks.js.map +1 -1
  101. package/cjs/collections/deleted-assets.js +1 -10
  102. package/cjs/collections/deleted-assets.js.map +1 -1
  103. package/cjs/collections/dispatches.js +1 -13
  104. package/cjs/collections/dispatches.js.map +1 -1
  105. package/cjs/collections/event-objects.js +1 -9
  106. package/cjs/collections/event-objects.js.map +1 -1
  107. package/cjs/collections/events.js +1 -9
  108. package/cjs/collections/events.js.map +1 -1
  109. package/cjs/collections/groups.js +1 -9
  110. package/cjs/collections/groups.js.map +1 -1
  111. package/cjs/collections/images.js +1 -9
  112. package/cjs/collections/images.js.map +1 -1
  113. package/cjs/collections/locations.js +1 -9
  114. package/cjs/collections/locations.js.map +1 -1
  115. package/cjs/collections/opportunities.js +1 -9
  116. package/cjs/collections/opportunities.js.map +1 -1
  117. package/cjs/collections/pack-diffs.js +1 -9
  118. package/cjs/collections/pack-diffs.js.map +1 -1
  119. package/cjs/collections/packs.js +1 -9
  120. package/cjs/collections/packs.js.map +1 -1
  121. package/cjs/collections/presets.js +1 -9
  122. package/cjs/collections/presets.js.map +1 -1
  123. package/cjs/collections/section-selections.js +1 -9
  124. package/cjs/collections/section-selections.js.map +1 -1
  125. package/cjs/collections/sections.js +1 -9
  126. package/cjs/collections/sections.js.map +1 -1
  127. package/cjs/collections/slide-selections.js +1 -9
  128. package/cjs/collections/slide-selections.js.map +1 -1
  129. package/cjs/collections/slides.js +1 -9
  130. package/cjs/collections/slides.js.map +1 -1
  131. package/cjs/collections/snapshots.js +1 -9
  132. package/cjs/collections/snapshots.js.map +1 -1
  133. package/cjs/collections/sub-slides.js +1 -9
  134. package/cjs/collections/sub-slides.js.map +1 -1
  135. package/cjs/collections/tags.js +1 -9
  136. package/cjs/collections/tags.js.map +1 -1
  137. package/cjs/collections/teams.js +1 -9
  138. package/cjs/collections/teams.js.map +1 -1
  139. package/cjs/collections/templates.js +1 -9
  140. package/cjs/collections/templates.js.map +1 -1
  141. package/cjs/collections/uploads.js +1 -9
  142. package/cjs/collections/uploads.js.map +1 -1
  143. package/cjs/collections/users.js +1 -9
  144. package/cjs/collections/users.js.map +1 -1
  145. package/cjs/collections.js +33 -86
  146. package/cjs/collections.js.map +1 -1
  147. package/cjs/fixtures.js +187 -0
  148. package/cjs/fixtures.js.map +1 -0
  149. package/cjs/index.js +0 -10
  150. package/cjs/index.js.map +1 -1
  151. package/cjs/log.js +0 -1
  152. package/cjs/log.js.map +1 -1
  153. package/cjs/middleware.js +2 -7
  154. package/cjs/middleware.js.map +1 -1
  155. package/cjs/middlewares/auth.js +1 -17
  156. package/cjs/middlewares/auth.js.map +1 -1
  157. package/cjs/middlewares/base.js +3 -9
  158. package/cjs/middlewares/base.js.map +1 -1
  159. package/cjs/middlewares/json.js +1 -19
  160. package/cjs/middlewares/json.js.map +1 -1
  161. package/cjs/middlewares/redirect.js +5 -21
  162. package/cjs/middlewares/redirect.js.map +1 -1
  163. package/cjs/models/activity-item.js +6 -20
  164. package/cjs/models/activity-item.js.map +1 -1
  165. package/cjs/models/adjunct-section.js +8 -21
  166. package/cjs/models/adjunct-section.js.map +1 -1
  167. package/cjs/models/adjunct-slide.js +8 -21
  168. package/cjs/models/adjunct-slide.js.map +1 -1
  169. package/cjs/models/adjunct-sub-slide.js +1 -16
  170. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  171. package/cjs/models/adjunct.js +34 -10
  172. package/cjs/models/adjunct.js.map +1 -1
  173. package/cjs/models/api.js +1 -6
  174. package/cjs/models/api.js.map +1 -1
  175. package/cjs/models/appointment-adjunct-tags.js +1 -13
  176. package/cjs/models/appointment-adjunct-tags.js.map +1 -1
  177. package/cjs/models/appointment-deckversion-tags.js +1 -13
  178. package/cjs/models/appointment-deckversion-tags.js.map +1 -1
  179. package/cjs/models/appointment-duplicate.js +3 -25
  180. package/cjs/models/appointment-duplicate.js.map +1 -1
  181. package/cjs/models/appointment-editor.js +1 -14
  182. package/cjs/models/appointment-editor.js.map +1 -1
  183. package/cjs/models/appointment-section-tags.js +1 -13
  184. package/cjs/models/appointment-section-tags.js.map +1 -1
  185. package/cjs/models/appointment-slide-tags.js +1 -13
  186. package/cjs/models/appointment-slide-tags.js.map +1 -1
  187. package/cjs/models/appointment-stats.js +1 -11
  188. package/cjs/models/appointment-stats.js.map +1 -1
  189. package/cjs/models/appointment-tags.js +1 -10
  190. package/cjs/models/appointment-tags.js.map +1 -1
  191. package/cjs/models/appointment-template.js +23 -0
  192. package/cjs/models/appointment-template.js.map +1 -0
  193. package/cjs/models/appointment-viewing.js +1 -8
  194. package/cjs/models/appointment-viewing.js.map +1 -1
  195. package/cjs/models/appointment.js +94 -69
  196. package/cjs/models/appointment.js.map +1 -1
  197. package/cjs/models/asset.js +12 -11
  198. package/cjs/models/asset.js.map +1 -1
  199. package/cjs/models/auto-adjunct-key-check.js +1 -15
  200. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  201. package/cjs/models/auto-adjunct.js +5 -14
  202. package/cjs/models/auto-adjunct.js.map +1 -1
  203. package/cjs/models/base.js +89 -173
  204. package/cjs/models/base.js.map +1 -1
  205. package/cjs/models/base.spec.js +8 -30
  206. package/cjs/models/base.spec.js.map +1 -1
  207. package/cjs/models/choicelist.js +1 -8
  208. package/cjs/models/choicelist.js.map +1 -1
  209. package/cjs/models/cms-val.js +28 -15
  210. package/cjs/models/cms-val.js.map +1 -1
  211. package/cjs/models/cms-val.spec.js +25 -0
  212. package/cjs/models/cms-val.spec.js.map +1 -0
  213. package/cjs/models/contact-phone.js +54 -0
  214. package/cjs/models/contact-phone.js.map +1 -0
  215. package/cjs/models/contact.js +1 -18
  216. package/cjs/models/contact.js.map +1 -1
  217. package/cjs/models/customer.js +5 -30
  218. package/cjs/models/customer.js.map +1 -1
  219. package/cjs/models/deck-note.js +1 -9
  220. package/cjs/models/deck-note.js.map +1 -1
  221. package/cjs/models/deck-tags.js +1 -12
  222. package/cjs/models/deck-tags.js.map +1 -1
  223. package/cjs/models/deck-version-screenshot.js +47 -0
  224. package/cjs/models/deck-version-screenshot.js.map +1 -0
  225. package/cjs/models/deck-version.js +54 -47
  226. package/cjs/models/deck-version.js.map +1 -1
  227. package/cjs/models/deck.js +1 -14
  228. package/cjs/models/deck.js.map +1 -1
  229. package/cjs/models/dispatch-preview.js +1 -13
  230. package/cjs/models/dispatch-preview.js.map +1 -1
  231. package/cjs/models/dispatch.js +1 -23
  232. package/cjs/models/dispatch.js.map +1 -1
  233. package/cjs/models/envs.js +1 -6
  234. package/cjs/models/envs.js.map +1 -1
  235. package/cjs/models/event-object.js +1 -11
  236. package/cjs/models/event-object.js.map +1 -1
  237. package/cjs/models/event.js +1 -13
  238. package/cjs/models/event.js.map +1 -1
  239. package/cjs/models/feed-data.js +6 -13
  240. package/cjs/models/feed-data.js.map +1 -1
  241. package/cjs/models/file.js +1 -11
  242. package/cjs/models/file.js.map +1 -1
  243. package/cjs/models/group.js +1 -11
  244. package/cjs/models/group.js.map +1 -1
  245. package/cjs/models/handover.js +1 -13
  246. package/cjs/models/handover.js.map +1 -1
  247. package/cjs/models/hosted-preso.js +1 -15
  248. package/cjs/models/hosted-preso.js.map +1 -1
  249. package/cjs/models/image.js +30 -11
  250. package/cjs/models/image.js.map +1 -1
  251. package/cjs/models/location.js +1 -13
  252. package/cjs/models/location.js.map +1 -1
  253. package/cjs/models/manifest-json.js +75 -74
  254. package/cjs/models/manifest-json.js.map +1 -1
  255. package/cjs/models/onshare.js +1 -14
  256. package/cjs/models/onshare.js.map +1 -1
  257. package/cjs/models/opportunity.js +1 -14
  258. package/cjs/models/opportunity.js.map +1 -1
  259. package/cjs/models/pack-diff.js +1 -14
  260. package/cjs/models/pack-diff.js.map +1 -1
  261. package/cjs/models/pack.js +1 -12
  262. package/cjs/models/pack.js.map +1 -1
  263. package/cjs/models/preset.js +4 -20
  264. package/cjs/models/preset.js.map +1 -1
  265. package/cjs/models/refresh-request.js +17 -11
  266. package/cjs/models/refresh-request.js.map +1 -1
  267. package/cjs/models/room.js +1 -9
  268. package/cjs/models/room.js.map +1 -1
  269. package/cjs/models/salesforce-lookup.js +1 -12
  270. package/cjs/models/salesforce-lookup.js.map +1 -1
  271. package/cjs/models/section-selection.js +1 -14
  272. package/cjs/models/section-selection.js.map +1 -1
  273. package/cjs/models/section.js +4 -15
  274. package/cjs/models/section.js.map +1 -1
  275. package/cjs/models/slide-selection.js +1 -14
  276. package/cjs/models/slide-selection.js.map +1 -1
  277. package/cjs/models/slide.js +4 -15
  278. package/cjs/models/slide.js.map +1 -1
  279. package/cjs/models/snapshot.js +13 -15
  280. package/cjs/models/snapshot.js.map +1 -1
  281. package/cjs/models/snapshot.spec.js +44 -0
  282. package/cjs/models/snapshot.spec.js.map +1 -0
  283. package/cjs/models/sub-slide.js +1 -12
  284. package/cjs/models/sub-slide.js.map +1 -1
  285. package/cjs/models/support-ticket.js +1 -11
  286. package/cjs/models/support-ticket.js.map +1 -1
  287. package/cjs/models/tag.js +1 -13
  288. package/cjs/models/tag.js.map +1 -1
  289. package/cjs/models/team.js +14 -13
  290. package/cjs/models/team.js.map +1 -1
  291. package/cjs/models/template.js +89 -15
  292. package/cjs/models/template.js.map +1 -1
  293. package/cjs/models/tenancy.js +4 -11
  294. package/cjs/models/tenancy.js.map +1 -1
  295. package/cjs/models/timing-log.js +21 -78
  296. package/cjs/models/timing-log.js.map +1 -1
  297. package/cjs/models/timing-log.spec.js +24 -37
  298. package/cjs/models/timing-log.spec.js.map +1 -1
  299. package/cjs/models/token.js +46 -0
  300. package/cjs/models/token.js.map +1 -0
  301. package/cjs/models/transcribe-socket.js +1 -8
  302. package/cjs/models/transcribe-socket.js.map +1 -1
  303. package/cjs/models/upload.js +1 -7
  304. package/cjs/models/upload.js.map +1 -1
  305. package/cjs/models/user.js +11 -28
  306. package/cjs/models/user.js.map +1 -1
  307. package/cjs/models/user.spec.js +20 -30
  308. package/cjs/models/user.spec.js.map +1 -1
  309. package/cjs/models.js +44 -128
  310. package/cjs/models.js.map +1 -1
  311. package/cjs/presentation/appointment-presentation.js +14 -36
  312. package/cjs/presentation/appointment-presentation.js.map +1 -1
  313. package/cjs/presentation/base-presentation-collection.js +1 -7
  314. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  315. package/cjs/presentation/base-presentation-model.js +108 -33
  316. package/cjs/presentation/base-presentation-model.js.map +1 -1
  317. package/cjs/presentation/base-presentation-model.spec.js +58 -23
  318. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  319. package/cjs/presentation/presentation-deck.js +73 -83
  320. package/cjs/presentation/presentation-deck.js.map +1 -1
  321. package/cjs/presentation/presentation-deck.spec.js +118 -88
  322. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  323. package/cjs/presentation/presentation-decks.js +1 -9
  324. package/cjs/presentation/presentation-decks.js.map +1 -1
  325. package/cjs/presentation/presentation-section.js +70 -84
  326. package/cjs/presentation/presentation-section.js.map +1 -1
  327. package/cjs/presentation/presentation-section.spec.js +296 -238
  328. package/cjs/presentation/presentation-section.spec.js.map +1 -1
  329. package/cjs/presentation/presentation-sections.js +1 -9
  330. package/cjs/presentation/presentation-sections.js.map +1 -1
  331. package/cjs/presentation/presentation-slide.js +74 -84
  332. package/cjs/presentation/presentation-slide.js.map +1 -1
  333. package/cjs/presentation/presentation-slide.spec.js +211 -166
  334. package/cjs/presentation/presentation-slide.spec.js.map +1 -1
  335. package/cjs/presentation/presentation-slides.js +1 -9
  336. package/cjs/presentation/presentation-slides.js.map +1 -1
  337. package/cjs/presentation/presentation-subslide.js +3 -23
  338. package/cjs/presentation/presentation-subslide.js.map +1 -1
  339. package/cjs/presentation/presentation-subslide.spec.js +101 -125
  340. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  341. package/cjs/presentation/presentation-subslides.js +1 -9
  342. package/cjs/presentation/presentation-subslides.js.map +1 -1
  343. package/cjs/presentation/presentation.js +87 -32
  344. package/cjs/presentation/presentation.js.map +1 -1
  345. package/cjs/presentation.js +0 -20
  346. package/cjs/presentation.js.map +1 -1
  347. package/cjs/selections.js +81 -0
  348. package/cjs/selections.js.map +1 -0
  349. package/cjs/state-register.js +3 -11
  350. package/cjs/state-register.js.map +1 -1
  351. package/cjs/sync.js +32 -76
  352. package/cjs/sync.js.map +1 -1
  353. package/cjs/utils.js +51 -42
  354. package/cjs/utils.js.map +1 -1
  355. package/cjs/utils.spec.js +0 -4
  356. package/cjs/utils.spec.js.map +1 -1
  357. package/jest.config.js +5 -3
  358. package/package.json +11 -8
  359. package/src/api.js +17 -2
  360. package/src/auth.js +45 -9
  361. package/src/auth.spec.js +2 -0
  362. package/src/collections/activity.js +4 -4
  363. package/src/collections/adjunct-sections.js +1 -1
  364. package/src/collections/adjunct-slides.js +1 -1
  365. package/src/collections/adjunct-sub-slides.js +1 -1
  366. package/src/collections/appointment-adjunct-tags.js +1 -1
  367. package/src/collections/appointment-deckversion-tags.js +2 -2
  368. package/src/collections/appointment-duplicates.js +1 -1
  369. package/src/collections/appointment-editors.js +1 -1
  370. package/src/collections/appointment-section-tags.js +1 -1
  371. package/src/collections/appointment-slide-tags.js +1 -1
  372. package/src/collections/appointment-tags.js +20 -18
  373. package/src/collections/appointment-templates.js +26 -0
  374. package/src/collections/appointments.js +9 -9
  375. package/src/collections/assets.js +1 -1
  376. package/src/collections/auto-adjuncts.js +1 -1
  377. package/src/collections/base.js +20 -10
  378. package/src/collections/base.spec.js +19 -5
  379. package/src/collections/cms-vals.js +5 -1
  380. package/src/collections/contact-phones.js +18 -0
  381. package/src/collections/contacts.js +1 -1
  382. package/src/collections/created-assets.js +1 -1
  383. package/src/collections/customers.js +1 -1
  384. package/src/collections/deck-notes.js +1 -1
  385. package/src/collections/deck-version-screenshots.js +48 -0
  386. package/src/collections/deck-versions.js +1 -1
  387. package/src/collections/decks.js +1 -1
  388. package/src/collections/deleted-assets.js +1 -1
  389. package/src/collections/dispatches.js +2 -2
  390. package/src/collections/event-objects.js +1 -1
  391. package/src/collections/events.js +1 -1
  392. package/src/collections/groups.js +1 -1
  393. package/src/collections/images.js +1 -1
  394. package/src/collections/locations.js +1 -1
  395. package/src/collections/opportunities.js +1 -1
  396. package/src/collections/pack-diffs.js +1 -1
  397. package/src/collections/packs.js +1 -1
  398. package/src/collections/presets.js +1 -1
  399. package/src/collections/section-selections.js +1 -1
  400. package/src/collections/sections.js +1 -1
  401. package/src/collections/slide-selections.js +1 -1
  402. package/src/collections/slides.js +1 -1
  403. package/src/collections/snapshots.js +1 -1
  404. package/src/collections/sub-slides.js +1 -1
  405. package/src/collections/tags.js +1 -1
  406. package/src/collections/teams.js +1 -1
  407. package/src/collections/templates.js +1 -1
  408. package/src/collections/uploads.js +1 -1
  409. package/src/collections/users.js +1 -1
  410. package/src/collections.js +3 -0
  411. package/src/fixtures.js +193 -0
  412. package/src/models/activity-item.js +3 -1
  413. package/src/models/adjunct-section.js +7 -2
  414. package/src/models/adjunct-slide.js +7 -2
  415. package/src/models/adjunct-sub-slide.js +1 -1
  416. package/src/models/adjunct.js +39 -1
  417. package/src/models/appointment-adjunct-tags.js +1 -1
  418. package/src/models/appointment-deckversion-tags.js +1 -1
  419. package/src/models/appointment-duplicate.js +1 -1
  420. package/src/models/appointment-editor.js +1 -1
  421. package/src/models/appointment-section-tags.js +1 -1
  422. package/src/models/appointment-slide-tags.js +1 -1
  423. package/src/models/appointment-stats.js +1 -1
  424. package/src/models/appointment-tags.js +1 -1
  425. package/src/models/appointment-template.js +19 -0
  426. package/src/models/appointment-viewing.js +1 -1
  427. package/src/models/appointment.js +112 -37
  428. package/src/models/asset.js +15 -1
  429. package/src/models/auto-adjunct-key-check.js +1 -1
  430. package/src/models/auto-adjunct.js +4 -1
  431. package/src/models/base.js +55 -22
  432. package/src/models/base.spec.js +34 -27
  433. package/src/models/choicelist.js +1 -1
  434. package/src/models/cms-val.js +24 -1
  435. package/src/models/cms-val.spec.js +14 -0
  436. package/src/models/contact-phone.js +57 -0
  437. package/src/models/contact.js +1 -1
  438. package/src/models/customer.js +3 -3
  439. package/src/models/deck-note.js +1 -1
  440. package/src/models/deck-tags.js +1 -1
  441. package/src/models/deck-version-screenshot.js +48 -0
  442. package/src/models/deck-version.js +60 -9
  443. package/src/models/deck.js +1 -1
  444. package/src/models/dispatch-preview.js +1 -1
  445. package/src/models/dispatch.js +1 -1
  446. package/src/models/event-object.js +1 -1
  447. package/src/models/event.js +1 -1
  448. package/src/models/feed-data.js +3 -1
  449. package/src/models/file.js +1 -1
  450. package/src/models/group.js +1 -1
  451. package/src/models/handover.js +1 -1
  452. package/src/models/hosted-preso.js +1 -1
  453. package/src/models/image.js +33 -1
  454. package/src/models/location.js +1 -1
  455. package/src/models/manifest-json.js +57 -6
  456. package/src/models/onshare.js +1 -1
  457. package/src/models/opportunity.js +1 -1
  458. package/src/models/pack-diff.js +1 -1
  459. package/src/models/pack.js +1 -1
  460. package/src/models/preset.js +3 -1
  461. package/src/models/refresh-request.js +15 -1
  462. package/src/models/room.js +1 -1
  463. package/src/models/salesforce-lookup.js +1 -1
  464. package/src/models/section-selection.js +1 -1
  465. package/src/models/section.js +3 -1
  466. package/src/models/slide-selection.js +1 -1
  467. package/src/models/slide.js +3 -1
  468. package/src/models/snapshot.js +11 -2
  469. package/src/models/snapshot.spec.js +31 -0
  470. package/src/models/sub-slide.js +1 -1
  471. package/src/models/support-ticket.js +1 -1
  472. package/src/models/tag.js +1 -1
  473. package/src/models/team.js +14 -3
  474. package/src/models/template.js +74 -2
  475. package/src/models/tenancy.js +4 -1
  476. package/src/models/timing-log.js +2 -2
  477. package/src/models/timing-log.spec.js +1 -1
  478. package/src/models/token.js +47 -0
  479. package/src/models/transcribe-socket.js +1 -1
  480. package/src/models/user.js +15 -2
  481. package/src/models.js +4 -0
  482. package/src/presentation/appointment-presentation.js +13 -5
  483. package/src/presentation/base-presentation-collection.js +1 -1
  484. package/src/presentation/base-presentation-model.js +88 -3
  485. package/src/presentation/base-presentation-model.spec.js +80 -3
  486. package/src/presentation/presentation-deck.js +65 -22
  487. package/src/presentation/presentation-deck.spec.js +55 -2
  488. package/src/presentation/presentation-decks.js +1 -1
  489. package/src/presentation/presentation-section.js +91 -31
  490. package/src/presentation/presentation-section.spec.js +142 -10
  491. package/src/presentation/presentation-sections.js +1 -1
  492. package/src/presentation/presentation-slide.js +69 -23
  493. package/src/presentation/presentation-slide.spec.js +105 -9
  494. package/src/presentation/presentation-slides.js +1 -1
  495. package/src/presentation/presentation-subslide.js +5 -5
  496. package/src/presentation/presentation-subslide.spec.js +3 -3
  497. package/src/presentation/presentation-subslides.js +1 -1
  498. package/src/presentation/presentation.js +27 -8
  499. package/src/selections.js +71 -0
  500. package/src/sync.js +1 -1
  501. package/src/utils.js +31 -8
  502. package/src/utils.spec.js +4 -4
@@ -41,6 +41,7 @@ export const PresentationSlide = BasePresentationModel.extend(
41
41
  * @property {number} selectionID
42
42
  * @property {bool} editable
43
43
  * @property {array} tags
44
+ * @property {string[]} cmsvalkey_set
44
45
  */
45
46
  props: {
46
47
  id: "number",
@@ -77,6 +78,7 @@ export const PresentationSlide = BasePresentationModel.extend(
77
78
  selectionID: "number",
78
79
  editable: "boolean",
79
80
  tags: "array",
81
+ cmsvalkey_set: "array",
80
82
  },
81
83
 
82
84
  /**
@@ -84,6 +86,7 @@ export const PresentationSlide = BasePresentationModel.extend(
84
86
  */
85
87
  children: {
86
88
  adjunct: "AdjunctModel",
89
+ template: "TemplateModel",
87
90
  },
88
91
 
89
92
  /**
@@ -103,7 +106,7 @@ export const PresentationSlide = BasePresentationModel.extend(
103
106
  }
104
107
  return this._url;
105
108
  },
106
- }
109
+ },
107
110
  );
108
111
 
109
112
  /**
@@ -116,6 +119,7 @@ export const PresentationSlide = BasePresentationModel.extend(
116
119
  PresentationSlide.createFromSlide = function (slideModel, options = {}) {
117
120
  _.defaults(options, {
118
121
  adjunctSubSlides: new collections.AdjunctSubSlideCollection(),
122
+ screenshots: new collections.DeckVersionScreenshotCollection(),
119
123
  rootAssetPath: null,
120
124
  selections: null,
121
125
  choicelist: null,
@@ -124,6 +128,8 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
124
128
  },
125
129
  });
126
130
 
131
+ options.screenshots = PresentationSlide.screenshotsToMap(options.screenshots);
132
+
127
133
  let html;
128
134
  let css;
129
135
 
@@ -131,7 +137,7 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
131
137
 
132
138
  if (options.rootAssetPath) {
133
139
  const baseRoot = getAssetRoot(
134
- slideModel.section.deckversion.index_asset.url()
140
+ slideModel.section.deckversion.index_asset.url(),
135
141
  );
136
142
  const slidePath = assetRoot.slice(baseRoot.length);
137
143
  html = `${options.rootAssetPath}${slidePath}index.html`;
@@ -143,7 +149,7 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
143
149
 
144
150
  const config = PresentationSlide.getVisibilityAndSequence(
145
151
  slideModel,
146
- options
152
+ options,
147
153
  );
148
154
 
149
155
  const tags = PresentationSlide.getTags(slideModel, options);
@@ -154,7 +160,7 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
154
160
  html,
155
161
  css,
156
162
  key: slideModel.key,
157
- thumbnail: slideModel.image_256,
163
+ thumbnail: PresentationSlide.getThumbnail(slideModel, options.screenshots),
158
164
  custom: false,
159
165
  editable: tags.indexOf("editable") > -1,
160
166
  title: slideModel.title,
@@ -164,12 +170,13 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
164
170
  sequence: config.sequence,
165
171
  visible: config.visible,
166
172
  selectionID: config.selectionID,
173
+ cmsvalkey_set: slideModel.cmsvalkey_set,
167
174
  });
168
175
 
169
176
  slide.subslides.add(
170
177
  slideModel.subslide_set.map((model) => {
171
178
  return PresentationSubSlide.createFromSubSlide(model, options);
172
- })
179
+ }),
173
180
  );
174
181
 
175
182
  const adjunctSubslides = options.adjunctSubSlides.filter((model) => {
@@ -202,7 +209,7 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
202
209
  ...options,
203
210
  id,
204
211
  });
205
- })
212
+ }),
206
213
  );
207
214
 
208
215
  return slide;
@@ -219,7 +226,7 @@ PresentationSlide.createFromSlide = function (slideModel, options = {}) {
219
226
  PresentationSlide.createFromAdjunctSlide = function (
220
227
  adjunctSlideModel,
221
228
  section = null,
222
- options = {}
229
+ options = {},
223
230
  ) {
224
231
  _.defaults(options, {
225
232
  id: null,
@@ -229,8 +236,11 @@ PresentationSlide.createFromAdjunctSlide = function (
229
236
  getUniqueAdjunctID: () => {
230
237
  return parseInt(_.uniqueId(), 10);
231
238
  },
239
+ screenshots: new collections.DeckVersionScreenshotCollection(),
232
240
  });
233
241
 
242
+ options.screenshots = PresentationSlide.screenshotsToMap(options.screenshots);
243
+
234
244
  const keyID =
235
245
  adjunctSlideModel.id ||
236
246
  (adjunctSlideModel.creator_autoadjunct
@@ -248,18 +258,18 @@ PresentationSlide.createFromAdjunctSlide = function (
248
258
 
249
259
  const config = PresentationSlide.getVisibilityAndSequence(
250
260
  adjunctSlideModel,
251
- options
261
+ options,
252
262
  );
253
263
 
254
264
  const tags = PresentationSlide.getTags(adjunctSlideModel, options);
255
265
 
266
+ const autoAdjunctID = adjunctSlideModel.creator_autoadjunct?.id || null;
267
+
256
268
  const slide = new PresentationSlide({
257
269
  id: options.id || options.getUniqueAdjunctID(),
258
- adjunct: adjunctSlideModel.adjunct ? adjunctSlideModel.adjunct.url() : null,
270
+ adjunct: adjunctSlideModel.adjunct,
259
271
  adjunctID: adjunctSlideModel.id,
260
- autoAdjunctID: adjunctSlideModel.creator_autoadjunct
261
- ? adjunctSlideModel.creator_autoadjunct.id
262
- : null,
272
+ autoAdjunctID,
263
273
  key,
264
274
  thumbnail: adjunctSlideModel.image_256,
265
275
  createdByAutoAdjunct: adjunctSlideModel.created_by_autoadjunct,
@@ -272,12 +282,15 @@ PresentationSlide.createFromAdjunctSlide = function (
272
282
  index: config.sequence,
273
283
  sequence: config.sequence,
274
284
  visible: config.visible,
285
+ cmsvalkey_set: adjunctSlideModel.template?.cmsvalkey_set || [],
286
+ templateID: adjunctSlideModel.template?.id || null,
287
+ template: adjunctSlideModel.template || null,
275
288
  });
276
289
 
277
290
  if (adjunctSlideModel.template) {
278
291
  if (!adjunctSlideModel.template.index_asset) {
279
292
  throw new Error(
280
- "Template missing index_asset. Do you have the whole template available?"
293
+ "Template missing index_asset. Do you have the whole template available?",
281
294
  );
282
295
  }
283
296
  const origPath = adjunctSlideModel.template.index_asset.orig_path;
@@ -289,14 +302,24 @@ PresentationSlide.createFromAdjunctSlide = function (
289
302
  css = `${options.rootAssetPath}${origPath}/slide.css`;
290
303
  } else {
291
304
  const assetRoot = getAssetRoot(
292
- adjunctSlideModel.template.index_asset.url()
305
+ adjunctSlideModel.template.index_asset.url(),
293
306
  );
294
307
  html = `${assetRoot}index.html`;
295
308
  css = `${assetRoot}slide.css`;
296
309
  }
297
310
  slide.html = html;
298
311
  slide.css = css;
299
- slide.thumbnail = adjunctSlideModel.template.image_256;
312
+
313
+ if (adjunctSlideModel.creator_autoadjunct) {
314
+ slide.thumbnail = PresentationSlide.getThumbnail(
315
+ adjunctSlideModel.creator_autoadjunct,
316
+ options.screenshots,
317
+ );
318
+ }
319
+
320
+ if (!slide.thumbnail) {
321
+ slide.thumbnail = adjunctSlideModel.template.image_256;
322
+ }
300
323
  } else {
301
324
  slide.image = adjunctSlideModel.image_original;
302
325
  }
@@ -308,7 +331,7 @@ PresentationSlide.createFromManifestJSON = function (
308
331
  manifestJSON,
309
332
  key,
310
333
  sectionID,
311
- index
334
+ index,
312
335
  ) {
313
336
  const [, slideKey] = key.split("/");
314
337
 
@@ -326,6 +349,7 @@ PresentationSlide.createFromManifestJSON = function (
326
349
  visible: true,
327
350
  section: sectionID,
328
351
  tags: manifestJSON.tags[key] || null,
352
+ cmsvalkey_set: [],
329
353
  });
330
354
 
331
355
  return slide;
@@ -334,7 +358,7 @@ PresentationSlide.createFromManifestJSON = function (
334
358
  PresentationSlide.createFromManifestImpostor = function (
335
359
  slide,
336
360
  index,
337
- sectionID
361
+ sectionID,
338
362
  ) {
339
363
  const presentationSlide = new PresentationSlide({
340
364
  id: parseInt(_.uniqueId(), 10),
@@ -354,7 +378,7 @@ PresentationSlide.createFromTemplate = function (
354
378
  template,
355
379
  index,
356
380
  sectionID,
357
- minID = 0
381
+ minID = 0,
358
382
  ) {
359
383
  const presentationSlide = new PresentationSlide({
360
384
  ...template,
@@ -368,11 +392,12 @@ PresentationSlide.createFromTemplate = function (
368
392
  autoAdjunctID: Number(_.uniqueId()),
369
393
  index,
370
394
  createdByTemplate: true,
395
+ cmsvalkey_set: [],
371
396
  });
372
397
  return presentationSlide;
373
398
  };
374
399
 
375
- PresentationSlide.createFromAutoAdjunct = function (model, opts) {
400
+ PresentationSlide.createFromAutoAdjunct = function (model, opts = {}) {
376
401
  const requiredKeys = ["index", "deckversionID"];
377
402
  for (const key of requiredKeys) {
378
403
  if (typeof opts[key] === "undefined") {
@@ -387,15 +412,18 @@ PresentationSlide.createFromAutoAdjunct = function (model, opts) {
387
412
  deckversionID: -1,
388
413
  sequence: opts.index,
389
414
  impostor: false,
415
+ screenshots: new collections.DeckVersionScreenshotCollection(),
390
416
  });
391
417
 
418
+ options.screenshots = PresentationSlide.screenshotsToMap(options.screenshots);
419
+
392
420
  const tags = PresentationSlide.getTags(
393
421
  {
394
422
  isAutoAdjunct: true,
395
423
  key: model.key,
396
424
  tags: model.tags,
397
425
  },
398
- options
426
+ options,
399
427
  );
400
428
 
401
429
  const autoAdjunct = new AutoAdjunctModel(model);
@@ -405,14 +433,15 @@ PresentationSlide.createFromAutoAdjunct = function (model, opts) {
405
433
  adjunctID: autoAdjunct.id,
406
434
  autoAdjunctID: autoAdjunct.id,
407
435
  createdByTemplate: autoAdjunct.template !== null,
408
- templateID: autoAdjunct.template ? autoAdjunct.template.id : null,
436
+ templateID: autoAdjunct.template?.id || null,
437
+ template: autoAdjunct.template || null,
409
438
  html: "",
410
439
  css: "",
411
440
  sequence: options.sequence,
412
441
  index: options.index,
413
442
  key: autoAdjunct.key,
414
443
  createdByAutoAdjunct: false,
415
- thumbnail: autoAdjunct.image_256,
444
+ thumbnail: PresentationSlide.getThumbnail(autoAdjunct, options.screenshots),
416
445
  temporary: true,
417
446
  title: autoAdjunct.name,
418
447
  visible: options.visible,
@@ -420,13 +449,30 @@ PresentationSlide.createFromAutoAdjunct = function (model, opts) {
420
449
  deckversion: options.deckversionID,
421
450
  impostor: options.impostor,
422
451
  tags,
452
+ cmsvalkey_set: autoAdjunct.cmsvalkey_set,
423
453
  });
424
454
 
425
455
  if (autoAdjunct.template) {
426
- autoAdjunctSlide.thumbnail = autoAdjunct.template.image_256;
456
+ // If we've found a new screenshot for it, we don't want to override it here
457
+ if (!autoAdjunctSlide.thumbnail) {
458
+ autoAdjunctSlide.thumbnail = autoAdjunct.template.image_256;
459
+ }
427
460
  autoAdjunctSlide.createdByTemplate = true;
428
461
  autoAdjunctSlide.templateID = autoAdjunct.template.id;
429
462
  autoAdjunctSlide.html = autoAdjunct.template.index_asset.url();
463
+ //
464
+ // We've had some instances where the caching was returning the wrong data, and the
465
+ // app was unable to recover when an autoadjunct was missing keys. So, check for missing
466
+ // keys.
467
+ const missingKeys = autoAdjunct.template.cmsvalkey_set
468
+ .filter((t) => {
469
+ return !autoAdjunctSlide.cmsvalkey_set.find((k) => k.startsWith(t));
470
+ })
471
+ .map((t) => {
472
+ return `${t}-autoadjunct-${autoAdjunct.id}`;
473
+ });
474
+
475
+ autoAdjunctSlide.cmsvalkey_set.push(...missingKeys);
430
476
  } else {
431
477
  autoAdjunctSlide.image = autoAdjunct.image_original;
432
478
  }
@@ -75,10 +75,47 @@ describe("#createFromSlide", () => {
75
75
 
76
76
  expect(presentationSlide.tags).toEqual(["slide-tag"]);
77
77
  });
78
+
79
+ describe("Screenshots", () => {
80
+ it("should use the default image from the model if no screenshot found", () => {
81
+ const slide = new SlideModel(getSlideJSON());
82
+ const presentationSlide = PresentationSlide.createFromSlide(slide);
83
+ expect(presentationSlide.thumbnail).toEqual(null);
84
+ });
85
+
86
+ it("should use the screenshot model if it matches", () => {
87
+ const slide = new SlideModel(getSlideJSON());
88
+ const options = {
89
+ screenshots: {
90
+ "/api/slides/23219/": "test-screenshot.png",
91
+ },
92
+ };
93
+
94
+ const presentationSlide = PresentationSlide.createFromSlide(
95
+ slide,
96
+ options,
97
+ );
98
+ expect(presentationSlide.thumbnail).toEqual("test-screenshot.png");
99
+ });
100
+ });
78
101
  });
79
102
 
80
103
  describe("#createFromAdjunctSlide", () => {
81
- const getAdjunctSlideJSON = () => {
104
+ const getAdjunctSlideJSON = (includeTemplate = false) => {
105
+ const template = {
106
+ id: 1,
107
+ image_256: "template.png",
108
+ index_asset: {
109
+ created_date: "2021-07-22T04:57:32.977770Z",
110
+ data: "index.html",
111
+ id: 148204,
112
+ modified_date: "2021-07-22T04:57:32.977790Z",
113
+ orig_path: "templates/test-template/foo",
114
+ pack: "https://staging-test.salespreso.com/api/packs/410/",
115
+ url: "https://staging-test-cdn.salespreso.com/media/pack/410/assets/sections/test-deck/slides/slide-key/index.html",
116
+ },
117
+ };
118
+
82
119
  return {
83
120
  adjunct: "https://staging-test.salespreso.com/api/adjuncts/7457/",
84
121
  appointment: "https://staging-test.salespreso.com/api/appointments/2426/",
@@ -105,7 +142,7 @@ describe("#createFromAdjunctSlide", () => {
105
142
  section: "https://staging-test.salespreso.com/api/sections/1755/",
106
143
  sequence: 3,
107
144
  tags: [],
108
- template: null,
145
+ template: includeTemplate ? template : null,
109
146
  title: "Six",
110
147
  url: "https://staging-test.salespreso.com/api/adjunctslides/10529/",
111
148
  };
@@ -117,9 +154,6 @@ describe("#createFromAdjunctSlide", () => {
117
154
  PresentationSlide.createFromAdjunctSlide(adjunctSlide);
118
155
 
119
156
  const expected = {
120
- adjunct: {
121
- url: "https://staging-test.salespreso.com/api/adjuncts/7457/",
122
- },
123
157
  adjunctID: 10529,
124
158
  autoAdjunctID: 541,
125
159
  createdByAutoAdjunct: true,
@@ -141,9 +175,12 @@ describe("#createFromAdjunctSlide", () => {
141
175
  title: "Six",
142
176
  url: "/api/adjunctslides/10529/",
143
177
  visible: true,
178
+ cmsvalkey_set: [],
144
179
  };
145
180
 
146
- expect(presentationSlide.toJSON()).toEqual(expected);
181
+ expect(presentationSlide.toJSON()).toEqual(
182
+ expect.objectContaining(expected),
183
+ );
147
184
  });
148
185
 
149
186
  it("should use deckTags when available", async () => {
@@ -155,11 +192,39 @@ describe("#createFromAdjunctSlide", () => {
155
192
  const presentationSlide = PresentationSlide.createFromAdjunctSlide(
156
193
  adjunctSlide,
157
194
  null,
158
- options
195
+ options,
159
196
  );
160
197
 
161
198
  expect(presentationSlide.tags).toEqual(["adjunctslide-tag"]);
162
199
  });
200
+
201
+ describe("Screenshots", () => {
202
+ it("should use the default image from the model if no screenshot found", () => {
203
+ const data = getAdjunctSlideJSON(true);
204
+ const adjunctSlide = new AdjunctSlideModel(data);
205
+ const presentationSlide =
206
+ PresentationSlide.createFromAdjunctSlide(adjunctSlide);
207
+
208
+ expect(presentationSlide.thumbnail).toEqual(data.template.image_256);
209
+ });
210
+
211
+ it("should use the screenshot model if it matches", () => {
212
+ const adjunctSlide = new AdjunctSlideModel(getAdjunctSlideJSON(true));
213
+
214
+ const options = {
215
+ screenshots: {
216
+ "/api/autoadjuncts/541/": "test-screenshot.png",
217
+ },
218
+ };
219
+
220
+ const presentationSlide = PresentationSlide.createFromAdjunctSlide(
221
+ adjunctSlide,
222
+ null,
223
+ options,
224
+ );
225
+ expect(presentationSlide.thumbnail).toEqual("test-screenshot.png");
226
+ });
227
+ });
163
228
  });
164
229
 
165
230
  describe("#createFromAutoAdjunct", () => {
@@ -201,7 +266,7 @@ describe("#createFromAutoAdjunct", () => {
201
266
 
202
267
  const presentationSlide = PresentationSlide.createFromAutoAdjunct(
203
268
  autoAdjunct,
204
- options
269
+ options,
205
270
  );
206
271
 
207
272
  const expected = {
@@ -219,6 +284,7 @@ describe("#createFromAutoAdjunct", () => {
219
284
  sequence: 3,
220
285
  subslides: [],
221
286
  tags: [],
287
+ template: null,
222
288
  templateID: null,
223
289
  temporary: true,
224
290
  thumbnail:
@@ -243,8 +309,38 @@ describe("#createFromAutoAdjunct", () => {
243
309
 
244
310
  const presentationSlide = PresentationSlide.createFromAutoAdjunct(
245
311
  autoAdjunct,
246
- options
312
+ options,
247
313
  );
248
314
  expect(presentationSlide.tags).toEqual(["autoadjunct-tags"]);
249
315
  });
316
+
317
+ describe("Screenshots", () => {
318
+ it("should use the default image from the model if no screenshot found", () => {
319
+ const options = { index: 3, deckversionID: 12 };
320
+ const data = getAutoAdjunctJSON();
321
+ const autoAdjunct = new AutoAdjunctModel(data);
322
+ const presentationSlide = PresentationSlide.createFromAutoAdjunct(
323
+ autoAdjunct,
324
+ options,
325
+ );
326
+ expect(presentationSlide.thumbnail).toEqual(data.image_256);
327
+ });
328
+
329
+ it("should use the screenshot model if it matches", () => {
330
+ const options = {
331
+ index: 3,
332
+ deckversionID: 12,
333
+ screenshots: {
334
+ "/api/autoadjuncts/525/": "test-screenshot.png",
335
+ },
336
+ };
337
+ const data = getAutoAdjunctJSON();
338
+ const autoAdjunct = new AutoAdjunctModel(data);
339
+ const presentationSlide = PresentationSlide.createFromAutoAdjunct(
340
+ autoAdjunct,
341
+ options,
342
+ );
343
+ expect(presentationSlide.thumbnail).toEqual("test-screenshot.png");
344
+ });
345
+ });
250
346
  });
@@ -13,7 +13,7 @@ export const PresentationSlideCollection = BasePresentationCollection.extend(
13
13
  /** @lends presentation.PresentationSlideCollection# */ {
14
14
  comparator: "sequence",
15
15
  model: "PresentationSlide",
16
- }
16
+ },
17
17
  );
18
18
 
19
19
  register("PresentationSlideCollection", PresentationSlideCollection);
@@ -62,7 +62,7 @@ export const PresentationSubSlide = BasePresentationModel.extend(
62
62
 
63
63
  return this._url;
64
64
  },
65
- }
65
+ },
66
66
  );
67
67
 
68
68
  /**
@@ -74,7 +74,7 @@ export const PresentationSubSlide = BasePresentationModel.extend(
74
74
  */
75
75
  PresentationSubSlide.createFromSubSlide = function (
76
76
  subSlideModel,
77
- options = {}
77
+ options = {},
78
78
  ) {
79
79
  _.defaults(options, {
80
80
  selections: null,
@@ -83,7 +83,7 @@ PresentationSubSlide.createFromSubSlide = function (
83
83
 
84
84
  const config = PresentationSubSlide.getVisibilityAndSequence(
85
85
  subSlideModel,
86
- options
86
+ options,
87
87
  );
88
88
 
89
89
  const tags = PresentationSubSlide.getTags(subSlideModel, options);
@@ -116,7 +116,7 @@ PresentationSubSlide.createFromSubSlide = function (
116
116
  PresentationSubSlide.createFromAdjunctSubSlide = function (
117
117
  adjunctSubSlideModel,
118
118
  slideModel,
119
- options = {}
119
+ options = {},
120
120
  ) {
121
121
  _.defaults(options, {
122
122
  id: null,
@@ -132,7 +132,7 @@ PresentationSubSlide.createFromAdjunctSubSlide = function (
132
132
 
133
133
  const config = PresentationSubSlide.getVisibilityAndSequence(
134
134
  adjunctSubSlideModel,
135
- options
135
+ options,
136
136
  );
137
137
 
138
138
  const tags = PresentationSubSlide.getTags(adjunctSubSlideModel, options);
@@ -60,7 +60,7 @@ describe("#createFromSubSlide", () => {
60
60
  };
61
61
  const presentationSub = PresentationSubSlide.createFromSubSlide(
62
62
  subslide,
63
- options
63
+ options,
64
64
  );
65
65
 
66
66
  expect(presentationSub.tags).toEqual(["subslide-tag"]);
@@ -98,7 +98,7 @@ describe("#createFromAdjunctSubSlide", () => {
98
98
  const presentationSub = PresentationSubSlide.createFromAdjunctSubSlide(
99
99
  subslide,
100
100
  { id: 58 },
101
- { id: 23 }
101
+ { id: 23 },
102
102
  );
103
103
 
104
104
  // The adjunct subslide model doesn't have an image prop or a tags prop,
@@ -136,7 +136,7 @@ describe("#createFromAdjunctSubSlide", () => {
136
136
  const presentationSub = PresentationSubSlide.createFromAdjunctSubSlide(
137
137
  subslide,
138
138
  { id: 58 },
139
- options
139
+ options,
140
140
  );
141
141
 
142
142
  expect(presentationSub.tags).toEqual(["adjunctsubslide-tag"]);
@@ -13,7 +13,7 @@ export const PresentationSubSlideCollection = BasePresentationCollection.extend(
13
13
  /** @lends presentation.PresentationSubSlideCollection# */ {
14
14
  comparator: "sequence",
15
15
  model: "PresentationSubSlide",
16
- }
16
+ },
17
17
  );
18
18
 
19
19
  register("PresentationSubSlideCollection", PresentationSubSlideCollection);
@@ -2,6 +2,7 @@ import "./presentation-decks.js";
2
2
 
3
3
  import { DeckVersionModel, ManifestJSONModel } from "../models.js";
4
4
 
5
+ import { AutoAdjunctCollection } from "../collections/auto-adjuncts.js";
5
6
  import { BasePresentationModel } from "./base-presentation-model.js";
6
7
  import { PresentationDeck } from "./presentation-deck.js";
7
8
  import Promise from "bluebird";
@@ -17,9 +18,10 @@ export const Presentation = BasePresentationModel.extend({
17
18
 
18
19
  Presentation.createFromDeckversion = function (deckversionURL, options) {
19
20
  const deckversion = new DeckVersionModel(deckversionURL);
20
-
21
21
  const opts = _.defaults(options, {
22
22
  includeTemplates: false,
23
+ choicelist: null,
24
+ autoAdjuncts: new AutoAdjunctCollection(),
23
25
  });
24
26
 
25
27
  return deckversion
@@ -30,6 +32,21 @@ Presentation.createFromDeckversion = function (deckversionURL, options) {
30
32
  deckversion.deck.fetch(),
31
33
  ]);
32
34
  })
35
+ .then(async () => {
36
+ const templates = [...deckversion.template_set.models];
37
+
38
+ for (const auto of opts.autoAdjuncts.models) {
39
+ const dvTemplate = templates.find(
40
+ (t) => t.url() === auto.template.url(),
41
+ );
42
+ if (dvTemplate) {
43
+ auto.template = dvTemplate;
44
+ } else {
45
+ await auto.template.fetch();
46
+ templates.push(auto.template);
47
+ }
48
+ }
49
+ })
33
50
  .then(() => {
34
51
  return deckversion.deck.tags.fetch();
35
52
  })
@@ -41,16 +58,17 @@ Presentation.createFromDeckversion = function (deckversionURL, options) {
41
58
 
42
59
  const presentation = new Presentation();
43
60
 
44
- const createOpts = {
45
- deckTags,
46
- };
61
+ const { includeTemplates, ...otherOpts } = opts;
47
62
 
48
- if (opts.includeTemplates) {
49
- createOpts.templates = deckversion.template_set.toJSON();
63
+ if (includeTemplates) {
64
+ otherOpts.templates = deckversion.template_set.toJSON();
50
65
  }
51
66
 
52
67
  presentation.decks.add([
53
- PresentationDeck.createFromDeckVersion(deckversion, createOpts),
68
+ PresentationDeck.createFromDeckVersion(deckversion, {
69
+ ...otherOpts,
70
+ deckTags,
71
+ }),
54
72
  ]);
55
73
 
56
74
  return presentation;
@@ -63,7 +81,8 @@ Presentation.createFromDeckversion = function (deckversionURL, options) {
63
81
 
64
82
  Presentation.createFromManifestJSON = function (manifestJSON, url) {
65
83
  const manifestModel = new ManifestJSONModel(manifestJSON.toJSON());
66
- // Let's use the model to transport the manifest url.
84
+
85
+ // Let's use the model to transport the base url for the deck assets
67
86
  manifestModel._url = url;
68
87
 
69
88
  const deck = PresentationDeck.createFromManifestJSON(manifestModel);