@livepreso/api 6.45.0 → 6.47.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 (364) hide show
  1. package/.rush/temp/1aebf46f78ad5c45f82f8147751890adb37bef9d.log +10 -0
  2. package/.rush/temp/3cdc82c352e8ed90607952873f3aa4c200490874.log +10 -0
  3. package/.rush/temp/5489ab737e406518983c16c57fc3e1edc07c0341.log +10 -0
  4. package/.rush/temp/924652444ab5a6063f328a2217123a2227058896.log +10 -0
  5. package/.rush/temp/9f2030f96d62f3e38052e35201819a216566f14f.log +10 -0
  6. package/.rush/temp/operation/test/all.log +19 -0
  7. package/.rush/temp/operation/test/state.json +3 -0
  8. package/.rush/temp/package-deps_build.json +156 -141
  9. package/.rush/temp/shrinkwrap-deps.json +281 -214
  10. package/CHANGELOG.json +29 -0
  11. package/CHANGELOG.md +15 -1
  12. package/README.md +4 -4
  13. package/api.build.log +6 -3
  14. package/api.test.cache.log +1 -0
  15. package/api.test.log +19 -0
  16. package/cjs/api.js +18 -2
  17. package/cjs/api.js.map +1 -1
  18. package/cjs/auth.js +3 -3
  19. package/cjs/auth.js.map +1 -1
  20. package/cjs/collections/activity.js.map +1 -1
  21. package/cjs/collections/adjunct-sections.js.map +1 -1
  22. package/cjs/collections/adjunct-slides.js.map +1 -1
  23. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  24. package/cjs/collections/appointment-adjunct-tags.js.map +1 -1
  25. package/cjs/collections/appointment-deckversion-tags.js.map +1 -1
  26. package/cjs/collections/appointment-editors.js.map +1 -1
  27. package/cjs/collections/appointment-section-tags.js.map +1 -1
  28. package/cjs/collections/appointment-slide-tags.js.map +1 -1
  29. package/cjs/collections/appointment-tags.js +9 -7
  30. package/cjs/collections/appointment-tags.js.map +1 -1
  31. package/cjs/collections/appointment-templates.js +36 -0
  32. package/cjs/collections/appointment-templates.js.map +1 -0
  33. package/cjs/collections/appointments.js.map +1 -1
  34. package/cjs/collections/assets.js.map +1 -1
  35. package/cjs/collections/auto-adjuncts.js.map +1 -1
  36. package/cjs/collections/base.js +4 -0
  37. package/cjs/collections/base.js.map +1 -1
  38. package/cjs/collections/base.spec.js.map +1 -1
  39. package/cjs/collections/cms-vals.js +5 -0
  40. package/cjs/collections/cms-vals.js.map +1 -1
  41. package/cjs/collections/contact-phones.js +28 -0
  42. package/cjs/collections/contact-phones.js.map +1 -0
  43. package/cjs/collections/contacts.js.map +1 -1
  44. package/cjs/collections/created-assets.js.map +1 -1
  45. package/cjs/collections/customers.js.map +1 -1
  46. package/cjs/collections/deck-notes.js.map +1 -1
  47. package/cjs/collections/deck-version-screenshots.js.map +1 -1
  48. package/cjs/collections/deck-versions.js.map +1 -1
  49. package/cjs/collections/decks.js.map +1 -1
  50. package/cjs/collections/deleted-assets.js.map +1 -1
  51. package/cjs/collections/dispatches.js.map +1 -1
  52. package/cjs/collections/event-objects.js.map +1 -1
  53. package/cjs/collections/events.js.map +1 -1
  54. package/cjs/collections/groups.js.map +1 -1
  55. package/cjs/collections/images.js.map +1 -1
  56. package/cjs/collections/locations.js.map +1 -1
  57. package/cjs/collections/opportunities.js.map +1 -1
  58. package/cjs/collections/pack-diffs.js.map +1 -1
  59. package/cjs/collections/packs.js.map +1 -1
  60. package/cjs/collections/presets.js.map +1 -1
  61. package/cjs/collections/section-selections.js.map +1 -1
  62. package/cjs/collections/sections.js.map +1 -1
  63. package/cjs/collections/signers.js +28 -0
  64. package/cjs/collections/signers.js.map +1 -0
  65. package/cjs/collections/signing-requests.js +28 -0
  66. package/cjs/collections/signing-requests.js.map +1 -0
  67. package/cjs/collections/slide-selections.js.map +1 -1
  68. package/cjs/collections/slides.js.map +1 -1
  69. package/cjs/collections/snapshots.js.map +1 -1
  70. package/cjs/collections/sub-slides.js.map +1 -1
  71. package/cjs/collections/tags.js.map +1 -1
  72. package/cjs/collections/teams.js.map +1 -1
  73. package/cjs/collections/templates.js.map +1 -1
  74. package/cjs/collections/uploads.js.map +1 -1
  75. package/cjs/collections/users.js.map +1 -1
  76. package/cjs/collections.js +52 -13
  77. package/cjs/collections.js.map +1 -1
  78. package/cjs/fixtures.js +232 -0
  79. package/cjs/fixtures.js.map +1 -0
  80. package/cjs/index.js +28 -4
  81. package/cjs/index.js.map +1 -1
  82. package/cjs/models/activity-item.js +10 -2
  83. package/cjs/models/activity-item.js.map +1 -1
  84. package/cjs/models/adjunct-section.js +7 -2
  85. package/cjs/models/adjunct-section.js.map +1 -1
  86. package/cjs/models/adjunct-slide.js +7 -2
  87. package/cjs/models/adjunct-slide.js.map +1 -1
  88. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  89. package/cjs/models/adjunct.js +40 -0
  90. package/cjs/models/adjunct.js.map +1 -1
  91. package/cjs/models/appointment-adjunct-tags.js.map +1 -1
  92. package/cjs/models/appointment-deckversion-tags.js.map +1 -1
  93. package/cjs/models/appointment-editor.js.map +1 -1
  94. package/cjs/models/appointment-section-tags.js.map +1 -1
  95. package/cjs/models/appointment-slide-tags.js.map +1 -1
  96. package/cjs/models/appointment-stats.js.map +1 -1
  97. package/cjs/models/appointment-tags.js.map +1 -1
  98. package/cjs/models/appointment-template.js +28 -0
  99. package/cjs/models/appointment-template.js.map +1 -0
  100. package/cjs/models/appointment-viewing.js.map +1 -1
  101. package/cjs/models/appointment.js +108 -15
  102. package/cjs/models/appointment.js.map +1 -1
  103. package/cjs/models/asset.js +12 -0
  104. package/cjs/models/asset.js.map +1 -1
  105. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  106. package/cjs/models/auto-adjunct.js +2 -1
  107. package/cjs/models/auto-adjunct.js.map +1 -1
  108. package/cjs/models/base.js +25 -5
  109. package/cjs/models/base.js.map +1 -1
  110. package/cjs/models/base.spec.js.map +1 -1
  111. package/cjs/models/choicelist.js.map +1 -1
  112. package/cjs/models/cms-val.js +35 -1
  113. package/cjs/models/cms-val.js.map +1 -1
  114. package/cjs/models/cms-val.spec.js +32 -0
  115. package/cjs/models/cms-val.spec.js.map +1 -0
  116. package/cjs/models/contact-phone.js +66 -0
  117. package/cjs/models/contact-phone.js.map +1 -0
  118. package/cjs/models/contact.js.map +1 -1
  119. package/cjs/models/customer.js +3 -1
  120. package/cjs/models/customer.js.map +1 -1
  121. package/cjs/models/deck-note.js.map +1 -1
  122. package/cjs/models/deck-tags.js.map +1 -1
  123. package/cjs/models/deck-version-screenshot.js.map +1 -1
  124. package/cjs/models/deck-version.js +31 -8
  125. package/cjs/models/deck-version.js.map +1 -1
  126. package/cjs/models/deck.js.map +1 -1
  127. package/cjs/models/dispatch-preview.js.map +1 -1
  128. package/cjs/models/dispatch.js.map +1 -1
  129. package/cjs/models/event-object.js.map +1 -1
  130. package/cjs/models/event.js.map +1 -1
  131. package/cjs/models/feed-data.js.map +1 -1
  132. package/cjs/models/file.js.map +1 -1
  133. package/cjs/models/group.js.map +1 -1
  134. package/cjs/models/handover.js.map +1 -1
  135. package/cjs/models/hosted-preso.js.map +1 -1
  136. package/cjs/models/image.js.map +1 -1
  137. package/cjs/models/location.js.map +1 -1
  138. package/cjs/models/manifest-json.js +70 -2
  139. package/cjs/models/manifest-json.js.map +1 -1
  140. package/cjs/models/onshare.js.map +1 -1
  141. package/cjs/models/opportunity.js.map +1 -1
  142. package/cjs/models/pack-diff.js.map +1 -1
  143. package/cjs/models/pack.js.map +1 -1
  144. package/cjs/models/preset.js +4 -1
  145. package/cjs/models/preset.js.map +1 -1
  146. package/cjs/models/refresh-request.js +24 -0
  147. package/cjs/models/refresh-request.js.map +1 -1
  148. package/cjs/models/room.js.map +1 -1
  149. package/cjs/models/salesforce-lookup.js.map +1 -1
  150. package/cjs/models/section-selection.js.map +1 -1
  151. package/cjs/models/section.js.map +1 -1
  152. package/cjs/models/signer.js +47 -0
  153. package/cjs/models/signer.js.map +1 -0
  154. package/cjs/models/signing-request.js +66 -0
  155. package/cjs/models/signing-request.js.map +1 -0
  156. package/cjs/models/slide-selection.js.map +1 -1
  157. package/cjs/models/slide.js.map +1 -1
  158. package/cjs/models/snapshot.js +41 -2
  159. package/cjs/models/snapshot.js.map +1 -1
  160. package/cjs/models/snapshot.spec.js +51 -0
  161. package/cjs/models/snapshot.spec.js.map +1 -0
  162. package/cjs/models/sub-slide.js.map +1 -1
  163. package/cjs/models/support-ticket.js.map +1 -1
  164. package/cjs/models/tag.js.map +1 -1
  165. package/cjs/models/team.js +15 -2
  166. package/cjs/models/team.js.map +1 -1
  167. package/cjs/models/template.js +105 -3
  168. package/cjs/models/template.js.map +1 -1
  169. package/cjs/models/tenancy.js +3 -0
  170. package/cjs/models/tenancy.js.map +1 -1
  171. package/cjs/models/timing-log.js.map +1 -1
  172. package/cjs/models/timing-log.spec.js.map +1 -1
  173. package/cjs/models/token.js.map +1 -1
  174. package/cjs/models/transcribe-socket.js.map +1 -1
  175. package/cjs/models/user.js +7 -2
  176. package/cjs/models/user.js.map +1 -1
  177. package/cjs/models.js +52 -13
  178. package/cjs/models.js.map +1 -1
  179. package/cjs/presentation/appointment-presentation.js.map +1 -1
  180. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  181. package/cjs/presentation/base-presentation-model.js +23 -14
  182. package/cjs/presentation/base-presentation-model.js.map +1 -1
  183. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  184. package/cjs/presentation/presentation-deck.js +5 -1
  185. package/cjs/presentation/presentation-deck.js.map +1 -1
  186. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  187. package/cjs/presentation/presentation-decks.js.map +1 -1
  188. package/cjs/presentation/presentation-section.js +33 -8
  189. package/cjs/presentation/presentation-section.js.map +1 -1
  190. package/cjs/presentation/presentation-section.spec.js +13 -20
  191. package/cjs/presentation/presentation-section.spec.js.map +1 -1
  192. package/cjs/presentation/presentation-sections.js.map +1 -1
  193. package/cjs/presentation/presentation-slide.js +43 -9
  194. package/cjs/presentation/presentation-slide.js.map +1 -1
  195. package/cjs/presentation/presentation-slide.spec.js +11 -18
  196. package/cjs/presentation/presentation-slide.spec.js.map +1 -1
  197. package/cjs/presentation/presentation-slides.js.map +1 -1
  198. package/cjs/presentation/presentation-subslide.js.map +1 -1
  199. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  200. package/cjs/presentation/presentation-subslides.js.map +1 -1
  201. package/cjs/presentation/presentation.js +8 -3
  202. package/cjs/presentation/presentation.js.map +1 -1
  203. package/cjs/selections.js +106 -0
  204. package/cjs/selections.js.map +1 -0
  205. package/cjs/sync.js.map +1 -1
  206. package/cjs/utils.js +43 -6
  207. package/cjs/utils.js.map +1 -1
  208. package/cjs/utils.spec.js +1 -1
  209. package/cjs/utils.spec.js.map +1 -1
  210. package/jest.config.js +4 -3
  211. package/package.json +12 -9
  212. package/src/api.js +17 -2
  213. package/src/auth.js +3 -3
  214. package/src/collections/activity.js +4 -4
  215. package/src/collections/adjunct-sections.js +1 -1
  216. package/src/collections/adjunct-slides.js +1 -1
  217. package/src/collections/adjunct-sub-slides.js +1 -1
  218. package/src/collections/appointment-adjunct-tags.js +1 -1
  219. package/src/collections/appointment-deckversion-tags.js +2 -2
  220. package/src/collections/appointment-editors.js +1 -1
  221. package/src/collections/appointment-section-tags.js +1 -1
  222. package/src/collections/appointment-slide-tags.js +1 -1
  223. package/src/collections/appointment-tags.js +20 -18
  224. package/src/collections/appointment-templates.js +26 -0
  225. package/src/collections/appointments.js +9 -9
  226. package/src/collections/assets.js +1 -1
  227. package/src/collections/auto-adjuncts.js +1 -1
  228. package/src/collections/base.js +10 -6
  229. package/src/collections/base.spec.js +2 -2
  230. package/src/collections/cms-vals.js +5 -1
  231. package/src/collections/contact-phones.js +18 -0
  232. package/src/collections/contacts.js +1 -1
  233. package/src/collections/created-assets.js +1 -1
  234. package/src/collections/customers.js +1 -1
  235. package/src/collections/deck-notes.js +1 -1
  236. package/src/collections/deck-version-screenshots.js +1 -1
  237. package/src/collections/deck-versions.js +1 -1
  238. package/src/collections/decks.js +1 -1
  239. package/src/collections/deleted-assets.js +1 -1
  240. package/src/collections/dispatches.js +2 -2
  241. package/src/collections/event-objects.js +1 -1
  242. package/src/collections/events.js +1 -1
  243. package/src/collections/groups.js +1 -1
  244. package/src/collections/images.js +1 -1
  245. package/src/collections/locations.js +1 -1
  246. package/src/collections/opportunities.js +1 -1
  247. package/src/collections/pack-diffs.js +1 -1
  248. package/src/collections/packs.js +1 -1
  249. package/src/collections/presets.js +1 -1
  250. package/src/collections/section-selections.js +1 -1
  251. package/src/collections/sections.js +1 -1
  252. package/src/collections/signers.js +18 -0
  253. package/src/collections/signing-requests.js +18 -0
  254. package/src/collections/slide-selections.js +1 -1
  255. package/src/collections/slides.js +1 -1
  256. package/src/collections/snapshots.js +1 -1
  257. package/src/collections/sub-slides.js +1 -1
  258. package/src/collections/tags.js +1 -1
  259. package/src/collections/teams.js +1 -1
  260. package/src/collections/templates.js +1 -1
  261. package/src/collections/uploads.js +1 -1
  262. package/src/collections/users.js +1 -1
  263. package/src/collections.js +4 -1
  264. package/src/fixtures.js +195 -0
  265. package/src/index.js +2 -3
  266. package/src/models/activity-item.js +9 -1
  267. package/src/models/adjunct-section.js +7 -2
  268. package/src/models/adjunct-slide.js +7 -2
  269. package/src/models/adjunct-sub-slide.js +1 -1
  270. package/src/models/adjunct.js +39 -1
  271. package/src/models/appointment-adjunct-tags.js +1 -1
  272. package/src/models/appointment-deckversion-tags.js +1 -1
  273. package/src/models/appointment-editor.js +1 -1
  274. package/src/models/appointment-section-tags.js +1 -1
  275. package/src/models/appointment-slide-tags.js +1 -1
  276. package/src/models/appointment-stats.js +1 -1
  277. package/src/models/appointment-tags.js +1 -1
  278. package/src/models/appointment-template.js +19 -0
  279. package/src/models/appointment-viewing.js +1 -1
  280. package/src/models/appointment.js +104 -38
  281. package/src/models/asset.js +15 -1
  282. package/src/models/auto-adjunct-key-check.js +1 -1
  283. package/src/models/auto-adjunct.js +2 -1
  284. package/src/models/base.js +36 -21
  285. package/src/models/base.spec.js +18 -18
  286. package/src/models/choicelist.js +1 -1
  287. package/src/models/cms-val.js +24 -1
  288. package/src/models/cms-val.spec.js +14 -0
  289. package/src/models/contact-phone.js +57 -0
  290. package/src/models/contact.js +1 -1
  291. package/src/models/customer.js +3 -3
  292. package/src/models/deck-note.js +1 -1
  293. package/src/models/deck-tags.js +1 -1
  294. package/src/models/deck-version-screenshot.js +1 -1
  295. package/src/models/deck-version.js +32 -6
  296. package/src/models/deck.js +1 -1
  297. package/src/models/dispatch-preview.js +1 -1
  298. package/src/models/dispatch.js +1 -1
  299. package/src/models/event-object.js +1 -1
  300. package/src/models/event.js +1 -1
  301. package/src/models/feed-data.js +2 -2
  302. package/src/models/file.js +1 -1
  303. package/src/models/group.js +1 -1
  304. package/src/models/handover.js +1 -1
  305. package/src/models/hosted-preso.js +1 -1
  306. package/src/models/image.js +1 -1
  307. package/src/models/location.js +1 -1
  308. package/src/models/manifest-json.js +65 -5
  309. package/src/models/onshare.js +1 -1
  310. package/src/models/opportunity.js +1 -1
  311. package/src/models/pack-diff.js +1 -1
  312. package/src/models/pack.js +1 -1
  313. package/src/models/preset.js +4 -1
  314. package/src/models/refresh-request.js +16 -1
  315. package/src/models/room.js +1 -1
  316. package/src/models/salesforce-lookup.js +1 -1
  317. package/src/models/section-selection.js +1 -1
  318. package/src/models/section.js +1 -1
  319. package/src/models/signer.js +37 -0
  320. package/src/models/signing-request.js +56 -0
  321. package/src/models/slide-selection.js +1 -1
  322. package/src/models/slide.js +1 -1
  323. package/src/models/snapshot.js +30 -2
  324. package/src/models/snapshot.spec.js +31 -0
  325. package/src/models/sub-slide.js +1 -1
  326. package/src/models/support-ticket.js +1 -1
  327. package/src/models/tag.js +1 -1
  328. package/src/models/team.js +14 -3
  329. package/src/models/template.js +72 -2
  330. package/src/models/tenancy.js +4 -1
  331. package/src/models/timing-log.js +2 -2
  332. package/src/models/timing-log.spec.js +1 -1
  333. package/src/models/token.js +1 -1
  334. package/src/models/transcribe-socket.js +1 -1
  335. package/src/models/user.js +13 -2
  336. package/src/models.js +4 -1
  337. package/src/presentation/appointment-presentation.js +4 -4
  338. package/src/presentation/base-presentation-collection.js +1 -1
  339. package/src/presentation/base-presentation-model.js +25 -16
  340. package/src/presentation/base-presentation-model.spec.js +5 -5
  341. package/src/presentation/presentation-deck.js +28 -23
  342. package/src/presentation/presentation-deck.spec.js +4 -4
  343. package/src/presentation/presentation-decks.js +1 -1
  344. package/src/presentation/presentation-section.js +59 -31
  345. package/src/presentation/presentation-section.spec.js +31 -32
  346. package/src/presentation/presentation-sections.js +1 -1
  347. package/src/presentation/presentation-slide.js +51 -25
  348. package/src/presentation/presentation-slide.spec.js +21 -27
  349. package/src/presentation/presentation-slides.js +1 -1
  350. package/src/presentation/presentation-subslide.js +5 -5
  351. package/src/presentation/presentation-subslide.spec.js +3 -3
  352. package/src/presentation/presentation-subslides.js +1 -1
  353. package/src/presentation/presentation.js +5 -3
  354. package/src/selections.js +71 -0
  355. package/src/sync.js +1 -1
  356. package/src/utils.js +31 -8
  357. package/src/utils.spec.js +8 -8
  358. package/.rush/temp/package-deps_test.json +0 -172
  359. package/cjs/collections/appointment-duplicates.js +0 -29
  360. package/cjs/collections/appointment-duplicates.js.map +0 -1
  361. package/cjs/models/appointment-duplicate.js +0 -94
  362. package/cjs/models/appointment-duplicate.js.map +0 -1
  363. package/src/collections/appointment-duplicates.js +0 -19
  364. package/src/models/appointment-duplicate.js +0 -73
