@livepreso/api 6.41.0 → 6.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/.eslintrc.js +5 -0
  2. package/.rush/temp/build-cache-tar.log +7 -0
  3. package/.rush/temp/package-deps_test.json +170 -0
  4. package/.rush/temp/shrinkwrap-deps.json +957 -0
  5. package/CHANGELOG.json +53 -0
  6. package/CHANGELOG.md +32 -0
  7. package/api.build.log +4 -0
  8. package/babel.config.js +9 -18
  9. package/cjs/api.js +1 -1
  10. package/cjs/api.js.map +1 -1
  11. package/cjs/api.spec.js +2 -2
  12. package/cjs/api.spec.js.map +1 -1
  13. package/cjs/auth.js +6 -5
  14. package/cjs/auth.js.map +1 -1
  15. package/cjs/auth.spec.js +25 -23
  16. package/cjs/auth.spec.js.map +1 -1
  17. package/cjs/caching.js +3 -3
  18. package/cjs/collections/activity.js +22 -27
  19. package/cjs/collections/activity.js.map +1 -1
  20. package/cjs/collections/adjunct-sections.js +2 -2
  21. package/cjs/collections/adjunct-sections.js.map +1 -1
  22. package/cjs/collections/adjunct-slides.js +2 -2
  23. package/cjs/collections/adjunct-slides.js.map +1 -1
  24. package/cjs/collections/adjunct-sub-slides.js +2 -2
  25. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  26. package/cjs/collections/appointment-adjunct-tags.js +28 -0
  27. package/cjs/collections/appointment-adjunct-tags.js.map +1 -0
  28. package/cjs/collections/appointment-deckversion-tags.js +28 -0
  29. package/cjs/collections/appointment-deckversion-tags.js.map +1 -0
  30. package/cjs/collections/appointment-duplicates.js +2 -2
  31. package/cjs/collections/appointment-duplicates.js.map +1 -1
  32. package/cjs/collections/appointment-editors.js +2 -2
  33. package/cjs/collections/appointment-editors.js.map +1 -1
  34. package/cjs/collections/appointment-section-tags.js +28 -0
  35. package/cjs/collections/appointment-section-tags.js.map +1 -0
  36. package/cjs/collections/appointment-slide-tags.js +28 -0
  37. package/cjs/collections/appointment-slide-tags.js.map +1 -0
  38. package/cjs/collections/appointment-tags.js +208 -0
  39. package/cjs/collections/appointment-tags.js.map +1 -0
  40. package/cjs/collections/appointments.js +10 -6
  41. package/cjs/collections/appointments.js.map +1 -1
  42. package/cjs/collections/assets.js +2 -2
  43. package/cjs/collections/assets.js.map +1 -1
  44. package/cjs/collections/auto-adjuncts.js +7 -3
  45. package/cjs/collections/auto-adjuncts.js.map +1 -1
  46. package/cjs/collections/base.js +103 -25
  47. package/cjs/collections/base.js.map +1 -1
  48. package/cjs/collections/base.spec.js +231 -123
  49. package/cjs/collections/base.spec.js.map +1 -1
  50. package/cjs/collections/cms-vals.js +2 -2
  51. package/cjs/collections/cms-vals.js.map +1 -1
  52. package/cjs/collections/contacts.js +2 -2
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +2 -2
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +2 -2
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +2 -2
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-versions.js +20 -8
  61. package/cjs/collections/deck-versions.js.map +1 -1
  62. package/cjs/collections/decks.js +2 -2
  63. package/cjs/collections/decks.js.map +1 -1
  64. package/cjs/collections/deleted-assets.js +2 -2
  65. package/cjs/collections/deleted-assets.js.map +1 -1
  66. package/cjs/collections/dispatches.js +4 -4
  67. package/cjs/collections/dispatches.js.map +1 -1
  68. package/cjs/collections/event-objects.js +2 -2
  69. package/cjs/collections/event-objects.js.map +1 -1
  70. package/cjs/collections/events.js +2 -2
  71. package/cjs/collections/events.js.map +1 -1
  72. package/cjs/collections/groups.js +2 -2
  73. package/cjs/collections/groups.js.map +1 -1
  74. package/cjs/collections/images.js +2 -2
  75. package/cjs/collections/images.js.map +1 -1
  76. package/cjs/collections/locations.js +2 -2
  77. package/cjs/collections/locations.js.map +1 -1
  78. package/cjs/collections/opportunities.js +2 -2
  79. package/cjs/collections/opportunities.js.map +1 -1
  80. package/cjs/collections/pack-diffs.js +2 -2
  81. package/cjs/collections/pack-diffs.js.map +1 -1
  82. package/cjs/collections/packs.js +2 -2
  83. package/cjs/collections/packs.js.map +1 -1
  84. package/cjs/collections/presets.js +2 -2
  85. package/cjs/collections/presets.js.map +1 -1
  86. package/cjs/collections/section-selections.js +2 -2
  87. package/cjs/collections/section-selections.js.map +1 -1
  88. package/cjs/collections/sections.js +2 -2
  89. package/cjs/collections/sections.js.map +1 -1
  90. package/cjs/collections/slide-selections.js +2 -2
  91. package/cjs/collections/slide-selections.js.map +1 -1
  92. package/cjs/collections/slides.js +2 -2
  93. package/cjs/collections/slides.js.map +1 -1
  94. package/cjs/collections/snapshots.js +2 -2
  95. package/cjs/collections/snapshots.js.map +1 -1
  96. package/cjs/collections/sub-slides.js +2 -2
  97. package/cjs/collections/sub-slides.js.map +1 -1
  98. package/cjs/collections/tags.js +28 -0
  99. package/cjs/collections/tags.js.map +1 -0
  100. package/cjs/collections/teams.js +2 -2
  101. package/cjs/collections/teams.js.map +1 -1
  102. package/cjs/collections/templates.js +2 -2
  103. package/cjs/collections/templates.js.map +1 -1
  104. package/cjs/collections/uploads.js +2 -2
  105. package/cjs/collections/uploads.js.map +1 -1
  106. package/cjs/collections/users.js +2 -2
  107. package/cjs/collections/users.js.map +1 -1
  108. package/cjs/collections.js +115 -0
  109. package/cjs/collections.js.map +1 -1
  110. package/cjs/index.js +3 -0
  111. package/cjs/index.js.map +1 -1
  112. package/cjs/middleware.js.map +1 -1
  113. package/cjs/middlewares/auth.js +10 -6
  114. package/cjs/middlewares/auth.js.map +1 -1
  115. package/cjs/middlewares/base.js +1 -3
  116. package/cjs/middlewares/base.js.map +1 -1
  117. package/cjs/middlewares/json.js +10 -6
  118. package/cjs/middlewares/json.js.map +1 -1
  119. package/cjs/middlewares/redirect.js +10 -6
  120. package/cjs/middlewares/redirect.js.map +1 -1
  121. package/cjs/models/activity-item.js +6 -2
  122. package/cjs/models/activity-item.js.map +1 -1
  123. package/cjs/models/adjunct-section.js +2 -2
  124. package/cjs/models/adjunct-section.js.map +1 -1
  125. package/cjs/models/adjunct-slide.js +2 -2
  126. package/cjs/models/adjunct-slide.js.map +1 -1
  127. package/cjs/models/adjunct-sub-slide.js +2 -2
  128. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  129. package/cjs/models/adjunct.js +2 -2
  130. package/cjs/models/adjunct.js.map +1 -1
  131. package/cjs/models/api.js.map +1 -1
  132. package/cjs/models/appointment-adjunct-tags.js +52 -0
  133. package/cjs/models/appointment-adjunct-tags.js.map +1 -0
  134. package/cjs/models/appointment-deckversion-tags.js +52 -0
  135. package/cjs/models/appointment-deckversion-tags.js.map +1 -0
  136. package/cjs/models/appointment-duplicate.js +8 -3
  137. package/cjs/models/appointment-duplicate.js.map +1 -1
  138. package/cjs/models/appointment-editor.js +2 -2
  139. package/cjs/models/appointment-editor.js.map +1 -1
  140. package/cjs/models/appointment-section-tags.js +52 -0
  141. package/cjs/models/appointment-section-tags.js.map +1 -0
  142. package/cjs/models/appointment-slide-tags.js +52 -0
  143. package/cjs/models/appointment-slide-tags.js.map +1 -0
  144. package/cjs/models/appointment-stats.js +2 -2
  145. package/cjs/models/appointment-stats.js.map +1 -1
  146. package/cjs/models/appointment-tags.js +48 -0
  147. package/cjs/models/appointment-tags.js.map +1 -0
  148. package/cjs/models/appointment-viewing.js +2 -2
  149. package/cjs/models/appointment-viewing.js.map +1 -1
  150. package/cjs/models/appointment.js +16 -7
  151. package/cjs/models/appointment.js.map +1 -1
  152. package/cjs/models/asset.js +2 -2
  153. package/cjs/models/asset.js.map +1 -1
  154. package/cjs/models/auto-adjunct-key-check.js +2 -2
  155. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  156. package/cjs/models/auto-adjunct.js +2 -2
  157. package/cjs/models/auto-adjunct.js.map +1 -1
  158. package/cjs/models/base.js +25 -36
  159. package/cjs/models/base.js.map +1 -1
  160. package/cjs/models/base.spec.js +45 -45
  161. package/cjs/models/base.spec.js.map +1 -1
  162. package/cjs/models/choicelist.js.map +1 -1
  163. package/cjs/models/cms-val.js.map +1 -1
  164. package/cjs/models/contact.js +2 -2
  165. package/cjs/models/contact.js.map +1 -1
  166. package/cjs/models/customer.js +2 -2
  167. package/cjs/models/customer.js.map +1 -1
  168. package/cjs/models/deck-note.js +2 -2
  169. package/cjs/models/deck-note.js.map +1 -1
  170. package/cjs/models/deck-tags.js +61 -0
  171. package/cjs/models/deck-tags.js.map +1 -0
  172. package/cjs/models/deck-version.js +5 -3
  173. package/cjs/models/deck-version.js.map +1 -1
  174. package/cjs/models/deck.js +6 -3
  175. package/cjs/models/deck.js.map +1 -1
  176. package/cjs/models/dispatch-preview.js +3 -3
  177. package/cjs/models/dispatch-preview.js.map +1 -1
  178. package/cjs/models/dispatch.js +2 -2
  179. package/cjs/models/dispatch.js.map +1 -1
  180. package/cjs/models/envs.js.map +1 -1
  181. package/cjs/models/event-object.js +2 -2
  182. package/cjs/models/event-object.js.map +1 -1
  183. package/cjs/models/event.js +2 -2
  184. package/cjs/models/event.js.map +1 -1
  185. package/cjs/models/feed-data.js +2 -2
  186. package/cjs/models/feed-data.js.map +1 -1
  187. package/cjs/models/file.js +2 -2
  188. package/cjs/models/file.js.map +1 -1
  189. package/cjs/models/group.js +2 -2
  190. package/cjs/models/group.js.map +1 -1
  191. package/cjs/models/handover.js +2 -2
  192. package/cjs/models/handover.js.map +1 -1
  193. package/cjs/models/hosted-preso.js +2 -2
  194. package/cjs/models/hosted-preso.js.map +1 -1
  195. package/cjs/models/image.js +2 -2
  196. package/cjs/models/image.js.map +1 -1
  197. package/cjs/models/location.js +2 -2
  198. package/cjs/models/location.js.map +1 -1
  199. package/cjs/models/manifest-json.js +83 -58
  200. package/cjs/models/manifest-json.js.map +1 -1
  201. package/cjs/models/onshare.js +2 -2
  202. package/cjs/models/onshare.js.map +1 -1
  203. package/cjs/models/opportunity.js +2 -2
  204. package/cjs/models/opportunity.js.map +1 -1
  205. package/cjs/models/pack-diff.js +2 -2
  206. package/cjs/models/pack-diff.js.map +1 -1
  207. package/cjs/models/pack.js +2 -2
  208. package/cjs/models/pack.js.map +1 -1
  209. package/cjs/models/preset.js +22 -2
  210. package/cjs/models/preset.js.map +1 -1
  211. package/cjs/models/refresh-request.js +2 -2
  212. package/cjs/models/refresh-request.js.map +1 -1
  213. package/cjs/models/room.js +2 -2
  214. package/cjs/models/room.js.map +1 -1
  215. package/cjs/models/salesforce-lookup.js +2 -2
  216. package/cjs/models/salesforce-lookup.js.map +1 -1
  217. package/cjs/models/section-selection.js +2 -2
  218. package/cjs/models/section-selection.js.map +1 -1
  219. package/cjs/models/section.js +2 -2
  220. package/cjs/models/section.js.map +1 -1
  221. package/cjs/models/slide-selection.js +2 -2
  222. package/cjs/models/slide-selection.js.map +1 -1
  223. package/cjs/models/slide.js +2 -2
  224. package/cjs/models/slide.js.map +1 -1
  225. package/cjs/models/snapshot.js +2 -2
  226. package/cjs/models/snapshot.js.map +1 -1
  227. package/cjs/models/sub-slide.js +2 -2
  228. package/cjs/models/sub-slide.js.map +1 -1
  229. package/cjs/models/support-ticket.js +2 -2
  230. package/cjs/models/support-ticket.js.map +1 -1
  231. package/cjs/models/tag.js +54 -0
  232. package/cjs/models/tag.js.map +1 -0
  233. package/cjs/models/team.js +2 -2
  234. package/cjs/models/team.js.map +1 -1
  235. package/cjs/models/template.js +2 -2
  236. package/cjs/models/template.js.map +1 -1
  237. package/cjs/models/tenancy.js +2 -2
  238. package/cjs/models/tenancy.js.map +1 -1
  239. package/cjs/models/timing-log.js +20 -41
  240. package/cjs/models/timing-log.js.map +1 -1
  241. package/cjs/models/timing-log.spec.js +18 -86
  242. package/cjs/models/timing-log.spec.js.map +1 -1
  243. package/cjs/models/transcribe-socket.js +2 -2
  244. package/cjs/models/transcribe-socket.js.map +1 -1
  245. package/cjs/models/upload.js +2 -2
  246. package/cjs/models/upload.js.map +1 -1
  247. package/cjs/models/user.js +4 -3
  248. package/cjs/models/user.js.map +1 -1
  249. package/cjs/models/user.spec.js +10 -8
  250. package/cjs/models/user.spec.js.map +1 -1
  251. package/cjs/models.js +148 -0
  252. package/cjs/models.js.map +1 -1
  253. package/cjs/presentation/appointment-presentation.js +13 -5
  254. package/cjs/presentation/appointment-presentation.js.map +1 -1
  255. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  256. package/cjs/presentation/base-presentation-model.js +65 -0
  257. package/cjs/presentation/base-presentation-model.js.map +1 -1
  258. package/cjs/presentation/base-presentation-model.spec.js +87 -0
  259. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  260. package/cjs/presentation/presentation-deck.js +31 -20
  261. package/cjs/presentation/presentation-deck.js.map +1 -1
  262. package/cjs/presentation/presentation-deck.spec.js +15 -13
  263. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  264. package/cjs/presentation/presentation-decks.js +2 -2
  265. package/cjs/presentation/presentation-decks.js.map +1 -1
  266. package/cjs/presentation/presentation-section.js +36 -17
  267. package/cjs/presentation/presentation-section.js.map +1 -1
  268. package/cjs/presentation/presentation-section.spec.js +418 -0
  269. package/cjs/presentation/presentation-section.spec.js.map +1 -0
  270. package/cjs/presentation/presentation-sections.js +2 -2
  271. package/cjs/presentation/presentation-sections.js.map +1 -1
  272. package/cjs/presentation/presentation-slide.js +35 -18
  273. package/cjs/presentation/presentation-slide.js.map +1 -1
  274. package/cjs/presentation/presentation-slide.spec.js +294 -0
  275. package/cjs/presentation/presentation-slide.spec.js.map +1 -0
  276. package/cjs/presentation/presentation-slides.js +2 -2
  277. package/cjs/presentation/presentation-slides.js.map +1 -1
  278. package/cjs/presentation/presentation-subslide.js +11 -7
  279. package/cjs/presentation/presentation-subslide.js.map +1 -1
  280. package/cjs/presentation/presentation-subslide.spec.js +68 -20
  281. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  282. package/cjs/presentation/presentation-subslides.js +2 -2
  283. package/cjs/presentation/presentation-subslides.js.map +1 -1
  284. package/cjs/presentation/presentation.js +19 -9
  285. package/cjs/presentation/presentation.js.map +1 -1
  286. package/cjs/presentation.js +10 -0
  287. package/cjs/presentation.js.map +1 -1
  288. package/cjs/state-register.js +11 -1
  289. package/cjs/state-register.js.map +1 -1
  290. package/cjs/sync.js +7 -7
  291. package/cjs/sync.js.map +1 -1
  292. package/cjs/utils.js +7 -7
  293. package/cjs/utils.js.map +1 -1
  294. package/cjs/utils.spec.js.map +1 -1
  295. package/config/rush-project.json +11 -0
  296. package/index.js +0 -1
  297. package/jest.config.js +4 -4
  298. package/package.json +19 -59
  299. package/setup-tests.js +2 -1
  300. package/src/api.js +3 -3
  301. package/src/api.spec.js +3 -4
  302. package/src/auth.js +6 -7
  303. package/src/auth.spec.js +3 -4
  304. package/src/collections/activity.js +5 -6
  305. package/src/collections/adjunct-sections.js +4 -4
  306. package/src/collections/adjunct-slides.js +4 -4
  307. package/src/collections/adjunct-sub-slides.js +2 -2
  308. package/src/collections/appointment-adjunct-tags.js +18 -0
  309. package/src/collections/appointment-deckversion-tags.js +21 -0
  310. package/src/collections/appointment-duplicates.js +2 -2
  311. package/src/collections/appointment-editors.js +2 -2
  312. package/src/collections/appointment-section-tags.js +18 -0
  313. package/src/collections/appointment-slide-tags.js +18 -0
  314. package/src/collections/appointment-tags.js +136 -0
  315. package/src/collections/appointments.js +18 -23
  316. package/src/collections/assets.js +2 -2
  317. package/src/collections/auto-adjuncts.js +5 -5
  318. package/src/collections/base.js +88 -18
  319. package/src/collections/base.spec.js +100 -8
  320. package/src/collections/cms-vals.js +3 -3
  321. package/src/collections/contacts.js +2 -2
  322. package/src/collections/created-assets.js +2 -2
  323. package/src/collections/customers.js +2 -2
  324. package/src/collections/deck-notes.js +2 -2
  325. package/src/collections/deck-versions.js +18 -15
  326. package/src/collections/decks.js +2 -2
  327. package/src/collections/deleted-assets.js +2 -2
  328. package/src/collections/dispatches.js +8 -13
  329. package/src/collections/event-objects.js +2 -2
  330. package/src/collections/events.js +2 -2
  331. package/src/collections/groups.js +2 -2
  332. package/src/collections/images.js +2 -2
  333. package/src/collections/locations.js +2 -2
  334. package/src/collections/opportunities.js +2 -2
  335. package/src/collections/pack-diffs.js +2 -2
  336. package/src/collections/packs.js +2 -2
  337. package/src/collections/presets.js +2 -2
  338. package/src/collections/section-selections.js +4 -4
  339. package/src/collections/sections.js +2 -2
  340. package/src/collections/slide-selections.js +4 -4
  341. package/src/collections/slides.js +2 -2
  342. package/src/collections/snapshots.js +2 -2
  343. package/src/collections/sub-slides.js +2 -2
  344. package/src/collections/tags.js +18 -0
  345. package/src/collections/teams.js +2 -2
  346. package/src/collections/templates.js +2 -2
  347. package/src/collections/uploads.js +2 -2
  348. package/src/collections/users.js +2 -2
  349. package/src/collections.js +6 -0
  350. package/src/index.js +1 -4
  351. package/src/middleware.js +1 -1
  352. package/src/middlewares/json.js +2 -2
  353. package/src/middlewares/redirect.js +1 -2
  354. package/src/models/activity-item.js +6 -6
  355. package/src/models/adjunct-section.js +5 -5
  356. package/src/models/adjunct-slide.js +5 -5
  357. package/src/models/adjunct-sub-slide.js +5 -5
  358. package/src/models/adjunct.js +4 -4
  359. package/src/models/api.js +1 -1
  360. package/src/models/appointment-adjunct-tags.js +41 -0
  361. package/src/models/appointment-deckversion-tags.js +41 -0
  362. package/src/models/appointment-duplicate.js +7 -7
  363. package/src/models/appointment-editor.js +6 -6
  364. package/src/models/appointment-section-tags.js +41 -0
  365. package/src/models/appointment-slide-tags.js +41 -0
  366. package/src/models/appointment-stats.js +5 -5
  367. package/src/models/appointment-tags.js +39 -0
  368. package/src/models/appointment-viewing.js +3 -3
  369. package/src/models/appointment.js +35 -29
  370. package/src/models/asset.js +5 -5
  371. package/src/models/auto-adjunct-key-check.js +5 -5
  372. package/src/models/auto-adjunct.js +4 -4
  373. package/src/models/base.js +36 -37
  374. package/src/models/base.spec.js +61 -62
  375. package/src/models/choicelist.js +2 -2
  376. package/src/models/cms-val.js +3 -3
  377. package/src/models/contact.js +9 -9
  378. package/src/models/customer.js +13 -13
  379. package/src/models/deck-note.js +4 -4
  380. package/src/models/deck-tags.js +52 -0
  381. package/src/models/deck-version.js +9 -8
  382. package/src/models/deck.js +8 -6
  383. package/src/models/dispatch-preview.js +6 -7
  384. package/src/models/dispatch.js +6 -7
  385. package/src/models/envs.js +1 -1
  386. package/src/models/event-object.js +6 -6
  387. package/src/models/event.js +7 -7
  388. package/src/models/feed-data.js +5 -5
  389. package/src/models/file.js +4 -4
  390. package/src/models/group.js +3 -3
  391. package/src/models/handover.js +5 -5
  392. package/src/models/hosted-preso.js +5 -5
  393. package/src/models/image.js +4 -4
  394. package/src/models/location.js +5 -5
  395. package/src/models/manifest-json.js +77 -30
  396. package/src/models/onshare.js +5 -5
  397. package/src/models/opportunity.js +5 -5
  398. package/src/models/pack-diff.js +5 -5
  399. package/src/models/pack.js +4 -4
  400. package/src/models/preset.js +24 -5
  401. package/src/models/refresh-request.js +6 -6
  402. package/src/models/room.js +3 -3
  403. package/src/models/salesforce-lookup.js +3 -3
  404. package/src/models/section-selection.js +6 -6
  405. package/src/models/section.js +7 -7
  406. package/src/models/slide-selection.js +6 -6
  407. package/src/models/slide.js +7 -7
  408. package/src/models/snapshot.js +5 -5
  409. package/src/models/sub-slide.js +5 -5
  410. package/src/models/support-ticket.js +4 -4
  411. package/src/models/tag.js +42 -0
  412. package/src/models/team.js +4 -4
  413. package/src/models/template.js +4 -4
  414. package/src/models/tenancy.js +5 -5
  415. package/src/models/timing-log.js +18 -18
  416. package/src/models/timing-log.spec.js +28 -29
  417. package/src/models/transcribe-socket.js +3 -3
  418. package/src/models/upload.js +3 -3
  419. package/src/models/user.js +19 -17
  420. package/src/models/user.spec.js +2 -2
  421. package/src/models.js +7 -0
  422. package/src/presentation/appointment-presentation.js +14 -10
  423. package/src/presentation/base-presentation-model.js +67 -5
  424. package/src/presentation/base-presentation-model.spec.js +114 -22
  425. package/src/presentation/presentation-deck.js +54 -52
  426. package/src/presentation/presentation-deck.spec.js +26 -27
  427. package/src/presentation/presentation-decks.js +2 -2
  428. package/src/presentation/presentation-section.js +62 -48
  429. package/src/presentation/presentation-section.spec.js +363 -0
  430. package/src/presentation/presentation-sections.js +2 -2
  431. package/src/presentation/presentation-slide.js +51 -36
  432. package/src/presentation/presentation-slide.spec.js +250 -0
  433. package/src/presentation/presentation-slides.js +2 -2
  434. package/src/presentation/presentation-subslide.js +24 -17
  435. package/src/presentation/presentation-subslide.spec.js +40 -12
  436. package/src/presentation/presentation-subslides.js +2 -2
  437. package/src/presentation/presentation.js +27 -15
  438. package/src/state-register.js +7 -0
  439. package/src/sync.js +21 -23
  440. package/src/utils.js +8 -7
  441. package/src/utils.spec.js +15 -15
  442. package/.editorconfig +0 -9
  443. package/.eslintrc +0 -25
  444. package/.prettierrc.js +0 -3
  445. package/jsdoc.json +0 -12
  446. package/yarn.lock +0 -8099
