@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
@@ -4,6 +4,7 @@ import "./deck.js";
4
4
 
5
5
  import { BaseModel } from "../models/base.js";
6
6
  import { register } from "../state-register.js";
7
+ import { sanitizeBase64 } from "../utils.js";
7
8
 
8
9
  /**
9
10
  * @constructor
@@ -21,6 +22,7 @@ export const CMSValModel = BaseModel.extend(
21
22
  scope: "string",
22
23
  mime: "string",
23
24
  value: "string",
25
+ _tenancy: "object",
24
26
  },
25
27
 
26
28
  /**
@@ -55,7 +57,28 @@ export const CMSValModel = BaseModel.extend(
55
57
 
56
58
  return data;
57
59
  },
58
- }
60
+
61
+ toServer() {
62
+ const obj = BaseModel.prototype.toServer.call(this);
63
+ return {
64
+ ...obj,
65
+ // We shouldn't allow any base64 to get in here, otherwise it can
66
+ // KO all users appointments.
67
+ value: sanitizeBase64(obj.value),
68
+ };
69
+ },
70
+
71
+ toCompactJSON() {
72
+ const json = this.toJSON();
73
+ const wanted = ["key", "value", "mime", "scope"];
74
+
75
+ const compact = Object.fromEntries(
76
+ Object.entries(json).filter(([key, val]) => wanted.includes(key)),
77
+ );
78
+
79
+ return compact;
80
+ },
81
+ },
59
82
  );
60
83
 
61
84
  register("CMSValModel", CMSValModel);
@@ -0,0 +1,14 @@
1
+ import { G } from "sp-test/api";
2
+
3
+ it("should remove large base64 strings from value when saving", async () => {
4
+ const CMSValModel = G("CMSValModel");
5
+ const largeBase64 =
6
+ "data:image/gif;base64," + new Array(50_000).fill("a").join("");
7
+
8
+ const cmsVal = new CMSValModel({
9
+ mime: "image",
10
+ value: largeBase64,
11
+ });
12
+
13
+ expect(cmsVal.toServer().value).toEqual("");
14
+ });
@@ -0,0 +1,57 @@
1
+ import "./customer.js";
2
+
3
+ import { BaseModel } from "./base.js";
4
+ import { register } from "../state-register.js";
5
+
6
+ /**
7
+ * @constructor
8
+ * @alias models.ContactModel
9
+ * @extends models.BaseModel
10
+ */
11
+ export const ContactPhoneModel = BaseModel.extend(
12
+ /** @lends models.ContactPhoneModel# */ {
13
+ modelName: "contact-phones",
14
+
15
+ /**
16
+ * @property {date} created_date
17
+ * @property {date} modified_date
18
+ * @property {boolean} is_valid
19
+ * @property {string} raw
20
+ * @property {string} e164_format
21
+ * @property {string} national_format
22
+ * @property {string} number_type
23
+ */
24
+ props: {
25
+ created_date: "date",
26
+ modified_date: "date",
27
+ is_valid: "boolean",
28
+ raw: "string",
29
+ e164_format: "string",
30
+ national_format: "string",
31
+ number_type: "string",
32
+ },
33
+
34
+ /**
35
+ * @property {models.ContactModel} contact
36
+ */
37
+ children: {
38
+ contact: "ContactModel",
39
+ },
40
+
41
+ toServer() {
42
+ /* Only write to `raw` field. The others are derived on the server */
43
+ const data = {
44
+ raw: this.raw,
45
+ contact: this._retrieveURL(this.contact),
46
+ };
47
+
48
+ if (this.id) {
49
+ data.id = this.id;
50
+ }
51
+
52
+ return data;
53
+ },
54
+ },
55
+ );
56
+
57
+ register("ContactPhoneModel", ContactPhoneModel);
@@ -100,7 +100,7 @@ export const ContactModel = BaseModel.extend(
100
100
 
101
101
  return data;
102
102
  },
103
- }
103
+ },
104
104
  );
105
105
 
106
106
  register("ContactModel", ContactModel);
