@livepreso/api 6.40.0 → 6.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (446) hide show
  1. package/.eslintrc.js +5 -0
  2. package/.rush/temp/build-cache-tar.log +7 -0
  3. package/.rush/temp/package-deps_build.json +170 -0
  4. package/.rush/temp/shrinkwrap-deps.json +846 -0
  5. package/CHANGELOG.json +41 -0
  6. package/CHANGELOG.md +25 -0
  7. package/api.build.log +15 -0
  8. package/babel.config.js +9 -18
  9. package/cjs/api.js +1 -1
  10. package/cjs/api.js.map +1 -1
  11. package/cjs/api.spec.js +2 -2
  12. package/cjs/api.spec.js.map +1 -1
  13. package/cjs/auth.js +6 -5
  14. package/cjs/auth.js.map +1 -1
  15. package/cjs/auth.spec.js +25 -23
  16. package/cjs/auth.spec.js.map +1 -1
  17. package/cjs/caching.js +3 -3
  18. package/cjs/collections/activity.js +22 -27
  19. package/cjs/collections/activity.js.map +1 -1
  20. package/cjs/collections/adjunct-sections.js +2 -2
  21. package/cjs/collections/adjunct-sections.js.map +1 -1
  22. package/cjs/collections/adjunct-slides.js +2 -2
  23. package/cjs/collections/adjunct-slides.js.map +1 -1
  24. package/cjs/collections/adjunct-sub-slides.js +2 -2
  25. package/cjs/collections/adjunct-sub-slides.js.map +1 -1
  26. package/cjs/collections/appointment-adjunct-tags.js +28 -0
  27. package/cjs/collections/appointment-adjunct-tags.js.map +1 -0
  28. package/cjs/collections/appointment-deckversion-tags.js +28 -0
  29. package/cjs/collections/appointment-deckversion-tags.js.map +1 -0
  30. package/cjs/collections/appointment-duplicates.js +2 -2
  31. package/cjs/collections/appointment-duplicates.js.map +1 -1
  32. package/cjs/collections/appointment-editors.js +2 -2
  33. package/cjs/collections/appointment-editors.js.map +1 -1
  34. package/cjs/collections/appointment-section-tags.js +28 -0
  35. package/cjs/collections/appointment-section-tags.js.map +1 -0
  36. package/cjs/collections/appointment-slide-tags.js +28 -0
  37. package/cjs/collections/appointment-slide-tags.js.map +1 -0
  38. package/cjs/collections/appointment-tags.js +208 -0
  39. package/cjs/collections/appointment-tags.js.map +1 -0
  40. package/cjs/collections/appointments.js +10 -6
  41. package/cjs/collections/appointments.js.map +1 -1
  42. package/cjs/collections/assets.js +2 -2
  43. package/cjs/collections/assets.js.map +1 -1
  44. package/cjs/collections/auto-adjuncts.js +7 -3
  45. package/cjs/collections/auto-adjuncts.js.map +1 -1
  46. package/cjs/collections/base.js +30 -25
  47. package/cjs/collections/base.js.map +1 -1
  48. package/cjs/collections/base.spec.js +71 -123
  49. package/cjs/collections/base.spec.js.map +1 -1
  50. package/cjs/collections/cms-vals.js +2 -2
  51. package/cjs/collections/cms-vals.js.map +1 -1
  52. package/cjs/collections/contacts.js +2 -2
  53. package/cjs/collections/contacts.js.map +1 -1
  54. package/cjs/collections/created-assets.js +2 -2
  55. package/cjs/collections/created-assets.js.map +1 -1
  56. package/cjs/collections/customers.js +2 -2
  57. package/cjs/collections/customers.js.map +1 -1
  58. package/cjs/collections/deck-notes.js +2 -2
  59. package/cjs/collections/deck-notes.js.map +1 -1
  60. package/cjs/collections/deck-versions.js +20 -8
  61. package/cjs/collections/deck-versions.js.map +1 -1
  62. package/cjs/collections/decks.js +2 -2
  63. package/cjs/collections/decks.js.map +1 -1
  64. package/cjs/collections/deleted-assets.js +2 -2
  65. package/cjs/collections/deleted-assets.js.map +1 -1
  66. package/cjs/collections/dispatches.js +4 -4
  67. package/cjs/collections/dispatches.js.map +1 -1
  68. package/cjs/collections/event-objects.js +2 -2
  69. package/cjs/collections/event-objects.js.map +1 -1
  70. package/cjs/collections/events.js +2 -2
  71. package/cjs/collections/events.js.map +1 -1
  72. package/cjs/collections/groups.js +2 -2
  73. package/cjs/collections/groups.js.map +1 -1
  74. package/cjs/collections/images.js +2 -2
  75. package/cjs/collections/images.js.map +1 -1
  76. package/cjs/collections/locations.js +2 -2
  77. package/cjs/collections/locations.js.map +1 -1
  78. package/cjs/collections/opportunities.js +2 -2
  79. package/cjs/collections/opportunities.js.map +1 -1
  80. package/cjs/collections/pack-diffs.js +2 -2
  81. package/cjs/collections/pack-diffs.js.map +1 -1
  82. package/cjs/collections/packs.js +2 -2
  83. package/cjs/collections/packs.js.map +1 -1
  84. package/cjs/collections/presets.js +2 -2
  85. package/cjs/collections/presets.js.map +1 -1
  86. package/cjs/collections/section-selections.js +2 -2
  87. package/cjs/collections/section-selections.js.map +1 -1
  88. package/cjs/collections/sections.js +2 -2
  89. package/cjs/collections/sections.js.map +1 -1
  90. package/cjs/collections/slide-selections.js +2 -2
  91. package/cjs/collections/slide-selections.js.map +1 -1
  92. package/cjs/collections/slides.js +2 -2
  93. package/cjs/collections/slides.js.map +1 -1
  94. package/cjs/collections/snapshots.js +2 -2
  95. package/cjs/collections/snapshots.js.map +1 -1
  96. package/cjs/collections/sub-slides.js +2 -2
  97. package/cjs/collections/sub-slides.js.map +1 -1
  98. package/cjs/collections/tags.js +28 -0
  99. package/cjs/collections/tags.js.map +1 -0
  100. package/cjs/collections/teams.js +2 -2
  101. package/cjs/collections/teams.js.map +1 -1
  102. package/cjs/collections/templates.js +2 -2
  103. package/cjs/collections/templates.js.map +1 -1
  104. package/cjs/collections/uploads.js +2 -2
  105. package/cjs/collections/uploads.js.map +1 -1
  106. package/cjs/collections/users.js +2 -2
  107. package/cjs/collections/users.js.map +1 -1
  108. package/cjs/collections.js +115 -0
  109. package/cjs/collections.js.map +1 -1
  110. package/cjs/index.js +3 -0
  111. package/cjs/index.js.map +1 -1
  112. package/cjs/middleware.js.map +1 -1
  113. package/cjs/middlewares/auth.js +10 -6
  114. package/cjs/middlewares/auth.js.map +1 -1
  115. package/cjs/middlewares/base.js +1 -3
  116. package/cjs/middlewares/base.js.map +1 -1
  117. package/cjs/middlewares/json.js +10 -6
  118. package/cjs/middlewares/json.js.map +1 -1
  119. package/cjs/middlewares/redirect.js +10 -6
  120. package/cjs/middlewares/redirect.js.map +1 -1
  121. package/cjs/models/activity-item.js +6 -2
  122. package/cjs/models/activity-item.js.map +1 -1
  123. package/cjs/models/adjunct-section.js +2 -2
  124. package/cjs/models/adjunct-section.js.map +1 -1
  125. package/cjs/models/adjunct-slide.js +2 -2
  126. package/cjs/models/adjunct-slide.js.map +1 -1
  127. package/cjs/models/adjunct-sub-slide.js +2 -2
  128. package/cjs/models/adjunct-sub-slide.js.map +1 -1
  129. package/cjs/models/adjunct.js +2 -2
  130. package/cjs/models/adjunct.js.map +1 -1
  131. package/cjs/models/api.js.map +1 -1
  132. package/cjs/models/appointment-adjunct-tags.js +52 -0
  133. package/cjs/models/appointment-adjunct-tags.js.map +1 -0
  134. package/cjs/models/appointment-deckversion-tags.js +52 -0
  135. package/cjs/models/appointment-deckversion-tags.js.map +1 -0
  136. package/cjs/models/appointment-duplicate.js +8 -3
  137. package/cjs/models/appointment-duplicate.js.map +1 -1
  138. package/cjs/models/appointment-editor.js +2 -2
  139. package/cjs/models/appointment-editor.js.map +1 -1
  140. package/cjs/models/appointment-section-tags.js +52 -0
  141. package/cjs/models/appointment-section-tags.js.map +1 -0
  142. package/cjs/models/appointment-slide-tags.js +52 -0
  143. package/cjs/models/appointment-slide-tags.js.map +1 -0
  144. package/cjs/models/appointment-stats.js +2 -2
  145. package/cjs/models/appointment-stats.js.map +1 -1
  146. package/cjs/models/appointment-tags.js +48 -0
  147. package/cjs/models/appointment-tags.js.map +1 -0
  148. package/cjs/models/appointment-viewing.js +2 -2
  149. package/cjs/models/appointment-viewing.js.map +1 -1
  150. package/cjs/models/appointment.js +16 -7
  151. package/cjs/models/appointment.js.map +1 -1
  152. package/cjs/models/asset.js +2 -2
  153. package/cjs/models/asset.js.map +1 -1
  154. package/cjs/models/auto-adjunct-key-check.js +2 -2
  155. package/cjs/models/auto-adjunct-key-check.js.map +1 -1
  156. package/cjs/models/auto-adjunct.js +2 -2
  157. package/cjs/models/auto-adjunct.js.map +1 -1
  158. package/cjs/models/base.js +25 -36
  159. package/cjs/models/base.js.map +1 -1
  160. package/cjs/models/base.spec.js +45 -45
  161. package/cjs/models/base.spec.js.map +1 -1
  162. package/cjs/models/choicelist.js.map +1 -1
  163. package/cjs/models/cms-val.js.map +1 -1
  164. package/cjs/models/contact.js +2 -2
  165. package/cjs/models/contact.js.map +1 -1
  166. package/cjs/models/customer.js +2 -2
  167. package/cjs/models/customer.js.map +1 -1
  168. package/cjs/models/deck-note.js +2 -2
  169. package/cjs/models/deck-note.js.map +1 -1
  170. package/cjs/models/deck-tags.js +61 -0
  171. package/cjs/models/deck-tags.js.map +1 -0
  172. package/cjs/models/deck-version.js +5 -3
  173. package/cjs/models/deck-version.js.map +1 -1
  174. package/cjs/models/deck.js +6 -3
  175. package/cjs/models/deck.js.map +1 -1
  176. package/cjs/models/dispatch-preview.js +3 -3
  177. package/cjs/models/dispatch-preview.js.map +1 -1
  178. package/cjs/models/dispatch.js +2 -2
  179. package/cjs/models/dispatch.js.map +1 -1
  180. package/cjs/models/envs.js.map +1 -1
  181. package/cjs/models/event-object.js +2 -2
  182. package/cjs/models/event-object.js.map +1 -1
  183. package/cjs/models/event.js +2 -2
  184. package/cjs/models/event.js.map +1 -1
  185. package/cjs/models/feed-data.js +2 -2
  186. package/cjs/models/feed-data.js.map +1 -1
  187. package/cjs/models/file.js +2 -2
  188. package/cjs/models/file.js.map +1 -1
  189. package/cjs/models/group.js +2 -2
  190. package/cjs/models/group.js.map +1 -1
  191. package/cjs/models/handover.js +2 -2
  192. package/cjs/models/handover.js.map +1 -1
  193. package/cjs/models/hosted-preso.js +2 -2
  194. package/cjs/models/hosted-preso.js.map +1 -1
  195. package/cjs/models/image.js +2 -2
  196. package/cjs/models/image.js.map +1 -1
  197. package/cjs/models/location.js +2 -2
  198. package/cjs/models/location.js.map +1 -1
  199. package/cjs/models/manifest-json.js +74 -57
  200. package/cjs/models/manifest-json.js.map +1 -1
  201. package/cjs/models/onshare.js +2 -2
  202. package/cjs/models/onshare.js.map +1 -1
  203. package/cjs/models/opportunity.js +2 -2
  204. package/cjs/models/opportunity.js.map +1 -1
  205. package/cjs/models/pack-diff.js +2 -2
  206. package/cjs/models/pack-diff.js.map +1 -1
  207. package/cjs/models/pack.js +2 -2
  208. package/cjs/models/pack.js.map +1 -1
  209. package/cjs/models/preset.js +22 -2
  210. package/cjs/models/preset.js.map +1 -1
  211. package/cjs/models/refresh-request.js +2 -2
  212. package/cjs/models/refresh-request.js.map +1 -1
  213. package/cjs/models/room.js +2 -2
  214. package/cjs/models/room.js.map +1 -1
  215. package/cjs/models/salesforce-lookup.js +2 -2
  216. package/cjs/models/salesforce-lookup.js.map +1 -1
  217. package/cjs/models/section-selection.js +2 -2
  218. package/cjs/models/section-selection.js.map +1 -1
  219. package/cjs/models/section.js +2 -2
  220. package/cjs/models/section.js.map +1 -1
  221. package/cjs/models/slide-selection.js +2 -2
  222. package/cjs/models/slide-selection.js.map +1 -1
  223. package/cjs/models/slide.js +2 -2
  224. package/cjs/models/slide.js.map +1 -1
  225. package/cjs/models/snapshot.js +2 -2
  226. package/cjs/models/snapshot.js.map +1 -1
  227. package/cjs/models/sub-slide.js +2 -2
  228. package/cjs/models/sub-slide.js.map +1 -1
  229. package/cjs/models/support-ticket.js +2 -2
  230. package/cjs/models/support-ticket.js.map +1 -1
  231. package/cjs/models/tag.js +54 -0
  232. package/cjs/models/tag.js.map +1 -0
  233. package/cjs/models/team.js +2 -2
  234. package/cjs/models/team.js.map +1 -1
  235. package/cjs/models/template.js +2 -2
  236. package/cjs/models/template.js.map +1 -1
  237. package/cjs/models/tenancy.js +2 -2
  238. package/cjs/models/tenancy.js.map +1 -1
  239. package/cjs/models/timing-log.js +20 -41
  240. package/cjs/models/timing-log.js.map +1 -1
  241. package/cjs/models/timing-log.spec.js +18 -86
  242. package/cjs/models/timing-log.spec.js.map +1 -1
  243. package/cjs/models/transcribe-socket.js +2 -2
  244. package/cjs/models/transcribe-socket.js.map +1 -1
  245. package/cjs/models/upload.js +2 -2
  246. package/cjs/models/upload.js.map +1 -1
  247. package/cjs/models/user.js +6 -4
  248. package/cjs/models/user.js.map +1 -1
  249. package/cjs/models/user.spec.js +10 -8
  250. package/cjs/models/user.spec.js.map +1 -1
  251. package/cjs/models.js +148 -0
  252. package/cjs/models.js.map +1 -1
  253. package/cjs/presentation/appointment-presentation.js +13 -5
  254. package/cjs/presentation/appointment-presentation.js.map +1 -1
  255. package/cjs/presentation/base-presentation-collection.js.map +1 -1
  256. package/cjs/presentation/base-presentation-model.js +65 -0
  257. package/cjs/presentation/base-presentation-model.js.map +1 -1
  258. package/cjs/presentation/base-presentation-model.spec.js +87 -0
  259. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  260. package/cjs/presentation/presentation-deck.js +31 -20
  261. package/cjs/presentation/presentation-deck.js.map +1 -1
  262. package/cjs/presentation/presentation-deck.spec.js +15 -13
  263. package/cjs/presentation/presentation-deck.spec.js.map +1 -1
  264. package/cjs/presentation/presentation-decks.js +2 -2
  265. package/cjs/presentation/presentation-decks.js.map +1 -1
  266. package/cjs/presentation/presentation-section.js +36 -17
  267. package/cjs/presentation/presentation-section.js.map +1 -1
  268. package/cjs/presentation/presentation-section.spec.js +418 -0
  269. package/cjs/presentation/presentation-section.spec.js.map +1 -0
  270. package/cjs/presentation/presentation-sections.js +2 -2
  271. package/cjs/presentation/presentation-sections.js.map +1 -1
  272. package/cjs/presentation/presentation-slide.js +35 -18
  273. package/cjs/presentation/presentation-slide.js.map +1 -1
  274. package/cjs/presentation/presentation-slide.spec.js +294 -0
  275. package/cjs/presentation/presentation-slide.spec.js.map +1 -0
  276. package/cjs/presentation/presentation-slides.js +2 -2
  277. package/cjs/presentation/presentation-slides.js.map +1 -1
  278. package/cjs/presentation/presentation-subslide.js +11 -7
  279. package/cjs/presentation/presentation-subslide.js.map +1 -1
  280. package/cjs/presentation/presentation-subslide.spec.js +68 -20
  281. package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
  282. package/cjs/presentation/presentation-subslides.js +2 -2
  283. package/cjs/presentation/presentation-subslides.js.map +1 -1
  284. package/cjs/presentation/presentation.js +19 -9
  285. package/cjs/presentation/presentation.js.map +1 -1
  286. package/cjs/presentation.js +10 -0
  287. package/cjs/presentation.js.map +1 -1
  288. package/cjs/state-register.js +11 -1
  289. package/cjs/state-register.js.map +1 -1
  290. package/cjs/sync.js +7 -7
  291. package/cjs/sync.js.map +1 -1
  292. package/cjs/utils.js +7 -7
  293. package/cjs/utils.js.map +1 -1
  294. package/cjs/utils.spec.js.map +1 -1
  295. package/config/rush-project.json +53 -0
  296. package/index.js +0 -1
  297. package/jest.config.js +4 -4
  298. package/package.json +17 -59
  299. package/setup-tests.js +2 -1
  300. package/src/api.js +3 -3
  301. package/src/api.spec.js +3 -4
  302. package/src/auth.js +6 -7
  303. package/src/auth.spec.js +3 -4
  304. package/src/collections/activity.js +5 -6
  305. package/src/collections/adjunct-sections.js +4 -4
  306. package/src/collections/adjunct-slides.js +4 -4
  307. package/src/collections/adjunct-sub-slides.js +2 -2
  308. package/src/collections/appointment-adjunct-tags.js +18 -0
  309. package/src/collections/appointment-deckversion-tags.js +21 -0
  310. package/src/collections/appointment-duplicates.js +2 -2
  311. package/src/collections/appointment-editors.js +2 -2
  312. package/src/collections/appointment-section-tags.js +18 -0
  313. package/src/collections/appointment-slide-tags.js +18 -0
  314. package/src/collections/appointment-tags.js +136 -0
  315. package/src/collections/appointments.js +18 -23
  316. package/src/collections/assets.js +2 -2
  317. package/src/collections/auto-adjuncts.js +5 -5
  318. package/src/collections/base.js +17 -18
  319. package/src/collections/base.spec.js +7 -8
  320. package/src/collections/cms-vals.js +3 -3
  321. package/src/collections/contacts.js +2 -2
  322. package/src/collections/created-assets.js +2 -2
  323. package/src/collections/customers.js +2 -2
  324. package/src/collections/deck-notes.js +2 -2
  325. package/src/collections/deck-versions.js +18 -15
  326. package/src/collections/decks.js +2 -2
  327. package/src/collections/deleted-assets.js +2 -2
  328. package/src/collections/dispatches.js +8 -13
  329. package/src/collections/event-objects.js +2 -2
  330. package/src/collections/events.js +2 -2
  331. package/src/collections/groups.js +2 -2
  332. package/src/collections/images.js +2 -2
  333. package/src/collections/locations.js +2 -2
  334. package/src/collections/opportunities.js +2 -2
  335. package/src/collections/pack-diffs.js +2 -2
  336. package/src/collections/packs.js +2 -2
  337. package/src/collections/presets.js +2 -2
  338. package/src/collections/section-selections.js +4 -4
  339. package/src/collections/sections.js +2 -2
  340. package/src/collections/slide-selections.js +4 -4
  341. package/src/collections/slides.js +2 -2
  342. package/src/collections/snapshots.js +2 -2
  343. package/src/collections/sub-slides.js +2 -2
  344. package/src/collections/tags.js +18 -0
  345. package/src/collections/teams.js +2 -2
  346. package/src/collections/templates.js +2 -2
  347. package/src/collections/uploads.js +2 -2
  348. package/src/collections/users.js +2 -2
  349. package/src/collections.js +6 -0
  350. package/src/index.js +1 -4
  351. package/src/middleware.js +1 -1
  352. package/src/middlewares/json.js +2 -2
  353. package/src/middlewares/redirect.js +1 -2
  354. package/src/models/activity-item.js +6 -6
  355. package/src/models/adjunct-section.js +5 -5
  356. package/src/models/adjunct-slide.js +5 -5
  357. package/src/models/adjunct-sub-slide.js +5 -5
  358. package/src/models/adjunct.js +4 -4
  359. package/src/models/api.js +1 -1
  360. package/src/models/appointment-adjunct-tags.js +41 -0
  361. package/src/models/appointment-deckversion-tags.js +41 -0
  362. package/src/models/appointment-duplicate.js +7 -7
  363. package/src/models/appointment-editor.js +6 -6
  364. package/src/models/appointment-section-tags.js +41 -0
  365. package/src/models/appointment-slide-tags.js +41 -0
  366. package/src/models/appointment-stats.js +5 -5
  367. package/src/models/appointment-tags.js +39 -0
  368. package/src/models/appointment-viewing.js +3 -3
  369. package/src/models/appointment.js +35 -29
  370. package/src/models/asset.js +5 -5
  371. package/src/models/auto-adjunct-key-check.js +5 -5
  372. package/src/models/auto-adjunct.js +4 -4
  373. package/src/models/base.js +36 -37
  374. package/src/models/base.spec.js +61 -62
  375. package/src/models/choicelist.js +2 -2
  376. package/src/models/cms-val.js +3 -3
  377. package/src/models/contact.js +9 -9
  378. package/src/models/customer.js +13 -13
  379. package/src/models/deck-note.js +4 -4
  380. package/src/models/deck-tags.js +52 -0
  381. package/src/models/deck-version.js +9 -8
  382. package/src/models/deck.js +8 -6
  383. package/src/models/dispatch-preview.js +6 -7
  384. package/src/models/dispatch.js +6 -7
  385. package/src/models/envs.js +1 -1
  386. package/src/models/event-object.js +6 -6
  387. package/src/models/event.js +7 -7
  388. package/src/models/feed-data.js +5 -5
  389. package/src/models/file.js +4 -4
  390. package/src/models/group.js +3 -3
  391. package/src/models/handover.js +5 -5
  392. package/src/models/hosted-preso.js +5 -5
  393. package/src/models/image.js +4 -4
  394. package/src/models/location.js +5 -5
  395. package/src/models/manifest-json.js +68 -30
  396. package/src/models/onshare.js +5 -5
  397. package/src/models/opportunity.js +5 -5
  398. package/src/models/pack-diff.js +5 -5
  399. package/src/models/pack.js +4 -4
  400. package/src/models/preset.js +24 -5
  401. package/src/models/refresh-request.js +6 -6
  402. package/src/models/room.js +3 -3
  403. package/src/models/salesforce-lookup.js +3 -3
  404. package/src/models/section-selection.js +6 -6
  405. package/src/models/section.js +7 -7
  406. package/src/models/slide-selection.js +6 -6
  407. package/src/models/slide.js +7 -7
  408. package/src/models/snapshot.js +5 -5
  409. package/src/models/sub-slide.js +5 -5
  410. package/src/models/support-ticket.js +4 -4
  411. package/src/models/tag.js +42 -0
  412. package/src/models/team.js +4 -4
  413. package/src/models/template.js +4 -4
  414. package/src/models/tenancy.js +5 -5
  415. package/src/models/timing-log.js +18 -18
  416. package/src/models/timing-log.spec.js +28 -29
  417. package/src/models/transcribe-socket.js +3 -3
  418. package/src/models/upload.js +3 -3
  419. package/src/models/user.js +24 -20
  420. package/src/models/user.spec.js +2 -2
  421. package/src/models.js +7 -0
  422. package/src/presentation/appointment-presentation.js +14 -10
  423. package/src/presentation/base-presentation-model.js +67 -5
  424. package/src/presentation/base-presentation-model.spec.js +114 -22
  425. package/src/presentation/presentation-deck.js +54 -52
  426. package/src/presentation/presentation-deck.spec.js +26 -27
  427. package/src/presentation/presentation-decks.js +2 -2
  428. package/src/presentation/presentation-section.js +62 -48
  429. package/src/presentation/presentation-section.spec.js +363 -0
  430. package/src/presentation/presentation-sections.js +2 -2
  431. package/src/presentation/presentation-slide.js +51 -36
  432. package/src/presentation/presentation-slide.spec.js +250 -0
  433. package/src/presentation/presentation-slides.js +2 -2
  434. package/src/presentation/presentation-subslide.js +24 -17
  435. package/src/presentation/presentation-subslide.spec.js +40 -12
  436. package/src/presentation/presentation-subslides.js +2 -2
  437. package/src/presentation/presentation.js +27 -15
  438. package/src/state-register.js +7 -0
  439. package/src/sync.js +21 -23
  440. package/src/utils.js +8 -7
  441. package/src/utils.spec.js +15 -15
  442. package/.editorconfig +0 -9
  443. package/.eslintrc +0 -25
  444. package/.prettierrc.js +0 -3
  445. package/jsdoc.json +0 -12
  446. package/yarn.lock +0 -8099