@@ -17,43 +17,31 @@ require("./user.js");
17
17
 
18
18
  require("../collections/users.js");
19
19
 
20
- var _dedentJs = _interopRequireDefault(require("dedent-js"));
20
+ var _utils = require("../utils.js");
21
21
 
22
- var _lodash = _interopRequireDefault(require("lodash"));
22
+ var _auth = require("../auth.js");
23
23
 
24
- var _moment = _interopRequireDefault(require("moment"));
24
+ var _base = require("./base.js");
25
25
 
26
- var _superagent = _interopRequireDefault(require("superagent"));
26
+ var _lodash = _interopRequireDefault(require("lodash"));
27
27
 
28
- var _auth = require("../auth.js");
28
+ var _dedentJs = _interopRequireDefault(require("dedent-js"));
29
29
 
30
30
  var _log = _interopRequireDefault(require("../log.js"));
31
31
 
32
- var _stateRegister = require("../state-register.js");
33
-
34
- var _utils = require("../utils.js");
35
-
36
- var _base = require("./base.js");
32
+ var _moment = _interopRequireDefault(require("moment"));
37
33
 
38
- function _templateObject2() {
39
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t\tEvents must be in ascending order. Instead we found:\n\n\t\t\t\t\t", " - begin\n\t\t\t\t\t", "\n\t\t\t\t\t", " - end\n\t\t\t\t"]);
34
+ var _stateRegister = require("../state-register.js");
40
35
 
41
- _templateObject2 = function _templateObject2() {
42
- return data;
43
- };
36
+ var _superagent = _interopRequireDefault(require("superagent"));
44
37
 
45
- return data;
46
- }
38
+ var _templateObject, _templateObject2;
47
39
 