@@ -76,7 +76,7 @@ export const CustomerModel = BaseModel.extend(
76
76
  deps: ["logo_512", "profile"],
77
77
  fn: function () {
78
78
  // HACK: Check for the REA usecase where it gets images from profile
79
- if (this.profile && this.profile.rea_image_large) {
79
+ if (this.profile?.rea_image_large) {
80
80
  return this.profile.rea_image_large;
81
81
  }
82
82
 
@@ -113,7 +113,7 @@ export const CustomerModel = BaseModel.extend(
113
113
  // Filter contacts if this is fetched from an appointment
114
114
  if (topParent && topParent.name === "appointments") {
115
115
  const contactUrls = this.contact_set.map((contact) =>
116
- this._retrieveUrl(contact)
116
+ this._retrieveUrl(contact),
117
117
  );
118
118
 
119
119
  const filteredContacts = topParent.contact_set.filter((contact) => {
@@ -140,7 +140,7 @@ export const CustomerModel = BaseModel.extend(
140
140
 
141
141
  return data;
142
142
  },
143
- }
143
+ },
144
144
  );
145
145
 
146
146
  register("CustomerModel", CustomerModel);
@@ -30,7 +30,7 @@ export const DeckNoteModel = BaseModel.extend(
30
30
  user: "UserModel",
31
31
  team: "TeamModel",
32
32
  },
33
- }
33
+ },
34
34
  );
35
35
 
36
36
  DeckNoteModel.canBeEmpty = true;
@@ -44,7 +44,7 @@ export const DeckTagsModel = BaseModel.extend(
44
44
  this.items = tags;
45
45
  });
46
46
  },
47
- }
47
+ },
48
48
  );
49
49
 
50
50
  DeckTagsModel.canBeEmpty = true;
@@ -42,7 +42,7 @@ export const DeckVersionScreenshotModel = BaseModel.extend(
42
42
  const data = BaseModel.prototype.serialize.call(this);
43
43
  return _.omit(data, ["url"]);
44
44
  },
45
- }
45
+ },
46
46
  );
47
47
 
48
48
  register("DeckVersionScreenshotModel", DeckVersionScreenshotModel);
@@ -1,6 +1,5 @@
1
1
  import "../collections/sections.js";
2
2
  import "../collections/deck-notes.js";
3
- import "../collections/templates.js";
4
3
  import "./pack.js";
5
4
  import "./deck.js";
6
5
  import "./asset.js";
@@ -9,6 +8,7 @@ import "./manifest-json.js";
9
8
  import { BaseModel } from "./base.js";
10
9
  import { DeckVersionScreenshotCollection } from "../collections/deck-version-screenshots.js";
11
10
  import Promise from "bluebird";
11
+ import { TemplateCollection } from "../collections.js";
12
12
  import _ from "lodash";
13
13
  import { register } from "../state-register.js";
14
14
  import superagent from "superagent";
