@livepreso/api 6.41.0 → 6.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +5 -0
- package/.rush/temp/build-cache-tar.log +7 -0
- package/.rush/temp/package-deps_test.json +170 -0
- package/.rush/temp/shrinkwrap-deps.json +957 -0
- package/CHANGELOG.json +53 -0
- package/CHANGELOG.md +32 -0
- package/api.build.log +4 -0
- package/babel.config.js +9 -18
- package/cjs/api.js +1 -1
- package/cjs/api.js.map +1 -1
- package/cjs/api.spec.js +2 -2
- package/cjs/api.spec.js.map +1 -1
- package/cjs/auth.js +6 -5
- package/cjs/auth.js.map +1 -1
- package/cjs/auth.spec.js +25 -23
- package/cjs/auth.spec.js.map +1 -1
- package/cjs/caching.js +3 -3
- package/cjs/collections/activity.js +22 -27
- package/cjs/collections/activity.js.map +1 -1
- package/cjs/collections/adjunct-sections.js +2 -2
- package/cjs/collections/adjunct-sections.js.map +1 -1
- package/cjs/collections/adjunct-slides.js +2 -2
- package/cjs/collections/adjunct-slides.js.map +1 -1
- package/cjs/collections/adjunct-sub-slides.js +2 -2
- package/cjs/collections/adjunct-sub-slides.js.map +1 -1
- package/cjs/collections/appointment-adjunct-tags.js +28 -0
- package/cjs/collections/appointment-adjunct-tags.js.map +1 -0
- package/cjs/collections/appointment-deckversion-tags.js +28 -0
- package/cjs/collections/appointment-deckversion-tags.js.map +1 -0
- package/cjs/collections/appointment-duplicates.js +2 -2
- package/cjs/collections/appointment-duplicates.js.map +1 -1
- package/cjs/collections/appointment-editors.js +2 -2
- package/cjs/collections/appointment-editors.js.map +1 -1
- package/cjs/collections/appointment-section-tags.js +28 -0
- package/cjs/collections/appointment-section-tags.js.map +1 -0
- package/cjs/collections/appointment-slide-tags.js +28 -0
- package/cjs/collections/appointment-slide-tags.js.map +1 -0
- package/cjs/collections/appointment-tags.js +208 -0
- package/cjs/collections/appointment-tags.js.map +1 -0
- package/cjs/collections/appointments.js +10 -6
- package/cjs/collections/appointments.js.map +1 -1
- package/cjs/collections/assets.js +2 -2
- package/cjs/collections/assets.js.map +1 -1
- package/cjs/collections/auto-adjuncts.js +7 -3
- package/cjs/collections/auto-adjuncts.js.map +1 -1
- package/cjs/collections/base.js +103 -25
- package/cjs/collections/base.js.map +1 -1
- package/cjs/collections/base.spec.js +231 -123
- package/cjs/collections/base.spec.js.map +1 -1
- package/cjs/collections/cms-vals.js +2 -2
- package/cjs/collections/cms-vals.js.map +1 -1
- package/cjs/collections/contacts.js +2 -2
- package/cjs/collections/contacts.js.map +1 -1
- package/cjs/collections/created-assets.js +2 -2
- package/cjs/collections/created-assets.js.map +1 -1
- package/cjs/collections/customers.js +2 -2
- package/cjs/collections/customers.js.map +1 -1
- package/cjs/collections/deck-notes.js +2 -2
- package/cjs/collections/deck-notes.js.map +1 -1
- package/cjs/collections/deck-versions.js +20 -8
- package/cjs/collections/deck-versions.js.map +1 -1
- package/cjs/collections/decks.js +2 -2
- package/cjs/collections/decks.js.map +1 -1
- package/cjs/collections/deleted-assets.js +2 -2
- package/cjs/collections/deleted-assets.js.map +1 -1
- package/cjs/collections/dispatches.js +4 -4
- package/cjs/collections/dispatches.js.map +1 -1
- package/cjs/collections/event-objects.js +2 -2
- package/cjs/collections/event-objects.js.map +1 -1
- package/cjs/collections/events.js +2 -2
- package/cjs/collections/events.js.map +1 -1
- package/cjs/collections/groups.js +2 -2
- package/cjs/collections/groups.js.map +1 -1
- package/cjs/collections/images.js +2 -2
- package/cjs/collections/images.js.map +1 -1
- package/cjs/collections/locations.js +2 -2
- package/cjs/collections/locations.js.map +1 -1
- package/cjs/collections/opportunities.js +2 -2
- package/cjs/collections/opportunities.js.map +1 -1
- package/cjs/collections/pack-diffs.js +2 -2
- package/cjs/collections/pack-diffs.js.map +1 -1
- package/cjs/collections/packs.js +2 -2
- package/cjs/collections/packs.js.map +1 -1
- package/cjs/collections/presets.js +2 -2
- package/cjs/collections/presets.js.map +1 -1
- package/cjs/collections/section-selections.js +2 -2
- package/cjs/collections/section-selections.js.map +1 -1
- package/cjs/collections/sections.js +2 -2
- package/cjs/collections/sections.js.map +1 -1
- package/cjs/collections/slide-selections.js +2 -2
- package/cjs/collections/slide-selections.js.map +1 -1
- package/cjs/collections/slides.js +2 -2
- package/cjs/collections/slides.js.map +1 -1
- package/cjs/collections/snapshots.js +2 -2
- package/cjs/collections/snapshots.js.map +1 -1
- package/cjs/collections/sub-slides.js +2 -2
- package/cjs/collections/sub-slides.js.map +1 -1
- package/cjs/collections/tags.js +28 -0
- package/cjs/collections/tags.js.map +1 -0
- package/cjs/collections/teams.js +2 -2
- package/cjs/collections/teams.js.map +1 -1
- package/cjs/collections/templates.js +2 -2
- package/cjs/collections/templates.js.map +1 -1
- package/cjs/collections/uploads.js +2 -2
- package/cjs/collections/uploads.js.map +1 -1
- package/cjs/collections/users.js +2 -2
- package/cjs/collections/users.js.map +1 -1
- package/cjs/collections.js +115 -0
- package/cjs/collections.js.map +1 -1
- package/cjs/index.js +3 -0
- package/cjs/index.js.map +1 -1
- package/cjs/middleware.js.map +1 -1
- package/cjs/middlewares/auth.js +10 -6
- package/cjs/middlewares/auth.js.map +1 -1
- package/cjs/middlewares/base.js +1 -3
- package/cjs/middlewares/base.js.map +1 -1
- package/cjs/middlewares/json.js +10 -6
- package/cjs/middlewares/json.js.map +1 -1
- package/cjs/middlewares/redirect.js +10 -6
- package/cjs/middlewares/redirect.js.map +1 -1
- package/cjs/models/activity-item.js +6 -2
- package/cjs/models/activity-item.js.map +1 -1
- package/cjs/models/adjunct-section.js +2 -2
- package/cjs/models/adjunct-section.js.map +1 -1
- package/cjs/models/adjunct-slide.js +2 -2
- package/cjs/models/adjunct-slide.js.map +1 -1
- package/cjs/models/adjunct-sub-slide.js +2 -2
- package/cjs/models/adjunct-sub-slide.js.map +1 -1
- package/cjs/models/adjunct.js +2 -2
- package/cjs/models/adjunct.js.map +1 -1
- package/cjs/models/api.js.map +1 -1
- package/cjs/models/appointment-adjunct-tags.js +52 -0
- package/cjs/models/appointment-adjunct-tags.js.map +1 -0
- package/cjs/models/appointment-deckversion-tags.js +52 -0
- package/cjs/models/appointment-deckversion-tags.js.map +1 -0
- package/cjs/models/appointment-duplicate.js +8 -3
- package/cjs/models/appointment-duplicate.js.map +1 -1
- package/cjs/models/appointment-editor.js +2 -2
- package/cjs/models/appointment-editor.js.map +1 -1
- package/cjs/models/appointment-section-tags.js +52 -0
- package/cjs/models/appointment-section-tags.js.map +1 -0
- package/cjs/models/appointment-slide-tags.js +52 -0
- package/cjs/models/appointment-slide-tags.js.map +1 -0
- package/cjs/models/appointment-stats.js +2 -2
- package/cjs/models/appointment-stats.js.map +1 -1
- package/cjs/models/appointment-tags.js +48 -0
- package/cjs/models/appointment-tags.js.map +1 -0
- package/cjs/models/appointment-viewing.js +2 -2
- package/cjs/models/appointment-viewing.js.map +1 -1
- package/cjs/models/appointment.js +16 -7
- package/cjs/models/appointment.js.map +1 -1
- package/cjs/models/asset.js +2 -2
- package/cjs/models/asset.js.map +1 -1
- package/cjs/models/auto-adjunct-key-check.js +2 -2
- package/cjs/models/auto-adjunct-key-check.js.map +1 -1
- package/cjs/models/auto-adjunct.js +2 -2
- package/cjs/models/auto-adjunct.js.map +1 -1
- package/cjs/models/base.js +25 -36
- package/cjs/models/base.js.map +1 -1
- package/cjs/models/base.spec.js +45 -45
- package/cjs/models/base.spec.js.map +1 -1
- package/cjs/models/choicelist.js.map +1 -1
- package/cjs/models/cms-val.js.map +1 -1
- package/cjs/models/contact.js +2 -2
- package/cjs/models/contact.js.map +1 -1
- package/cjs/models/customer.js +2 -2
- package/cjs/models/customer.js.map +1 -1
- package/cjs/models/deck-note.js +2 -2
- package/cjs/models/deck-note.js.map +1 -1
- package/cjs/models/deck-tags.js +61 -0
- package/cjs/models/deck-tags.js.map +1 -0
- package/cjs/models/deck-version.js +5 -3
- package/cjs/models/deck-version.js.map +1 -1
- package/cjs/models/deck.js +6 -3
- package/cjs/models/deck.js.map +1 -1
- package/cjs/models/dispatch-preview.js +3 -3
- package/cjs/models/dispatch-preview.js.map +1 -1
- package/cjs/models/dispatch.js +2 -2
- package/cjs/models/dispatch.js.map +1 -1
- package/cjs/models/envs.js.map +1 -1
- package/cjs/models/event-object.js +2 -2
- package/cjs/models/event-object.js.map +1 -1
- package/cjs/models/event.js +2 -2
- package/cjs/models/event.js.map +1 -1
- package/cjs/models/feed-data.js +2 -2
- package/cjs/models/feed-data.js.map +1 -1
- package/cjs/models/file.js +2 -2
- package/cjs/models/file.js.map +1 -1
- package/cjs/models/group.js +2 -2
- package/cjs/models/group.js.map +1 -1
- package/cjs/models/handover.js +2 -2
- package/cjs/models/handover.js.map +1 -1
- package/cjs/models/hosted-preso.js +2 -2
- package/cjs/models/hosted-preso.js.map +1 -1
- package/cjs/models/image.js +2 -2
- package/cjs/models/image.js.map +1 -1
- package/cjs/models/location.js +2 -2
- package/cjs/models/location.js.map +1 -1
- package/cjs/models/manifest-json.js +83 -58
- package/cjs/models/manifest-json.js.map +1 -1
- package/cjs/models/onshare.js +2 -2
- package/cjs/models/onshare.js.map +1 -1
- package/cjs/models/opportunity.js +2 -2
- package/cjs/models/opportunity.js.map +1 -1
- package/cjs/models/pack-diff.js +2 -2
- package/cjs/models/pack-diff.js.map +1 -1
- package/cjs/models/pack.js +2 -2
- package/cjs/models/pack.js.map +1 -1
- package/cjs/models/preset.js +22 -2
- package/cjs/models/preset.js.map +1 -1
- package/cjs/models/refresh-request.js +2 -2
- package/cjs/models/refresh-request.js.map +1 -1
- package/cjs/models/room.js +2 -2
- package/cjs/models/room.js.map +1 -1
- package/cjs/models/salesforce-lookup.js +2 -2
- package/cjs/models/salesforce-lookup.js.map +1 -1
- package/cjs/models/section-selection.js +2 -2
- package/cjs/models/section-selection.js.map +1 -1
- package/cjs/models/section.js +2 -2
- package/cjs/models/section.js.map +1 -1
- package/cjs/models/slide-selection.js +2 -2
- package/cjs/models/slide-selection.js.map +1 -1
- package/cjs/models/slide.js +2 -2
- package/cjs/models/slide.js.map +1 -1
- package/cjs/models/snapshot.js +2 -2
- package/cjs/models/snapshot.js.map +1 -1
- package/cjs/models/sub-slide.js +2 -2
- package/cjs/models/sub-slide.js.map +1 -1
- package/cjs/models/support-ticket.js +2 -2
- package/cjs/models/support-ticket.js.map +1 -1
- package/cjs/models/tag.js +54 -0
- package/cjs/models/tag.js.map +1 -0
- package/cjs/models/team.js +2 -2
- package/cjs/models/team.js.map +1 -1
- package/cjs/models/template.js +2 -2
- package/cjs/models/template.js.map +1 -1
- package/cjs/models/tenancy.js +2 -2
- package/cjs/models/tenancy.js.map +1 -1
- package/cjs/models/timing-log.js +20 -41
- package/cjs/models/timing-log.js.map +1 -1
- package/cjs/models/timing-log.spec.js +18 -86
- package/cjs/models/timing-log.spec.js.map +1 -1
- package/cjs/models/transcribe-socket.js +2 -2
- package/cjs/models/transcribe-socket.js.map +1 -1
- package/cjs/models/upload.js +2 -2
- package/cjs/models/upload.js.map +1 -1
- package/cjs/models/user.js +4 -3
- package/cjs/models/user.js.map +1 -1
- package/cjs/models/user.spec.js +10 -8
- package/cjs/models/user.spec.js.map +1 -1
- package/cjs/models.js +148 -0
- package/cjs/models.js.map +1 -1
- package/cjs/presentation/appointment-presentation.js +13 -5
- package/cjs/presentation/appointment-presentation.js.map +1 -1
- package/cjs/presentation/base-presentation-collection.js.map +1 -1
- package/cjs/presentation/base-presentation-model.js +65 -0
- package/cjs/presentation/base-presentation-model.js.map +1 -1
- package/cjs/presentation/base-presentation-model.spec.js +87 -0
- package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
- package/cjs/presentation/presentation-deck.js +31 -20
- package/cjs/presentation/presentation-deck.js.map +1 -1
- package/cjs/presentation/presentation-deck.spec.js +15 -13
- package/cjs/presentation/presentation-deck.spec.js.map +1 -1
- package/cjs/presentation/presentation-decks.js +2 -2
- package/cjs/presentation/presentation-decks.js.map +1 -1
- package/cjs/presentation/presentation-section.js +36 -17
- package/cjs/presentation/presentation-section.js.map +1 -1
- package/cjs/presentation/presentation-section.spec.js +418 -0
- package/cjs/presentation/presentation-section.spec.js.map +1 -0
- package/cjs/presentation/presentation-sections.js +2 -2
- package/cjs/presentation/presentation-sections.js.map +1 -1
- package/cjs/presentation/presentation-slide.js +35 -18
- package/cjs/presentation/presentation-slide.js.map +1 -1
- package/cjs/presentation/presentation-slide.spec.js +294 -0
- package/cjs/presentation/presentation-slide.spec.js.map +1 -0
- package/cjs/presentation/presentation-slides.js +2 -2
- package/cjs/presentation/presentation-slides.js.map +1 -1
- package/cjs/presentation/presentation-subslide.js +11 -7
- package/cjs/presentation/presentation-subslide.js.map +1 -1
- package/cjs/presentation/presentation-subslide.spec.js +68 -20
- package/cjs/presentation/presentation-subslide.spec.js.map +1 -1
- package/cjs/presentation/presentation-subslides.js +2 -2
- package/cjs/presentation/presentation-subslides.js.map +1 -1
- package/cjs/presentation/presentation.js +19 -9
- package/cjs/presentation/presentation.js.map +1 -1
- package/cjs/presentation.js +10 -0
- package/cjs/presentation.js.map +1 -1
- package/cjs/state-register.js +11 -1
- package/cjs/state-register.js.map +1 -1
- package/cjs/sync.js +7 -7
- package/cjs/sync.js.map +1 -1
- package/cjs/utils.js +7 -7
- package/cjs/utils.js.map +1 -1
- package/cjs/utils.spec.js.map +1 -1
- package/config/rush-project.json +11 -0
- package/index.js +0 -1
- package/jest.config.js +4 -4
- package/package.json +19 -59
- package/setup-tests.js +2 -1
- package/src/api.js +3 -3
- package/src/api.spec.js +3 -4
- package/src/auth.js +6 -7
- package/src/auth.spec.js +3 -4
- package/src/collections/activity.js +5 -6
- package/src/collections/adjunct-sections.js +4 -4
- package/src/collections/adjunct-slides.js +4 -4
- package/src/collections/adjunct-sub-slides.js +2 -2
- package/src/collections/appointment-adjunct-tags.js +18 -0
- package/src/collections/appointment-deckversion-tags.js +21 -0
- package/src/collections/appointment-duplicates.js +2 -2
- package/src/collections/appointment-editors.js +2 -2
- package/src/collections/appointment-section-tags.js +18 -0
- package/src/collections/appointment-slide-tags.js +18 -0
- package/src/collections/appointment-tags.js +136 -0
- package/src/collections/appointments.js +18 -23
- package/src/collections/assets.js +2 -2
- package/src/collections/auto-adjuncts.js +5 -5
- package/src/collections/base.js +88 -18
- package/src/collections/base.spec.js +100 -8
- package/src/collections/cms-vals.js +3 -3
- package/src/collections/contacts.js +2 -2
- package/src/collections/created-assets.js +2 -2
- package/src/collections/customers.js +2 -2
- package/src/collections/deck-notes.js +2 -2
- package/src/collections/deck-versions.js +18 -15
- package/src/collections/decks.js +2 -2
- package/src/collections/deleted-assets.js +2 -2
- package/src/collections/dispatches.js +8 -13
- package/src/collections/event-objects.js +2 -2
- package/src/collections/events.js +2 -2
- package/src/collections/groups.js +2 -2
- package/src/collections/images.js +2 -2
- package/src/collections/locations.js +2 -2
- package/src/collections/opportunities.js +2 -2
- package/src/collections/pack-diffs.js +2 -2
- package/src/collections/packs.js +2 -2
- package/src/collections/presets.js +2 -2
- package/src/collections/section-selections.js +4 -4
- package/src/collections/sections.js +2 -2
- package/src/collections/slide-selections.js +4 -4
- package/src/collections/slides.js +2 -2
- package/src/collections/snapshots.js +2 -2
- package/src/collections/sub-slides.js +2 -2
- package/src/collections/tags.js +18 -0
- package/src/collections/teams.js +2 -2
- package/src/collections/templates.js +2 -2
- package/src/collections/uploads.js +2 -2
- package/src/collections/users.js +2 -2
- package/src/collections.js +6 -0
- package/src/index.js +1 -4
- package/src/middleware.js +1 -1
- package/src/middlewares/json.js +2 -2
- package/src/middlewares/redirect.js +1 -2
- package/src/models/activity-item.js +6 -6
- package/src/models/adjunct-section.js +5 -5
- package/src/models/adjunct-slide.js +5 -5
- package/src/models/adjunct-sub-slide.js +5 -5
- package/src/models/adjunct.js +4 -4
- package/src/models/api.js +1 -1
- package/src/models/appointment-adjunct-tags.js +41 -0
- package/src/models/appointment-deckversion-tags.js +41 -0
- package/src/models/appointment-duplicate.js +7 -7
- package/src/models/appointment-editor.js +6 -6
- package/src/models/appointment-section-tags.js +41 -0
- package/src/models/appointment-slide-tags.js +41 -0
- package/src/models/appointment-stats.js +5 -5
- package/src/models/appointment-tags.js +39 -0
- package/src/models/appointment-viewing.js +3 -3
- package/src/models/appointment.js +35 -29
- package/src/models/asset.js +5 -5
- package/src/models/auto-adjunct-key-check.js +5 -5
- package/src/models/auto-adjunct.js +4 -4
- package/src/models/base.js +36 -37
- package/src/models/base.spec.js +61 -62
- package/src/models/choicelist.js +2 -2
- package/src/models/cms-val.js +3 -3
- package/src/models/contact.js +9 -9
- package/src/models/customer.js +13 -13
- package/src/models/deck-note.js +4 -4
- package/src/models/deck-tags.js +52 -0
- package/src/models/deck-version.js +9 -8
- package/src/models/deck.js +8 -6
- package/src/models/dispatch-preview.js +6 -7
- package/src/models/dispatch.js +6 -7
- package/src/models/envs.js +1 -1
- package/src/models/event-object.js +6 -6
- package/src/models/event.js +7 -7
- package/src/models/feed-data.js +5 -5
- package/src/models/file.js +4 -4
- package/src/models/group.js +3 -3
- package/src/models/handover.js +5 -5
- package/src/models/hosted-preso.js +5 -5
- package/src/models/image.js +4 -4
- package/src/models/location.js +5 -5
- package/src/models/manifest-json.js +77 -30
- package/src/models/onshare.js +5 -5
- package/src/models/opportunity.js +5 -5
- package/src/models/pack-diff.js +5 -5
- package/src/models/pack.js +4 -4
- package/src/models/preset.js +24 -5
- package/src/models/refresh-request.js +6 -6
- package/src/models/room.js +3 -3
- package/src/models/salesforce-lookup.js +3 -3
- package/src/models/section-selection.js +6 -6
- package/src/models/section.js +7 -7
- package/src/models/slide-selection.js +6 -6
- package/src/models/slide.js +7 -7
- package/src/models/snapshot.js +5 -5
- package/src/models/sub-slide.js +5 -5
- package/src/models/support-ticket.js +4 -4
- package/src/models/tag.js +42 -0
- package/src/models/team.js +4 -4
- package/src/models/template.js +4 -4
- package/src/models/tenancy.js +5 -5
- package/src/models/timing-log.js +18 -18
- package/src/models/timing-log.spec.js +28 -29
- package/src/models/transcribe-socket.js +3 -3
- package/src/models/upload.js +3 -3
- package/src/models/user.js +19 -17
- package/src/models/user.spec.js +2 -2
- package/src/models.js +7 -0
- package/src/presentation/appointment-presentation.js +14 -10
- package/src/presentation/base-presentation-model.js +67 -5
- package/src/presentation/base-presentation-model.spec.js +114 -22
- package/src/presentation/presentation-deck.js +54 -52
- package/src/presentation/presentation-deck.spec.js +26 -27
- package/src/presentation/presentation-decks.js +2 -2
- package/src/presentation/presentation-section.js +62 -48
- package/src/presentation/presentation-section.spec.js +363 -0
- package/src/presentation/presentation-sections.js +2 -2
- package/src/presentation/presentation-slide.js +51 -36
- package/src/presentation/presentation-slide.spec.js +250 -0
- package/src/presentation/presentation-slides.js +2 -2
- package/src/presentation/presentation-subslide.js +24 -17
- package/src/presentation/presentation-subslide.spec.js +40 -12
- package/src/presentation/presentation-subslides.js +2 -2
- package/src/presentation/presentation.js +27 -15
- package/src/state-register.js +7 -0
- package/src/sync.js +21 -23
- package/src/utils.js +8 -7
- package/src/utils.spec.js +15 -15
- package/.editorconfig +0 -9
- package/.eslintrc +0 -25
- package/.prettierrc.js +0 -3
- package/jsdoc.json +0 -12
- package/yarn.lock +0 -8099
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { getState, register } from "../state-register.js";
|
|
2
|
+
|
|
3
|
+
import { BaseCollection } from "./base.js";
|
|
4
|
+
import _ from "lodash";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @constructor
|
|
8
|
+
* @alias collections.AppointmentTagsCollection
|
|
9
|
+
* @extends collections.BaseCollection
|
|
10
|
+
* @see models.AppointmentTagsModel
|
|
11
|
+
*/
|
|
12
|
+
export const AppointmentTagsCollection = BaseCollection.extend(
|
|
13
|
+
/** @lends collections.AppointmentTagsCollection# */ {
|
|
14
|
+
model: "AppointmentTagsModel",
|
|
15
|
+
|
|
16
|
+
tagNameCollectionMapping: {
|
|
17
|
+
deckversion: "AppointmentDeckVersionTagsCollection",
|
|
18
|
+
section: "AppointmentSectionTagsCollection",
|
|
19
|
+
slide: "AppointmentSlideTagsCollection",
|
|
20
|
+
adjunct: "AppointmentAdjunctTagsCollection",
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
_mapResultsToModel(result) {
|
|
24
|
+
// Maps a model from a content specific tag to a more generic one.
|
|
25
|
+
// It's generally the same thing, except instead of something like:
|
|
26
|
+
//
|
|
27
|
+
// slide: "/api/slides/1/"
|
|
28
|
+
//
|
|
29
|
+
// It becomes:
|
|
30
|
+
//
|
|
31
|
+
// content_type: "slide",
|
|
32
|
+
// content_url: "/api/slides/1/"
|
|
33
|
+
//
|
|
34
|
+
// So that we can return the list side by side.
|
|
35
|
+
const AppointmentTagsModel = getState("AppointmentTagsModel");
|
|
36
|
+
const resultType = Object.keys(result).find((key) => {
|
|
37
|
+
return Object.keys(this.tagNameCollectionMapping).includes(key);
|
|
38
|
+
});
|
|
39
|
+
if (!resultType) {
|
|
40
|
+
throw new Error("Unknown type of result found");
|
|
41
|
+
}
|
|
42
|
+
return new AppointmentTagsModel({
|
|
43
|
+
tags: result.tags,
|
|
44
|
+
content_type: resultType,
|
|
45
|
+
content_url: result[resultType],
|
|
46
|
+
appointment: result.appointment,
|
|
47
|
+
user: result.user,
|
|
48
|
+
url: result.url,
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
// These methods don't quite make sense right now, disable it for development.
|
|
53
|
+
async fetchSet() {
|
|
54
|
+
throw new Error("Not implemented");
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
async fetchModels() {
|
|
58
|
+
throw new Error("Not implemented");
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
async delete() {
|
|
62
|
+
throw new Error("Cannot delete using this collection");
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
async save() {
|
|
66
|
+
throw new Error("Not implemented");
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
async fetch(options) {
|
|
70
|
+
const AppointmentModel = getState("AppointmentModel");
|
|
71
|
+
|
|
72
|
+
let hasAppointment =
|
|
73
|
+
this._options?.appointment instanceof AppointmentModel ||
|
|
74
|
+
options?.appointment instanceof AppointmentModel;
|
|
75
|
+
|
|
76
|
+
if (!hasAppointment && this.parent instanceof AppointmentModel) {
|
|
77
|
+
options.appointment = this.parent;
|
|
78
|
+
hasAppointment = true;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
if (!hasAppointment) {
|
|
82
|
+
throw new Error(
|
|
83
|
+
"Requires an appointment model in collection options to fetch."
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const tagModels = Object.values(this.tagNameCollectionMapping);
|
|
88
|
+
// Fetch all the separate tag models and combine them into a single collection
|
|
89
|
+
const results = (
|
|
90
|
+
await Promise.all(
|
|
91
|
+
tagModels.map((tagModel) => {
|
|
92
|
+
const Collection = getState(tagModel);
|
|
93
|
+
const tags = new Collection({}, this._options);
|
|
94
|
+
return tags.fetch(options);
|
|
95
|
+
})
|
|
96
|
+
)
|
|
97
|
+
)
|
|
98
|
+
.flatMap((collection) => collection.results)
|
|
99
|
+
.map(this._mapResultsToModel.bind(this));
|
|
100
|
+
|
|
101
|
+
this.add(results);
|
|
102
|
+
|
|
103
|
+
return {
|
|
104
|
+
count: results.length,
|
|
105
|
+
next: null,
|
|
106
|
+
previous: null,
|
|
107
|
+
results: this.toJSON(),
|
|
108
|
+
};
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
// Used by Telepresenter to add the tags in the hostedpreso bundle to
|
|
112
|
+
// the appointment tags collection
|
|
113
|
+
addFromAppointment(appointment) {
|
|
114
|
+
const tagCollectionNames = [
|
|
115
|
+
"appointmentdeckversiontags_set",
|
|
116
|
+
"appointmentsectiontags_set",
|
|
117
|
+
"appointmentslidetags_set",
|
|
118
|
+
"appointmentadjuncttags_set",
|
|
119
|
+
];
|
|
120
|
+
|
|
121
|
+
// flatMap currently doesn't work in TelePresenter
|
|
122
|
+
const results = _.flatten(
|
|
123
|
+
tagCollectionNames.map((collectionName) => {
|
|
124
|
+
const collection = appointment[collectionName];
|
|
125
|
+
return collection?._data || [];
|
|
126
|
+
})
|
|
127
|
+
).map(this._mapResultsToModel.bind(this));
|
|
128
|
+
|
|
129
|
+
this.add(results);
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
AppointmentTagsCollection.canBeEmpty = true;
|
|
135
|
+
|
|
136
|
+
register("AppointmentTagsCollection", AppointmentTagsCollection);
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import "../models/appointment.js";
|
|
2
2
|
|
|
3
|
-
import moment from "moment";
|
|
4
|
-
|
|
5
3
|
import { Auth } from "../auth.js";
|
|
4
|
+
import { BaseCollection } from "./base.js";
|
|
6
5
|
import log from "../log.js";
|
|
6
|
+
import moment from "moment";
|
|
7
7
|
import { register } from "../state-register.js";
|
|
8
|
-
import { BaseCollection } from "./base.js";
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
10
|
* @constructor
|
|
@@ -47,7 +46,11 @@ export const AppointmentCollection = BaseCollection.extend(
|
|
|
47
46
|
) {
|
|
48
47
|
return this.fetch({
|
|
49
48
|
...options,
|
|
50
|
-
data: AppointmentCollection.monthParametersForUser(
|
|
49
|
+
data: AppointmentCollection.monthParametersForUser(
|
|
50
|
+
date,
|
|
51
|
+
userID,
|
|
52
|
+
"sort"
|
|
53
|
+
),
|
|
51
54
|
});
|
|
52
55
|
},
|
|
53
56
|
|
|
@@ -62,7 +65,7 @@ export const AppointmentCollection = BaseCollection.extend(
|
|
|
62
65
|
date,
|
|
63
66
|
userID,
|
|
64
67
|
"sort"
|
|
65
|
-
)
|
|
68
|
+
),
|
|
66
69
|
});
|
|
67
70
|
},
|
|
68
71
|
|
|
@@ -78,9 +81,9 @@ export const AppointmentCollection = BaseCollection.extend(
|
|
|
78
81
|
date,
|
|
79
82
|
userID,
|
|
80
83
|
"created"
|
|
81
|
-
)
|
|
84
|
+
),
|
|
82
85
|
});
|
|
83
|
-
}
|
|
86
|
+
},
|
|
84
87
|
}
|
|
85
88
|
);
|
|
86
89
|
|
|
@@ -93,22 +96,18 @@ export const AppointmentCollection = BaseCollection.extend(
|
|
|
93
96
|
* @param {string} [parameter="sort"]
|
|
94
97
|
* @returns {object}
|
|
95
98
|
*/
|
|
96
|
-
AppointmentCollection.fortnightParametersForUser = function(
|
|
99
|
+
AppointmentCollection.fortnightParametersForUser = function (
|
|
97
100
|
date,
|
|
98
101
|
userID = Auth.user.id,
|
|
99
102
|
parameter = "sort"
|
|
100
103
|
) {
|
|
101
|
-
const dateFrom = moment(date)
|
|
102
|
-
|
|
103
|
-
.format();
|
|
104
|
-
const dateTo = moment(date)
|
|
105
|
-
.add(1, "week")
|
|
106
|
-
.format();
|
|
104
|
+
const dateFrom = moment(date).subtract(1, "week").format();
|
|
105
|
+
const dateTo = moment(date).add(1, "week").format();
|
|
107
106
|
|
|
108
107
|
// The server only returns apts with 'ready' creation status by default
|
|
109
108
|
const data = {
|
|
110
109
|
user: userID,
|
|
111
|
-
creation_status: ["processing", "ready"]
|
|
110
|
+
creation_status: ["processing", "ready"],
|
|
112
111
|
};
|
|
113
112
|
|
|
114
113
|
data[`${parameter}_date__gte`] = dateFrom;
|
|
@@ -126,22 +125,18 @@ AppointmentCollection.fortnightParametersForUser = function(
|
|
|
126
125
|
* @param {string} [parameter="sort"]
|
|
127
126
|
* @returns {object}
|
|
128
127
|
*/
|
|
129
|
-
AppointmentCollection.monthParametersForUser = function(
|
|
128
|
+
AppointmentCollection.monthParametersForUser = function (
|
|
130
129
|
date,
|
|
131
130
|
userID = Auth.user.id,
|
|
132
131
|
parameter = "sort"
|
|
133
132
|
) {
|
|
134
|
-
const dateFrom = moment(date)
|
|
135
|
-
|
|
136
|
-
.format();
|
|
137
|
-
const dateTo = moment(date)
|
|
138
|
-
.endOf("month")
|
|
139
|
-
.format();
|
|
133
|
+
const dateFrom = moment(date).startOf("month").format();
|
|
134
|
+
const dateTo = moment(date).endOf("month").format();
|
|
140
135
|
|
|
141
136
|
// The server only returns apts with 'ready' creation status by default
|
|
142
137
|
const data = {
|
|
143
138
|
user: userID,
|
|
144
|
-
creation_status: ["processing", "ready"]
|
|
139
|
+
creation_status: ["processing", "ready"],
|
|
145
140
|
};
|
|
146
141
|
|
|
147
142
|
data[`${parameter}_date__gte`] = dateFrom;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../models/asset.js";
|
|
2
2
|
|
|
3
|
-
import { register } from "../state-register.js";
|
|
4
3
|
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @constructor
|
|
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export const AssetCollection = BaseCollection.extend(
|
|
13
13
|
/** @lends collections.AssetCollection# */ {
|
|
14
|
-
model: "AssetModel"
|
|
14
|
+
model: "AssetModel",
|
|
15
15
|
}
|
|
16
16
|
);
|
|
17
17
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "../models/auto-adjunct.js";
|
|
2
2
|
|
|
3
3
|
import Auth from "../auth.js";
|
|
4
|
-
import { register } from "../state-register.js";
|
|
5
4
|
import { BaseCollection } from "./base.js";
|
|
5
|
+
import { register } from "../state-register.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @constructor
|
|
@@ -19,8 +19,8 @@ export const AutoAdjunctCollection = BaseCollection.extend(
|
|
|
19
19
|
return this.fetch({
|
|
20
20
|
...options,
|
|
21
21
|
data: {
|
|
22
|
-
deck: deckID
|
|
23
|
-
}
|
|
22
|
+
deck: deckID,
|
|
23
|
+
},
|
|
24
24
|
});
|
|
25
25
|
},
|
|
26
26
|
|
|
@@ -39,11 +39,11 @@ export const AutoAdjunctCollection = BaseCollection.extend(
|
|
|
39
39
|
// the authorized user is a part of. This is mostly for the case where
|
|
40
40
|
// a 'global' temp slide admin could end up seeing autoadjuncts for
|
|
41
41
|
// many teams - which would be increadibly confusing.
|
|
42
|
-
opts.data.team = [null].concat(user.team_set.map(team => team.id));
|
|
42
|
+
opts.data.team = [null].concat(user.team_set.map((team) => team.id));
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
return BaseCollection.prototype.fetch.call(this, opts);
|
|
46
|
-
}
|
|
46
|
+
},
|
|
47
47
|
}
|
|
48
48
|
);
|
|
49
49
|
|
package/src/collections/base.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
+
import { Api } from "../api.js";
|
|
2
|
+
import { BaseModel } from "../models/base.js";
|
|
1
3
|
import Collection from "ampersand-rest-collection";
|
|
2
4
|
import Promise from "bluebird";
|
|
3
5
|
import _ from "lodash";
|
|
4
|
-
import qs from "qs";
|
|
5
|
-
|
|
6
|
-
import { Api } from "../api.js";
|
|
7
6
|
import log from "../log.js";
|
|
8
|
-
import
|
|
7
|
+
import qs from "qs";
|
|
9
8
|
import { registeredStates } from "../state-register.js";
|
|
10
9
|
import { sync } from "../sync.js";
|
|
11
10
|
|
|
11
|
+
// Current hardcoded limit for maximum number of pages fetched
|
|
12
|
+
// automatically by fetchAll
|
|
13
|
+
const pageLimit = 20;
|
|
14
|
+
|
|
12
15
|
/**
|
|
13
16
|
* @constructor
|
|
14
17
|
* @alias collections.BaseCollection
|
|
@@ -32,12 +35,12 @@ export const BaseCollection = Collection.extend(
|
|
|
32
35
|
urlMatchKeys: {},
|
|
33
36
|
|
|
34
37
|
defaultFetchData: {
|
|
35
|
-
per_page: 1000
|
|
38
|
+
per_page: 1000,
|
|
36
39
|
},
|
|
37
40
|
|
|
38
41
|
constructor(data = {}, opts = {}) {
|
|
39
42
|
const options = _.defaults(opts, {
|
|
40
|
-
data: {}
|
|
43
|
+
data: {},
|
|
41
44
|
});
|
|
42
45
|
|
|
43
46
|
// We ensure that we pass an array because we don't want the collection constructor to
|
|
@@ -175,11 +178,11 @@ export const BaseCollection = Collection.extend(
|
|
|
175
178
|
},
|
|
176
179
|
|
|
177
180
|
fetchModels(options = {}) {
|
|
178
|
-
return Promise.all(this.models.map(model => model.fetch(options)));
|
|
181
|
+
return Promise.all(this.models.map((model) => model.fetch(options)));
|
|
179
182
|
},
|
|
180
183
|
|
|
181
184
|
fetchSet(opts = {}) {
|
|
182
|
-
const idSet = this.models.map(model => model.id);
|
|
185
|
+
const idSet = this.models.map((model) => model.id);
|
|
183
186
|
|
|
184
187
|
if (!idSet.length) {
|
|
185
188
|
log.warn(`Tried to fetch ${this.modelName} set with no models`);
|
|
@@ -191,14 +194,14 @@ export const BaseCollection = Collection.extend(
|
|
|
191
194
|
const options = {
|
|
192
195
|
data: {
|
|
193
196
|
...data,
|
|
194
|
-
id: idSet
|
|
197
|
+
id: idSet,
|
|
195
198
|
},
|
|
196
|
-
...otherOpts
|
|
199
|
+
...otherOpts,
|
|
197
200
|
};
|
|
198
201
|
|
|
199
202
|
// Necessary because these models were already initialised before the fetch,
|
|
200
203
|
// and the children weren't updated correctly with the new data.
|
|
201
|
-
return this.fetch(options).tap(data => {
|
|
204
|
+
return this.fetch(options).tap((data) => {
|
|
202
205
|
this.reset();
|
|
203
206
|
this.add(data.results);
|
|
204
207
|
});
|
|
@@ -216,13 +219,80 @@ export const BaseCollection = Collection.extend(
|
|
|
216
219
|
this._url = options.url;
|
|
217
220
|
}
|
|
218
221
|
|
|
219
|
-
return Collection.prototype.fetch.call(this, options).tap(response => {
|
|
222
|
+
return Collection.prototype.fetch.call(this, options).tap((response) => {
|
|
220
223
|
this._data = response;
|
|
221
224
|
});
|
|
222
225
|
},
|
|
223
226
|
|
|
227
|
+
fetchAll(opts = {}) {
|
|
228
|
+
const options = _.cloneDeep(opts);
|
|
229
|
+
|
|
230
|
+
// Add default params to the fetch (ie ?per_page=1000)
|
|
231
|
+
options.data = _.extend({}, this.queryData, options.data || {});
|
|
232
|
+
this._options = _.extend({}, this._options, options);
|
|
233
|
+
|
|
234
|
+
this.queryData = { ...this._options.data };
|
|
235
|
+
|
|
236
|
+
if (this._options.url) {
|
|
237
|
+
this._url = options.url;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const checkPages = (response) => {
|
|
241
|
+
const notLastPage = response.total_pages > response.page;
|
|
242
|
+
const belowPageLimit = response.page < pageLimit;
|
|
243
|
+
|
|
244
|
+
if (notLastPage && belowPageLimit) {
|
|
245
|
+
const options = {
|
|
246
|
+
...this._options,
|
|
247
|
+
data: {
|
|
248
|
+
...this._options.data,
|
|
249
|
+
page: response.page + 1,
|
|
250
|
+
},
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
// Update the collection with the new data & page number
|
|
254
|
+
this._options = options;
|
|
255
|
+
this.queryData = { ...options.data };
|
|
256
|
+
|
|
257
|
+
return this.fetchPage().then((response) => {
|
|
258
|
+
checkPages(response);
|
|
259
|
+
});
|
|
260
|
+
} else {
|
|
261
|
+
// The collection's models are replaced with the latest
|
|
262
|
+
// batch of models every time a new page is fetched.
|
|
263
|
+
// Here we add back all of the previously-fetched models.
|
|
264
|
+
this.add(this._data.results);
|
|
265
|
+
return this._data;
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
return this.fetchPage().then((response) => {
|
|
270
|
+
return checkPages(response);
|
|
271
|
+
});
|
|
272
|
+
},
|
|
273
|
+
|
|
274
|
+
fetchPage() {
|
|
275
|
+
return Collection.prototype.fetch
|
|
276
|
+
.call(this, this._options)
|
|
277
|
+
.then((response) => {
|
|
278
|
+
// Add the response data to this._data - if we're fetching
|
|
279
|
+
// multiple pages, this._data.results will contain all of the
|
|
280
|
+
// results fetched from all pages so far
|
|
281
|
+
if (this._data.results?.length) {
|
|
282
|
+
this._data = {
|
|
283
|
+
...response,
|
|
284
|
+
results: [...this._data.results, ...response.results],
|
|
285
|
+
};
|
|
286
|
+
} else {
|
|
287
|
+
this._data = response;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
return response;
|
|
291
|
+
});
|
|
292
|
+
},
|
|
293
|
+
|
|
224
294
|
toServer() {
|
|
225
|
-
return this.map(function(model) {
|
|
295
|
+
return this.map(function (model) {
|
|
226
296
|
if (model.toServer) {
|
|
227
297
|
return model.toServer();
|
|
228
298
|
} else if (model.serialize) {
|
|
@@ -261,7 +331,7 @@ export const BaseCollection = Collection.extend(
|
|
|
261
331
|
}
|
|
262
332
|
|
|
263
333
|
return Promise.all(
|
|
264
|
-
this.map(model => {
|
|
334
|
+
this.map((model) => {
|
|
265
335
|
return model.save(model.toServer(), options);
|
|
266
336
|
})
|
|
267
337
|
);
|
|
@@ -275,7 +345,7 @@ export const BaseCollection = Collection.extend(
|
|
|
275
345
|
}
|
|
276
346
|
|
|
277
347
|
return Promise.all(
|
|
278
|
-
this.map(model => {
|
|
348
|
+
this.map((model) => {
|
|
279
349
|
return model.delete(model.toServer(), options);
|
|
280
350
|
})
|
|
281
351
|
);
|
|
@@ -293,17 +363,17 @@ export const BaseCollection = Collection.extend(
|
|
|
293
363
|
// can be passed to the model.
|
|
294
364
|
//
|
|
295
365
|
// TODO: Regex match for URLs
|
|
296
|
-
return results.map(function(attr) {
|
|
366
|
+
return results.map(function (attr) {
|
|
297
367
|
return { url: attr };
|
|
298
368
|
});
|
|
299
369
|
}
|
|
300
370
|
|
|
301
371
|
return results;
|
|
302
|
-
}
|
|
372
|
+
},
|
|
303
373
|
}
|
|
304
374
|
);
|
|
305
375
|
|
|
306
376
|
// Make matchesURL available as a static method
|
|
307
|
-
BaseCollection.matchesURL = function(url) {
|
|
377
|
+
BaseCollection.matchesURL = function (url) {
|
|
308
378
|
return this.prototype.matchesURL(url);
|
|
309
379
|
};
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
+
import { BaseCollection } from "./base.js";
|
|
2
|
+
import { BaseModel } from "../models/base.js";
|
|
3
|
+
import AmpersandCollection from "ampersand-rest-collection";
|
|
1
4
|
import { G } from "sp-test/api";
|
|
2
5
|
import td from "testdouble";
|
|
3
|
-
|
|
4
|
-
import { BaseModel } from "../models/base.js";
|
|
5
|
-
import { BaseCollection } from "./base.js";
|
|
6
|
+
import Promise from "bluebird";
|
|
6
7
|
|
|
7
8
|
it("should parse an array of urls into models", () => {
|
|
8
9
|
G(BaseModel, "TestModel").extend({ modelName: "tests" });
|
|
9
10
|
const Collection = G(BaseCollection).extend({
|
|
10
|
-
model: "TestModel"
|
|
11
|
+
model: "TestModel",
|
|
11
12
|
});
|
|
12
13
|
const collection = new Collection(["/api/tests/1/", "/api/tests/2/"]);
|
|
13
14
|
expect(collection.models).toHaveLength(2);
|
|
14
15
|
});
|
|
15
16
|
|
|
16
|
-
it("should fetch the individual models in the collection", async function() {
|
|
17
|
+
it("should fetch the individual models in the collection", async function () {
|
|
17
18
|
G(BaseModel, "TestModel");
|
|
18
19
|
const Collection = G(BaseCollection).extend({ model: "TestModel" });
|
|
19
20
|
const collection = new Collection([{ id: 1 }, { id: 2 }]);
|
|
@@ -86,12 +87,12 @@ it("should query multiple values if using an array", () => {
|
|
|
86
87
|
const Collection = G(BaseCollection);
|
|
87
88
|
const collection = new Collection(
|
|
88
89
|
{
|
|
89
|
-
url: "/api/appointments/"
|
|
90
|
+
url: "/api/appointments/",
|
|
90
91
|
},
|
|
91
92
|
{
|
|
92
93
|
data: {
|
|
93
|
-
foo: [1, 2, null]
|
|
94
|
-
}
|
|
94
|
+
foo: [1, 2, null],
|
|
95
|
+
},
|
|
95
96
|
}
|
|
96
97
|
);
|
|
97
98
|
expect(collection.url()).toEqual(
|
|
@@ -120,3 +121,94 @@ it("should be empty on initialize", () => {
|
|
|
120
121
|
const collection = new Collection();
|
|
121
122
|
expect(collection.length).toEqual(0);
|
|
122
123
|
});
|
|
124
|
+
|
|
125
|
+
const mockFetchResults = (dataFn) => {
|
|
126
|
+
jest
|
|
127
|
+
.spyOn(AmpersandCollection.prototype, "fetch")
|
|
128
|
+
.mockImplementation((opts) => {
|
|
129
|
+
const fetchResults = dataFn(opts);
|
|
130
|
+
return Promise.resolve(fetchResults);
|
|
131
|
+
});
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
describe("fetchAll", () => {
|
|
135
|
+
it("calls Collection.prototype.fetch", async () => {
|
|
136
|
+
mockFetchResults(() => {
|
|
137
|
+
return {
|
|
138
|
+
results: [{ id: 20 }, { id: 21 }, { id: 22 }],
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
G(BaseModel, "TestModel");
|
|
143
|
+
const Collection = G(BaseCollection.extend({ model: "TestModel" }));
|
|
144
|
+
const baseCollection = new Collection();
|
|
145
|
+
|
|
146
|
+
await baseCollection.fetchAll();
|
|
147
|
+
|
|
148
|
+
expect(baseCollection.length).toEqual(3);
|
|
149
|
+
expect(baseCollection.first().id).toEqual(20);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("adds results to existing results", async () => {
|
|
153
|
+
mockFetchResults(() => {
|
|
154
|
+
return {
|
|
155
|
+
results: [{ id: 22 }],
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
G(BaseModel, "TestModel");
|
|
160
|
+
const Collection = G(BaseCollection.extend({ model: "TestModel" }));
|
|
161
|
+
const baseCollection = new Collection([{ id: 15 }]);
|
|
162
|
+
|
|
163
|
+
await baseCollection.fetchAll();
|
|
164
|
+
|
|
165
|
+
expect(baseCollection.length).toEqual(2);
|
|
166
|
+
// The models are sorted by ID
|
|
167
|
+
expect(baseCollection.first().id).toEqual(15);
|
|
168
|
+
expect(baseCollection.last().id).toEqual(22);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("fetches multiple pages", async () => {
|
|
172
|
+
mockFetchResults((opts) => {
|
|
173
|
+
const page = opts.data.page || 1;
|
|
174
|
+
const fetchResults = {
|
|
175
|
+
total_pages: 5,
|
|
176
|
+
page,
|
|
177
|
+
results: [{ id: page + 10 }],
|
|
178
|
+
};
|
|
179
|
+
return Promise.resolve(fetchResults);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
G(BaseModel, "TestModel");
|
|
183
|
+
const Collection = G(BaseCollection.extend({ model: "TestModel" }));
|
|
184
|
+
const baseCollection = new Collection();
|
|
185
|
+
|
|
186
|
+
await baseCollection.fetchAll();
|
|
187
|
+
|
|
188
|
+
expect(baseCollection.length).toEqual(5);
|
|
189
|
+
expect(baseCollection.first().id).toEqual(11);
|
|
190
|
+
expect(baseCollection.last().id).toEqual(15);
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
it("stops fetching pages at the hardcoded limit", async () => {
|
|
194
|
+
mockFetchResults((opts) => {
|
|
195
|
+
const page = opts.data.page || 1;
|
|
196
|
+
const fetchResults = {
|
|
197
|
+
total_pages: 50,
|
|
198
|
+
page,
|
|
199
|
+
results: [{ id: page + 10 }],
|
|
200
|
+
};
|
|
201
|
+
return Promise.resolve(fetchResults);
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
G(BaseModel, "TestModel");
|
|
205
|
+
const Collection = G(BaseCollection.extend({ model: "TestModel" }));
|
|
206
|
+
const baseCollection = new Collection();
|
|
207
|
+
|
|
208
|
+
await baseCollection.fetchAll();
|
|
209
|
+
|
|
210
|
+
expect(baseCollection.length).toEqual(20);
|
|
211
|
+
expect(baseCollection.first().id).toEqual(11);
|
|
212
|
+
expect(baseCollection.last().id).toEqual(30);
|
|
213
|
+
});
|
|
214
|
+
});
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "../models/cms-val.js";
|
|
2
2
|
|
|
3
3
|
import Auth from "../auth.js";
|
|
4
|
-
import { register } from "../state-register.js";
|
|
5
4
|
import { BaseCollection } from "./base.js";
|
|
5
|
+
import { register } from "../state-register.js";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @constructor
|
|
@@ -29,11 +29,11 @@ export const CMSValCollection = BaseCollection.extend(
|
|
|
29
29
|
// the authorized user is a part of. This is mostly for the case where
|
|
30
30
|
// a 'global' temp slide admin could end up seeing autoadjuncts for
|
|
31
31
|
// many teams - which would be increadibly confusing.
|
|
32
|
-
opts.data.team = [null].concat(user.team_set.map(team => team.id));
|
|
32
|
+
opts.data.team = [null].concat(user.team_set.map((team) => team.id));
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
return BaseCollection.prototype.fetch.call(this, opts);
|
|
36
|
-
}
|
|
36
|
+
},
|
|
37
37
|
}
|
|
38
38
|
);
|
|
39
39
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../models/contact.js";
|
|
2
2
|
|
|
3
|
-
import { register } from "../state-register.js";
|
|
4
3
|
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @constructor
|
|
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export const ContactCollection = BaseCollection.extend(
|
|
13
13
|
/** @lends collections.ContactCollection# */ {
|
|
14
|
-
model: "ContactModel"
|
|
14
|
+
model: "ContactModel",
|
|
15
15
|
}
|
|
16
16
|
);
|
|
17
17
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../models/asset.js";
|
|
2
2
|
|
|
3
|
-
import { register } from "../state-register.js";
|
|
4
3
|
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @constructor
|
|
@@ -19,7 +19,7 @@ export const CreatedAssetCollection = BaseCollection.extend(
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
return BaseCollection.prototype.url.call(this);
|
|
22
|
-
}
|
|
22
|
+
},
|
|
23
23
|
}
|
|
24
24
|
);
|
|
25
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../models/customer.js";
|
|
2
2
|
|
|
3
|
-
import { register } from "../state-register.js";
|
|
4
3
|
import { BaseCollection } from "./base.js";
|
|
4
|
+
import { register } from "../state-register.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @constructor
|
|
@@ -11,7 +11,7 @@ import { BaseCollection } from "./base.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export const CustomerCollection = BaseCollection.extend(
|
|
13
13
|
/** @lends collections.CustomerCollection# */ {
|
|
14
|
-
model: "CustomerModel"
|
|
14
|
+
model: "CustomerModel",
|
|
15
15
|
}
|
|
16
16
|
);
|
|
17
17
|
|