@@ -1,16 +1,26 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
8
  exports.TemplateModel = void 0;
7
9
 
10
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
11
+
12
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
+
8
14
  require("./deck-version.js");
9
15
 
10
16
  require("./asset.js");
11
17
 
18
+ var _auth = require("../auth.js");
19
+
12
20
  var _base = require("./base.js");
13
21
 
22
+ var _superagentBluebirdPromise = _interopRequireDefault(require("superagent-bluebird-promise"));
23
+
14
24
  var _stateRegister = require("../state-register.js");
15
25
 
16
26
  /**
@@ -28,32 +38,124 @@ var TemplateModel = _base.BaseModel.extend(
28
38
  * @property {date} modified_date
29
39
  * @property {string} title
30
40
  * @property {string} key
41
+ * @property {scope} scope
31
42
  * @property {number} sequence
32
- * @property {string} image_128
43
+ * @property {object} context
44
+ * @property {string} image_original
33
45
  * @property {string} image_128
34
46
  * @property {string} image_256
35
47
  * @property {string} image_512
36
48
  * @property {string[]} cmsvalkey_set
49
+ * @property {boolean} available_in_presos
37
50
  */
38
51
  props: {
39
52
  created_date: "date",
40
53
  modified_date: "date",
41
54
  title: "string",
42
55
  key: "string",
56
+ scope: {
57
+ type: "string",
58
+ default: "global",
59
+ values: ["global", "team", "user"]
60
+ },
43
61
  sequence: "number",
62
+ context: {
63
+ type: "object",
64
+ default: function _default() {}
65
+ },
66
+ image_original: "string",
44
67
  image_128: "string",
45
68
  image_256: "string",
46
69
  image_512: "string",
47
- cmsvalkey_set: "array"
70
+ cmsvalkey_set: "array",
71
+ available_in_presos: {
72
+ type: "boolean",
73
+ default: true
74
+ }
48
75
  },
