@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
@@ -2,6 +2,7 @@ import "./appointment.js";
2
2
 
3
3
  import { BaseModel } from "./base.js";
4
4
  import { register } from "../state-register.js";
5
+ import { sanitizeBase64 } from "../utils.js";
5
6
 
6
7
  /**
7
8
  * @constructor
@@ -19,6 +20,7 @@ export const SnapshotModel = BaseModel.extend(
19
20
  props: {
20
21
  context: "object",
21
22
  creation_status: "string",
23
+ force_requires_capture: "boolean",
22
24
  },
23
25
 
24
26
  /**
@@ -30,17 +32,24 @@ export const SnapshotModel = BaseModel.extend(
30
32
 
31
33
  toServer() {
32
34
  const data = {
33
- context: JSON.stringify(this.context),
35
+ context: JSON.stringify(
36
+ // If this is a base64 string, and it's sufficiently long enough that it'll
37
+ // cause issues if we save it, let's just remove it. Better that it can save.
38
+ sanitizeBase64(this.context, (obj) => obj.length > 50_000),
39
+ ),
34
40
  appointment: this._retrieveURL(this.appointment),
35
41
  };
36
42
 
43
+ if (typeof this.force_requires_capture !== "undefined") {
44
+ data.force_requires_capture = this.force_requires_capture;
45
+ }
37
46
  if (this.id) {
38
47
  data.id = this.id;
39
48
  }
40
49
 
41
50
  return data;
42
51
  },
43
- }
52
+ },
44
53
  );
45
54
 
46
55
  register("SnapshotModel", SnapshotModel);
@@ -0,0 +1,31 @@
1
+ import { G } from "sp-test/api";
2
+
3
+ it("should remove large base64 strings from context when saving", async () => {
4
+ const SnapshotModel = G("SnapshotModel");
5
+ const smallBase64 = "data:image/gif;base64,abcdefghhikl";
6
+ const largeBase64 = smallBase64 + new Array(50_000).fill("a").join("");
7
+
8
+ const snapshot = new SnapshotModel({
9
+ context: {
10
+ number: 1,
11
+ nested: {
12
+ skip: null,
13
+ normal: "hello",
14
+ small: smallBase64,
15
+ large: largeBase64,
16
+ arr: [smallBase64, largeBase64, 1, "foo"],
17
+ },
18
+ },
19
+ });
20
+
21
+ expect(JSON.parse(snapshot.toServer().context)).toEqual({
22
+ number: 1,
23
+ nested: {
24
+ skip: null,
25
+ normal: "hello",
26
+ small: smallBase64, // Small ones are ok
27
+ large: "",
28
+ arr: [smallBase64, "", 1, "foo"],
29
+ },
30
+ });
31
+ });
@@ -56,7 +56,7 @@ export const SubSlideModel = BaseModel.extend(
56
56
  index_asset: "AssetModel",
57
57
  slide: "SlideModel",
58
58
  },
59
- }
59
+ },
60
60
  );
61
61
 
62
62
  register("SubSlideModel", SubSlideModel);
@@ -33,7 +33,7 @@ export const SupportTicketModel = BaseModel.extend(
33
33
  user: "UserModel",
34
34
  resolved_by: "UserModel",
35
35
  },
36
- }
36
+ },
37
37
  );
38
38
 
39
39
  register("SupportTicketModel", SupportTicketModel);
package/src/models/tag.js CHANGED
@@ -36,7 +36,7 @@ export const TagModel = BaseModel.extend(
36
36
  team: "TeamModel",
37
37
  deck: "DeckModel",
38
38
  },
39
- }
39
+ },
40
40
  );
41
41
 
42
42
  register("TagModel", TagModel);
@@ -1,3 +1,5 @@
1
+ import "../collections/decks.js";
2
+ import "../collections/users.js";
1
3
  import "./user.js";
2
4
 
3
5
  import { BaseModel } from "./base.js";
@@ -23,6 +25,7 @@ export const TeamModel = BaseModel.extend(
23
25
  name: "string",
24
26
  profile: "object",
25
27
  has_autoadjuncts: "boolean",
28
+ has_cmsvals: "boolean",
26
29
  theme_enabled: "boolean",
27
30
  is_selectable: "boolean",
28
31
  brand_colour: "string",
@@ -40,13 +43,21 @@ export const TeamModel = BaseModel.extend(
40
43
 
41
44
  /**
42
45
  * @property {collections.UserCollection} user_set
43
- * @property {collections.PresentationDeckCollection} deck_set
46
+ * @property {collections.DeckCollection} deck_set
44
47
  */