@@ -0,0 +1,41 @@
1
+ import "./appointment.js";
2
+ import "./user.js";
3
+ import "./adjunct.js";
4
+
5
+ import { BaseModel } from "./base.js";
6
+ import { register } from "../state-register.js";
7
+
8
+ /**
9
+ * @constructor
10
+ * @alias models.AppointmentAdjunctTagsModel
11
+ * @extends models.BaseModel
12
+ */
13
+ export const AppointmentAdjunctTagsModel = BaseModel.extend(
14
+ /** @lends models.AppointmentAdjunctTagsModel# */ {
15
+ modelName: "appointment-adjunct-tags",
16
+
17
+ urlMatchKeys: {
18
+ "appointment.id": "number",
19
+ },
20
+
21
+ /**
22
+ * @property {string[]} tags
23
+ */
24
+ props: {
25
+ tags: "array",
26
+ },
27
+
28
+ /**
29
+ * @property {models.AppointmentModel} appointment
30
+ * @property {models.AdjunctModel} adjunct
31
+ * @property {models.UserModel} user
32
+ */
33
+ children: {
34
+ appointment: "AppointmentModel",
35
+ adjunct: "AdjunctModel",
36
+ user: "UserModel",
37
+ },
38
+ }
39
+ );
40
+
41
+ register("AppointmentAdjunctTagsModel", AppointmentAdjunctTagsModel);
@@ -0,0 +1,41 @@
1
+ import "./appointment.js";
2
+ import "./user.js";
3
+ import "./deck-version.js";
4
+
5
+ import { BaseModel } from "./base.js";
6
+ import { register } from "../state-register.js";
7
+
8
+ /**
9
+ * @constructor
10
+ * @alias models.AppointmentDeckVersionTagsModel
11
+ * @extends models.BaseModel
12
+ */
13
+ export const AppointmentDeckVersionTagsModel = BaseModel.extend(
14
+ /** @lends models.AppointmentDeckVersionTagsModel# */ {
15
+ modelName: "appointment-deckversion-tags",
16
+
17
+ urlMatchKeys: {
18
+ "appointment.id": "number",
19
+ },
20
+
21
+ /**
22
+ * @property {string[]} tags
23
+ */
24
+ props: {
25
+ tags: "array",
26
+ },
27
+
28
+ /**
29
+ * @property {models.AppointmentModel} appointment
30
+ * @property {models.DeckVersionModel} deckversion
31
+ * @property {models.UserModel} user
32
+ */
33
+ children: {
34
+ appointment: "AppointmentModel",
35
+ deckversion: "DeckVersionModel",
36
+ user: "UserModel",
37
+ },
38
+ }
39
+ );
40
+
41
+ register("AppointmentDeckVersionTagsModel", AppointmentDeckVersionTagsModel);
@@ -4,8 +4,8 @@ import "../collections/contacts.js";
4
4
  import "../collections/deck-versions.js";