48
- function _templateObject() {
49
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t", " ", " ", "", "", "\n\t\t\t", "\n\t\t\t", "\n\n\t\t"], ["\n\t\t\t", " ", " ", "", "", "\n\t\t\t", "\n\t\t\t", "\\n\n\t\t"]);
40
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
50
41
 
51
- _templateObject = function _templateObject() {
52
- return data;
53
- };
42
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
54
43
 
55
- return data;
56
- }
44
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
57
45
 
58
46
  /**
59
47
  * @typedef Event
@@ -210,7 +198,7 @@ var TimingLogModel = _base.BaseModel.extend(
210
198
  var modeType = modeTypeMap[this.mode]; // Note the newline is required at the end for the parser
211
199
  // to understand this
212
200
 
213
- var compact = (0, _dedentJs.default)(_templateObject(), user, modeType, url, attendeeSet, remoteAttendeeSet, begin, events.join("\n"));
201
+ var compact = (0, _dedentJs.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t", " ", " ", "", "", "\n\t\t\t", "\n\t\t\t", "\n\n\t\t"], ["\n\t\t\t", " ", " ", "", "", "\n\t\t\t", "\n\t\t\t", "\\n\n\t\t"])), user, modeType, url, attendeeSet, remoteAttendeeSet, begin, events.join("\n"));
214
202
 
215
203
  if (this.end) {
216
204
  var end = _moment.default.utc(this.end).format(_utils.DATE_FORMAT);
@@ -271,12 +259,12 @@ var TimingLogModel = _base.BaseModel.extend(
271
259
  checkEventsAscending: function checkEventsAscending() {
272
260
  var lastDate = null;
273
261
  var sortEvents = false;
274
- var _iteratorNormalCompletion = true;
275
- var _didIteratorError = false;
276
- var _iteratorError = undefined;
262
+
263
+ var _iterator = _createForOfIteratorHelper(this.events),
264
+ _step;
277
265
 
278
266
  try {
279
- for (var _iterator = this.events[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
267
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
280
268
  var event = _step.value;
281
269
  var timestamp = (0, _moment.default)(event.timestamp);
282
270
 
@@ -287,18 +275,9 @@ var TimingLogModel = _base.BaseModel.extend(
287
275
  lastDate = timestamp;
288
276
  }
289
277
  } catch (err) {
290
- _didIteratorError = true;
291
- _iteratorError = err;
278
+ _iterator.e(err);
292
279
  } finally {
293
- try {
294
- if (!_iteratorNormalCompletion && _iterator.return != null) {
295
- _iterator.return();
296
- }
297
- } finally {
298
- if (_didIteratorError) {
299
- throw _iteratorError;
300
- }
301
- }
280
+ _iterator.f();
302
281
  }
303
282
 
304
283
  if (sortEvents) {
@@ -308,7 +287,7 @@ var TimingLogModel = _base.BaseModel.extend(
308
287
  return "".concat(timestamp, " ").concat((0, _utils.getShortURL)(path));
309
288
  });
310
289
 
311
- _log.default.warn((0, _dedentJs.default)(_templateObject2(), this.begin, events.join("\n"), this.end));
290
+ _log.default.warn((0, _dedentJs.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t\tEvents must be in ascending order. Instead we found:\n\n\t\t\t\t\t", " - begin\n\t\t\t\t\t", "\n\t\t\t\t\t", " - end\n\t\t\t\t"])), this.begin, events.join("\n"), this.end));
312
291
 
313
292
  this.sortEvents();
314
293
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/timing-log.js"],"names":["TimingLogModel","BaseModel","extend","modelName","props","begin","type","required","end","events","default","created_date","modified_date","provisional","mode","values","children","appointment","hostedPreso","user","collections","attendee_set","remote_attendee_set","toCompactFormat","url","moment","utc","format","DATE_FORMAT","startIndex","i","length","is_unfocused","slice","map","timestamp","path","isUnfocused","millis","diff","duration","attendeeSet","attendee","join","remoteAttendeeSet","modeTypeMap","present","view","prep","review","modeType","compact","dedent","addEvent","Error","time","push","DATE_FORMAT_T","checkEventsAscending","lastDate","sortEvents","event","isAfter","log","warn","sort","event1","event2","save","data","options","Promise","resolve","toJSON","patch","prototype","call","method","isNew","superagent","set","Auth","headers","send","then","body","_","omit","catch","SuperagentPromiseError","e","status","res","detail","indexOf","message","JSON","stringify"],"mappings":"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","sourcesContent":["import \"./appointment.js\";\nimport \"./hosted-preso.js\";\nimport \"./user.js\";\nimport \"../collections/users.js\";\n\nimport dedent from \"dedent-js\";\nimport _ from \"lodash\";\nimport moment from \"moment\";\nimport superagent from \"superagent\";\n\nimport { Auth } from \"../auth.js\";\nimport log from \"../log.js\";\nimport { register } from \"../state-register.js\";\nimport { getShortURL } from \"../utils.js\";\nimport { DATE_FORMAT, DATE_FORMAT_T } from \"../utils.js\";\nimport { BaseModel } from \"./base.js\";\n\n/**\n * @typedef Event\n * @type {object}\n * @property {string} path\n * @property {date} timestamp\n * @example\n * {\n *\t\"path\": \"https://client.salespreso.com/api/deckversions/4/\",\n *\t\"timestamp\": \"2016-10-27T00:42:47.045186Z\",\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/sections/28/\",\n * \t\"timestamp\": \"2016-10-27T00:43:59.430102Z\"\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/slides/380/\",\n * \t\"timestamp\": \"2016-10-27T00:45:01.038661Z\"\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/slides/378/\",\n * \t\"timestamp\": \"2016-10-27T00:45:13.495713Z\"\n *\t\"is_unfocused\": false,\n * }\n */\n\n/**\n * @constructor\n * @alias models.TimingLogModel\n * @extends models.BaseModel\n */\nexport const TimingLogModel = BaseModel.extend(\n\t/** @lends models.TimingLogModel# */ {\n\t\tmodelName: \"timinglogs\",\n\n\t\t/**\n\t\t * @property {date} begin\n\t\t * @property {date} end\n\t\t * @property {Event[]} events\n\t\t * @property {date} created_date\n\t\t * @property {date} modified_date\n\t\t */\n\t\tprops: {\n\t\t\tbegin: { type: \"date\", required: true },\n\t\t\tend: \"date\",\n\t\t\tevents: { type: \"array\", default: () => [] },\n\t\t\tcreated_date: \"date\",\n\t\t\tmodified_date: \"date\",\n\t\t\tprovisional: { type: \"boolean\", default: () => true },\n\t\t\tmode: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdefault: () => \"view\",\n\t\t\t\tvalues: [\n\t\t\t\t\t// A salesperson has presented a preso\n\t\t\t\t\t\"present\",\n\t\t\t\t\t// A customer has viewed an online preso\n\t\t\t\t\t\"view\",\n\t\t\t\t\t// A prep user or salesperson as prepared a preso\n\t\t\t\t\t\"prep\",\n\t\t\t\t\t// A salesperson has reviewed an old preso\n\t\t\t\t\t\"review\"\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @property {models.AppointmentModel} appointment\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tappointment: \"AppointmentModel\",\n\t\t\thostedPreso: \"HostedPresoModel\",\n\t\t\tuser: \"UserModel\"\n\t\t},\n\n\t\t/**\n\t\t * @property {collections.UserCollection} attendee_set\n\t\t * @property {collections.UserCollection} remote_attendee_set\n\t\t */\n\t\tcollections: {\n\t\t\tattendee_set: \"UserCollection\",\n\t\t\tremote_attendee_set: \"UserCollection\"\n\t\t},\n\n\t\t/**\n\t\t * Returns the current timing log model in expected compact format.\n\t\t * @see http://doc.dev.salespreso.com/api/tracking.html#compact-representation\n\t\t * @returns {string}\n\t\t */\n\t\ttoCompactFormat() {\n\t\t\tconst user = getShortURL(this.user.url());\n\n\t\t\tconst url = getShortURL(\n\t\t\t\tthis.hostedPreso ? this.hostedPreso.url() : this.appointment.url()\n\t\t\t);\n\t\t\t// At this point, the expected output should have a space instead of a T in this\n\t\t\t// date format.\n\t\t\tconst begin = moment.utc(this.begin).format(DATE_FORMAT);\n\n\t\t\t// Strip out all unfocused events from the start (including any that are\n\t\t\t// in a row), as these will throw errors server side.\n\t\t\tlet startIndex = 0;\n\t\t\tfor (let i = 0; i < this.events.length; i++) {\n\t\t\t\tif (this.events[i].is_unfocused) {\n\t\t\t\t\tstartIndex = i + 1;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst events = this.events\n\t\t\t\t.slice(startIndex)\n\t\t\t\t.map(({ timestamp, path, is_unfocused: isUnfocused }) => {\n\t\t\t\t\tconst millis = moment(timestamp).diff(moment(this.begin), \"millis\");\n\n\t\t\t\t\tif (isUnfocused) {\n\t\t\t\t\t\tconst duration = moment\n\t\t\t\t\t\t\t.utc(timestamp)\n\t\t\t\t\t\t\t.diff(moment.utc(begin), \"milliseconds\");\n\n\t\t\t\t\t\treturn `${duration}ms unfocused`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `${millis}ms ${getShortURL(path)}`;\n\t\t\t\t});\n\n\t\t\tconst attendeeSet =\n\t\t\t\tthis.attendee_set && this.attendee_set.length\n\t\t\t\t\t? `\\n${this.attendee_set\n\t\t\t\t\t\t\t.map(attendee => getShortURL(attendee.url()))\n\t\t\t\t\t\t\t.join(\" \")} attending`\n\t\t\t\t\t: \"\";\n\n\t\t\tconst remoteAttendeeSet =\n\t\t\t\tthis.remote_attendee_set && this.remote_attendee_set.length\n\t\t\t\t\t? `\\n${this.remote_attendee_set\n\t\t\t\t\t\t\t.map(attendee => getShortURL(attendee.url()))\n\t\t\t\t\t\t\t.join(\" \")} attending remotely`\n\t\t\t\t\t: \"\";\n\n\t\t\tconst modeTypeMap = {\n\t\t\t\tpresent: \"viewing\",\n\t\t\t\tview: \"viewing\",\n\t\t\t\tprep: \"preparing\",\n\t\t\t\treview: \"reviewing\"\n\t\t\t};\n\n\t\t\tconst modeType = modeTypeMap[this.mode];\n\n\t\t\t// Note the newline is required at the end for the parser\n\t\t\t// to understand this\n\t\t\tlet compact = dedent`\n\t\t\t${user} ${modeType} ${url}${attendeeSet}${remoteAttendeeSet}\n\t\t\t${begin}\n\t\t\t${events.join(\"\\n\")}\\n\n\t\t`;\n\n\t\t\tif (this.end) {\n\t\t\t\tconst end = moment.utc(this.end).format(DATE_FORMAT);\n\t\t\t\tcompact += end;\n\t\t\t\tif (this.provisional) {\n\t\t\t\t\tcompact += \" provisional\";\n\t\t\t\t}\n\t\t\t\tcompact += \"\\n\";\n\t\t\t}\n\n\t\t\treturn compact;\n\t\t},\n\n\t\t/**\n\t\t * Add a new event to the log\n\t\t * @param {string} path - URL path. Matches a deck related endpoint (deckversion, section, slide. etc.)\n\t\t * @param {any} timestamp - A timestamp for the event - note that it can be anything that can be passed to moment\n\t\t * @example\n\t\t * const timingLog = new TimingLogModel();\n\t\t * timingLog.addEvent(\"http://client.salespreso.com/api/sections/28/\", moment());\n\t\t * timingLog.addEvent(\"http://client.salespreso.com/api/slides/100/\", \"2016-10-27T00:42:47.045186Z\");\n\t\t */\n\t\taddEvent(path, timestamp) {\n\t\t\tif (!path) {\n\t\t\t\tthrow new Error(\"A path is required\");\n\t\t\t}\n\t\t\tif (!timestamp) {\n\t\t\t\tthrow new Error(\"A timestamp is required\");\n\t\t\t}\n\n\t\t\tconst time = moment.utc(timestamp);\n\t\t\tconst isUnfocused = path === \"unfocused\";\n\n\t\t\tif (isUnfocused) {\n\t\t\t\tif (!this.events.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (let i = this.events.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (!this.events[i].is_unfocused) {\n\t\t\t\t\t\tpath = this.events[i].path;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.events.push({\n\t\t\t\ttimestamp: time.format(DATE_FORMAT_T),\n\t\t\t\tpath,\n\t\t\t\tis_unfocused: isUnfocused\n\t\t\t});\n\t\t},\n\n\t\tcheckEventsAscending() {\n\t\t\tlet lastDate = null;\n\t\t\tlet sortEvents = false;\n\n\t\t\tfor (const event of this.events) {\n\t\t\t\tconst timestamp = moment(event.timestamp);\n\n\t\t\t\tif (lastDate && lastDate.isAfter(timestamp)) {\n\t\t\t\t\tsortEvents = true;\n\t\t\t\t}\n\n\t\t\t\tlastDate = timestamp;\n\t\t\t}\n\n\t\t\tif (sortEvents) {\n\t\t\t\tconst events = this.events.map(({ timestamp, path }) => {\n\t\t\t\t\treturn `${timestamp} ${getShortURL(path)}`;\n\t\t\t\t});\n\t\t\t\tlog.warn(dedent`\n\t\t\t\t\tEvents must be in ascending order. Instead we found:\n\n\t\t\t\t\t${this.begin} - begin\n\t\t\t\t\t${events.join(\"\\n\")}\n\t\t\t\t\t${this.end} - end\n\t\t\t\t`);\n\n\t\t\t\tthis.sortEvents();\n\t\t\t}\n\t\t},\n\n\t\t// We can't trust the server to give us events in the\n\t\t// correct order, so we sort them when necessary\n\t\tsortEvents() {\n\t\t\tthis.events.sort((event1, event2) => {\n\t\t\t\tconst diff = moment(event2.timestamp).diff(moment(event1.timestamp));\n\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (diff < 0) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t},\n\n\t\tsave(data, options) {\n\t\t\tif (!this.events.length) {\n\t\t\t\treturn Promise.resolve(this.toJSON());\n\t\t\t}\n\n\t\t\tif (options && options.patch) {\n\t\t\t\treturn BaseModel.prototype.save.call(this, data, options);\n\t\t\t}\n\n\t\t\tthis.checkEventsAscending();\n\n\t\t\tconst method = this.isNew() ? \"post\" : \"put\";\n\n\t\t\treturn superagent[method](this.url())\n\t\t\t\t.set(Auth.headers)\n\t\t\t\t.type(\"application/vnd.salespreso+timinglog\")\n\t\t\t\t.send(this.toCompactFormat())\n\t\t\t\t.then(({ body }) => {\n\t\t\t\t\tthis.set(_.omit(body, [\"events\"]));\n\t\t\t\t\treturn body;\n\t\t\t\t})\n\t\t\t\t.catch(superagent.SuperagentPromiseError, e => {\n\t\t\t\t\tif (e.status === 405 && e.res.body.detail.indexOf(\"end\") > -1) {\n\t\t\t\t\t\t// Don't send timing log events if the tracking is ended.\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((e.status >= 400 && e.status <= 499) || e.status === 503) {\n\t\t\t\t\t\te.message += `\\nBody: ${JSON.stringify(e.res.body)}`;\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t}\n\t}\n);\n\nregister(\"TimingLogModel\", TimingLogModel);\n"],"file":"timing-log.js"}
1
+ {"version":3,"sources":["../../src/models/timing-log.js"],"names":["TimingLogModel","BaseModel","extend","modelName","props","begin","type","required","end","events","default","created_date","modified_date","provisional","mode","values","children","appointment","hostedPreso","user","collections","attendee_set","remote_attendee_set","toCompactFormat","url","moment","utc","format","DATE_FORMAT","startIndex","i","length","is_unfocused","slice","map","timestamp","path","isUnfocused","millis","diff","duration","attendeeSet","attendee","join","remoteAttendeeSet","modeTypeMap","present","view","prep","review","modeType","compact","dedent","addEvent","Error","time","push","DATE_FORMAT_T","checkEventsAscending","lastDate","sortEvents","event","isAfter","log","warn","sort","event1","event2","save","data","options","Promise","resolve","toJSON","patch","prototype","call","method","isNew","superagent","set","Auth","headers","send","then","body","_","omit","catch","SuperagentPromiseError","e","status","res","detail","indexOf","message","JSON","stringify"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AAEA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,cAAc,GAAGC,gBAAUC,MAAV;AAC7B;AAAqC;AACpCC,EAAAA,SAAS,EAAE,YADyB;;AAGpC;AACF;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,KAAK,EAAE;AAAEC,MAAAA,IAAI,EAAE,MAAR;AAAgBC,MAAAA,QAAQ,EAAE;AAA1B,KADD;AAENC,IAAAA,GAAG,EAAE,MAFC;AAGNC,IAAAA,MAAM,EAAE;AAAEH,MAAAA,IAAI,EAAE,OAAR;AAAiBI,MAAAA,OAAO,EAAE;AAAA,eAAM,EAAN;AAAA;AAA1B,KAHF;AAINC,IAAAA,YAAY,EAAE,MAJR;AAKNC,IAAAA,aAAa,EAAE,MALT;AAMNC,IAAAA,WAAW,EAAE;AAAEP,MAAAA,IAAI,EAAE,SAAR;AAAmBI,MAAAA,OAAO,EAAE;AAAA,eAAM,IAAN;AAAA;AAA5B,KANP;AAONI,IAAAA,IAAI,EAAE;AACLR,MAAAA,IAAI,EAAE,QADD;AAELI,MAAAA,OAAO,EAAE;AAAA,eAAM,MAAN;AAAA,OAFJ;AAGLK,MAAAA,MAAM,EAAE,CACP;AACA,eAFO,EAGP;AACA,YAJO,EAKP;AACA,YANO,EAOP;AACA,cARO;AAHH;AAPA,GAV6B;;AAiCpC;AACF;AACA;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,WAAW,EAAE,kBADJ;AAETC,IAAAA,WAAW,EAAE,kBAFJ;AAGTC,IAAAA,IAAI,EAAE;AAHG,GArC0B;;AA2CpC;AACF;AACA;AACA;AACEC,EAAAA,WAAW,EAAE;AACZC,IAAAA,YAAY,EAAE,gBADF;AAEZC,IAAAA,mBAAmB,EAAE;AAFT,GA/CuB;;AAoDpC;AACF;AACA;AACA;AACA;AACEC,EAAAA,eAzDoC,6BAyDlB;AAAA;;AACjB,QAAMJ,IAAI,GAAG,wBAAY,KAAKA,IAAL,CAAUK,GAAV,EAAZ,CAAb;AAEA,QAAMA,GAAG,GAAG,wBACX,KAAKN,WAAL,GAAmB,KAAKA,WAAL,CAAiBM,GAAjB,EAAnB,GAA4C,KAAKP,WAAL,CAAiBO,GAAjB,EADjC,CAAZ,CAHiB,CAMjB;AACA;;AACA,QAAMnB,KAAK,GAAGoB,gBAAOC,GAAP,CAAW,KAAKrB,KAAhB,EAAuBsB,MAAvB,CAA8BC,kBAA9B,CAAd,CARiB,CAUjB;AACA;;;AACA,QAAIC,UAAU,GAAG,CAAjB;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKrB,MAAL,CAAYsB,MAAhC,EAAwCD,CAAC,EAAzC,EAA6C;AAC5C,UAAI,KAAKrB,MAAL,CAAYqB,CAAZ,EAAeE,YAAnB,EAAiC;AAChCH,QAAAA,UAAU,GAAGC,CAAC,GAAG,CAAjB;AACA,OAFD,MAEO;AACN;AACA;AACD;;AAED,QAAMrB,MAAM,GAAG,KAAKA,MAAL,CACbwB,KADa,CACPJ,UADO,EAEbK,GAFa,CAET,gBAAoD;AAAA,UAAjDC,SAAiD,QAAjDA,SAAiD;AAAA,UAAtCC,IAAsC,QAAtCA,IAAsC;AAAA,UAAlBC,WAAkB,QAAhCL,YAAgC;AACxD,UAAMM,MAAM,GAAG,qBAAOH,SAAP,EAAkBI,IAAlB,CAAuB,qBAAO,KAAI,CAAClC,KAAZ,CAAvB,EAA2C,QAA3C,CAAf;;AAEA,UAAIgC,WAAJ,EAAiB;AAChB,YAAMG,QAAQ,GAAGf,gBACfC,GADe,CACXS,SADW,EAEfI,IAFe,CAEVd,gBAAOC,GAAP,CAAWrB,KAAX,CAFU,EAES,cAFT,CAAjB;;AAIA,yBAAUmC,QAAV;AACA;;AAED,uBAAUF,MAAV,gBAAsB,wBAAYF,IAAZ,CAAtB;AACA,KAda,CAAf;AAgBA,QAAMK,WAAW,GAChB,KAAKpB,YAAL,IAAqB,KAAKA,YAAL,CAAkBU,MAAvC,eACQ,KAAKV,YAAL,CACJa,GADI,CACA,UAACQ,QAAD;AAAA,aAAc,wBAAYA,QAAQ,CAAClB,GAAT,EAAZ,CAAd;AAAA,KADA,EAEJmB,IAFI,CAEC,GAFD,CADR,kBAIG,EALJ;AAOA,QAAMC,iBAAiB,GACtB,KAAKtB,mBAAL,IAA4B,KAAKA,mBAAL,CAAyBS,MAArD,eACQ,KAAKT,mBAAL,CACJY,GADI,CACA,UAACQ,QAAD;AAAA,aAAc,wBAAYA,QAAQ,CAAClB,GAAT,EAAZ,CAAd;AAAA,KADA,EAEJmB,IAFI,CAEC,GAFD,CADR,2BAIG,EALJ;AAOA,QAAME,WAAW,GAAG;AACnBC,MAAAA,OAAO,EAAE,SADU;AAEnBC,MAAAA,IAAI,EAAE,SAFa;AAGnBC,MAAAA,IAAI,EAAE,WAHa;AAInBC,MAAAA,MAAM,EAAE;AAJW,KAApB;AAOA,QAAMC,QAAQ,GAAGL,WAAW,CAAC,KAAK/B,IAAN,CAA5B,CA1DiB,CA4DjB;AACA;;AACA,QAAIqC,OAAO,OAAGC,iBAAH,wNACTjC,IADS,EACD+B,QADC,EACW1B,GADX,EACiBiB,WADjB,EAC+BG,iBAD/B,EAETvC,KAFS,EAGTI,MAAM,CAACkC,IAAP,CAAY,IAAZ,CAHS,CAAX;;AAMA,QAAI,KAAKnC,GAAT,EAAc;AACb,UAAMA,GAAG,GAAGiB,gBAAOC,GAAP,CAAW,KAAKlB,GAAhB,EAAqBmB,MAArB,CAA4BC,kBAA5B,CAAZ;;AACAuB,MAAAA,OAAO,IAAI3C,GAAX;;AACA,UAAI,KAAKK,WAAT,EAAsB;AACrBsC,QAAAA,OAAO,IAAI,cAAX;AACA;;AACDA,MAAAA,OAAO,IAAI,IAAX;AACA;;AAED,WAAOA,OAAP;AACA,GAvImC;;AAyIpC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEE,EAAAA,QAlJoC,oBAkJ3BjB,IAlJ2B,EAkJrBD,SAlJqB,EAkJV;AACzB,QAAI,CAACC,IAAL,EAAW;AACV,YAAM,IAAIkB,KAAJ,CAAU,oBAAV,CAAN;AACA;;AACD,QAAI,CAACnB,SAAL,EAAgB;AACf,YAAM,IAAImB,KAAJ,CAAU,yBAAV,CAAN;AACA;;AAED,QAAMC,IAAI,GAAG9B,gBAAOC,GAAP,CAAWS,SAAX,CAAb;;AACA,QAAME,WAAW,GAAGD,IAAI,KAAK,WAA7B;;AAEA,QAAIC,WAAJ,EAAiB;AAChB,UAAI,CAAC,KAAK5B,MAAL,CAAYsB,MAAjB,EAAyB;AACxB;AACA;;AAED,WAAK,IAAID,CAAC,GAAG,KAAKrB,MAAL,CAAYsB,MAAZ,GAAqB,CAAlC,EAAqCD,CAAC,IAAI,CAA1C,EAA6CA,CAAC,EAA9C,EAAkD;AACjD,YAAI,CAAC,KAAKrB,MAAL,CAAYqB,CAAZ,EAAeE,YAApB,EAAkC;AACjCI,UAAAA,IAAI,GAAG,KAAK3B,MAAL,CAAYqB,CAAZ,EAAeM,IAAtB;AACA;AACA;AACD;AACD;;AAED,SAAK3B,MAAL,CAAY+C,IAAZ,CAAiB;AAChBrB,MAAAA,SAAS,EAAEoB,IAAI,CAAC5B,MAAL,CAAY8B,oBAAZ,CADK;AAEhBrB,MAAAA,IAAI,EAAJA,IAFgB;AAGhBJ,MAAAA,YAAY,EAAEK;AAHE,KAAjB;AAKA,GA/KmC;AAiLpCqB,EAAAA,oBAjLoC,kCAiLb;AACtB,QAAIC,QAAQ,GAAG,IAAf;AACA,QAAIC,UAAU,GAAG,KAAjB;;AAFsB,+CAIF,KAAKnD,MAJH;AAAA;;AAAA;AAItB,0DAAiC;AAAA,YAAtBoD,KAAsB;AAChC,YAAM1B,SAAS,GAAG,qBAAO0B,KAAK,CAAC1B,SAAb,CAAlB;;AAEA,YAAIwB,QAAQ,IAAIA,QAAQ,CAACG,OAAT,CAAiB3B,SAAjB,CAAhB,EAA6C;AAC5CyB,UAAAA,UAAU,GAAG,IAAb;AACA;;AAEDD,QAAAA,QAAQ,GAAGxB,SAAX;AACA;AAZqB;AAAA;AAAA;AAAA;AAAA;;AActB,QAAIyB,UAAJ,EAAgB;AACf,UAAMnD,MAAM,GAAG,KAAKA,MAAL,CAAYyB,GAAZ,CAAgB,iBAAyB;AAAA,YAAtBC,SAAsB,SAAtBA,SAAsB;AAAA,YAAXC,IAAW,SAAXA,IAAW;AACvD,yBAAUD,SAAV,cAAuB,wBAAYC,IAAZ,CAAvB;AACA,OAFc,CAAf;;AAGA2B,mBAAIC,IAAJ,KAASZ,iBAAT,iOAGG,KAAK/C,KAHR,EAIGI,MAAM,CAACkC,IAAP,CAAY,IAAZ,CAJH,EAKG,KAAKnC,GALR;;AAQA,WAAKoD,UAAL;AACA;AACD,GA7MmC;AA+MpC;AACA;AACAA,EAAAA,UAjNoC,wBAiNvB;AACZ,SAAKnD,MAAL,CAAYwD,IAAZ,CAAiB,UAACC,MAAD,EAASC,MAAT,EAAoB;AACpC,UAAM5B,IAAI,GAAG,qBAAO4B,MAAM,CAAChC,SAAd,EAAyBI,IAAzB,CAA8B,qBAAO2B,MAAM,CAAC/B,SAAd,CAA9B,CAAb;;AAEA,UAAII,IAAI,GAAG,CAAX,EAAc;AACb,eAAO,CAAC,CAAR;AACA,OAFD,MAEO,IAAIA,IAAI,GAAG,CAAX,EAAc;AACpB,eAAO,CAAP;AACA;;AAED,aAAO,CAAP;AACA,KAVD;AAWA,GA7NmC;AA+NpC6B,EAAAA,IA/NoC,gBA+N/BC,IA/N+B,EA+NzBC,OA/NyB,EA+NhB;AAAA;;AACnB,QAAI,CAAC,KAAK7D,MAAL,CAAYsB,MAAjB,EAAyB;AACxB,aAAOwC,OAAO,CAACC,OAAR,CAAgB,KAAKC,MAAL,EAAhB,CAAP;AACA;;AAED,QAAIH,OAAO,IAAIA,OAAO,CAACI,KAAvB,EAA8B;AAC7B,aAAOzE,gBAAU0E,SAAV,CAAoBP,IAApB,CAAyBQ,IAAzB,CAA8B,IAA9B,EAAoCP,IAApC,EAA0CC,OAA1C,CAAP;AACA;;AAED,SAAKZ,oBAAL;AAEA,QAAMmB,MAAM,GAAG,KAAKC,KAAL,KAAe,MAAf,GAAwB,KAAvC;AAEA,WAAOC,oBAAWF,MAAX,EAAmB,KAAKrD,GAAL,EAAnB,EACLwD,GADK,CACDC,WAAKC,OADJ,EAEL5E,IAFK,CAEA,sCAFA,EAGL6E,IAHK,CAGA,KAAK5D,eAAL,EAHA,EAIL6D,IAJK,CAIA,iBAAc;AAAA,UAAXC,IAAW,SAAXA,IAAW;;AACnB,MAAA,MAAI,CAACL,GAAL,CAASM,gBAAEC,IAAF,CAAOF,IAAP,EAAa,CAAC,QAAD,CAAb,CAAT;;AACA,aAAOA,IAAP;AACA,KAPK,EAQLG,KARK,CAQCT,oBAAWU,sBARZ,EAQoC,UAACC,CAAD,EAAO;AAChD,UAAIA,CAAC,CAACC,MAAF,KAAa,GAAb,IAAoBD,CAAC,CAACE,GAAF,CAAMP,IAAN,CAAWQ,MAAX,CAAkBC,OAAlB,CAA0B,KAA1B,IAAmC,CAAC,CAA5D,EAA+D;AAC9D;AACA,cAAMJ,CAAN;AACA;;AAED,UAAKA,CAAC,CAACC,MAAF,IAAY,GAAZ,IAAmBD,CAAC,CAACC,MAAF,IAAY,GAAhC,IAAwCD,CAAC,CAACC,MAAF,KAAa,GAAzD,EAA8D;AAC7DD,QAAAA,CAAC,CAACK,OAAF,sBAAwBC,IAAI,CAACC,SAAL,CAAeP,CAAC,CAACE,GAAF,CAAMP,IAArB,CAAxB;AACA;;AACD,YAAMK,CAAN;AACA,KAlBK,CAAP;AAmBA;AA/PmC,CADR,CAAvB;;;AAoQP,6BAAS,gBAAT,EAA2B1F,cAA3B","sourcesContent":["import \"./appointment.js\";\nimport \"./hosted-preso.js\";\nimport \"./user.js\";\nimport \"../collections/users.js\";\n\nimport { DATE_FORMAT, DATE_FORMAT_T } from \"../utils.js\";\n\nimport { Auth } from \"../auth.js\";\nimport { BaseModel } from \"./base.js\";\nimport _ from \"lodash\";\nimport dedent from \"dedent-js\";\nimport { getShortURL } from \"../utils.js\";\nimport log from \"../log.js\";\nimport moment from \"moment\";\nimport { register } from \"../state-register.js\";\nimport superagent from \"superagent\";\n\n/**\n * @typedef Event\n * @type {object}\n * @property {string} path\n * @property {date} timestamp\n * @example\n * {\n *\t\"path\": \"https://client.salespreso.com/api/deckversions/4/\",\n *\t\"timestamp\": \"2016-10-27T00:42:47.045186Z\",\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/sections/28/\",\n * \t\"timestamp\": \"2016-10-27T00:43:59.430102Z\"\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/slides/380/\",\n * \t\"timestamp\": \"2016-10-27T00:45:01.038661Z\"\n *\t\"is_unfocused\": false,\n * }\n * @example\n * {\n * \t\"path\": \"https://client.salespreso.com/api/slides/378/\",\n * \t\"timestamp\": \"2016-10-27T00:45:13.495713Z\"\n *\t\"is_unfocused\": false,\n * }\n */\n\n/**\n * @constructor\n * @alias models.TimingLogModel\n * @extends models.BaseModel\n */\nexport const TimingLogModel = BaseModel.extend(\n\t/** @lends models.TimingLogModel# */ {\n\t\tmodelName: \"timinglogs\",\n\n\t\t/**\n\t\t * @property {date} begin\n\t\t * @property {date} end\n\t\t * @property {Event[]} events\n\t\t * @property {date} created_date\n\t\t * @property {date} modified_date\n\t\t */\n\t\tprops: {\n\t\t\tbegin: { type: \"date\", required: true },\n\t\t\tend: \"date\",\n\t\t\tevents: { type: \"array\", default: () => [] },\n\t\t\tcreated_date: \"date\",\n\t\t\tmodified_date: \"date\",\n\t\t\tprovisional: { type: \"boolean\", default: () => true },\n\t\t\tmode: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdefault: () => \"view\",\n\t\t\t\tvalues: [\n\t\t\t\t\t// A salesperson has presented a preso\n\t\t\t\t\t\"present\",\n\t\t\t\t\t// A customer has viewed an online preso\n\t\t\t\t\t\"view\",\n\t\t\t\t\t// A prep user or salesperson as prepared a preso\n\t\t\t\t\t\"prep\",\n\t\t\t\t\t// A salesperson has reviewed an old preso\n\t\t\t\t\t\"review\",\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {models.AppointmentModel} appointment\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tappointment: \"AppointmentModel\",\n\t\t\thostedPreso: \"HostedPresoModel\",\n\t\t\tuser: \"UserModel\",\n\t\t},\n\n\t\t/**\n\t\t * @property {collections.UserCollection} attendee_set\n\t\t * @property {collections.UserCollection} remote_attendee_set\n\t\t */\n\t\tcollections: {\n\t\t\tattendee_set: \"UserCollection\",\n\t\t\tremote_attendee_set: \"UserCollection\",\n\t\t},\n\n\t\t/**\n\t\t * Returns the current timing log model in expected compact format.\n\t\t * @see http://doc.dev.salespreso.com/api/tracking.html#compact-representation\n\t\t * @returns {string}\n\t\t */\n\t\ttoCompactFormat() {\n\t\t\tconst user = getShortURL(this.user.url());\n\n\t\t\tconst url = getShortURL(\n\t\t\t\tthis.hostedPreso ? this.hostedPreso.url() : this.appointment.url()\n\t\t\t);\n\t\t\t// At this point, the expected output should have a space instead of a T in this\n\t\t\t// date format.\n\t\t\tconst begin = moment.utc(this.begin).format(DATE_FORMAT);\n\n\t\t\t// Strip out all unfocused events from the start (including any that are\n\t\t\t// in a row), as these will throw errors server side.\n\t\t\tlet startIndex = 0;\n\t\t\tfor (let i = 0; i < this.events.length; i++) {\n\t\t\t\tif (this.events[i].is_unfocused) {\n\t\t\t\t\tstartIndex = i + 1;\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst events = this.events\n\t\t\t\t.slice(startIndex)\n\t\t\t\t.map(({ timestamp, path, is_unfocused: isUnfocused }) => {\n\t\t\t\t\tconst millis = moment(timestamp).diff(moment(this.begin), \"millis\");\n\n\t\t\t\t\tif (isUnfocused) {\n\t\t\t\t\t\tconst duration = moment\n\t\t\t\t\t\t\t.utc(timestamp)\n\t\t\t\t\t\t\t.diff(moment.utc(begin), \"milliseconds\");\n\n\t\t\t\t\t\treturn `${duration}ms unfocused`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn `${millis}ms ${getShortURL(path)}`;\n\t\t\t\t});\n\n\t\t\tconst attendeeSet =\n\t\t\t\tthis.attendee_set && this.attendee_set.length\n\t\t\t\t\t? `\\n${this.attendee_set\n\t\t\t\t\t\t\t.map((attendee) => getShortURL(attendee.url()))\n\t\t\t\t\t\t\t.join(\" \")} attending`\n\t\t\t\t\t: \"\";\n\n\t\t\tconst remoteAttendeeSet =\n\t\t\t\tthis.remote_attendee_set && this.remote_attendee_set.length\n\t\t\t\t\t? `\\n${this.remote_attendee_set\n\t\t\t\t\t\t\t.map((attendee) => getShortURL(attendee.url()))\n\t\t\t\t\t\t\t.join(\" \")} attending remotely`\n\t\t\t\t\t: \"\";\n\n\t\t\tconst modeTypeMap = {\n\t\t\t\tpresent: \"viewing\",\n\t\t\t\tview: \"viewing\",\n\t\t\t\tprep: \"preparing\",\n\t\t\t\treview: \"reviewing\",\n\t\t\t};\n\n\t\t\tconst modeType = modeTypeMap[this.mode];\n\n\t\t\t// Note the newline is required at the end for the parser\n\t\t\t// to understand this\n\t\t\tlet compact = dedent`\n\t\t\t${user} ${modeType} ${url}${attendeeSet}${remoteAttendeeSet}\n\t\t\t${begin}\n\t\t\t${events.join(\"\\n\")}\\n\n\t\t`;\n\n\t\t\tif (this.end) {\n\t\t\t\tconst end = moment.utc(this.end).format(DATE_FORMAT);\n\t\t\t\tcompact += end;\n\t\t\t\tif (this.provisional) {\n\t\t\t\t\tcompact += \" provisional\";\n\t\t\t\t}\n\t\t\t\tcompact += \"\\n\";\n\t\t\t}\n\n\t\t\treturn compact;\n\t\t},\n\n\t\t/**\n\t\t * Add a new event to the log\n\t\t * @param {string} path - URL path. Matches a deck related endpoint (deckversion, section, slide. etc.)\n\t\t * @param {any} timestamp - A timestamp for the event - note that it can be anything that can be passed to moment\n\t\t * @example\n\t\t * const timingLog = new TimingLogModel();\n\t\t * timingLog.addEvent(\"http://client.salespreso.com/api/sections/28/\", moment());\n\t\t * timingLog.addEvent(\"http://client.salespreso.com/api/slides/100/\", \"2016-10-27T00:42:47.045186Z\");\n\t\t */\n\t\taddEvent(path, timestamp) {\n\t\t\tif (!path) {\n\t\t\t\tthrow new Error(\"A path is required\");\n\t\t\t}\n\t\t\tif (!timestamp) {\n\t\t\t\tthrow new Error(\"A timestamp is required\");\n\t\t\t}\n\n\t\t\tconst time = moment.utc(timestamp);\n\t\t\tconst isUnfocused = path === \"unfocused\";\n\n\t\t\tif (isUnfocused) {\n\t\t\t\tif (!this.events.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfor (let i = this.events.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (!this.events[i].is_unfocused) {\n\t\t\t\t\t\tpath = this.events[i].path;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.events.push({\n\t\t\t\ttimestamp: time.format(DATE_FORMAT_T),\n\t\t\t\tpath,\n\t\t\t\tis_unfocused: isUnfocused,\n\t\t\t});\n\t\t},\n\n\t\tcheckEventsAscending() {\n\t\t\tlet lastDate = null;\n\t\t\tlet sortEvents = false;\n\n\t\t\tfor (const event of this.events) {\n\t\t\t\tconst timestamp = moment(event.timestamp);\n\n\t\t\t\tif (lastDate && lastDate.isAfter(timestamp)) {\n\t\t\t\t\tsortEvents = true;\n\t\t\t\t}\n\n\t\t\t\tlastDate = timestamp;\n\t\t\t}\n\n\t\t\tif (sortEvents) {\n\t\t\t\tconst events = this.events.map(({ timestamp, path }) => {\n\t\t\t\t\treturn `${timestamp} ${getShortURL(path)}`;\n\t\t\t\t});\n\t\t\t\tlog.warn(dedent`\n\t\t\t\t\tEvents must be in ascending order. Instead we found:\n\n\t\t\t\t\t${this.begin} - begin\n\t\t\t\t\t${events.join(\"\\n\")}\n\t\t\t\t\t${this.end} - end\n\t\t\t\t`);\n\n\t\t\t\tthis.sortEvents();\n\t\t\t}\n\t\t},\n\n\t\t// We can't trust the server to give us events in the\n\t\t// correct order, so we sort them when necessary\n\t\tsortEvents() {\n\t\t\tthis.events.sort((event1, event2) => {\n\t\t\t\tconst diff = moment(event2.timestamp).diff(moment(event1.timestamp));\n\n\t\t\t\tif (diff > 0) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (diff < 0) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\n\t\t\t\treturn 0;\n\t\t\t});\n\t\t},\n\n\t\tsave(data, options) {\n\t\t\tif (!this.events.length) {\n\t\t\t\treturn Promise.resolve(this.toJSON());\n\t\t\t}\n\n\t\t\tif (options && options.patch) {\n\t\t\t\treturn BaseModel.prototype.save.call(this, data, options);\n\t\t\t}\n\n\t\t\tthis.checkEventsAscending();\n\n\t\t\tconst method = this.isNew() ? \"post\" : \"put\";\n\n\t\t\treturn superagent[method](this.url())\n\t\t\t\t.set(Auth.headers)\n\t\t\t\t.type(\"application/vnd.salespreso+timinglog\")\n\t\t\t\t.send(this.toCompactFormat())\n\t\t\t\t.then(({ body }) => {\n\t\t\t\t\tthis.set(_.omit(body, [\"events\"]));\n\t\t\t\t\treturn body;\n\t\t\t\t})\n\t\t\t\t.catch(superagent.SuperagentPromiseError, (e) => {\n\t\t\t\t\tif (e.status === 405 && e.res.body.detail.indexOf(\"end\") > -1) {\n\t\t\t\t\t\t// Don't send timing log events if the tracking is ended.\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ((e.status >= 400 && e.status <= 499) || e.status === 503) {\n\t\t\t\t\t\te.message += `\\nBody: ${JSON.stringify(e.res.body)}`;\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t});\n\t\t},\n\t}\n);\n\nregister(\"TimingLogModel\", TimingLogModel);\n"],"file":"timing-log.js"}
@@ -4,85 +4,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
 