@@ -59,6 +59,7 @@ export const DeckVersionModel = BaseModel.extend(
59
59
  upgrade_description: "string",
60
60
  friendly_release_notes: "string",
61
61
  has_editable_share_support: "boolean",
62
+ has_signing_support: "boolean",
62
63
  point_in_time_share_policy: "string",
63
64
  tags: "array",
64
65
  cmsvalkey_set: "array",
@@ -80,12 +81,10 @@ export const DeckVersionModel = BaseModel.extend(
80
81
  /**
81
82
  * @property {collections.SectionCollection} section_set
82
83
  * @property {models.DeckNoteCollection} note_set
83
- * @property {models.TemplateCollection} template_set
84
84
  */
85
85
  collections: {
86
86
  section_set: "SectionCollection",
87
87
  note_set: "DeckNoteCollection",
88
- template_set: "TemplateCollection",
89
88
  },
90
89
 
91
90
  /**
@@ -99,17 +98,33 @@ export const DeckVersionModel = BaseModel.extend(
99
98
  {},
100
99
  {
101
100
  deckversion: this,
102
- }
101
+ },
103
102
  );
104
103
  return screenshots;
105
104
  },
106
105
  },
106
+
107
+ template_set: {
108
+ deps: ["id"],
109
+ fn: function () {
110
+ const templates = new TemplateCollection(
111
+ {},
112
+ {
113
+ data: {
114
+ deckversion: this.id,
115
+ scope: "global",
116
+ },
117
+ },
118
+ );
119
+ return templates;
120
+ },
121
+ },
107
122
  },
108
123
 
109
124
  getHooksPath() {
110
125
  if (this.isNew()) {
111
126
  throw new Error(
112
- "Can only get hooks from a fetched deckversion or at least have an ID"
127
+ "Can only get hooks from a fetched deckversion or at least have an ID",
113
128
  );
114
129
  }
115
130
 
@@ -178,6 +193,17 @@ export const DeckVersionModel = BaseModel.extend(
178
193
  return Promise.all(imports);
179
194
  },
180
195
 
196
+ fetch() {
197
+ const fetch = BaseModel.prototype.fetch.apply(this, arguments);
198
+
199
+ return Promise.resolve(fetch).tap(() => {
200
+ // `template_set` used to come on the deckversion response, but we have since
201
+ // decided to request it separately (this helps with caching). To keep the app
202
+ // working with minimal changes, we're making the extra request here.
203
+ return this.template_set.fetch();
204
+ });
205
+ },
206
+
181
207
  waitForReady() {
182
208
  return this.fetch().then(() => {
183
209
  if (["created", "failed"].indexOf(this.creation_status) > -1) {
@@ -204,7 +230,7 @@ export const DeckVersionModel = BaseModel.extend(
204
230
  upgrade_description: this.upgrade_description,
205
231
  };
206
232
  },
207
- }
233
+ },
208
234
  );
209
235
 
210
236
  register("DeckVersionModel", DeckVersionModel);
@@ -56,7 +56,7 @@ export const DeckModel = BaseModel.extend(
56
56
  head_version: "DeckVersionModel",
57
57
  tags: "DeckTagsModel",
58
58
  },
59
- }
59
+ },
60
60
  );
61
61
 
62
62
  register("DeckModel", DeckModel);
@@ -28,7 +28,7 @@ export const DispatchPreviewModel = BaseModel.extend(
28
28
  throw e;
29
29
  });
30
30
  },
31
- }
31
+ },
32
32
  );
33
33
 
34
34
  register("DispatchPreviewModel", DispatchPreviewModel);
@@ -105,7 +105,7 @@ export const DispatchModel = BaseModel.extend(
105
105
 
106
106
  return data;
107
107
  },
108
- }
108
+ },
109
109
  );
110
110
 
111
111
  register("DispatchModel", DispatchModel);
@@ -33,7 +33,7 @@ export const EventObjectModel = BaseModel.extend(
33
33
  children: {
34
34
  event: "EventModel",
35
35
  },
36
- }
36
+ },
37
37
  );
38
38
 
39
39
  register("EventObjectModel", EventObjectModel);
@@ -41,7 +41,7 @@ export const EventModel = BaseModel.extend(
41
41
  collections: {
42
42
  eventobject_set: "EventObjectCollection",
43
43
  },
44
- }
44
+ },
45
45
  );
46
46
 
47
47
  register("EventModel", EventModel);
@@ -19,7 +19,7 @@ export const FeedDataModel = BaseModel.extend(
19
19
  */
20
20
  props: {
21
21
  feed_data: "object",
22
- feed_debug: {type: "object", default: () => {}},
22
+ feed_debug: { type: "object", default: () => {} },
23
23
  creation_status: "string",
24
24
  },
25
25
 
@@ -42,7 +42,7 @@ export const FeedDataModel = BaseModel.extend(
42
42
 
43
43
  return data;
44
44
  },
45
- }
45
+ },
46
46
  );
47
47
 
48
48
  register("FeedDataModel", FeedDataModel);
@@ -31,7 +31,7 @@ export const FileModel = BaseModel.extend(
31
31
  children: {
32
32
  event: "UserModel",
33
33
  },
34
- }
34
+ },
35
35
  );
36
36
 
37
37
  register("FileModel", FileModel);
@@ -24,7 +24,7 @@ export const GroupModel = BaseModel.extend(
24
24
  const urlRoot = Api.getURL();
25
25
  return `${urlRoot}groups/`;
26
26
  },
27
- }
27
+ },
28
28
  );
29
29
 
30
30
  register("GroupModel", GroupModel);
@@ -46,7 +46,7 @@ export const HandoverModel = BaseModel.extend(
46
46
 
47
47
  return data;
48
48
  },
49
- }
49
+ },
50
50
  );
51
51
 
52
52
  register("HandoverModel", HandoverModel);
@@ -44,7 +44,7 @@ export const HostedPresoModel = BaseModel.extend(
44
44
  collections: {
45
45
  user_set: "UserCollection",
46
46
  },
47
- }
47
+ },
48
48
  );
49
49
 
50
50
  register("HostedPresoModel", HostedPresoModel);
@@ -69,7 +69,7 @@ export const ImageModel = BaseModel.extend(
69
69
  });
70
70
  });
71
71
  },
72
- }
72
+ },
73
73
  );
74
74
 
75
75
  register("ImageModel", ImageModel);
@@ -57,7 +57,7 @@ export const LocationModel = BaseModel.extend(
57
57
  collections: {
58
58
  contact_set: "ContactCollection",
59
59
  },
60
- }
60
+ },
61
61
  );
62
62
 
63
63
  register("LocationModel", LocationModel);