5
5
  import "../collections/opportunities.js";
6
6
 
7
- import { register } from "../state-register.js";
8
7
  import { BaseModel } from "./base.js";
8
+ import { register } from "../state-register.js";
9
9
 
10
10
  /**
11
11
  * @constructor
@@ -17,7 +17,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
17
17
  modelName: "appointment-duplicates",
18
18
 
19
19
  urlMatchKeys: {
20
- "appointment.id": "number"
20
+ "appointment.id": "number",
21
21
  },
22
22
 
23
23
  /**
@@ -28,7 +28,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
28
28
  props: {
29
29
  type: "string",
30
30
  begin: "date",
31
- end: "date"
31
+ end: "date",
32
32
  },
33
33
  /**
34
34
  * @property {collections.ContactCollection} contact_set
@@ -38,7 +38,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
38
38
  collections: {
39
39
  contact_set: "ContactCollection",
40
40
  deckversion_set: "DeckVersionCollection",
41
- opportunity_set: "OpportunityCollection"
41
+ opportunity_set: "OpportunityCollection",
42
42
  },
43
43
  /**
44
44
  * @property {models.AppointmentModel} from_appointment
@@ -47,7 +47,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
47
47
  children: {
48
48
  from_appointment: "AppointmentModel",
49
49
  to_appointment: "AppointmentModel",
50
- preset: "PresetModel"
50
+ preset: "PresetModel",
51
51
  },
52
52
 
53
53
  toServer() {
@@ -58,7 +58,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
58
58
  preset: this._retrieveURL(duplicate.preset),
59
59
  contact_set: this._retrieveURL(duplicate.contact_set),
60
60
  deckversion_set: this._retrieveURL(duplicate.deckversion_set),
61
- opportunity_set: this._retrieveURL(duplicate.opportunity_set)
61
+ opportunity_set: this._retrieveURL(duplicate.opportunity_set),
62
62
  };
63
63
 
64
64
  if (this.id) {
@@ -66,7 +66,7 @@ export const AppointmentDuplicateModel = BaseModel.extend(
66
66
  }
67
67
 
68
68
  return data;
69
- }
69
+ },
70
70
  }
71
71
  );
72
72
 
@@ -1,8 +1,8 @@
1
1
  import "./appointment.js";
2
2
  import "./user.js";
3
3
 
4
- import { register } from "../state-register.js";
5
4
  import { BaseModel } from "./base.js";
5
+ import { register } from "../state-register.js";
6
6
 
7
7
  /**
8
8
  * @constructor
@@ -14,7 +14,7 @@ export const AppointmentEditorModel = BaseModel.extend(
14
14
  modelName: "appointment-editors",
15
15
 
16
16
  urlMatchKeys: {
17
- "appointment.id": "number"
17
+ "appointment.id": "number",
18
18
  },
19
19
 
20
20
  /**
@@ -25,7 +25,7 @@ export const AppointmentEditorModel = BaseModel.extend(
25
25
  props: {
26
26
  access_given_at: "date",
27
27
  access_revoked_at: "date",
28
- can_change_editors: "boolean"
28
+ can_change_editors: "boolean",
29
29
  },
30
30
 
31
31
  /**
@@ -34,13 +34,13 @@ export const AppointmentEditorModel = BaseModel.extend(
34
34
  */