5
5
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
6
6
 
7
- var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
8
-
9
- var _dedentJs = _interopRequireDefault(require("dedent-js"));
7
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
8
 
11
- var _moment = _interopRequireDefault(require("moment"));
9
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
10
 
13
11
  var _api = require("sp-test/api");
14
12
 
15
13
  var _timingLog = require("./timing-log.js");
16
14
 
17
- function _templateObject7() {
18
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\\n\n\t\t"]);
19
-
20
- _templateObject7 = function _templateObject7() {
21
- return data;
22
- };
23
-
24
- return data;
25
- }
26
-
27
- function _templateObject6() {
28
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\\n\n\t\t"]);
29
-
30
- _templateObject6 = function _templateObject6() {
31
- return data;
32
- };
33
-
34
- return data;
35
- }
36
-
37
- function _templateObject5() {
38
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\\n\n\t\t"]);
39
-
40
- _templateObject5 = function _templateObject5() {
41
- return data;
42
- };
43
-
44
- return data;
45
- }
46
-
47
- function _templateObject4() {
48
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\\n\n\t\t"]);
49
-
50
- _templateObject4 = function _templateObject4() {
51
- return data;
52
- };
53
-
54
- return data;
55
- }
56
-
57
- function _templateObject3() {
58
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\\n\n\t\t"]);
59
-
60
- _templateObject3 = function _templateObject3() {
61
- return data;
62
- };
63
-
64
- return data;
65
- }
66
-
67
- function _templateObject2() {
68
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t\t\t/api/users/9/ ", " /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\n\n\n\t\t\t\t"], ["\n\t\t\t\t\t\t/api/users/9/ ", " /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\\n\\n\n\t\t\t\t"]);
69
-
70
- _templateObject2 = function _templateObject2() {
71
- return data;
72
- };
73
-
74
- return data;
75
- }
76
-
77
- function _templateObject() {
78
- var data = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\\n\n\t\t"]);
15
+ var _dedentJs = _interopRequireDefault(require("dedent-js"));
79
16
 
80
- _templateObject = function _templateObject() {
81
- return data;
82
- };
17
+ var _moment = _interopRequireDefault(require("moment"));
83
18
 
84
- return data;
85
- }
19
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7;
86
20
 