45
48
  collections: {
46
49
  user_set: "UserCollection",
47
- deck_set: "PresentationDeckCollection",
50
+ deck_set: "DeckCollection",
48
51
  },
49
- }
52
+ derived: {
53
+ hasCustomContent: {
54
+ deps: ["has_autoadjuncts", "has_cmsvals"],
55
+ fn: function () {
56
+ return this.has_autoadjuncts || this.has_cmsvals;
57
+ },
58
+ },
59
+ },
60
+ },
50
61
  );
51
62
 
52
63
  register("TeamModel", TeamModel);
@@ -1,7 +1,9 @@
1
1
  import "./deck-version.js";
2
2
  import "./asset.js";
3
3
 
4
+ import { Auth } from "../auth.js";
4
5
  import { BaseModel } from "./base.js";
6
+ import SuperAgentRequest from "superagent-bluebird-promise";
5
7
  import { register } from "../state-register.js";
6
8
 
7
9
  /**
@@ -18,32 +20,102 @@ export const TemplateModel = BaseModel.extend(
18
20
  * @property {date} modified_date
19
21
  * @property {string} title
20
22
  * @property {string} key
23
+ * @property {scope} scope
21
24
  * @property {number} sequence
22
- * @property {string} image_128
25
+ * @property {object} context
26
+ * @property {string} image_original
23
27
  * @property {string} image_128
24
28
  * @property {string} image_256
25
29
  * @property {string} image_512
30
+ * @property {string[]} cmsvalkey_set
31
+ * @property {boolean} available_in_presos
26
32
  */
27
33
  props: {
28
34
  created_date: "date",
29
35
  modified_date: "date",
30
36
  title: "string",
31
37
  key: "string",
38
+ scope: {
39
+ type: "string",
40
+ default: "global",
41
+ values: ["global", "team", "user"],
42
+ },
32
43
  sequence: "number",
44
+ context: {
45
+ type: "object",
46
+ default: () => {},
47
+ },
48
+ image_original: "string",
33
49
  image_128: "string",
34
50
  image_256: "string",
35
51
  image_512: "string",
52
+ cmsvalkey_set: "array",
53
+ available_in_presos: {
54
+ type: "boolean",
55
+ default: true,
56
+ },
36
57
  },
37
58
 
38
59
  /**
39
60
  * @property {models.AssetModel} index_asset
40
61
  * @property {models.DeckVersionModel} deckversion
62
+ * @property {models.Template} original_template
41
63
  */