49
76
 
50
77
  /**
51
78
  * @property {models.AssetModel} index_asset
52
79
  * @property {models.DeckVersionModel} deckversion
80
+ * @property {models.Template} original_template
53
81
  */
54
82
  children: {
55
83
  index_asset: "AssetModel",
56
- deckversion: "DeckVersionModel"
84
+ deckversion: "DeckVersionModel",
85
+ original_template: "TemplateModel"
86
+ },
87
+ saveWithImage: function saveWithImage() {
88
+ var _this = this;
89
+
90
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
91
+ var formData, image, _i, _arr, field, _i2, _arr2, _field, cmsvalkeys, context;
92
+
93
+ return _regenerator.default.wrap(function _callee$(_context) {
94
+ while (1) {
95
+ switch (_context.prev = _context.next) {
96
+ case 0:
97
+ formData = new FormData();
98
+
99
+ if (!_this.image_original) {
100
+ _context.next = 6;
101
+ break;
102
+ }
103
+
104
+ _context.next = 4;
105
+ return _superagentBluebirdPromise.default.get(_this.image_original).responseType("blob");
106
+
107
+ case 4:
108
+ image = _context.sent;
109
+ formData.append("image_original", image.body, "image.png");
110
+
111
+ case 6:
112
+ for (_i = 0, _arr = ["title", "key", "scope", "sequence"]; _i < _arr.length; _i++) {
113
+ field = _arr[_i];
114
+
115
+ if (_this[field]) {
116
+ formData.append(field, _this[field]);
117
+ }
118
+ }
119
+
120
+ for (_i2 = 0, _arr2 = ["original_template", "deckversion"]; _i2 < _arr2.length; _i2++) {
121
+ _field = _arr2[_i2];
122
+
123
+ if (_this[_field]) {
124
+ formData.append(_field, _this[_field].url());
125
+ }
126
+ } // Set these here, because after the save these will be set to whatever the return value
127
+ // is in the next request.
128
+
129
+
130
+ cmsvalkeys = _this.cmsvalkey_set;
131
+ context = _this.context;
132
+ _context.next = 12;
133
+ return _superagentBluebirdPromise.default.post(_this.url()).send(formData).set(_auth.Auth.headers).then(function (response) {
134
+ Object.keys(response.body).forEach(function (key) {
135
+ _this.set(key, response.body[key]);
136
+ });
137
+ return response;
138
+ });
139
+
140
+ case 12:
141
+ _context.next = 14;
142
+ return _this.save({
143
+ cmsvalkey_set: cmsvalkeys,
144
+ context: context
145
+ }, {
146
+ patch: true
147
+ });
148
+
149
+ case 14:
150
+ return _context.abrupt("return", _context.sent);
151
+
152
+ case 15:
153
+ case "end":
154
+ return _context.stop();
155
+ }
156
+ }
157
+ }, _callee);
158
+ }))();
57
159
  }
58
160
  });