35
35
  children: {
36
36
  appointment: "AppointmentModel",
37
- user: "UserModel"
37
+ user: "UserModel",
38
38
  },
39
39
 
40
40
  toServer() {
41
41
  const data = {
42
42
  appointment: this._retrieveURL(this.appointment),
43
- user: this._retrieveURL(this.user)
43
+ user: this._retrieveURL(this.user),
44
44
  };
45
45
 
46
46
  if (this.id) {
@@ -49,7 +49,7 @@ export const AppointmentEditorModel = BaseModel.extend(
49
49
  }
50
50
 
51
51
  return data;
52
- }
52
+ },
53
53
  }
54
54
  );
55
55
 
@@ -0,0 +1,41 @@
1
+ import "./appointment.js";
2
+ import "./user.js";
3
+ import "./slide.js";
4
+
5
+ import { BaseModel } from "./base.js";
6
+ import { register } from "../state-register.js";
7
+
8
+ /**
9
+ * @constructor
10
+ * @alias models.AppointmentSectionTagsModel
11
+ * @extends models.BaseModel
12
+ */
13
+ export const AppointmentSectionTagsModel = BaseModel.extend(
14
+ /** @lends models.AppointmentSectionTagsModel# */ {
15
+ modelName: "appointment-section-tags",
16
+
17
+ urlMatchKeys: {
18
+ "appointment.id": "number",
19
+ },
20
+
21
+ /**
22
+ * @property {string[]} tags
23
+ */
24
+ props: {
25
+ tags: "array",
26
+ },
27
+
28
+ /**
29
+ * @property {models.AppointmentModel} appointment
30
+ * @property {models.SectionModel} slide
31
+ * @property {models.UserModel} user
32
+ */
33
+ children: {
34
+ appointment: "AppointmentModel",
35
+ section: "SectionModel",
36
+ user: "UserModel",
37
+ },
38
+ }
39
+ );
40
+
41
+ register("AppointmentSectionTagsModel", AppointmentSectionTagsModel);
@@ -0,0 +1,41 @@
1
+ import "./appointment.js";
2
+ import "./user.js";
3
+ import "./slide.js";
4
+
5
+ import { BaseModel } from "./base.js";
6
+ import { register } from "../state-register.js";
7
+
8
+ /**
9
+ * @constructor
10
+ * @alias models.AppointmentSlideTagsModel
11
+ * @extends models.BaseModel
12
+ */
13
+ export const AppointmentSlideTagsModel = BaseModel.extend(
14
+ /** @lends models.AppointmentSlideTagsModel# */ {
15
+ modelName: "appointment-slide-tags",
16
+
17
+ urlMatchKeys: {
18
+ "appointment.id": "number",
19
+ },
20
+
21
+ /**
22
+ * @property {string[]} tags
23
+ */
24
+ props: {
25
+ tags: "array",
26
+ },
27
+
28
+ /**
29
+ * @property {models.AppointmentModel} appointment
30
+ * @property {models.SlideModel} slide
31
+ * @property {models.UserModel} user
32
+ */
33
+ children: {
34
+ appointment: "AppointmentModel",
35
+ slide: "SlideModel",
36
+ user: "UserModel",
37
+ },
38
+ }
39
+ );
40
+
41
+ register("AppointmentSlideTagsModel", AppointmentSlideTagsModel);
@@ -1,7 +1,7 @@
1
1
  import "./appointment.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -13,7 +13,7 @@ export const AppointmentStatsModel = BaseModel.extend(