42
64
  children: {
43
65
  index_asset: "AssetModel",
44
66
  deckversion: "DeckVersionModel",
67
+ original_template: "TemplateModel",
68
+ },
69
+
70
+ async saveWithImage() {
71
+ const formData = new FormData();
72
+
73
+ if (this.image_original) {
74
+ const image = await SuperAgentRequest.get(
75
+ this.image_original,
76
+ ).responseType("blob");
77
+
78
+ formData.append("image_original", image.body, "image.png");
79
+ }
80
+
81
+ for (const field of ["title", "key", "scope", "sequence"]) {
82
+ if (this[field]) {
83
+ formData.append(field, this[field]);
84
+ }
85
+ }
86
+
87
+ for (const field of ["original_template", "deckversion"]) {
88
+ if (this[field]) {
89
+ formData.append(field, this[field].url());
90
+ }
91
+ }
92
+
93
+ // Set these here, because after the save these will be set to whatever the return value
94
+ // is in the next request.
95
+ const cmsvalkeys = this.cmsvalkey_set;
96
+ const context = this.context;
97
+
98
+ await SuperAgentRequest.post(this.url())
99
+ .send(formData)
100
+ .set(Auth.headers)
101
+ .then((response) => {
102
+ Object.keys(response.body).forEach((key) => {
103
+ this.set(key, response.body[key]);
104
+ });
105
+ return response;
106
+ });
107
+
108
+ // HACK: Can't send an array (or can't figure out how to do it!) to django,
109
+ // so we send it in a seperate patch.
110
+ return await this.save(
111
+ {
112
+ cmsvalkey_set: cmsvalkeys,
113
+ context,
114
+ },
115
+ { patch: true },
116
+ );
45
117
  },
46
- }
118
+ },
47
119
  );
48
120
 
49
121
  register("TemplateModel", TemplateModel);
@@ -11,6 +11,7 @@ import { register } from "../state-register.js";
11
11
  export const TenancyModel = BaseModel.extend(
12
12
  /** @lends models.TenancyModel# */ {
13
13
  modelName: "tenancies",
14
+ detailType: "uuid",
14
15
 
15
16
  /**
16
17
  * @property {string[]} eventtag_set
@@ -31,6 +32,8 @@ export const TenancyModel = BaseModel.extend(
31
32
  logo_background_colour: "string",
32
33
  billing_frequency: "string",
33
34
  is_default: "boolean",
35
+ eula_key: "string",
36
+ eula_url: "string",
34
37
  status_set: {
35
38
  type: "array",
36
39
  default: () => [],
@@ -43,7 +46,7 @@ export const TenancyModel = BaseModel.extend(
43
46
  children: {
44
47
  administrator: "UserModel",
45
48
  },
46
- }
49
+ },
47
50
  );
48
51
 
49
52
  register("TenancyModel", TenancyModel);
@@ -113,7 +113,7 @@ export const TimingLogModel = BaseModel.extend(
113
113
  const user = getShortURL(this.user.url());
114
114
 
115
115
  const url = getShortURL(
116
- this.hostedPreso ? this.hostedPreso.url() : this.appointment.url()
116
+ this.hostedPreso ? this.hostedPreso.url() : this.appointment.url(),
117
117
  );
118
118
  // At this point, the expected output should have a space instead of a T in this
119
119
  // date format.
@@ -308,7 +308,7 @@ export const TimingLogModel = BaseModel.extend(
308
308
  throw e;
309
309
  });
310
310
  },
311
- }
311
+ },
312
312
  );
313
313
 
314
314
  register("TimingLogModel", TimingLogModel);
@@ -35,7 +35,7 @@ describe("TimingLogModel", () => {
35
35
 
36
36
  // Some precision in milliseconds is lost here
37
37
  expect(timingLog.events[0].timestamp).toEqual(
38
- "2016-10-27T00:42:47.044000Z"
38
+ "2016-10-27T00:42:47.044000Z",
39
39
  );
40
40
  expect(timingLog.events[0].path).toEqual("/api/sections/1/");
41
41
  });
@@ -0,0 +1,47 @@
1
+ import "./user.js";
2
+
3
+ import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias models.TokenModel
9
+ * @extends models.BaseModel
10
+ */
11
+ export const TokenModel = BaseModel.extend(
12
+ /** @lends models.TokenModel# */ {
13
+ modelName: "tokens",
14
+
15
+ /**
16
+ * @property {date} created_date
17
+ * @property {boolean} expired
18
+ * @property {date} expires_at
19
+ * @property {string} key
20
+ * @property {number} seconds_to_expiry
21
+ * @property {string} agent
22
+ * @property {string} agent_version
23
+ */
24
+ props: {
25
+ created_date: "date",
26
+ expired: "boolean",
27
+ expires_at: "date",
28
+ key: "string",
29
+ seconds_to_expiry: "number",
30
+ agent: "string",
31
+ agent_version: "string",
32
+ },
33
+
34
+ /**
35
+ * @property {models.UserModel} user
36
+ */
37
+ children: {
38
+ user: "UserModel",
39
+ },
40
+
41
+ url() {
42
+ return `${this.urlRoot()}${this.key}/`;
43
+ },
44
+ },
45
+ );
46
+
47
+ register("TokenModel", TokenModel);
@@ -13,7 +13,7 @@ export const TranscribeSocketModel = BaseModel.extend(
13
13
  props: {
14
14
  presigned_url: "string",
15
15
  },
16
- }
16
+ },
17
17
  );