59
161
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/template.js"],"names":["TemplateModel","BaseModel","extend","modelName","props","created_date","modified_date","title","key","sequence","image_128","image_256","image_512","cmsvalkey_set","children","index_asset","deckversion"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,aAAa,GAAGC,gBAAUC,MAAV;AAC5B;AAAoC;AACnCC,EAAAA,SAAS,EAAE,WADwB;;AAGnC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,YAAY,EAAE,MADR;AAENC,IAAAA,aAAa,EAAE,MAFT;AAGNC,IAAAA,KAAK,EAAE,QAHD;AAINC,IAAAA,GAAG,EAAE,QAJC;AAKNC,IAAAA,QAAQ,EAAE,QALJ;AAMNC,IAAAA,SAAS,EAAE,QANL;AAONC,IAAAA,SAAS,EAAE,QAPL;AAQNC,IAAAA,SAAS,EAAE,QARL;AASNC,IAAAA,aAAa,EAAE;AATT,GAf4B;;AA2BnC;AACF;AACA;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,WAAW,EAAE,YADJ;AAETC,IAAAA,WAAW,EAAE;AAFJ;AA/ByB,CADR,CAAtB;;;AAuCP,6BAAS,eAAT,EAA0BhB,aAA1B","sourcesContent":["import \"./deck-version.js\";\nimport \"./asset.js\";\n\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TemplateModel\n * @extends models.BaseModel\n */\nexport const TemplateModel = BaseModel.extend(\n\t/** @lends models.TemplateModel# */ {\n\t\tmodelName: \"templates\",\n\n\t\t/**\n\t\t * @property {date} created_date\n\t\t * @property {date} modified_date\n\t\t * @property {string} title\n\t\t * @property {string} key\n\t\t * @property {number} sequence\n\t\t * @property {string} image_128\n\t\t * @property {string} image_128\n\t\t * @property {string} image_256\n\t\t * @property {string} image_512\n\t\t * @property {string[]} cmsvalkey_set\n\t\t */\n\t\tprops: {\n\t\t\tcreated_date: \"date\",\n\t\t\tmodified_date: \"date\",\n\t\t\ttitle: \"string\",\n\t\t\tkey: \"string\",\n\t\t\tsequence: \"number\",\n\t\t\timage_128: \"string\",\n\t\t\timage_256: \"string\",\n\t\t\timage_512: \"string\",\n\t\t\tcmsvalkey_set: \"array\",\n\t\t},\n\n\t\t/**\n\t\t * @property {models.AssetModel} index_asset\n\t\t * @property {models.DeckVersionModel} deckversion\n\t\t */\n\t\tchildren: {\n\t\t\tindex_asset: \"AssetModel\",\n\t\t\tdeckversion: \"DeckVersionModel\",\n\t\t},\n\t}\n);\n\nregister(\"TemplateModel\", TemplateModel);\n"],"file":"template.js"}
1
+ {"version":3,"sources":["../../src/models/template.js"],"names":["TemplateModel","BaseModel","extend","modelName","props","created_date","modified_date","title","key","scope","type","default","values","sequence","context","image_original","image_128","image_256","image_512","cmsvalkey_set","available_in_presos","children","index_asset","deckversion","original_template","saveWithImage","formData","FormData","SuperAgentRequest","get","responseType","image","append","body","field","url","cmsvalkeys","post","send","set","Auth","headers","then","response","Object","keys","forEach","save","patch"],"mappings":"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","sourcesContent":["import \"./deck-version.js\";\nimport \"./asset.js\";\n\nimport { Auth } from \"../auth.js\";\nimport { BaseModel } from \"./base.js\";\nimport SuperAgentRequest from \"superagent-bluebird-promise\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TemplateModel\n * @extends models.BaseModel\n */\nexport const TemplateModel = BaseModel.extend(\n\t/** @lends models.TemplateModel# */ {\n\t\tmodelName: \"templates\",\n\n\t\t/**\n\t\t * @property {date} created_date\n\t\t * @property {date} modified_date\n\t\t * @property {string} title\n\t\t * @property {string} key\n\t\t * @property {scope} scope\n\t\t * @property {number} sequence\n\t\t * @property {object} context\n\t\t * @property {string} image_original\n\t\t * @property {string} image_128\n\t\t * @property {string} image_256\n\t\t * @property {string} image_512\n\t\t * @property {string[]} cmsvalkey_set\n\t\t * @property {boolean} available_in_presos\n\t\t */\n\t\tprops: {\n\t\t\tcreated_date: \"date\",\n\t\t\tmodified_date: \"date\",\n\t\t\ttitle: \"string\",\n\t\t\tkey: \"string\",\n\t\t\tscope: {\n\t\t\t\ttype: \"string\",\n\t\t\t\tdefault: \"global\",\n\t\t\t\tvalues: [\"global\", \"team\", \"user\"],\n\t\t\t},\n\t\t\tsequence: \"number\",\n\t\t\tcontext: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tdefault: () => {},\n\t\t\t},\n\t\t\timage_original: \"string\",\n\t\t\timage_128: \"string\",\n\t\t\timage_256: \"string\",\n\t\t\timage_512: \"string\",\n\t\t\tcmsvalkey_set: \"array\",\n\t\t\tavailable_in_presos: {\n\t\t\t\ttype: \"boolean\",\n\t\t\t\tdefault: true,\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {models.AssetModel} index_asset\n\t\t * @property {models.DeckVersionModel} deckversion\n\t\t * @property {models.Template} original_template\n\t\t */\n\t\tchildren: {\n\t\t\tindex_asset: \"AssetModel\",\n\t\t\tdeckversion: \"DeckVersionModel\",\n\t\t\toriginal_template: \"TemplateModel\",\n\t\t},\n\n\t\tasync saveWithImage() {\n\t\t\tconst formData = new FormData();\n\n\t\t\tif (this.image_original) {\n\t\t\t\tconst image = await SuperAgentRequest.get(\n\t\t\t\t\tthis.image_original,\n\t\t\t\t).responseType(\"blob\");\n\n\t\t\t\tformData.append(\"image_original\", image.body, \"image.png\");\n\t\t\t}\n\n\t\t\tfor (const field of [\"title\", \"key\", \"scope\", \"sequence\"]) {\n\t\t\t\tif (this[field]) {\n\t\t\t\t\tformData.append(field, this[field]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const field of [\"original_template\", \"deckversion\"]) {\n\t\t\t\tif (this[field]) {\n\t\t\t\t\tformData.append(field, this[field].url());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set these here, because after the save these will be set to whatever the return value\n\t\t\t// is in the next request.\n\t\t\tconst cmsvalkeys = this.cmsvalkey_set;\n\t\t\tconst context = this.context;\n\n\t\t\tawait SuperAgentRequest.post(this.url())\n\t\t\t\t.send(formData)\n\t\t\t\t.set(Auth.headers)\n\t\t\t\t.then((response) => {\n\t\t\t\t\tObject.keys(response.body).forEach((key) => {\n\t\t\t\t\t\tthis.set(key, response.body[key]);\n\t\t\t\t\t});\n\t\t\t\t\treturn response;\n\t\t\t\t});\n\n\t\t\t// HACK: Can't send an array (or can't figure out how to do it!) to django,\n\t\t\t// so we send it in a seperate patch.\n\t\t\treturn await this.save(\n\t\t\t\t{\n\t\t\t\t\tcmsvalkey_set: cmsvalkeys,\n\t\t\t\t\tcontext,\n\t\t\t\t},\n\t\t\t\t{ patch: true },\n\t\t\t);\n\t\t},\n\t},\n);\n\nregister(\"TemplateModel\", TemplateModel);\n"],"file":"template.js"}
@@ -20,6 +20,7 @@ var TenancyModel = _base.BaseModel.extend(
20
20
  /** @lends models.TenancyModel# */
21
21
  {
22
22
  modelName: "tenancies",
23
+ detailType: "uuid",
23
24
 
24
25
  /**
25
26
  * @property {string[]} eventtag_set
@@ -40,6 +41,8 @@ var TenancyModel = _base.BaseModel.extend(
40
41
  logo_background_colour: "string",
41
42
  billing_frequency: "string",
42
43
  is_default: "boolean",
44
+ eula_key: "string",
45
+ eula_url: "string",
43
46
  status_set: {
44
47
  type: "array",
45
48
  default: function _default() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/tenancy.js"],"names":["TenancyModel","BaseModel","extend","modelName","props","name","brand_color","brand_colour","logo_original","logo_cropped","logo_128","logo_256","logo_512","colour_palette_key","tint_type","logo_background_colour","billing_frequency","is_default","status_set","type","default","children","administrator"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,YAAY,GAAGC,gBAAUC,MAAV;AAC3B;AAAmC;AAClCC,EAAAA,SAAS,EAAE,WADuB;;AAGlC;AACF;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,IAAI,EAAE,QADA;AAEN;AACAC,IAAAA,WAAW,EAAE,QAHP;AAINC,IAAAA,YAAY,EAAE,QAJR;AAKNC,IAAAA,aAAa,EAAE,QALT;AAMNC,IAAAA,YAAY,EAAE,QANR;AAONC,IAAAA,QAAQ,EAAE,QAPJ;AAQNC,IAAAA,QAAQ,EAAE,QARJ;AASNC,IAAAA,QAAQ,EAAE,QATJ;AAUNC,IAAAA,kBAAkB,EAAE,QAVd;AAWNC,IAAAA,SAAS,EAAE,QAXL;AAYNC,IAAAA,sBAAsB,EAAE,QAZlB;AAaNC,IAAAA,iBAAiB,EAAE,QAbb;AAcNC,IAAAA,UAAU,EAAE,SAdN;AAeNC,IAAAA,UAAU,EAAE;AACXC,MAAAA,IAAI,EAAE,OADK;AAEXC,MAAAA,OAAO,EAAE;AAAA,eAAM,EAAN;AAAA;AAFE;AAfN,GAP2B;;AA4BlC;AACF;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,aAAa,EAAE;AADN;AA/BwB,CADR,CAArB;;;AAsCP,6BAAS,cAAT,EAAyBtB,YAAzB","sourcesContent":["import \"./user.js\";\n\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TenancyModel\n * @extends models.BaseModel\n */\nexport const TenancyModel = BaseModel.extend(\n\t/** @lends models.TenancyModel# */ {\n\t\tmodelName: \"tenancies\",\n\n\t\t/**\n\t\t * @property {string[]} eventtag_set\n\t\t * @property {date} timestamp\n\t\t */\n\t\tprops: {\n\t\t\tname: \"string\",\n\t\t\t// FIXME: This will eventually be removed!\n\t\t\tbrand_color: \"string\",\n\t\t\tbrand_colour: \"string\",\n\t\t\tlogo_original: \"string\",\n\t\t\tlogo_cropped: \"string\",\n\t\t\tlogo_128: \"string\",\n\t\t\tlogo_256: \"string\",\n\t\t\tlogo_512: \"string\",\n\t\t\tcolour_palette_key: \"string\",\n\t\t\ttint_type: \"string\",\n\t\t\tlogo_background_colour: \"string\",\n\t\t\tbilling_frequency: \"string\",\n\t\t\tis_default: \"boolean\",\n\t\t\tstatus_set: {\n\t\t\t\ttype: \"array\",\n\t\t\t\tdefault: () => [],\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tadministrator: \"UserModel\",\n\t\t},\n\t}\n);\n\nregister(\"TenancyModel\", TenancyModel);\n"],"file":"tenancy.js"}
1
+ {"version":3,"sources":["../../src/models/tenancy.js"],"names":["TenancyModel","BaseModel","extend","modelName","detailType","props","name","brand_color","brand_colour","logo_original","logo_cropped","logo_128","logo_256","logo_512","colour_palette_key","tint_type","logo_background_colour","billing_frequency","is_default","eula_key","eula_url","status_set","type","default","children","administrator"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,YAAY,GAAGC,gBAAUC,MAAV;AAC3B;AAAmC;AAClCC,EAAAA,SAAS,EAAE,WADuB;AAElCC,EAAAA,UAAU,EAAE,MAFsB;;AAIlC;AACF;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,IAAI,EAAE,QADA;AAEN;AACAC,IAAAA,WAAW,EAAE,QAHP;AAINC,IAAAA,YAAY,EAAE,QAJR;AAKNC,IAAAA,aAAa,EAAE,QALT;AAMNC,IAAAA,YAAY,EAAE,QANR;AAONC,IAAAA,QAAQ,EAAE,QAPJ;AAQNC,IAAAA,QAAQ,EAAE,QARJ;AASNC,IAAAA,QAAQ,EAAE,QATJ;AAUNC,IAAAA,kBAAkB,EAAE,QAVd;AAWNC,IAAAA,SAAS,EAAE,QAXL;AAYNC,IAAAA,sBAAsB,EAAE,QAZlB;AAaNC,IAAAA,iBAAiB,EAAE,QAbb;AAcNC,IAAAA,UAAU,EAAE,SAdN;AAeNC,IAAAA,QAAQ,EAAE,QAfJ;AAgBNC,IAAAA,QAAQ,EAAE,QAhBJ;AAiBNC,IAAAA,UAAU,EAAE;AACXC,MAAAA,IAAI,EAAE,OADK;AAEXC,MAAAA,OAAO,EAAE;AAAA,eAAM,EAAN;AAAA;AAFE;AAjBN,GAR2B;;AA+BlC;AACF;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,aAAa,EAAE;AADN;AAlCwB,CADR,CAArB;;;AAyCP,6BAAS,cAAT,EAAyBzB,YAAzB","sourcesContent":["import \"./user.js\";\n\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TenancyModel\n * @extends models.BaseModel\n */\nexport const TenancyModel = BaseModel.extend(\n\t/** @lends models.TenancyModel# */ {\n\t\tmodelName: \"tenancies\",\n\t\tdetailType: \"uuid\",\n\n\t\t/**\n\t\t * @property {string[]} eventtag_set\n\t\t * @property {date} timestamp\n\t\t */\n\t\tprops: {\n\t\t\tname: \"string\",\n\t\t\t// FIXME: This will eventually be removed!\n\t\t\tbrand_color: \"string\",\n\t\t\tbrand_colour: \"string\",\n\t\t\tlogo_original: \"string\",\n\t\t\tlogo_cropped: \"string\",\n\t\t\tlogo_128: \"string\",\n\t\t\tlogo_256: \"string\",\n\t\t\tlogo_512: \"string\",\n\t\t\tcolour_palette_key: \"string\",\n\t\t\ttint_type: \"string\",\n\t\t\tlogo_background_colour: \"string\",\n\t\t\tbilling_frequency: \"string\",\n\t\t\tis_default: \"boolean\",\n\t\t\teula_key: \"string\",\n\t\t\teula_url: \"string\",\n\t\t\tstatus_set: {\n\t\t\t\ttype: \"array\",\n\t\t\t\tdefault: () => [],\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tadministrator: \"UserModel\",\n\t\t},\n\t},\n);\n\nregister(\"TenancyModel\", TenancyModel);\n"],"file":"tenancy.js"}
@@ -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":";;;;;;;;;;;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"}
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 { 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"}
@@ -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 { 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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/token.js"],"names":["TokenModel","BaseModel","extend","modelName","props","created_date","expired","expires_at","key","seconds_to_expiry","agent","agent_version","children","user","url","urlRoot"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,UAAU,GAAGC,gBAAUC,MAAV;AACzB;AAAiC;AAChCC,EAAAA,SAAS,EAAE,QADqB;;AAGhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,YAAY,EAAE,MADR;AAENC,IAAAA,OAAO,EAAE,SAFH;AAGNC,IAAAA,UAAU,EAAE,MAHN;AAINC,IAAAA,GAAG,EAAE,QAJC;AAKNC,IAAAA,iBAAiB,EAAE,QALb;AAMNC,IAAAA,KAAK,EAAE,QAND;AAONC,IAAAA,aAAa,EAAE;AAPT,GAZyB;;AAsBhC;AACF;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,IAAI,EAAE;AADG,GAzBsB;AA6BhCC,EAAAA,GA7BgC,iBA6B1B;AACL,qBAAU,KAAKC,OAAL,EAAV,SAA2B,KAAKP,GAAhC;AACA;AA/B+B,CADR,CAAnB;;;AAoCP,6BAAS,YAAT,EAAuBR,UAAvB","sourcesContent":["import \"./user.js\";\n\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TokenModel\n * @extends models.BaseModel\n */\nexport const TokenModel = BaseModel.extend(\n\t/** @lends models.TokenModel# */ {\n\t\tmodelName: \"tokens\",\n\n\t\t/**\n\t\t * @property {date} created_date\n\t\t * @property {boolean} expired\n\t\t * @property {date} expires_at\n\t\t * @property {string} key\n\t\t * @property {number} seconds_to_expiry\n\t\t * @property {string} agent\n\t\t * @property {string} agent_version\n\t\t */\n\t\tprops: {\n\t\t\tcreated_date: \"date\",\n\t\t\texpired: \"boolean\",\n\t\t\texpires_at: \"date\",\n\t\t\tkey: \"string\",\n\t\t\tseconds_to_expiry: \"number\",\n\t\t\tagent: \"string\",\n\t\t\tagent_version: \"string\",\n\t\t},\n\n\t\t/**\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tuser: \"UserModel\",\n\t\t},\n\n\t\turl() {\n\t\t\treturn `${this.urlRoot()}${this.key}/`;\n\t\t},\n\t}\n);\n\nregister(\"TokenModel\", TokenModel);\n"],"file":"token.js"}
1
+ {"version":3,"sources":["../../src/models/token.js"],"names":["TokenModel","BaseModel","extend","modelName","props","created_date","expired","expires_at","key","seconds_to_expiry","agent","agent_version","children","user","url","urlRoot"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,UAAU,GAAGC,gBAAUC,MAAV;AACzB;AAAiC;AAChCC,EAAAA,SAAS,EAAE,QADqB;;AAGhC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEC,EAAAA,KAAK,EAAE;AACNC,IAAAA,YAAY,EAAE,MADR;AAENC,IAAAA,OAAO,EAAE,SAFH;AAGNC,IAAAA,UAAU,EAAE,MAHN;AAINC,IAAAA,GAAG,EAAE,QAJC;AAKNC,IAAAA,iBAAiB,EAAE,QALb;AAMNC,IAAAA,KAAK,EAAE,QAND;AAONC,IAAAA,aAAa,EAAE;AAPT,GAZyB;;AAsBhC;AACF;AACA;AACEC,EAAAA,QAAQ,EAAE;AACTC,IAAAA,IAAI,EAAE;AADG,GAzBsB;AA6BhCC,EAAAA,GA7BgC,iBA6B1B;AACL,qBAAU,KAAKC,OAAL,EAAV,SAA2B,KAAKP,GAAhC;AACA;AA/B+B,CADR,CAAnB;;;AAoCP,6BAAS,YAAT,EAAuBR,UAAvB","sourcesContent":["import \"./user.js\";\n\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias models.TokenModel\n * @extends models.BaseModel\n */\nexport const TokenModel = BaseModel.extend(\n\t/** @lends models.TokenModel# */ {\n\t\tmodelName: \"tokens\",\n\n\t\t/**\n\t\t * @property {date} created_date\n\t\t * @property {boolean} expired\n\t\t * @property {date} expires_at\n\t\t * @property {string} key\n\t\t * @property {number} seconds_to_expiry\n\t\t * @property {string} agent\n\t\t * @property {string} agent_version\n\t\t */\n\t\tprops: {\n\t\t\tcreated_date: \"date\",\n\t\t\texpired: \"boolean\",\n\t\t\texpires_at: \"date\",\n\t\t\tkey: \"string\",\n\t\t\tseconds_to_expiry: \"number\",\n\t\t\tagent: \"string\",\n\t\t\tagent_version: \"string\",\n\t\t},\n\n\t\t/**\n\t\t * @property {models.UserModel} user\n\t\t */\n\t\tchildren: {\n\t\t\tuser: \"UserModel\",\n\t\t},\n\n\t\turl() {\n\t\t\treturn `${this.urlRoot()}${this.key}/`;\n\t\t},\n\t},\n);\n\nregister(\"TokenModel\", TokenModel);\n"],"file":"token.js"}
@@ -1 +1 @@
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"}
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"}
@@ -69,7 +69,8 @@ var UserModel = _base.BaseModel.extend(
69
69
  notification_sender: "default",
70
70
  email_signature: "",
71
71
  app_prefs: {},
72
- timezone: ""
72
+ timezone: "",
73
+ eula_key: ""
73
74
  };
74
75
  }
75
76
  },
@@ -136,6 +137,7 @@ var UserModel = _base.BaseModel.extend(
136
137
  };
137
138
  presomanager.canModifyNotes = presomanager.canAddGlobalNotes || presomanager.canAddTeamNotes;
138
139
  presomanager.canModifyTemporarySlides = presomanager.isGlobalTemporarySlideManager || presomanager.isTeamTemporarySlideManager;
140
+ presomanager.isPresoManagerUser = presomanager.canModifyTemporarySlides || presomanager.canModifyContent;
139
141
  presomanager.canModifyContent = this.actions.indexOf("Create Content") > -1 || this.actions.indexOf("Manage Team Editable Text") > -1;
140
142
  var appointments = {
141
143
  canUploadCustomSlides: this.actions.indexOf("Upload Custom Slides") > -1 && this.actions.indexOf("Upload Custom Sections") > -1,
@@ -148,7 +150,10 @@ var UserModel = _base.BaseModel.extend(
148
150
  canPresent: this.actions.indexOf("Present preso") > -1,
149
151
  canCreateWithoutTeam: this.actions.indexOf("Allow Teamless Appointments") > -1,
150
152
  canUseClosedCaptions: this.actions.indexOf("Use Closed Captions") > -1,
151
- canCreateMutedAppointments: this.actions.indexOf("Create Muted Appointments") > -1
153
+ canCreateMutedAppointments: this.actions.indexOf("Create Muted Appointments") > -1,
154
+ canHandoverPresosOfOthers: this.actions.indexOf("Handover Presos of Others") > -1,
155
+ canChooseShareVisAnyone: this.actions.indexOf("Choose Share Visibility Anyone") > -1,
156
+ canChooseShareVis2fa: this.actions.indexOf("Choose Share Visibility 2FA") > -1
152
157
  };
153
158
  var customers = {
154
159
  canCreateWithoutTeam: this.actions.indexOf("Allow Teamless Customers") > -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/models/user.js"],"names":["UserModel","BaseModel","extend","modelName","initialize","options","self","anon","props","actions","type","default","preferences","notification_sender","email_signature","app_prefs","timezone","calendar_feed","date_joined","email","first_name","last_name","is_active","is_staff","is_superuser","is_support","is_manager","last_login","username","profile","rtms_topic","rtms_token","last_reset_request","children","tenancy","collections","groups","team_set","derived","fullName","deps","fn","permissions","presets","canCreateCompanyPresets","indexOf","canCreateTeamPresets","presomanager","isGlobalTemporarySlideManager","isTeamTemporarySlideManager","isTeamContentManager","isContentCreator","canAddGlobalNotes","canAddTeamNotes","canModifyNotes","canModifyTemporarySlides","canModifyContent","appointments","canUploadCustomSlides","isContentAdmin","telePresenter","livePresenter","canViewPresosOfOthers","canShare","canPresent","canCreateWithoutTeam","canUseClosedCaptions","canCreateMutedAppointments","customers","fetchHQLogin","resourceURL","Api","getResourceURL","preventCachingID","Number","Date","now","fetch","url","then","prototype","apply","arguments","tap","originalUrl","call","toServer","data","id","map","group"],"mappings":"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","sourcesContent":["import \"./tenancy.js\";\nimport \"../collections/groups.js\";\nimport \"../collections/teams.js\";\n\nimport { Api } from \"../api.js\";\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n\n * @constructor\n * @alias models.UserModel\n * @extends models.BaseModel\n */\nexport const UserModel = BaseModel.extend(\n\t/** @lends models.UserModel# */ {\n\t\tmodelName: \"users\",\n\n\t\tinitialize(options = { self: false, anon: false }) {\n\t\t\tthis.self = options && options.self ? options.self : false;\n\t\t\tthis.anon = options && options.anon ? options.anon : false;\n\t\t},\n\n\t\t/**\n\t\t * @property {string[]} actions\n\t\t * @property {date} date_joined\n\t\t * @property {string} email\n\t\t * @property {string} first_name\n\t\t * @property {string} last_name\n\t\t * @property {boolean} is_active\n\t\t * @property {boolean} is_staff\n\t\t * @property {boolean} is_superuser\n\t\t * @property {boolean} is_support\n\t\t * @property {boolean} is_manager\n\t\t * @property {date} last_login\n\t\t * @property {string} username\n\t\t * @property {object} preferences\n\t\t * @property {object} profile\n\t\t * @property {string} rtms_topic\n\t\t * @property {string} rtms_token\n\t\t * @property {date} last_reset_request\n\t\t */\n\t\tprops: {\n\t\t\tactions: {\n\t\t\t\ttype: \"array\",\n\t\t\t\tdefault: () => [],\n\t\t\t},\n\t\t\tpreferences: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnotification_sender: \"default\",\n\t\t\t\t\t\temail_signature: \"\",\n\t\t\t\t\t\tapp_prefs: {},\n\t\t\t\t\t\ttimezone: \"\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\tcalendar_feed: \"string\",\n\t\t\tdate_joined: \"date\",\n\t\t\temail: \"string\",\n\t\t\tfirst_name: \"string\",\n\t\t\tlast_name: \"string\",\n\t\t\tis_active: \"boolean\",\n\t\t\tis_staff: \"boolean\",\n\t\t\tis_superuser: \"boolean\",\n\t\t\tis_support: \"boolean\",\n\t\t\tis_manager: \"boolean\",\n\t\t\tlast_login: \"date\",\n\t\t\tusername: \"string\",\n\t\t\tprofile: \"object\",\n\t\t\trtms_topic: \"string\",\n\t\t\trtms_token: \"string\",\n\t\t\tlast_reset_request: \"string\",\n\t\t},\n\n\t\t/**\n\t\t * @property {models.TenancyModel} tenancy\n\t\t */\n\t\tchildren: {\n\t\t\ttenancy: \"TenancyModel\",\n\t\t},\n\n\t\t/**\n\t\t * @property {collections.GroupCollection} groups\n\t\t * @property {collections.TeamCollection} team_set\n\t\t */\n\t\tcollections: {\n\t\t\tgroups: \"GroupCollection\",\n\t\t\tteam_set: \"TeamCollection\",\n\t\t},\n\n\t\t/**\n\t\t * @property {string} fullName - The full name of the user\n\t\t * @property {object} permissions - The one place for testing user permissions\n\t\t * @property {boolean} permissions.canCreateCompanyPresets - Has ability to create a company preset\n\t\t */\n\t\tderived: {\n\t\t\tfullName: {\n\t\t\t\tdeps: [\"first_name\", \"last_name\"],\n\t\t\t\tfn: function () {\n\t\t\t\t\treturn `${this.first_name} ${this.last_name}`;\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tpermissions: {\n\t\t\t\tdeps: [\"actions\"],\n\t\t\t\tfn: function () {\n\t\t\t\t\tconst presets = {\n\t\t\t\t\t\tcanCreateCompanyPresets:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Deck Presets\") > -1,\n\t\t\t\t\t\tcanCreateTeamPresets:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Presets\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst presomanager = {\n\t\t\t\t\t\tisGlobalTemporarySlideManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Temporary Slides\") > -1,\n\t\t\t\t\t\tisTeamTemporarySlideManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Temporary Slides\") > -1,\n\n\t\t\t\t\t\tisTeamContentManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Editable Text\") > -1,\n\t\t\t\t\t\tisContentCreator: this.actions.indexOf(\"Create Content\") > -1,\n\n\t\t\t\t\t\tcanAddGlobalNotes: this.actions.indexOf(\"Manage Notes\") > -1,\n\t\t\t\t\t\tcanAddTeamNotes: this.actions.indexOf(\"Manage Team Notes\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tpresomanager.canModifyNotes =\n\t\t\t\t\t\tpresomanager.canAddGlobalNotes || presomanager.canAddTeamNotes;\n\n\t\t\t\t\tpresomanager.canModifyTemporarySlides =\n\t\t\t\t\t\tpresomanager.isGlobalTemporarySlideManager ||\n\t\t\t\t\t\tpresomanager.isTeamTemporarySlideManager;\n\n\t\t\t\t\tpresomanager.canModifyContent =\n\t\t\t\t\t\tthis.actions.indexOf(\"Create Content\") > -1 ||\n\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Editable Text\") > -1;\n\n\t\t\t\t\tconst appointments = {\n\t\t\t\t\t\tcanUploadCustomSlides:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Upload Custom Slides\") > -1 &&\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Upload Custom Sections\") > -1,\n\n\t\t\t\t\t\tisContentAdmin: this.actions.indexOf(\"Administer Content\") > -1,\n\t\t\t\t\t\tisContentCreator: this.actions.indexOf(\"Create Content\") > -1,\n\n\t\t\t\t\t\ttelePresenter: this.actions.indexOf(\"TelePresent\") > -1,\n\t\t\t\t\t\tlivePresenter: this.actions.indexOf(\"LivePresent\") > -1,\n\n\t\t\t\t\t\tcanViewPresosOfOthers:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"View Presos of Others\") > -1,\n\t\t\t\t\t\tcanShare: this.actions.indexOf(\"Share preso\") > -1,\n\t\t\t\t\t\tcanPresent: this.actions.indexOf(\"Present preso\") > -1,\n\t\t\t\t\t\tcanCreateWithoutTeam:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Allow Teamless Appointments\") > -1,\n\t\t\t\t\t\tcanUseClosedCaptions:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Use Closed Captions\") > -1,\n\t\t\t\t\t\tcanCreateMutedAppointments:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Create Muted Appointments\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst customers = {\n\t\t\t\t\t\tcanCreateWithoutTeam:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Allow Teamless Customers\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpresets,\n\t\t\t\t\t\tappointments,\n\t\t\t\t\t\tpresomanager,\n\t\t\t\t\t\tcustomers,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\tfetchHQLogin() {\n\t\t\tconst resourceURL = Api.getResourceURL(\"hq-authorized-link\");\n\t\t\tconst preventCachingID = Number(Date.now());\n\n\t\t\t// This will return a cached response if we don't have a random ID\n\t\t\t// attached.\n\t\t\treturn this.fetch({ url: `${resourceURL}?_=${preventCachingID}` }).then(\n\t\t\t\t({ url }) => {\n\t\t\t\t\treturn url;\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\tfetch() {\n\t\t\tconst fetch = BaseModel.prototype.fetch.apply(this, arguments);\n\n\t\t\treturn fetch.tap(() => {\n\t\t\t\tif (this.self) {\n\t\t\t\t\tthis.self = false;\n\t\t\t\t}\n\n\t\t\t\tif (this.anon) {\n\t\t\t\t\tthis.anon = false;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\turl() {\n\t\t\tconst originalUrl = BaseModel.prototype.url.call(this);\n\t\t\tif (this.self) {\n\t\t\t\treturn `${originalUrl}self/`;\n\t\t\t} else if (this.anon) {\n\t\t\t\treturn `${originalUrl}anon/`;\n\t\t\t}\n\t\t\treturn originalUrl;\n\t\t},\n\n\t\ttoServer() {\n\t\t\tconst data = {\n\t\t\t\tid: this.id,\n\t\t\t\tpreferences: this.preferences,\n\t\t\t};\n\n\t\t\tif (this.groups) {\n\t\t\t\tdata.groups = this.groups.map((group) => group.url());\n\t\t\t}\n\n\t\t\tif (!data.preferences.timezone) {\n\t\t\t\tdelete data.preferences.timezone;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t}\n);\n\nregister(\"UserModel\", UserModel);\n"],"file":"user.js"}
1
+ {"version":3,"sources":["../../src/models/user.js"],"names":["UserModel","BaseModel","extend","modelName","initialize","options","self","anon","props","actions","type","default","preferences","notification_sender","email_signature","app_prefs","timezone","eula_key","calendar_feed","date_joined","email","first_name","last_name","is_active","is_staff","is_superuser","is_support","is_manager","last_login","username","profile","rtms_topic","rtms_token","last_reset_request","children","tenancy","collections","groups","team_set","derived","fullName","deps","fn","permissions","presets","canCreateCompanyPresets","indexOf","canCreateTeamPresets","presomanager","isGlobalTemporarySlideManager","isTeamTemporarySlideManager","isTeamContentManager","isContentCreator","canAddGlobalNotes","canAddTeamNotes","canModifyNotes","canModifyTemporarySlides","isPresoManagerUser","canModifyContent","appointments","canUploadCustomSlides","isContentAdmin","telePresenter","livePresenter","canViewPresosOfOthers","canShare","canPresent","canCreateWithoutTeam","canUseClosedCaptions","canCreateMutedAppointments","canHandoverPresosOfOthers","canChooseShareVisAnyone","canChooseShareVis2fa","customers","fetchHQLogin","resourceURL","Api","getResourceURL","preventCachingID","Number","Date","now","fetch","url","then","prototype","apply","arguments","tap","originalUrl","call","toServer","data","id","map","group"],"mappings":"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","sourcesContent":["import \"./tenancy.js\";\nimport \"../collections/groups.js\";\nimport \"../collections/teams.js\";\n\nimport { Api } from \"../api.js\";\nimport { BaseModel } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n\n * @constructor\n * @alias models.UserModel\n * @extends models.BaseModel\n */\nexport const UserModel = BaseModel.extend(\n\t/** @lends models.UserModel# */ {\n\t\tmodelName: \"users\",\n\n\t\tinitialize(options = { self: false, anon: false }) {\n\t\t\tthis.self = options && options.self ? options.self : false;\n\t\t\tthis.anon = options && options.anon ? options.anon : false;\n\t\t},\n\n\t\t/**\n\t\t * @property {string[]} actions\n\t\t * @property {date} date_joined\n\t\t * @property {string} email\n\t\t * @property {string} first_name\n\t\t * @property {string} last_name\n\t\t * @property {boolean} is_active\n\t\t * @property {boolean} is_staff\n\t\t * @property {boolean} is_superuser\n\t\t * @property {boolean} is_support\n\t\t * @property {boolean} is_manager\n\t\t * @property {date} last_login\n\t\t * @property {string} username\n\t\t * @property {object} preferences\n\t\t * @property {object} profile\n\t\t * @property {string} rtms_topic\n\t\t * @property {string} rtms_token\n\t\t * @property {date} last_reset_request\n\t\t */\n\t\tprops: {\n\t\t\tactions: {\n\t\t\t\ttype: \"array\",\n\t\t\t\tdefault: () => [],\n\t\t\t},\n\t\t\tpreferences: {\n\t\t\t\ttype: \"object\",\n\t\t\t\tdefault: () => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tnotification_sender: \"default\",\n\t\t\t\t\t\temail_signature: \"\",\n\t\t\t\t\t\tapp_prefs: {},\n\t\t\t\t\t\ttimezone: \"\",\n\t\t\t\t\t\teula_key: \"\",\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\tcalendar_feed: \"string\",\n\t\t\tdate_joined: \"date\",\n\t\t\temail: \"string\",\n\t\t\tfirst_name: \"string\",\n\t\t\tlast_name: \"string\",\n\t\t\tis_active: \"boolean\",\n\t\t\tis_staff: \"boolean\",\n\t\t\tis_superuser: \"boolean\",\n\t\t\tis_support: \"boolean\",\n\t\t\tis_manager: \"boolean\",\n\t\t\tlast_login: \"date\",\n\t\t\tusername: \"string\",\n\t\t\tprofile: \"object\",\n\t\t\trtms_topic: \"string\",\n\t\t\trtms_token: \"string\",\n\t\t\tlast_reset_request: \"string\",\n\t\t},\n\n\t\t/**\n\t\t * @property {models.TenancyModel} tenancy\n\t\t */\n\t\tchildren: {\n\t\t\ttenancy: \"TenancyModel\",\n\t\t},\n\n\t\t/**\n\t\t * @property {collections.GroupCollection} groups\n\t\t * @property {collections.TeamCollection} team_set\n\t\t */\n\t\tcollections: {\n\t\t\tgroups: \"GroupCollection\",\n\t\t\tteam_set: \"TeamCollection\",\n\t\t},\n\n\t\t/**\n\t\t * @property {string} fullName - The full name of the user\n\t\t * @property {object} permissions - The one place for testing user permissions\n\t\t * @property {boolean} permissions.canCreateCompanyPresets - Has ability to create a company preset\n\t\t */\n\t\tderived: {\n\t\t\tfullName: {\n\t\t\t\tdeps: [\"first_name\", \"last_name\"],\n\t\t\t\tfn: function () {\n\t\t\t\t\treturn `${this.first_name} ${this.last_name}`;\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tpermissions: {\n\t\t\t\tdeps: [\"actions\"],\n\t\t\t\tfn: function () {\n\t\t\t\t\tconst presets = {\n\t\t\t\t\t\tcanCreateCompanyPresets:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Deck Presets\") > -1,\n\t\t\t\t\t\tcanCreateTeamPresets:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Presets\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst presomanager = {\n\t\t\t\t\t\tisGlobalTemporarySlideManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Temporary Slides\") > -1,\n\t\t\t\t\t\tisTeamTemporarySlideManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Temporary Slides\") > -1,\n\n\t\t\t\t\t\tisTeamContentManager:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Editable Text\") > -1,\n\t\t\t\t\t\tisContentCreator: this.actions.indexOf(\"Create Content\") > -1,\n\n\t\t\t\t\t\tcanAddGlobalNotes: this.actions.indexOf(\"Manage Notes\") > -1,\n\t\t\t\t\t\tcanAddTeamNotes: this.actions.indexOf(\"Manage Team Notes\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tpresomanager.canModifyNotes =\n\t\t\t\t\t\tpresomanager.canAddGlobalNotes || presomanager.canAddTeamNotes;\n\n\t\t\t\t\tpresomanager.canModifyTemporarySlides =\n\t\t\t\t\t\tpresomanager.isGlobalTemporarySlideManager ||\n\t\t\t\t\t\tpresomanager.isTeamTemporarySlideManager;\n\n\t\t\t\t\tpresomanager.isPresoManagerUser =\n\t\t\t\t\t\tpresomanager.canModifyTemporarySlides ||\n\t\t\t\t\t\tpresomanager.canModifyContent;\n\n\t\t\t\t\tpresomanager.canModifyContent =\n\t\t\t\t\t\tthis.actions.indexOf(\"Create Content\") > -1 ||\n\t\t\t\t\t\tthis.actions.indexOf(\"Manage Team Editable Text\") > -1;\n\n\t\t\t\t\tconst appointments = {\n\t\t\t\t\t\tcanUploadCustomSlides:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Upload Custom Slides\") > -1 &&\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Upload Custom Sections\") > -1,\n\n\t\t\t\t\t\tisContentAdmin: this.actions.indexOf(\"Administer Content\") > -1,\n\t\t\t\t\t\tisContentCreator: this.actions.indexOf(\"Create Content\") > -1,\n\n\t\t\t\t\t\ttelePresenter: this.actions.indexOf(\"TelePresent\") > -1,\n\t\t\t\t\t\tlivePresenter: this.actions.indexOf(\"LivePresent\") > -1,\n\n\t\t\t\t\t\tcanViewPresosOfOthers:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"View Presos of Others\") > -1,\n\t\t\t\t\t\tcanShare: this.actions.indexOf(\"Share preso\") > -1,\n\t\t\t\t\t\tcanPresent: this.actions.indexOf(\"Present preso\") > -1,\n\t\t\t\t\t\tcanCreateWithoutTeam:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Allow Teamless Appointments\") > -1,\n\t\t\t\t\t\tcanUseClosedCaptions:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Use Closed Captions\") > -1,\n\t\t\t\t\t\tcanCreateMutedAppointments:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Create Muted Appointments\") > -1,\n\t\t\t\t\t\tcanHandoverPresosOfOthers:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Handover Presos of Others\") > -1,\n\t\t\t\t\t\tcanChooseShareVisAnyone:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Choose Share Visibility Anyone\") > -1,\n\t\t\t\t\t\tcanChooseShareVis2fa:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Choose Share Visibility 2FA\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst customers = {\n\t\t\t\t\t\tcanCreateWithoutTeam:\n\t\t\t\t\t\t\tthis.actions.indexOf(\"Allow Teamless Customers\") > -1,\n\t\t\t\t\t};\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpresets,\n\t\t\t\t\t\tappointments,\n\t\t\t\t\t\tpresomanager,\n\t\t\t\t\t\tcustomers,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\n\t\tfetchHQLogin() {\n\t\t\tconst resourceURL = Api.getResourceURL(\"hq-authorized-link\");\n\t\t\tconst preventCachingID = Number(Date.now());\n\n\t\t\t// This will return a cached response if we don't have a random ID\n\t\t\t// attached.\n\t\t\treturn this.fetch({ url: `${resourceURL}?_=${preventCachingID}` }).then(\n\t\t\t\t({ url }) => {\n\t\t\t\t\treturn url;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\n\t\tfetch() {\n\t\t\tconst fetch = BaseModel.prototype.fetch.apply(this, arguments);\n\n\t\t\treturn fetch.tap(() => {\n\t\t\t\tif (this.self) {\n\t\t\t\t\tthis.self = false;\n\t\t\t\t}\n\n\t\t\t\tif (this.anon) {\n\t\t\t\t\tthis.anon = false;\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\turl() {\n\t\t\tconst originalUrl = BaseModel.prototype.url.call(this);\n\t\t\tif (this.self) {\n\t\t\t\treturn `${originalUrl}self/`;\n\t\t\t} else if (this.anon) {\n\t\t\t\treturn `${originalUrl}anon/`;\n\t\t\t}\n\t\t\treturn originalUrl;\n\t\t},\n\n\t\ttoServer() {\n\t\t\tconst data = {\n\t\t\t\tid: this.id,\n\t\t\t\tpreferences: this.preferences,\n\t\t\t};\n\n\t\t\tif (this.groups) {\n\t\t\t\tdata.groups = this.groups.map((group) => group.url());\n\t\t\t}\n\n\t\t\tif (!data.preferences.timezone) {\n\t\t\t\tdelete data.preferences.timezone;\n\t\t\t}\n\n\t\t\treturn data;\n\t\t},\n\t},\n);\n\nregister(\"UserModel\", UserModel);\n"],"file":"user.js"}
package/cjs/models.js CHANGED
@@ -186,6 +186,19 @@ Object.keys(_contact).forEach(function (key) {
186
186
  });
187
187
  });