13
13
  modelName: "appointment-stats",
14
14
 
15
15
  urlMatchKeys: {
16
- "appointment.id": "number"
16
+ "appointment.id": "number",
17
17
  },
18
18
 
19
19
  /**
@@ -24,15 +24,15 @@ export const AppointmentStatsModel = BaseModel.extend(
24
24
  props: {
25
25
  total_online_preso_shares: "number",
26
26
  total_presented_seconds: "number",
27
- contacts: "array"
27
+ contacts: "array",
28
28
  },
29
29
 
30
30
  /**
31
31
  * @property {models.AppointmentModel} appointment
32
32
  */
33
33
  children: {
34
- appointment: "AppointmentModel"
35
- }
34
+ appointment: "AppointmentModel",
35
+ },
36
36
  }
37
37
  );
38
38
 
@@ -0,0 +1,39 @@
1
+ import { BaseModel } from "./base.js";
2
+ import { register } from "../state-register.js";
3
+
4
+ /**
5
+ * @constructor
6
+ * @alias models.AppointmentTagsModel
7
+ * @extends models.BaseModel
8
+ */
9
+ export const AppointmentTagsModel = BaseModel.extend(
10
+ /** @lends models.AppointmentTagsModel# */ {
11
+ urlMatchKeys: {
12
+ "appointment.id": "number",
13
+ },
14
+
15
+ /**
16
+ * @property {string[]} tags
17
+ * @property {string} content_type
18
+ * @property {string} content_url
19
+ */
20
+ props: {
21
+ tags: "array",
22
+ content_type: "string",
23
+ content_url: "string",
24
+ },
25
+
26
+ /**
27
+ * @property {models.AppointmentModel} appointment
28
+ * @property {models.UserModel} user
29
+ */
30
+ children: {
31
+ appointment: "AppointmentModel",
32
+ user: "UserModel",
33
+ },
34
+ }
35
+ );
36
+
37
+ AppointmentTagsModel.canBeEmpty = true;
38
+
39
+ register("AppointmentTagsModel", AppointmentTagsModel);
@@ -1,5 +1,5 @@
1
- import { register } from "../state-register.js";
2
1
  import { BaseModel } from "./base.js";