18
18
 
19
19
  register("TranscribeSocketModel", TranscribeSocketModel);
@@ -53,6 +53,7 @@ export const UserModel = BaseModel.extend(
53
53
  email_signature: "",
54
54
  app_prefs: {},
55
55
  timezone: "",
56
+ eula_key: "",
56
57
  };
57
58
  },
58
59
  },
@@ -134,6 +135,10 @@ export const UserModel = BaseModel.extend(
134
135
  presomanager.isGlobalTemporarySlideManager ||
135
136
  presomanager.isTeamTemporarySlideManager;
136
137
 
138
+ presomanager.isPresoManagerUser =
139
+ presomanager.canModifyTemporarySlides ||
140
+ presomanager.canModifyContent;
141
+
137
142
  presomanager.canModifyContent =
138
143
  this.actions.indexOf("Create Content") > -1 ||
139
144
  this.actions.indexOf("Manage Team Editable Text") > -1;
@@ -157,6 +162,14 @@ export const UserModel = BaseModel.extend(
157
162
  this.actions.indexOf("Allow Teamless Appointments") > -1,
158
163
  canUseClosedCaptions:
159
164
  this.actions.indexOf("Use Closed Captions") > -1,
165
+ canCreateMutedAppointments:
166
+ this.actions.indexOf("Create Muted Appointments") > -1,
167
+ canHandoverPresosOfOthers:
168
+ this.actions.indexOf("Handover Presos of Others") > -1,
169
+ canChooseShareVisAnyone:
170
+ this.actions.indexOf("Choose Share Visibility Anyone") > -1,
171
+ canChooseShareVis2fa:
172
+ this.actions.indexOf("Choose Share Visibility 2FA") > -1,
160
173
  };
161
174
 
162
175
  const customers = {
@@ -183,7 +196,7 @@ export const UserModel = BaseModel.extend(
183
196
  return this.fetch({ url: `${resourceURL}?_=${preventCachingID}` }).then(
184
197
  ({ url }) => {
185
198
  return url;
186
- }
199
+ },
187
200
  );
188
201
  },
189
202
 
@@ -227,7 +240,7 @@ export const UserModel = BaseModel.extend(
227
240
 
228
241
  return data;
229
242
  },
230
- }
243
+ },
231
244
  );
232
245
 
233
246
  register("UserModel", UserModel);
package/src/models.js CHANGED
@@ -15,10 +15,12 @@ export * from "./models/base";
15
15
  export * from "./models/choicelist.js";
16
16
  export * from "./models/cms-val";
17
17
  export * from "./models/contact";
18
+ export * from "./models/contact-phone";
18
19
  export * from "./models/customer";
19
20
  export * from "./models/deck";
20
21
  export * from "./models/deck-tags";
21
22
  export * from "./models/deck-version";
23
+ export * from "./models/deck-version-screenshot";
22
24
  export * from "./models/dispatch";
23
25
  export * from "./models/dispatch-preview";
24
26
  export * from "./models/envs.js";
@@ -60,8 +62,10 @@ export * from "./models/appointment-viewing.js";
60
62
  export * from "./models/appointment-deckversion-tags.js";