188
188
 
189
+ var _contactPhone = require("./models/contact-phone");
190
+
191
+ Object.keys(_contactPhone).forEach(function (key) {
192
+ if (key === "default" || key === "__esModule") return;
193
+ if (key in exports && exports[key] === _contactPhone[key]) return;
194
+ Object.defineProperty(exports, key, {
195
+ enumerable: true,
196
+ get: function get() {
197
+ return _contactPhone[key];
198
+ }
199
+ });
200
+ });
201
+
189
202
  var _customer = require("./models/customer");
190
203
 
191
204
  Object.keys(_customer).forEach(function (key) {
@@ -550,6 +563,32 @@ Object.keys(_sectionSelection).forEach(function (key) {
550
563
  });
551
564
  });
552
565
 
566
+ var _signingRequest = require("./models/signing-request");
567
+
568
+ Object.keys(_signingRequest).forEach(function (key) {
569
+ if (key === "default" || key === "__esModule") return;
570
+ if (key in exports && exports[key] === _signingRequest[key]) return;
571
+ Object.defineProperty(exports, key, {
572
+ enumerable: true,
573
+ get: function get() {
574
+ return _signingRequest[key];
575
+ }
576
+ });
577
+ });
578
+
579
+ var _signer = require("./models/signer");
580
+
581
+ Object.keys(_signer).forEach(function (key) {
582
+ if (key === "default" || key === "__esModule") return;
583
+ if (key in exports && exports[key] === _signer[key]) return;
584
+ Object.defineProperty(exports, key, {
585
+ enumerable: true,
586
+ get: function get() {
587
+ return _signer[key];
588
+ }
589
+ });
590
+ });
591
+
553
592
  var _slide = require("./models/slide");