2
+ import { register } from "../state-register.js";
3
3
 
4
4
  /**
5
5
  * @constructor
@@ -20,8 +20,8 @@ export const AppointmentViewingModel = BaseModel.extend(
20
20
  end: "date",
21
21
  viewing_stats: "array",
22
22
  top_slides: "array",
23
- not_viewed: "array"
24
- }
23
+ not_viewed: "array",
24
+ },
25
25
  }
26
26
  );
27
27
 
@@ -5,6 +5,7 @@ import "./preset.js";
5
5
  import "./team.js";
6
6
  import "./hosted-preso.js";
7
7
  import "./appointment-stats.js";
8
+ import "./appointment-tags.js";
8
9
  import "../collections/contacts.js";
9
10
  import "../collections/appointment-editors.js";
10
11
  import "../collections/deck-versions.js";
@@ -13,17 +14,17 @@ import "../collections/section-selections.js";
13
14
  import "../collections/slide-selections.js";
14
15
  import "../collections/dispatches.js";
15
16
  import "../collections/users.js";
16
-
17
- import Promise from "bluebird";
18
- import moment from "moment";
17
+ import "../collections/appointment-tags";
19
18
 
20
19
  import { AdjunctSectionCollection } from "../collections/adjunct-sections.js";
21
20
  import { AdjunctSlideCollection } from "../collections/adjunct-slides.js";
22
21
  import { AdjunctSubSlideCollection } from "../collections/adjunct-sub-slides.js";
22
+ import { BaseModel } from "./base.js";
23
23
  import { DeckNoteCollection } from "../collections/deck-notes.js";
24
+ import Promise from "bluebird";
24
25
  import log from "../log.js";
26
+ import moment from "moment";
25
27
  import { register } from "../state-register.js";
26
- import { BaseModel } from "./base.js";
27
28
 
28
29
  /**
29
30
  * @constructor
@@ -75,7 +76,7 @@ export const AppointmentModel = BaseModel.extend(
75
76
  no_edit_after: "date",
76
77
  no_share_after: "date",
77
78
  no_delete_after: "date",
78
- no_snapshot_create_after: "date"
79
+ no_snapshot_create_after: "date",
79
80
  },
80
81
 
81
82
  /**
@@ -93,7 +94,12 @@ export const AppointmentModel = BaseModel.extend(
93
94
  appointmentssection_set: "SectionSelectionCollection",
94
95
  appointmentsslide_set: "SlideSelectionCollection",
95
96
  dispatch_set: "DispatchCollection",
96
- current_editor_set: "UserCollection"
97
+ current_editor_set: "UserCollection",
98
+ tags: "AppointmentTagsCollection",
99
+ appointmentdeckversiontags_set: "AppointmentDeckVersionTagsCollection",
100
+ appointmentsectiontags_set: "AppointmentSectionTagsCollection",
101
+ appointmentslidetags_set: "AppointmentSlideTagsCollection",
102
+ appointmentadjuncttags_set: "AppointmentAdjunctTagsCollection",
97
103
  },
98
104
 
99
105
  /**
@@ -109,7 +115,7 @@ export const AppointmentModel = BaseModel.extend(
109
115
  user: "UserModel",
110
116
  latest_tele: "HostedPresoModel",
111
117
  stats: "AppointmentStatsModel",
112
- team: "TeamModel"
118
+ team: "TeamModel",
113
119
  },
114
120
 
115
121
  /**
@@ -126,7 +132,7 @@ export const AppointmentModel = BaseModel.extend(
126
132
  const adjunctSlides = new AdjunctSlideCollection();
127
133
  adjunctSlides.queryData.appointment = this.id;
128
134
  return adjunctSlides;
129
- }
135
+ },
130
136
  },
131
137
  adjunctSections: {
132
138
  deps: ["id"],
@@ -134,7 +140,7 @@ export const AppointmentModel = BaseModel.extend(
134
140
  const adjunctSections = new AdjunctSectionCollection();
135
141
  adjunctSections.queryData.appointment = this.id;
136
142
  return adjunctSections;
137
- }
143
+ },
138
144
  },
139
145
  adjunctSubSlides: {
140
146
  deps: ["id"],
@@ -142,14 +148,14 @@ export const AppointmentModel = BaseModel.extend(
142
148
  const adjunctSubSlides = new AdjunctSubSlideCollection();
143
149
  adjunctSubSlides.queryData.appointment = this.id;
144
150
  return adjunctSubSlides;
145
- }
151
+ },
146
152
  },
147
153
  deckNotes: {
148
154
  deps: ["id"],
149
155
  fn() {
150
156
  const appointmentUrl = this.url();
151
157
  return new DeckNoteCollection({ url: `${appointmentUrl}notes/` });
152
- }
158
+ },
153
159
  },
154
160
  cannotShare: {
155
161
  deps: ["no_share_after"],
@@ -159,7 +165,7 @@ export const AppointmentModel = BaseModel.extend(
159
165
  }
160
166
  const noShareAfter = moment(this.no_share_after);
161
167
  return moment().diff(noShareAfter) > 0;
162
- }
168
+ },
163
169
  },
164
170
  cannotEdit: {
165
171
  deps: ["no_edit_after"],
@@ -169,7 +175,7 @@ export const AppointmentModel = BaseModel.extend(
169
175
  }
170
176
  const noEditAfter = moment(this.no_edit_after);
171
177
  return moment().diff(noEditAfter) > 0;
172
- }
178
+ },
173
179
  },
174
180
  cannotDelete: {
175
181
  deps: ["no_delete_after"],
@@ -179,7 +185,7 @@ export const AppointmentModel = BaseModel.extend(
179
185
  }
180
186
  const noDeleteAfter = moment(this.no_delete_after);
181
187
  return moment().diff(noDeleteAfter) > 0;
182
- }
188
+ },
183
189
  },
184
190
  cannotCreateSnapshot: {
185
191
  deps: ["no_snapshot_create_after"],
@@ -189,22 +195,21 @@ export const AppointmentModel = BaseModel.extend(
189
195
  }
190
196
  const noCreateAfter = moment(this.no_snapshot_create_after);
191
197
  return moment().diff(noCreateAfter) > 0;
192
- }
198
+ },
193
199
  },
194
200
  readOnly: {
195
201
  deps: ["cannotShare"],
196
202
  fn() {
197
203
  return this.cannotShare;
198
- }
204
+ },
199
205
  },
200
206
  shareOnly: {
201
207
  deps: ["cannotEdit", "cannotDelete"],
202
208
  fn() {
203
209
  return this.cannotEdit || this.cannotDelete;
204
- }
205
- }
210
+ },
211
+ },
206
212
  },
207
-
208
213
  fetchAll(fetchSelf = false, options = {}) {
209
214
  return Promise.resolve()
210
215
  .then(() => {
@@ -223,7 +228,8 @@ export const AppointmentModel = BaseModel.extend(
223
228
  this.adjunctSections.fetch(options),
224
229
  this.adjunctSubSlides.fetch(options),
225
230
  this.contact_set.fetchSet(options),
226
- this.user.fetch(options).catch(e => {
231
+ this.tags.fetch(options),
232
+ this.user.fetch(options).catch((e) => {
227
233
  if (e.status && e.status === 404) {
228
234
  // It's possible for a user to be deactivated, which means they'll
229
235
  // return with a 404. We want to be able to still load the preso,
@@ -240,7 +246,7 @@ export const AppointmentModel = BaseModel.extend(
240
246
  this.opportunity_set.toJSON()
241
247
  );
242
248
  return Promise.resolve();
243
- })
249
+ }),
244
250
  ];
245
251
 
246
252
  if (this.latest_snapshot) {
@@ -259,21 +265,21 @@ export const AppointmentModel = BaseModel.extend(
259
265
  })
260
266
  .then(() => {
261
267
  const adjunctSlides = this.adjunctSlides
262
- .filter(adj => adj.template)
263
- .map(adj => adj.template.fetch(options));
268
+ .filter((adj) => adj.template)
269
+ .map((adj) => adj.template.fetch(options));
264
270
  const adjunctSections = this.adjunctSections
265
- .filter(adj => adj.template)
266
- .map(adj => adj.template.fetch(options));
271
+ .filter((adj) => adj.template)
272
+ .map((adj) => adj.template.fetch(options));
267
273
 
268
274
  return Promise.all([...adjunctSlides, ...adjunctSections]);
269
275
  })
270
276
  .then(() => {
271
277
  return Promise.all(
272
- this.deckversion_set.map(model => {
278
+ this.deckversion_set.map((model) => {
273
279
  return Promise.all([
274
280
  model.template_set.fetchSet(options),
275
281
  model.manifest_json.fetch(options),
276
- model.deck.fetch(options)
282
+ model.deck.fetch(options),
277
283
  ]);
278
284
  })
279
285
  );
@@ -301,7 +307,7 @@ export const AppointmentModel = BaseModel.extend(
301
307
  no_share_after: appointment.no_share_after,
302
308
  no_delete_after: appointment.no_delete_after,
303
309
  team: this._retrieveURL(appointment.team),
304
- editors_can_change_editors: appointment.editors_can_change_editors
310
+ editors_can_change_editors: appointment.editors_can_change_editors,
305
311
  };
306
312
 
307
313
  if (this.id) {
@@ -309,7 +315,7 @@ export const AppointmentModel = BaseModel.extend(
309
315
  }
310
316
 
311
317
  return data;
312
- }
318
+ },
313
319
  }
314
320
  );
315
321
 
@@ -1,7 +1,7 @@
1
1
  import "./pack.js";
2
2
 
3
- import { register } from "../state-register.js";
4
3
  import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
5
 
6
6
  /**
7
7
  * @constructor
@@ -13,7 +13,7 @@ export const AssetModel = BaseModel.extend(
13
13
  modelName: "assets",
14
14
 
15
15
  urlMatchKeys: {
16
- "pack.id": "number"
16
+ "pack.id": "number",
17
17
  },
18
18
 
19
19
  /**
@@ -30,19 +30,19 @@ export const AssetModel = BaseModel.extend(
30
30
  hash_algorithm: "string",
31
31
  hash_digest: "string",
32
32
  modified_date: "date",
33
- orig_path: "string"
33
+ orig_path: "string",
34
34
  },
35
35
 
36
36
  /**
37
37
  * @property {models.PackModel} pack
38
38
  */