61
63
  export * from "./models/appointment-section-tags.js";
62
64
  export * from "./models/appointment-slide-tags.js";
65
+ export * from "./models/appointment-template.js";
63
66
  export * from "./models/appointment-adjunct-tags.js";
64
67
  export * from "./models/team.js";
65
68
  export * from "./models/template.js";
66
69
  export * from "./models/auto-adjunct-key-check.js";
67
70
  export * from "./models/transcribe-socket.js";
71
+ export * from "./models/token.js";
@@ -5,7 +5,8 @@ import "../models/user.js";
5
5
  import "../collections/opportunities.js";
6
6
  import "../collections/contacts.js";
7
7
 
8
- import { AppointmentModel } from "../models.js";
8
+ import { AppointmentModel, TeamModel } from "../models.js";
9
+
9
10
  import { BaseModel } from "../models/base.js";
10
11
  import { PresentationDeck } from "./presentation-deck.js";
11
12
  import { register } from "../state-register.js";
@@ -53,28 +54,35 @@ export const AppointmentPresentation = BaseModel.extend(
53
54
  opportunities: "OpportunityCollection",
54
55
  contacts: "ContactCollection",
55
56
  },
56
- }
57
+ },
57
58
  );
58
59
 
59
60
  const createFromAppointment = function (appointment, options) {
60
61
  const appointmentPresentation = new AppointmentPresentation();
62
+ const team = appointment.team ? new TeamModel(appointment.team).id : null;
61
63
 
62
64
  // Note that we're not passing through tags if appointment.tags is empty.
63
65
  // This is because tags currently aren't available in the telepresenter
64
66
  // bundle and we want to fall back on the model tags for now.
65
67
  appointmentPresentation.presentation.decks.add(
66
68
  appointment.deckversion_set.map((model, index) => {
69
+ const screenshots = PresentationDeck.filterScreenshotsByTeam(
70
+ model.screenshots,
71
+ team,
72
+ );
73
+
67
74
  return PresentationDeck.createFromDeckVersion(model, {
68
75
  adjunctSections: appointment.adjunctSections,
69
76
  adjunctSlides: appointment.adjunctSlides,
70
77
  adjunctSubSlides: appointment.adjunctSubSlides,
71
78
  sectionSelections: appointment.appointmentssection_set,
72
79
  slideSelections: appointment.appointmentsslide_set,
73
- index,
74
80
  appointmentTags: appointment.tags.length ? appointment.tags : null,
81
+ screenshots,
82
+ index,
75
83
  ...options,
76
84
  });
77
- })
85
+ }),
78
86
  );
79
87
 
80
88
  appointmentPresentation.tele = appointment.latest_tele;