554
593
 
555
594
  Object.keys(_slide).forEach(function (key) {
@@ -706,19 +745,6 @@ Object.keys(_appointmentEditor).forEach(function (key) {
706
745
  });
707
746
  });
708
747
 
709
- var _appointmentDuplicate = require("./models/appointment-duplicate.js");
710
-
711
- Object.keys(_appointmentDuplicate).forEach(function (key) {
712
- if (key === "default" || key === "__esModule") return;
713
- if (key in exports && exports[key] === _appointmentDuplicate[key]) return;
714
- Object.defineProperty(exports, key, {
715
- enumerable: true,
716
- get: function get() {
717
- return _appointmentDuplicate[key];
718
- }
719
- });
720
- });
721
-
722
748
  var _appointmentStats = require("./models/appointment-stats.js");
723
749
 
724
750
  Object.keys(_appointmentStats).forEach(function (key) {
@@ -784,6 +810,19 @@ Object.keys(_appointmentSlideTags).forEach(function (key) {
784
810
  });
785
811
  });
786
812
 
813
+ var _appointmentTemplate = require("./models/appointment-template.js");
814
+
815
+ Object.keys(_appointmentTemplate).forEach(function (key) {
816
+ if (key === "default" || key === "__esModule") return;
817
+ if (key in exports && exports[key] === _appointmentTemplate[key]) return;
818
+ Object.defineProperty(exports, key, {
819
+ enumerable: true,
820
+ get: function get() {
821
+ return _appointmentTemplate[key];
822
+ }
823
+ });
824
+ });
825
+
787
826
  var _appointmentAdjunctTags = require("./models/appointment-adjunct-tags.js");
788
827
 
789
828
  Object.keys(_appointmentAdjunctTags).forEach(function (key) {