39
39
  children: {
40
- pack: "PackModel"
40
+ pack: "PackModel",
41
41
  },
42
42
 
43
43
  url() {
44
44
  return this._url;
45
- }
45
+ },
46
46
  }
47
47
  );
48
48
 
@@ -2,8 +2,8 @@ import "./template.js";
2
2
  import "./team.js";
3
3
  import "./deck.js";
4
4
 
5
- import { register } from "../state-register.js";
6
5
  import { BaseModel } from "./base.js";
6
+ import { register } from "../state-register.js";
7
7
 
8
8
  /**
9
9
  * @constructor
@@ -18,7 +18,7 @@ export const AutoAdjunctKeyCheckModel = BaseModel.extend(
18
18
  * @property {array} preferred_keys
19
19
  */
20
20
  props: {
21
- preferred_keys: "array"
21
+ preferred_keys: "array",
22
22
  },
23
23
 
24
24
  /**
@@ -27,13 +27,13 @@ export const AutoAdjunctKeyCheckModel = BaseModel.extend(
27
27
  */
28
28
  children: {
29
29
  deck: "DeckModel",
30
- team: "TeamModel"
30
+ team: "TeamModel",
31
31
  },
32
32
 
33
33
  toServer() {
34
34
  const data = {
35
35
  preferred_keys: this.preferred_keys,
36
- deck: this.deck.url()
36
+ deck: this.deck.url(),
37
37
  };
38
38
 
39
39
  if (this.team) {
@@ -41,7 +41,7 @@ export const AutoAdjunctKeyCheckModel = BaseModel.extend(
41
41
  }
42
42
 
43
43
  return data;
44
- }
44
+ },
45
45
  }
46
46
  );
47
47