@@ -26,6 +26,7 @@ export const ManifestJSONModel = BaseModel.extend(
26
26
  * @property {object} dimensions
27
27
  * @property {object} pdfpreferences
28
28
  * @property {boolean} has_editable_share_support
29
+ * @property {boolean} has_signing_support
29
30
  * @property {boolean} notify_salesperson_after_feeds_fetched
30
31
  * @property {boolean} require_verification
31
32
  * @property {boolean} companywide_editable
@@ -57,7 +58,8 @@ export const ManifestJSONModel = BaseModel.extend(
57
58
  },
58
59
  },
59
60
  dimensions: {
60
- type: "object",
61
+ // This could be a list or an object
62
+ type: "any",
61
63
  default: function () {
62
64
  return {
63
65
  width: 1024,
@@ -77,6 +79,10 @@ export const ManifestJSONModel = BaseModel.extend(
77
79
  type: "boolean",
78
80
  default: false,
79
81
  },
82
+ has_signing_support: {
83
+ type: "boolean",
84
+ default: false,
85
+ },
80
86
  point_in_time_share_policy: {
81
87
  type: "string",
82
88
  },
@@ -107,6 +113,45 @@ export const ManifestJSONModel = BaseModel.extend(
107
113
  },
108
114
  },
109
115
 
116
+ derived: {
117
+ // Most places just need this value, and making it derived
118
+ // gives us lower overhead (when we convert with .toJSON() it will
119
+ // also include this value, and means we don't have to convert back to
120
+ // a model just to get this again.)
121
+ screenDimensions: {
122
+ deps: ["dimensions"],
123
+ fn: function () {
124
+ return this.getScreenDimensions();
125
+ },
126
+ },
127
+ },
128
+
129
+ getDimensionsByName(name) {
130
+ if (Array.isArray(this.dimensions)) {
131
+ const dimension = this.dimensions.find(
132
+ (d) => d.name.toLowerCase() === name.toLowerCase(),
133
+ );
134
+ if (!dimension) {
135
+ return { width: 1024, height: 767 };
136
+ }
137
+ return { width: dimension.width, height: dimension.height };
138
+ }
139
+ return this.dimensions;
140
+ },
141
+
142
+ getScreenDimensions() {
143
+ return this.getDimensionsByName("screen");
144
+ },
145
+
146
+ getPDFDimensions() {
147
+ if (Array.isArray(this.dimensions)) {
148
+ const defaultPDFDimensions =
149
+ this.pdfpreferences?.defaultDimensions || "screen";
150
+ return this.getDimensionsByName(defaultPDFDimensions);
151
+ }
152
+ return this.dimensions;
153
+ },
154
+
110
155
  /**
111
156
  * Returns the path to a manifest asset, using its url as the base.
112
157
  * @param {?string} key
@@ -117,7 +162,7 @@ export const ManifestJSONModel = BaseModel.extend(
117
162
  const [sectionKey, slideKey = null] = key.split("/");
118
163
  const sectionKeyPath = url2.resolve(
119
164
  this.url(),
120
- `sections/${sectionKey}/`
165
+ `sections/${sectionKey}/`,
121
166
  );
122
167
  if (slideKey) {
123
168
  return url2.resolve(sectionKeyPath, `slides/${slideKey}/`);
@@ -144,7 +189,7 @@ export const ManifestJSONModel = BaseModel.extend(
144
189
 
145
190
  return BaseModel.prototype.url.call(this);
146
191
  },
147
- }
192
+ },
148
193
  );
149
194
 
150
195
  /**
@@ -204,7 +249,7 @@ ManifestJSONModel.createFromProject = function (projectFile) {
204
249
  };
205
250
  return templates;
206
251
  },
207
- {}
252
+ {},
208
253
  );
209
254
 
210
255
  const limits = {
@@ -278,7 +323,18 @@ ManifestJSONModel.createFromProject = function (projectFile) {
278
323
  }
279
324
 
280
325
  if (projectFile.dimensions) {
281
- manifest.dimensions = projectFile.dimensions;
326
+ const { dimensions } = projectFile;
327
+
328
+ if (Array.isArray(dimensions)) {
329
+ const screen = dimensions.filter((d) => d.name === "Screen");
330
+ if (!screen.length || screen.length > 1) {
331
+ throw new Error(
332
+ "Dimensions must contain one value named 'Screen' in project.yaml",
333
+ );
334
+ }
335
+ }
336
+
337
+ manifest.dimensions = dimensions;
282
338
  }
283
339
 
284
340
  if (projectFile.has_editable_share_support) {
@@ -286,6 +342,10 @@ ManifestJSONModel.createFromProject = function (projectFile) {
286
342
  projectFile.has_editable_share_support;
287
343
  }
288
344
 
345
+ if (projectFile.has_signing_support) {
346
+ manifest.has_signing_support = projectFile.has_signing_support;
347
+ }
348
+
289
349
  if (projectFile.point_in_time_share_policy) {
290
350
  manifest.point_in_time_share_policy =
291
351
  projectFile.point_in_time_share_policy;
@@ -50,7 +50,7 @@ export const OnShareModel = BaseModel.extend(
50
50
 
51
51
  return data;
52
52
  },
53
- }
53
+ },
54
54
  );
55
55
 
56
56
  register("OnShareModel", OnShareModel);
@@ -47,7 +47,7 @@ export const OpportunityModel = BaseModel.extend(
47
47
  children: {
48
48
  customer: "CustomerModel",
49
49
  },
50
- }
50
+ },
51
51
  );
52
52
 
53
53
  register("OpportunityModel", OpportunityModel);
@@ -55,7 +55,7 @@ export const PackDiffModel = BaseModel.extend(
55
55
 
56
56
  return data;
57
57
  },
58
- }
58
+ },
59
59
  );
60
60
 
61
61
  register("PackDiffModel", PackDiffModel);
@@ -38,7 +38,7 @@ export const PackModel = BaseModel.extend(
38
38
  }
39
39
  return `${this.urlRoot()}empty/`;
40
40
  },
41
- }
41
+ },
42
42
  );
43
43
 
44
44
  register("PackModel", PackModel);
@@ -20,6 +20,7 @@ export const PresetModel = BaseModel.extend(
20
20
  * @property {date} created_date
21
21
  * @property {date} modified_date
22
22
  * @property {string} name
23
+ * @property {string} hash_id
23
24
  */
24
25
  props: {
25
26
  scope: "string",
@@ -28,6 +29,8 @@ export const PresetModel = BaseModel.extend(
28
29
  modified_date: "date",
29
30
  name: "stringSanitized",
30
31
  context: "object",
32
+ hash_id: "string",
33
+ _tenancy: "object",
31
34
  },
32
35
 
33
36
  /**
@@ -71,7 +74,7 @@ export const PresetModel = BaseModel.extend(
71
74
 
72
75
  return data;
73
76
  },
74
- }
77
+ },
75
78
  );
76
79
 
77
80
  PresetModel.USER_VISIBILITY = "__user__";
@@ -2,6 +2,7 @@ import "./customer.js";
2
2
  import "./user.js";
3
3
 
4
4
  import { BaseModel } from "./base.js";
5
+ import Promise from "bluebird";
5
6
  import { register } from "../state-register.js";
6
7
 
7
8
  /**
@@ -25,6 +26,20 @@ export const RefreshRequestModel = BaseModel.extend(
25
26
  user: "UserModel",
26
27
  },
27
28
 
29
+ waitForReady(opts = {}, attempts = 20) {
30
+ if (attempts === 0) {
31
+ return Promise.reject();
32
+ }
33
+ return this.fetch(opts).then(() => {
34
+ if (["ready", "failed"].indexOf(this.creation_status) > -1) {
35
+ return Promise.resolve();
36
+ }
37
+ return Promise.delay(1000).then(() =>
38
+ this.waitForReady(opts, attempts - 1),
39
+ );
40
+ });
41
+ },
42
+
28
43
  toServer() {
29
44
  if (this.isNew()) {
30
45
  return {
@@ -37,7 +52,7 @@ export const RefreshRequestModel = BaseModel.extend(
37
52
  url: this.url(),
38
53
  };
39
54
  },
40
- }
55
+ },
41
56
  );
42
57
 
43
58
  register("RefreshRequestModel", RefreshRequestModel);
@@ -38,7 +38,7 @@ export const RoomModel = BaseModel.extend(
38
38
  wamp_version: "string",
39
39
  websocket_server_uri: "string",
40
40
  },
41
- }
41
+ },
42
42
  );
43
43
 
44
44
  register("RoomModel", RoomModel);
@@ -24,7 +24,7 @@ export const SalesforceLookupModel = BaseModel.extend(
24
24
  customers: "CustomerCollection",
25
25
  opportunities: "OpportunityCollection",
26
26
  },
27
- }
27
+ },
28
28
  );
29
29
 
30
30
  register("SaleforceLookupModel", SalesforceLookupModel);
@@ -50,7 +50,7 @@ export const SectionSelectionModel = BaseModel.extend(
50
50
 
51
51
  return data;
52
52
  },
53
- }
53
+ },
54
54
  );
55
55
 
56
56
  register("SectionSelectionModel", SectionSelectionModel);