@@ -126,7 +134,7 @@ AppointmentPresentation.createFromID = function (id, options = {}) {
126
134
  */
127
135
  AppointmentPresentation.createFromAppointment = function (
128
136
  appointment,
129
- options = {}
137
+ options = {},
130
138
  ) {
131
139
  return createFromAppointment(appointment, options);
132
140
  };
@@ -6,7 +6,7 @@ import { BaseCollection } from "../collections/base.js";
6
6
  * @extends collections.BaseCollection
7
7
  */
8
8
  export const BasePresentationCollection = BaseCollection.extend(
9
- /** @lends presentation.BasePresentationCollection# */ {}
9
+ /** @lends presentation.BasePresentationCollection# */ {},
10
10
  );
11
11
 
12
12
  BasePresentationCollection.canBeEmpty = true;
@@ -1,4 +1,7 @@
1
1
  import { BaseModel } from "../models/base.js";
2
+ import { DeckVersionScreenshotCollection } from "../collections/deck-version-screenshots.js";
3
+ import { TeamModel } from "../models/team.js";
4
+ import _ from "lodash";
2
5
 
3
6
  /**
4
7
  * @constructor
@@ -10,9 +13,92 @@ export const BasePresentationModel = BaseModel.extend(
10
13
  url() {
11
14
  return null;
12
15
  },
13
- }
16
+ },
14
17
  );
15
18
 
19
+ BasePresentationModel.screenshotsToMap = function (screenshots) {
20
+ if (!screenshots?.models) {
21
+ return screenshots;
22
+ }
23
+
24
+ return screenshots.reduce((result, model) => {
25
+ if (result[model.subject]) {
26
+ throw new Error(`
27
+ Found multiple screenshots that could match this subject. If there is a team
28
+ and a global, be sure to remove the screenshot that you don't need.
29
+ `);
30
+ }
31
+ result[model.subject] = model.image_256;
32
+ return result;
33
+ }, {});
34
+ };
35
+
36
+ /**
37
+ * Logic to pick a thumbnail based on either the model itself or from
38
+ * and overriding screenshot if one exists.
39
+ */
40
+ BasePresentationModel.getThumbnail = function (model, screenshots) {
41
+ if (screenshots?.models) {
42
+ throw new Error("Expected map file");
43
+ }
44
+
45
+ if (!model) {
46
+ return null;
47
+ }
48
+
49
+ return screenshots[model.url()] || model.image_256;
50
+ };
51
+
52
+ /**
53
+ * Takes a list of screenshots and filters it to only be a list used by a single team
54
+ * (or company wide).
55
+ *
56
+ * The logic should be like this:
57
+ *
58
+ * * If the team is null, we just return all global screenshots (team = null)
59
+ * * If we select a team, we take those global screenshots and replace any that have a
60
+ * team specific version of that screenshot. If none is found, the team will want to
61
+ * see the same global version. Obviously only one team's screenshots should be available.
62
+ */
63
+ BasePresentationModel.filterScreenshotsByTeam = function (
64
+ _screenshots,
65
+ _team = null,
66
+ ) {
67
+ const screenshots = new DeckVersionScreenshotCollection(_screenshots);
68
+ const team = _team ? new TeamModel(_team) : null;
69
+
70
+ const globalScreenshots = screenshots
71
+ .filter((screen) => screen.team === null)
72
+ .map((screen) => screen.toJSON());
73
+
74
+ const result = globalScreenshots;
75
+
76
+ if (team) {
77
+ const teamScreenshots = screenshots
78
+ .filter((screen) => screen.team && screen.team.url() === team.url())
79
+ .map((screen) => ({ ...screen.toJSON(), team: screen.team.url() }));
80
+
81
+ for (const teamScreen of teamScreenshots) {
82
+ const existingGlobalIndex = _.findIndex(result, {
83
+ subject: teamScreen.subject,
84
+ });
85
+
86
+ if (existingGlobalIndex === -1) {
87
+ // If there isn't an existing global version, just add the team
88
+ // screenshot to the list
89
+ result.push(teamScreen);
90
+ } else {
91
+ // Otherwise we should use the team version instead of the global version
92
+ result[existingGlobalIndex] = teamScreen;
93
+ }
94
+ }
95
+ }
96
+
97
+ // Try to return it in the same order every time
98
+ const ordered = _.orderBy(result, ["team", "subject"], ["desc", "asc"]);
99
+ return new DeckVersionScreenshotCollection(ordered);
100
+ };
101
+
16
102
  /**
17
103
  * Standard function for retrieving the visibility and sequence of a model
18
104
  * from a choicelist or section & slide selections. If a choicelist is
@@ -20,10 +106,9 @@ export const BasePresentationModel = BaseModel.extend(
20
106
  * Adjuncts are included in choicelists but not in selections so we use the
21
107
  * model's state to determine sequence & vis when selections are used.
22
108
  */
23
-
24
109
  BasePresentationModel.getVisibilityAndSequence = function (
25
110
  model,
26
- options = {}
111
+ options = {},
27
112
  ) {
28
113
  const { choicelist = null, selections = null } = options;
29
114
  const url = model.url();