87
21
  describe("TimingLogModel", function () {
88
22
  var events = [{
@@ -124,20 +58,18 @@ describe("TimingLogModel", function () {
124
58
  });
125
59
  timingLog.events = events;
126
60
  var code = timingLog.toCompactFormat();
127
- var assumedCode = (0, _dedentJs.default)(_templateObject());
61
+ var assumedCode = (0, _dedentJs.default)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\\n\n\t\t"])));
128
62
  expect(code).toEqual(assumedCode);
129
63
  });
130
64
  describe.each([[undefined, "viewing"], ["present", "viewing"], ["view", "viewing"], ["prep", "preparing"], ["review", "reviewing"]])("{ mode: \"%s\" }", function (mode, modeType) {
131
- it("should show '".concat(modeType, "' when mode is ").concat(mode), function _callee() {
65
+ it("should show '".concat(modeType, "' when mode is ").concat(mode), /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
132
66
  var TimingLogModel, timingLog, actual, expected;
133
- return _regenerator.default.async(function _callee$(_context) {
67
+ return _regenerator.default.wrap(function _callee$(_context) {
134
68
  while (1) {
135
69
  switch (_context.prev = _context.next) {
136
70
  case 0:
137
- _timingLog.TimingLogModel = ((0, _api.G)("TimingLogModel"), function () {
138
- throw new Error('"' + "TimingLogModel" + '" is read-only.');
139
- }());
140
- timingLog = new _timingLog.TimingLogModel({
71
+ TimingLogModel = (0, _api.G)("TimingLogModel");
72
+ timingLog = new TimingLogModel({
141
73
  appointment: {
142
74
  id: 20
143
75
  },
@@ -153,7 +85,7 @@ describe("TimingLogModel", function () {
153
85
  }
154
86
 
155
87
  actual = timingLog.toCompactFormat();
156
- expected = (0, _dedentJs.default)(_templateObject2(), modeType);
88
+ expected = (0, _dedentJs.default)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t\t\t\t/api/users/9/ ", " /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\n\n\n\t\t\t\t"], ["\n\t\t\t\t\t\t/api/users/9/ ", " /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\\n\\n\n\t\t\t\t"])), modeType);
157
89
  expect(actual).toEqual(expected);
158
90
 
159
91
  case 6:
@@ -161,8 +93,8 @@ describe("TimingLogModel", function () {
161
93
  return _context.stop();
162
94
  }
163
95
  }
164
- });
165
- });
96
+ }, _callee);
97
+ })));
166
98
  });
167
99
  it("should add an end date if specified", function () {
168
100
  var TimingLogModel = (0, _api.G)("TimingLogModel");
@@ -179,7 +111,7 @@ describe("TimingLogModel", function () {
179
111
  });
180
112
  timingLog.events = events;
181
113
  var code = timingLog.toCompactFormat();
182
- var assumedCode = (0, _dedentJs.default)(_templateObject3());
114
+ var assumedCode = (0, _dedentJs.default)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\\n\n\t\t"])));
183
115
  expect(code).toEqual(assumedCode);
184
116
  });
185
117
  it("should use provisional if flag is set", function () {
@@ -196,7 +128,7 @@ describe("TimingLogModel", function () {
196
128
  });
197
129
  timingLog.events = events;
198
130
  var code = timingLog.toCompactFormat();
199
- var assumedCode = (0, _dedentJs.default)(_templateObject4());
131
+ var assumedCode = (0, _dedentJs.default)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\\n\n\t\t"])));
200
132
  expect(code).toEqual(assumedCode);
201
133
  });
202
134
  it("should show attendees if set", function () {
@@ -217,7 +149,7 @@ describe("TimingLogModel", function () {
217
149
  });
218
150
  timingLog.events = events;
219
151
  var code = timingLog.toCompactFormat();
220
- var assumedCode = (0, _dedentJs.default)(_templateObject5());
152
+ var assumedCode = (0, _dedentJs.default)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\\n\n\t\t"])));
221
153
  expect(code).toEqual(assumedCode);
222
154
  });
223
155
  it("should add unfocused time", function () {
@@ -241,7 +173,7 @@ describe("TimingLogModel", function () {
241
173
  modifiedEvents[2].is_unfocused = true;
242
174
  timingLog.events = modifiedEvents;
243
175
  var code = timingLog.toCompactFormat();
244
- var assumedCode = (0, _dedentJs.default)(_templateObject6());
176
+ var assumedCode = (0, _dedentJs.default)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\\n\n\t\t"])));
245
177
  expect(code).toEqual(assumedCode);
246
178
  });
247
179
  it("should remove an unfocused events if they are first", function () {
@@ -274,7 +206,7 @@ describe("TimingLogModel", function () {
274
206
  is_unfocused: false
275
207
  }];
276
208
  var code = timingLog.toCompactFormat();
277
- var assumedCode = (0, _dedentJs.default)(_templateObject7());
209
+ var assumedCode = (0, _dedentJs.default)(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2.default)(["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\n\n\t\t"], ["\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\\n\n\t\t"])));
278
210
  expect(code).toEqual(assumedCode);
279
211
  });
280
212
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/timing-log.spec.js"],"names":["describe","events","path","timestamp","is_unfocused","it","TimingLogModel","timingLog","currentTime","addEvent","expect","toEqual","appointment","id","user","begin","code","toCompactFormat","assumedCode","dedent","each","undefined","mode","modeType","actual","expected","end","provisional","attendee_set","remote_attendee_set","modifiedEvents"],"mappings":"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","sourcesContent":["import dedent from \"dedent-js\";\nimport moment from \"moment\";\nimport { G } from \"sp-test/api\";\n\nimport { TimingLogModel } from \"./timing-log.js\";\n\ndescribe(\"TimingLogModel\", () => {\n\tconst events = [\n\t\t{\n\t\t\tpath: \"/api/deckversions/4/\",\n\t\t\ttimestamp: \"2016-10-27T00:42:47.045186Z\",\n\t\t\tis_unfocused: false\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/sections/28/\",\n\t\t\ttimestamp: \"2016-10-27T00:43:59.430102Z\",\n\t\t\tis_unfocused: false\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/slides/380/\",\n\t\t\ttimestamp: \"2016-10-27T00:45:01.038661Z\",\n\t\t\tis_unfocused: false\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/slides/378/\",\n\t\t\ttimestamp: \"2016-10-27T00:45:13.495713Z\",\n\t\t\tis_unfocused: false\n\t\t}\n\t];\n\n\tit(\"should create logs with a timestamp right now\", function() {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\t\tconst timingLog = new TimingLogModel();\n\t\tconst currentTime = \"2016-10-27T00:42:47.044135Z\";\n\t\ttimingLog.addEvent(\"/api/sections/1/\", currentTime);\n\n\t\t// Some precision in milliseconds is lost here\n\t\texpect(timingLog.events[0].timestamp).toEqual(\n\t\t\t\"2016-10-27T00:42:47.044000Z\"\n\t\t);\n\t\texpect(timingLog.events[0].path).toEqual(\"/api/sections/1/\");\n\t});\n\n\tit(\"should generate a timinglog compact format string\", function() {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tdescribe.each([\n\t\t[undefined, \"viewing\"],\n\t\t[\"present\", \"viewing\"],\n\t\t[\"view\", \"viewing\"],\n\t\t[\"prep\", \"preparing\"],\n\t\t[\"review\", \"reviewing\"]\n\t])(`{ mode: \"%s\" }`, (mode, modeType) => {\n\t\tit(`should show '${modeType}' when mode is ${mode}`, async () => {\n\t\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\t\tconst timingLog = new TimingLogModel({\n\t\t\t\tappointment: { id: 20 },\n\t\t\t\tuser: { id: 9 },\n\t\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t\t});\n\n\t\t\t// First test is checking the default value, so we just\n\t\t\t// don't add anything in that one case.\n\t\t\tif (mode) {\n\t\t\t\ttimingLog.mode = mode;\n\t\t\t}\n\n\t\t\tconst actual = timingLog.toCompactFormat();\n\t\t\tconst expected = dedent`\n\t\t\t\t\t\t/api/users/9/ ${modeType} /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\\n\\n\n\t\t\t\t`;\n\n\t\t\texpect(actual).toEqual(expected);\n\t\t});\n\t});\n\n\tit(\"should add an end date if specified\", function() {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t\tend: \"2016-10-27T00:48:13.495713Z\",\n\t\t\tprovisional: false\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should use provisional if flag is set\", function() {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t\tend: \"2016-10-27T00:48:13.495713Z\",\n\t\t\tprovisional: true\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should show attendees if set\", function() {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should add unfocused time\", function() {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\tconst modifiedEvents = [...events];\n\t\tmodifiedEvents[2].path = \"/api/sections/28/\";\n\t\tmodifiedEvents[2].is_unfocused = true;\n\n\t\ttimingLog.events = modifiedEvents;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should remove an unfocused events if they are first\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\ttimingLog.events = [\n\t\t\t{\n\t\t\t\tpath: \"/api/deckversions/4/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:42:47.045186Z\",\n\t\t\t\tis_unfocused: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"/api/sections/28/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:43:59.430102Z\",\n\t\t\t\tis_unfocused: true\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"/api/slides/380/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:45:01.038661Z\",\n\t\t\t\tis_unfocused: false\n\t\t\t}\n\t\t];\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n});\n\ndescribe(\".addEvent\", () => {\n\tit(\"should strip unfocused event if no previous event\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\ttimingLog.addEvent(\"unfocused\", moment());\n\n\t\texpect(timingLog.events).toEqual([]);\n\t});\n\n\tit(\"unfocused event path should match previous real content\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\"\n\t\t});\n\n\t\ttimingLog.addEvent(\"/api/slides/380/\", \"2016-10-27T00:42:47.044135Z\");\n\t\ttimingLog.addEvent(\"unfocused\", \"2016-10-27T00:42:47.044135Z\");\n\n\t\texpect(timingLog.events[1]).toEqual({\n\t\t\tis_unfocused: true,\n\t\t\tpath: \"/api/slides/380/\",\n\t\t\ttimestamp: \"2016-10-27T00:42:47.044000Z\"\n\t\t});\n\t});\n});\n"],"file":"timing-log.spec.js"}
1
+ {"version":3,"sources":["../../src/models/timing-log.spec.js"],"names":["describe","events","path","timestamp","is_unfocused","it","TimingLogModel","timingLog","currentTime","addEvent","expect","toEqual","appointment","id","user","begin","code","toCompactFormat","assumedCode","dedent","each","undefined","mode","modeType","actual","expected","end","provisional","attendee_set","remote_attendee_set","modifiedEvents"],"mappings":"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","sourcesContent":["import { G } from \"sp-test/api\";\nimport { TimingLogModel } from \"./timing-log.js\";\nimport dedent from \"dedent-js\";\nimport moment from \"moment\";\n\ndescribe(\"TimingLogModel\", () => {\n\tconst events = [\n\t\t{\n\t\t\tpath: \"/api/deckversions/4/\",\n\t\t\ttimestamp: \"2016-10-27T00:42:47.045186Z\",\n\t\t\tis_unfocused: false,\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/sections/28/\",\n\t\t\ttimestamp: \"2016-10-27T00:43:59.430102Z\",\n\t\t\tis_unfocused: false,\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/slides/380/\",\n\t\t\ttimestamp: \"2016-10-27T00:45:01.038661Z\",\n\t\t\tis_unfocused: false,\n\t\t},\n\t\t{\n\t\t\tpath: \"/api/slides/378/\",\n\t\t\ttimestamp: \"2016-10-27T00:45:13.495713Z\",\n\t\t\tis_unfocused: false,\n\t\t},\n\t];\n\n\tit(\"should create logs with a timestamp right now\", function () {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\t\tconst timingLog = new TimingLogModel();\n\t\tconst currentTime = \"2016-10-27T00:42:47.044135Z\";\n\t\ttimingLog.addEvent(\"/api/sections/1/\", currentTime);\n\n\t\t// Some precision in milliseconds is lost here\n\t\texpect(timingLog.events[0].timestamp).toEqual(\n\t\t\t\"2016-10-27T00:42:47.044000Z\"\n\t\t);\n\t\texpect(timingLog.events[0].path).toEqual(\"/api/sections/1/\");\n\t});\n\n\tit(\"should generate a timinglog compact format string\", function () {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t\t1ms /api/deckversions/4/\n\t\t\t\t72386ms /api/sections/28/\n\t\t\t\t133994ms /api/slides/380/\n\t\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tdescribe.each([\n\t\t[undefined, \"viewing\"],\n\t\t[\"present\", \"viewing\"],\n\t\t[\"view\", \"viewing\"],\n\t\t[\"prep\", \"preparing\"],\n\t\t[\"review\", \"reviewing\"],\n\t])(`{ mode: \"%s\" }`, (mode, modeType) => {\n\t\tit(`should show '${modeType}' when mode is ${mode}`, async () => {\n\t\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\t\tconst timingLog = new TimingLogModel({\n\t\t\t\tappointment: { id: 20 },\n\t\t\t\tuser: { id: 9 },\n\t\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t\t});\n\n\t\t\t// First test is checking the default value, so we just\n\t\t\t// don't add anything in that one case.\n\t\t\tif (mode) {\n\t\t\t\ttimingLog.mode = mode;\n\t\t\t}\n\n\t\t\tconst actual = timingLog.toCompactFormat();\n\t\t\tconst expected = dedent`\n\t\t\t\t\t\t/api/users/9/ ${modeType} /api/appointments/20/\n\t\t\t\t\t\t2016-10-27 00:42:47.044000Z\\n\\n\n\t\t\t\t`;\n\n\t\t\texpect(actual).toEqual(expected);\n\t\t});\n\t});\n\n\tit(\"should add an end date if specified\", function () {\n\t\tconst TimingLogModel = G(\"TimingLogModel\");\n\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t\tend: \"2016-10-27T00:48:13.495713Z\",\n\t\t\tprovisional: false,\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should use provisional if flag is set\", function () {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t\tend: \"2016-10-27T00:48:13.495713Z\",\n\t\t\tprovisional: true,\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\n\t\t\t2016-10-27 00:48:13.495000Z provisional\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should show attendees if set\", function () {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\ttimingLog.events = events;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms /api/slides/380/\n\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should add unfocused time\", function () {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\tconst modifiedEvents = [...events];\n\t\tmodifiedEvents[2].path = \"/api/sections/28/\";\n\t\tmodifiedEvents[2].is_unfocused = true;\n\n\t\ttimingLog.events = modifiedEvents;\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t1ms /api/deckversions/4/\n\t\t\t72386ms /api/sections/28/\n\t\t\t133994ms unfocused\n\t\t\t146451ms /api/slides/378/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n\n\tit(\"should remove an unfocused events if they are first\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\ttimingLog.events = [\n\t\t\t{\n\t\t\t\tpath: \"/api/deckversions/4/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:42:47.045186Z\",\n\t\t\t\tis_unfocused: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"/api/sections/28/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:43:59.430102Z\",\n\t\t\t\tis_unfocused: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: \"/api/slides/380/\",\n\t\t\t\ttimestamp: \"2016-10-27T00:45:01.038661Z\",\n\t\t\t\tis_unfocused: false,\n\t\t\t},\n\t\t];\n\n\t\tconst code = timingLog.toCompactFormat();\n\t\tconst assumedCode = dedent`\n\t\t\t/api/users/9/ viewing /api/appointments/20/\n\t\t\t/api/users/10/ attending\n\t\t\t/api/users/11/ attending remotely\n\t\t\t2016-10-27 00:42:47.044000Z\n\t\t\t133994ms /api/slides/380/\\n\n\t\t`;\n\n\t\texpect(code).toEqual(assumedCode);\n\t});\n});\n\ndescribe(\".addEvent\", () => {\n\tit(\"should strip unfocused event if no previous event\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\ttimingLog.addEvent(\"unfocused\", moment());\n\n\t\texpect(timingLog.events).toEqual([]);\n\t});\n\n\tit(\"unfocused event path should match previous real content\", () => {\n\t\tconst timingLog = new TimingLogModel({\n\t\t\tappointment: { id: 20 },\n\t\t\tuser: { id: 9 },\n\t\t\tattendee_set: [{ id: 10 }],\n\t\t\tremote_attendee_set: [{ id: 11 }],\n\t\t\tbegin: \"2016-10-27T00:42:47.044135Z\",\n\t\t});\n\n\t\ttimingLog.addEvent(\"/api/slides/380/\", \"2016-10-27T00:42:47.044135Z\");\n\t\ttimingLog.addEvent(\"unfocused\", \"2016-10-27T00:42:47.044135Z\");\n\n\t\texpect(timingLog.events[1]).toEqual({\n\t\t\tis_unfocused: true,\n\t\t\tpath: \"/api/slides/380/\",\n\t\t\ttimestamp: \"2016-10-27T00:42:47.044000Z\",\n\t\t});\n\t});\n});\n"],"file":"timing-log.spec.js"}
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.TranscribeSocketModel = void 0;
7
7
 
8
- var _stateRegister = require("../state-register.js");
9
-
10
8
  var _base = require("./base.js");
11
9
 
10
+ var _stateRegister = require("../state-register.js");
11
+
12
12
  /**
13
13
  * @constructor
14
14
  * @alias models.TranscribeSocketModel
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/transcribe-socket.js"],"names":["TranscribeSocketModel","BaseModel","extend","modelName","props","presigned_url"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;;AAKO,IAAMA,qBAAqB,GAAGC,gBAAUC,MAAV;AACpC;AAA4C;AAC3CC,EAAAA,SAAS,EAAE,mBADgC;AAG3CC,EAAAA,KAAK,EAAE;AACNC,IAAAA,aAAa,EAAE;AADT;AAHoC,CADR,CAA9B;;;AAUP,6BAAS,uBAAT,EAAkCL,qBAAlC","sourcesContent":["import { register } from \"../state-register.js\";\nimport { BaseModel } from \"./base.js\";\n\n/**\n * @constructor\n * @alias models.TranscribeSocketModel\n * @extends models.BaseModel\n */\nexport const TranscribeSocketModel = BaseModel.extend(\n\t/** @lends models.TranscribeSocketModel# */ {\n\t\tmodelName: \"transcribe-socket\",\n\n\t\tprops: {\n\t\t\tpresigned_url: \"string\"\n\t\t}\n\t}\n);\n\nregister(\"TranscribeSocketModel\", TranscribeSocketModel);\n"],"file":"transcribe-socket.js"}
1
+ {"version":3,"sources":["../../src/models/transcribe-socket.js"],"names":["TranscribeSocketModel","BaseModel","extend","modelName","props","presigned_url"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,qBAAqB,GAAGC,gBAAUC,MAAV;AACpC;AAA4C;AAC3CC,EAAAA,SAAS,EAAE,mBADgC;AAG3CC,EAAAA,KAAK,EAAE;AACNC,IAAAA,aAAa,EAAE;AADT;AAHoC,CADR,CAA9B;;;AAUP,6BAAS,uBAAT,EAAkCL,qBAAlC","sourcesContent":["import { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TranscribeSocketModel\n * @extends models.BaseModel\n */\nexport const TranscribeSocketModel = BaseModel.extend(\n\t/** @lends models.TranscribeSocketModel# */ {\n\t\tmodelName: \"transcribe-socket\",\n\n\t\tprops: {\n\t\t\tpresigned_url: \"string\",\n\t\t},\n\t}\n);\n\nregister(\"TranscribeSocketModel\", TranscribeSocketModel);\n"],"file":"transcribe-socket.js"}
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.UploadModel = void 0;
7
7
 
8
- var _stateRegister = require("../state-register.js");
9
-
10
8
  var _base = require("./base.js");
11
9
 
10
+ var _stateRegister = require("../state-register.js");
11
+
12
12
  /**
13
13
  * @constructor
14
14
  * @alias models.UploadModel
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/upload.js"],"names":["UploadModel","BaseModel","extend","modelName","props","name","image_original"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;;AAKO,IAAMA,WAAW,GAAGC,gBAAUC,MAAV,CAAiB;AAC3CC,EAAAA,SAAS,EAAE,OADgC;;AAG3C;;;;AAIAC,EAAAA,KAAK,EAAE;AACNC,IAAAA,IAAI,EAAE,QADA;AAENC,IAAAA,cAAc,EAAE;AAFV;AAPoC,CAAjB,CAApB;;;AAaP,6BAAS,aAAT,EAAwBN,WAAxB","sourcesContent":["import { register } from \"../state-register.js\";\nimport { BaseModel } from \"./base.js\";\n\n/**\n * @constructor\n * @alias models.UploadModel\n * @extends models.BaseModel\n */\nexport const UploadModel = BaseModel.extend({\n\tmodelName: \"files\",\n\n\t/**\n\t * @property {string} name\n\t * @property {string} image_original\n\t */\n\tprops: {\n\t\tname: \"string\",\n\t\timage_original: \"string\"\n\t}\n});\n\nregister(\"UploadModel\", UploadModel);\n"],"file":"upload.js"}
1
+ {"version":3,"sources":["../../src/models/upload.js"],"names":["UploadModel","BaseModel","extend","modelName","props","name","image_original"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,WAAW,GAAGC,gBAAUC,MAAV,CAAiB;AAC3CC,EAAAA,SAAS,EAAE,OADgC;;AAG3C;AACD;AACA;AACA;AACCC,EAAAA,KAAK,EAAE;AACNC,IAAAA,IAAI,EAAE,QADA;AAENC,IAAAA,cAAc,EAAE;AAFV;AAPoC,CAAjB,CAApB;;;AAaP,6BAAS,aAAT,EAAwBN,WAAxB","sourcesContent":["import { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.UploadModel\n * @extends models.BaseModel\n */\nexport const UploadModel = BaseModel.extend({\n\tmodelName: \"files\",\n\n\t/**\n\t * @property {string} name\n\t * @property {string} image_original\n\t */\n\tprops: {\n\t\tname: \"string\",\n\t\timage_original: \"string\",\n\t},\n});\n\nregister(\"UploadModel\", UploadModel);\n"],"file":"upload.js"}
@@ -13,10 +13,10 @@ require("../collections/teams.js");
13
13
 
14
14
  var _api = require("../api.js");
15
15
 
16
- var _stateRegister = require("../state-register.js");
17
-
18
16
  var _base = require("./base.js");
19
17
 
18
+ var _stateRegister = require("../state-register.js");
19
+
20
20
  /**
21
21
 
22
22
  * @constructor
@@ -123,7 +123,8 @@ var UserModel = _base.BaseModel.extend(
123
123
  deps: ["actions"],
124
124
  fn: function fn() {
125
125
  var presets = {
126
- canCreateCompanyPresets: this.actions.indexOf("Manage Deck Presets") > -1
126
+ canCreateCompanyPresets: this.actions.indexOf("Manage Deck Presets") > -1,
127
+ canCreateTeamPresets: this.actions.indexOf("Manage Team Presets") > -1
127
128
  };
128
129
  var presomanager = {
129
130
  isGlobalTemporarySlideManager: this.actions.indexOf("Manage Temporary Slides") > -1,