@inboxsdk/core 0.2.28-alpha.4 → 0.2.28-alpha.5
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/inboxsdk.js +1 -1
- package/package.json +5 -1
- package/src/inboxsdk-js/check-requirements.js +7 -3
- package/src/inboxsdk-js/header.js +1 -0
- package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +5 -6
- package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +4 -3
- package/src/inboxsdk-js/inboxsdk-REMOTE.js +3 -1
- package/src/inboxsdk-js/inboxsdk-TEST.js +4 -3
- package/src/inboxsdk-js/inboxsdk.js +33 -39
- package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +15 -18
- package/src/injected-js/gmail/modify-suggestions.test.js +8 -9
- package/src/injected-js/gmail/setup-gmail-interceptor.js +340 -579
- package/src/injected-js/gmail/sync-compose-request-processor.test.js +39 -49
- package/src/injected-js/gmail/thread-identifier/click-and-get-popup-url.js +20 -33
- package/src/injected-js/gmail/thread-identifier/index.js +57 -93
- package/src/injected-js/gmail/thread-identifier/thread-row-parser.js +22 -31
- package/src/injected-js/gmail/thread-identifier/thread-row-parser.test.js +12 -28
- package/src/injected-js/inbox/setupAjaxInterceptor.js +64 -121
- package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +53 -66
- package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +20 -36
- package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +13 -13
- package/src/injected-js/main.js +11 -24
- package/src/injected-js/message-metadata-holder.js +52 -82
- package/src/injected-js/setup-data-exposer.js +89 -148
- package/src/injected-js/setup-error-silencer.js +21 -21
- package/src/injected-js/setup-event-reemitter.js +30 -22
- package/src/injected-js/setupInboxCustomViewLinkFixer.js +24 -29
- package/src/injected-js/setupPushStateListener.js +18 -11
- package/src/injected-js/xhr-helper.js +62 -65
- package/src/injected-js/xhr-proxy-factory.js +195 -445
- package/src/injected-js/xhr-proxy-factory.test.js +824 -991
- package/src/platform-implementation-js/constants/router.js +14 -9
- package/src/platform-implementation-js/constants/toolbars.js +8 -3
- package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +13 -13
- package/src/platform-implementation-js/dom-driver/gmail/gmail-butter-bar-driver.js +115 -136
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/add-toolbar-button-for-app.js +13 -14
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/create-link.js +27 -48
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-draft-id-for-message-id.js +31 -42
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-native-nav-item.js +30 -40
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/get-url-object.js +10 -18
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadForOldGmailThreadId.js +21 -28
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/getSyncThreadFromSyncThreadId.js +33 -45
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/gmail-load-event.js +31 -49
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/goto-view.js +58 -65
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +40 -124
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-compose-window.js +17 -22
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/open-draft-by-message-id.test.js +10 -11
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/override-gmail-back-button.js +44 -80
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-query-rewriter.js +19 -26
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/register-search-suggestions-provider.js +71 -147
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-compose-view-driver-stream.js +91 -148
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.js +150 -166
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/setup-route-view-driver-stream.test.js +70 -120
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-app-id-warning.js +15 -15
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-route-view.js +44 -67
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js +230 -379
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.test.js +121 -307
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-native-route-view.js +17 -24
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/suppressAddon.js +41 -49
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/temporary-track-download-url-validity.js +30 -40
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/thread-row-identifier.js +28 -60
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +61 -133
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.js +30 -42
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/user-info.test.js +52 -46
- package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +354 -694
- package/src/platform-implementation-js/dom-driver/gmail/make-xhr-interceptor.js +77 -93
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +35 -82
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +44 -94
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.js +12 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +17 -29
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-to-icon-area.js +26 -26
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +391 -797
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view/monitor-top-banner-size-and-react.js +7 -9
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +60 -109
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +95 -135
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +103 -211
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.test.js +61 -61
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-backdrop.js +17 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +188 -541
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +67 -135
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +27 -49
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +7 -13
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +9 -22
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-recipient-row.js +36 -63
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.js +38 -113
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-app-button-toolbars-are-closed.js +11 -16
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/ensure-grouping-is-open.js +11 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/focus.js +8 -11
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/from-manager.js +27 -47
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-additional-action-toolbar.js +11 -24
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +59 -111
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-body-changes-stream.js +15 -14
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-formatting-area-offset-left.js +11 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-minimized-stream.js +18 -24
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-response-type-changes-stream.js +19 -23
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.js +11 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.js +141 -376
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +17 -28
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/override-edit-subject.js +34 -70
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/position-formatting-toolbar.js +10 -17
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +83 -137
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/update-insert-more-area-left.js +10 -19
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +632 -1190
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view/get-updated-contact.js +29 -38
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +327 -617
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-processor.js +26 -49
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +188 -380
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +104 -194
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +382 -811
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +34 -58
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +330 -581
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +123 -277
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view/width-manager.js +15 -35
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +216 -571
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +152 -336
- package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +87 -211
- package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/inbox-dropdown-button-view.js +10 -11
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-action-button-view.js +20 -29
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-label-view.js +41 -76
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +45 -99
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +76 -128
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +128 -319
- package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-top-message-bar-driver.js +45 -78
- package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +8 -4
- package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +36 -54
- package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +35 -53
- package/src/platform-implementation-js/dom-driver/inbox/createLink.js +13 -15
- package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +15 -18
- package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +14 -13
- package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +14 -20
- package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +14 -13
- package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +35 -67
- package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +16 -18
- package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +68 -185
- package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +28 -56
- package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +12 -10
- package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +16 -16
- package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +24 -35
- package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +37 -89
- package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +56 -78
- package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +26 -32
- package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +52 -109
- package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +7 -8
- package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +16 -20
- package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +15 -16
- package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +75 -83
- package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +530 -822
- package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +48 -61
- package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +9 -12
- package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +12 -19
- package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +24 -33
- package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +201 -388
- package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +249 -265
- package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +84 -152
- package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +55 -67
- package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +43 -65
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +31 -56
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +191 -294
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +32 -45
- package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +21 -39
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +153 -240
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +75 -150
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +20 -37
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +60 -114
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +47 -65
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +41 -52
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +27 -36
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +52 -80
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +465 -649
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +37 -58
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +14 -26
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +118 -235
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +10 -11
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +28 -46
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +131 -202
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +40 -80
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +35 -61
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +124 -221
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +125 -213
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +104 -126
- package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +36 -51
- package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +158 -297
- package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +21 -35
- package/src/platform-implementation-js/driver-common/compose/getDiscardStream.js +24 -43
- package/src/platform-implementation-js/driver-common/compose/getPresendingStream.js +39 -68
- package/src/platform-implementation-js/driver-common/getGmailMessageIdForSyncMessageId.js +14 -19
- package/src/platform-implementation-js/driver-common/getGmailThreadIdForRfcMessageId.js +27 -35
- package/src/platform-implementation-js/driver-common/getRfcMessageIdForSyncMessageId.js +16 -22
- package/src/platform-implementation-js/driver-common/getThreadIdFromMessageId.js +14 -14
- package/src/platform-implementation-js/driver-common/inboxAjax.js +12 -7
- package/src/platform-implementation-js/driver-common/requestGmailThread.js +19 -20
- package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +197 -306
- package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +113 -161
- package/src/platform-implementation-js/driver-interfaces/compose-view-driver.js +1 -114
- package/src/platform-implementation-js/driver-interfaces/driver.js +1 -131
- package/src/platform-implementation-js/driver-interfaces/message-view-driver.js +4 -48
- package/src/platform-implementation-js/driver-interfaces/mole-view-driver.js +1 -29
- package/src/platform-implementation-js/driver-interfaces/route-view-driver.js +1 -32
- package/src/platform-implementation-js/driver-interfaces/thread-row-view-driver.js +1 -11
- package/src/platform-implementation-js/lib/array-to-lifetimes.js +43 -41
- package/src/platform-implementation-js/lib/array-to-lifetimes.test.js +139 -155
- package/src/platform-implementation-js/lib/copyAndValidateAutocompleteResults.js +19 -38
- package/src/platform-implementation-js/lib/css-selector-escape.js +7 -3
- package/src/platform-implementation-js/lib/dom/element-view-mapper.js +8 -11
- package/src/platform-implementation-js/lib/dom/get-selection.js +23 -52
- package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +69 -101
- package/src/platform-implementation-js/lib/dom/is-node-in-range.js +8 -10
- package/src/platform-implementation-js/lib/dom/on-mouse-down-and-up.js +15 -17
- package/src/platform-implementation-js/lib/dom/querySelectorOne.js +8 -11
- package/src/platform-implementation-js/lib/dom/set-css.js +7 -3
- package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +9 -11
- package/src/platform-implementation-js/lib/dom/simulate-drag-and-drop.js +32 -33
- package/src/platform-implementation-js/lib/extract-contact-from-email-contact-string.test.js +23 -26
- package/src/platform-implementation-js/lib/handle-compose-link-chips.js +86 -149
- package/src/platform-implementation-js/lib/insert-link-chip-into-body.js +42 -57
- package/src/platform-implementation-js/lib/make-revocable-function.js +19 -21
- package/src/platform-implementation-js/lib/make-revocable-function.test.js +20 -22
- package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +15 -17
- package/src/platform-implementation-js/lib/parseParamsFromRouteID.test.js +9 -18
- package/src/platform-implementation-js/lib/populateRouteID.js +8 -9
- package/src/platform-implementation-js/lib/populateRouteID.test.js +20 -19
- package/src/platform-implementation-js/lib/react/ElementContainer.js +23 -20
- package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +10 -9
- package/src/platform-implementation-js/lib/rewriteCssWithIdMap.test.js +13 -20
- package/src/platform-implementation-js/lib/routeIDmatchesHash.js +13 -18
- package/src/platform-implementation-js/lib/routeIDmatchesHash.test.js +11 -17
- package/src/platform-implementation-js/lib/shared-style.js +14 -13
- package/src/platform-implementation-js/lib/toItemWithLifetimeStream.js +18 -17
- package/src/platform-implementation-js/lib/toLiveSet.js +17 -15
- package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +6 -5
- package/src/platform-implementation-js/main.js +9 -24
- package/src/platform-implementation-js/namespaces/compose.js +37 -60
- package/src/platform-implementation-js/namespaces/conversations.js +52 -124
- package/src/platform-implementation-js/namespaces/global.js +27 -39
- package/src/platform-implementation-js/namespaces/keyboard.js +29 -33
- package/src/platform-implementation-js/namespaces/lists.js +25 -31
- package/src/platform-implementation-js/namespaces/modal.js +34 -28
- package/src/platform-implementation-js/namespaces/nav-menu.js +30 -45
- package/src/platform-implementation-js/namespaces/router.js +70 -137
- package/src/platform-implementation-js/namespaces/search.js +19 -17
- package/src/platform-implementation-js/namespaces/toolbars.js +71 -117
- package/src/platform-implementation-js/namespaces/user.js +36 -37
- package/src/platform-implementation-js/namespaces/widgets.js +54 -61
- package/src/platform-implementation-js/platform-implementation.js +98 -229
- package/src/platform-implementation-js/views/app-toolbar-button-view.js +26 -47
- package/src/platform-implementation-js/views/collapsible-section-view.js +66 -63
- package/src/platform-implementation-js/views/content-panel-view.js +28 -30
- package/src/platform-implementation-js/views/conversations/attachment-card-view.js +21 -44
- package/src/platform-implementation-js/views/conversations/custom-message-view.js +44 -104
- package/src/platform-implementation-js/views/conversations/message-view.js +131 -202
- package/src/platform-implementation-js/views/conversations/thread-view.js +75 -127
- package/src/platform-implementation-js/views/native-nav-item-view.js +32 -65
- package/src/platform-implementation-js/views/nav-item-view.js +51 -115
- package/src/platform-implementation-js/views/route-view/custom-route-view.js +25 -20
- package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +18 -18
- package/src/platform-implementation-js/views/route-view/list-route-view.js +30 -52
- package/src/platform-implementation-js/views/route-view/route-view.js +24 -35
- package/src/platform-implementation-js/views/section-view.js +60 -52
- package/src/platform-implementation-js/views/thread-row-view.js +49 -74
- package/src/platform-implementation-js/widgets/drawer-view.js +29 -36
- package/src/platform-implementation-js/widgets/modal-view.js +39 -68
- package/src/platform-implementation-js/widgets/mole-view.js +22 -22
- package/src/platform-implementation-js/widgets/top-message-bar-view.js +13 -10
package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/show-custom-thread-list.js
CHANGED
|
@@ -1,37 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
type InitialIDPair =
|
|
21
|
-
| { rfcId: string }
|
|
22
|
-
| { gtid: string }
|
|
23
|
-
| { rfcId: string, gtid: string };
|
|
24
|
-
type IDPairWithRFC = { rfcId: string, gtid?: string };
|
|
25
|
-
type CompletedIDPair = { rfcId: string, gtid: string };
|
|
26
|
-
|
|
27
|
-
type HandlerResult = {
|
|
28
|
-
total?: number,
|
|
29
|
-
hasMore?: boolean,
|
|
30
|
-
threads: Array<ThreadDescriptor>,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
const threadListHandlersToSearchStrings: Map<Function, string> = new Map();
|
|
34
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = showCustomThreadList;
|
|
8
|
+
var _find = _interopRequireDefault(require("lodash/find"));
|
|
9
|
+
var _kefir = _interopRequireDefault(require("kefir"));
|
|
10
|
+
var _gmailElementGetter = _interopRequireDefault(require("../gmail-element-getter"));
|
|
11
|
+
var GRP = _interopRequireWildcard(require("../gmail-response-processor"));
|
|
12
|
+
var SyncGRP = _interopRequireWildcard(require("../gmail-sync-response-processor"));
|
|
13
|
+
var _isStreakAppId = _interopRequireDefault(require("../../../lib/isStreakAppId"));
|
|
14
|
+
var _immutabilityHelper = _interopRequireDefault(require("immutability-helper"));
|
|
15
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
|
+
const threadListHandlersToSearchStrings = new Map();
|
|
35
18
|
const MAX_THREADS_PER_PAGE = 50;
|
|
36
19
|
|
|
37
20
|
/*
|
|
@@ -81,420 +64,289 @@ for the search>
|
|
|
81
64
|
|
|
82
65
|
*/
|
|
83
66
|
|
|
84
|
-
function copyAndOmitExcessThreads(
|
|
85
|
-
ids: Array<ThreadDescriptor>,
|
|
86
|
-
logger: Logger
|
|
87
|
-
): Array<ThreadDescriptor> {
|
|
67
|
+
function copyAndOmitExcessThreads(ids, logger) {
|
|
88
68
|
if (ids.length > MAX_THREADS_PER_PAGE) {
|
|
89
69
|
// upgrade to deprecationWarning later
|
|
90
|
-
logger.error(
|
|
91
|
-
new Error(
|
|
92
|
-
'Received more than the maximum number of threads specified by handler, ' +
|
|
93
|
-
'ignoring additional threads (https://www.inboxsdk.com/docs/#Router).'
|
|
94
|
-
)
|
|
95
|
-
);
|
|
70
|
+
logger.error(new Error('Received more than the maximum number of threads specified by handler, ' + 'ignoring additional threads (https://www.inboxsdk.com/docs/#Router).'));
|
|
96
71
|
}
|
|
97
72
|
return ids.slice(0, MAX_THREADS_PER_PAGE);
|
|
98
73
|
}
|
|
99
|
-
|
|
100
|
-
function _findIdFailure(id: string, err: Error) {
|
|
74
|
+
function _findIdFailure(id, err) {
|
|
101
75
|
console.log('Failed to find id for thread', id, err); //eslint-disable-line no-console
|
|
102
76
|
return null;
|
|
103
77
|
}
|
|
104
|
-
|
|
105
|
-
function parseOnActivateResult(
|
|
106
|
-
logger: Logger,
|
|
107
|
-
start: number,
|
|
108
|
-
result: HandlerResult | Array<ThreadDescriptor>
|
|
109
|
-
): { total: number | 'MANY', threads: ThreadDescriptor[] } {
|
|
78
|
+
function parseOnActivateResult(logger, start, result) {
|
|
110
79
|
if (Array.isArray(result)) {
|
|
111
|
-
logger.deprecationWarning(
|
|
112
|
-
'Returning an array from a handleCustomListRoute handler',
|
|
113
|
-
'a CustomListDescriptor object'
|
|
114
|
-
);
|
|
80
|
+
logger.deprecationWarning('Returning an array from a handleCustomListRoute handler', 'a CustomListDescriptor object');
|
|
115
81
|
const threads = copyAndOmitExcessThreads(result, logger);
|
|
116
82
|
return {
|
|
117
83
|
// default to one page since arrays can't be paginated
|
|
118
84
|
total: threads.length,
|
|
119
|
-
threads
|
|
85
|
+
threads
|
|
120
86
|
};
|
|
121
87
|
} else if (typeof result === 'object') {
|
|
122
|
-
const {
|
|
123
|
-
|
|
88
|
+
const {
|
|
89
|
+
total,
|
|
90
|
+
hasMore,
|
|
91
|
+
threads
|
|
92
|
+
} = result;
|
|
124
93
|
if (!Array.isArray(threads)) {
|
|
125
|
-
throw new Error(
|
|
126
|
-
'handleCustomListRoute result must contain a "threads" array ' +
|
|
127
|
-
'(https://www.inboxsdk.com/docs/#Router).'
|
|
128
|
-
);
|
|
94
|
+
throw new Error('handleCustomListRoute result must contain a "threads" array ' + '(https://www.inboxsdk.com/docs/#Router).');
|
|
129
95
|
}
|
|
130
|
-
|
|
131
96
|
if (total != null && hasMore != null) {
|
|
132
|
-
throw new Error(
|
|
133
|
-
'handleCustomListRoute result must only contain either ' +
|
|
134
|
-
'a "total" or a "hasMore" property, but not both. ' +
|
|
135
|
-
'(https://www.inboxsdk.com/docs/#Router).'
|
|
136
|
-
);
|
|
97
|
+
throw new Error('handleCustomListRoute result must only contain either ' + 'a "total" or a "hasMore" property, but not both. ' + '(https://www.inboxsdk.com/docs/#Router).');
|
|
137
98
|
}
|
|
138
|
-
|
|
139
99
|
if (typeof total === 'number') {
|
|
140
100
|
return {
|
|
141
101
|
total,
|
|
142
|
-
threads: copyAndOmitExcessThreads(threads, logger)
|
|
102
|
+
threads: copyAndOmitExcessThreads(threads, logger)
|
|
143
103
|
};
|
|
144
104
|
} else if (typeof hasMore === 'boolean') {
|
|
145
105
|
const threadsWithoutExcess = copyAndOmitExcessThreads(threads, logger);
|
|
146
106
|
return {
|
|
147
107
|
total: hasMore ? 'MANY' : start + threads.length,
|
|
148
|
-
threads: threadsWithoutExcess
|
|
108
|
+
threads: threadsWithoutExcess
|
|
149
109
|
};
|
|
150
110
|
} else {
|
|
151
|
-
throw new Error(
|
|
152
|
-
'handleCustomListRoute result must contain either a "total" number ' +
|
|
153
|
-
'or a "hasMore" boolean (https://www.inboxsdk.com/docs/#Router).'
|
|
154
|
-
);
|
|
111
|
+
throw new Error('handleCustomListRoute result must contain either a "total" number ' + 'or a "hasMore" boolean (https://www.inboxsdk.com/docs/#Router).');
|
|
155
112
|
}
|
|
156
113
|
} else {
|
|
157
|
-
throw new Error(
|
|
158
|
-
'handleCustomListRoute result must be an array or an object ' +
|
|
159
|
-
'(https://www.inboxsdk.com/docs/#Router).'
|
|
160
|
-
);
|
|
114
|
+
throw new Error('handleCustomListRoute result must be an array or an object ' + '(https://www.inboxsdk.com/docs/#Router).');
|
|
161
115
|
}
|
|
162
116
|
}
|
|
163
|
-
|
|
164
|
-
function threadDescriptorToInitialIDPair(id: ThreadDescriptor): ?InitialIDPair {
|
|
117
|
+
function threadDescriptorToInitialIDPair(id) {
|
|
165
118
|
if (typeof id === 'string') {
|
|
166
119
|
if (id[0] == '<') {
|
|
167
|
-
return {
|
|
120
|
+
return {
|
|
121
|
+
rfcId: id
|
|
122
|
+
};
|
|
168
123
|
} else {
|
|
169
|
-
return {
|
|
124
|
+
return {
|
|
125
|
+
gtid: id
|
|
126
|
+
};
|
|
170
127
|
}
|
|
171
128
|
} else if (id) {
|
|
172
129
|
const obj = {
|
|
173
130
|
gtid: typeof id.gmailThreadId === 'string' && id.gmailThreadId,
|
|
174
|
-
rfcId: typeof id.rfcMessageId === 'string' && id.rfcMessageId
|
|
131
|
+
rfcId: typeof id.rfcMessageId === 'string' && id.rfcMessageId
|
|
175
132
|
};
|
|
176
133
|
if (obj.gtid || obj.rfcId) {
|
|
177
|
-
return
|
|
134
|
+
return obj;
|
|
178
135
|
}
|
|
179
136
|
}
|
|
180
137
|
}
|
|
181
|
-
|
|
182
|
-
function initialIDPairToIDPairWithRFC(
|
|
183
|
-
driver: GmailDriver,
|
|
184
|
-
pair: InitialIDPair,
|
|
185
|
-
findIdFailure
|
|
186
|
-
): Promise<?IDPairWithRFC> {
|
|
138
|
+
function initialIDPairToIDPairWithRFC(driver, pair, findIdFailure) {
|
|
187
139
|
if (typeof pair.rfcId === 'string') {
|
|
188
|
-
return Promise.resolve(
|
|
140
|
+
return Promise.resolve(pair);
|
|
189
141
|
} else if (typeof pair.gtid === 'string') {
|
|
190
142
|
const gtid = pair.gtid;
|
|
191
|
-
return driver.getRfcMessageIdForGmailThreadId(gtid).then(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
);
|
|
143
|
+
return driver.getRfcMessageIdForGmailThreadId(gtid).then(rfcId => ({
|
|
144
|
+
gtid,
|
|
145
|
+
rfcId
|
|
146
|
+
}), err => findIdFailure(gtid, err));
|
|
195
147
|
}
|
|
196
148
|
throw new Error('Should not happen');
|
|
197
149
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
findIdFailure
|
|
203
|
-
): Promise<?CompletedIDPair> {
|
|
204
|
-
return typeof pair.gtid === 'string'
|
|
205
|
-
? Promise.resolve(((pair: any): CompletedIDPair))
|
|
206
|
-
: driver.getGmailThreadIdForRfcMessageId(pair.rfcId).then(
|
|
207
|
-
(gtid) => ({ gtid, rfcId: pair.rfcId }),
|
|
208
|
-
(err) => findIdFailure(pair.rfcId, err)
|
|
209
|
-
);
|
|
150
|
+
function idPairWithRFCToCompletedIDPair(driver, pair, findIdFailure) {
|
|
151
|
+
return typeof pair.gtid === 'string' ? Promise.resolve(pair) : driver.getGmailThreadIdForRfcMessageId(pair.rfcId).then(gtid => ({
|
|
152
|
+
gtid,
|
|
153
|
+
rfcId: pair.rfcId
|
|
154
|
+
}), err => findIdFailure(pair.rfcId, err));
|
|
210
155
|
}
|
|
211
156
|
|
|
212
157
|
// Returns the search string that will trigger the onActivate function.
|
|
213
|
-
const setupSearchReplacing = (
|
|
214
|
-
driver: GmailDriver,
|
|
215
|
-
customRouteID: string,
|
|
216
|
-
onActivate: Function,
|
|
217
|
-
findIdFailure
|
|
218
|
-
): string => {
|
|
158
|
+
const setupSearchReplacing = (driver, customRouteID, onActivate, findIdFailure) => {
|
|
219
159
|
const preexistingQuery = threadListHandlersToSearchStrings.get(onActivate);
|
|
220
160
|
if (preexistingQuery) {
|
|
221
161
|
return preexistingQuery;
|
|
222
162
|
}
|
|
223
163
|
const newQuery = Date.now() + '-' + Math.random();
|
|
224
164
|
driver.getPageCommunicator().setupCustomListResultsQuery(newQuery);
|
|
225
|
-
driver
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
)
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
165
|
+
driver.getPageCommunicator().ajaxInterceptStream.filter(e => e.type === 'searchForReplacement' && e.query === newQuery).onValue(_ref => {
|
|
166
|
+
let {
|
|
167
|
+
start
|
|
168
|
+
} = _ref;
|
|
169
|
+
(async () => {
|
|
170
|
+
driver.signalCustomThreadListActivity(customRouteID);
|
|
171
|
+
let total;
|
|
172
|
+
let threadDescriptors;
|
|
173
|
+
try {
|
|
174
|
+
const onActivateResult = await Promise.resolve(onActivate(start, MAX_THREADS_PER_PAGE));
|
|
175
|
+
const parsed = parseOnActivateResult(driver.getLogger(), start, onActivateResult);
|
|
176
|
+
total = parsed.total;
|
|
177
|
+
threadDescriptors = parsed.threads;
|
|
178
|
+
} catch (e) {
|
|
179
|
+
driver.getLogger().error(e);
|
|
180
|
+
total = 0;
|
|
181
|
+
threadDescriptors = [];
|
|
182
|
+
}
|
|
183
|
+
const initialIDPairs = threadDescriptors.map(threadDescriptorToInitialIDPair).filter(Boolean);
|
|
184
|
+
const idPairsWithRFC = (await Promise.all(initialIDPairs.map(pair => initialIDPairToIDPairWithRFC(driver, pair, findIdFailure)))).filter(Boolean);
|
|
185
|
+
const messageIDQuery = idPairsWithRFC.length > 0 ? idPairsWithRFC.map(_ref2 => {
|
|
186
|
+
let {
|
|
187
|
+
rfcId
|
|
188
|
+
} = _ref2;
|
|
189
|
+
return 'rfc822msgid:' + rfcId;
|
|
190
|
+
}).join(' OR ') : '' + Math.random() + Date.now(); // google doesn't like empty searches
|
|
191
|
+
|
|
192
|
+
// Outgoing requests for list queries always need to have a `start` of 0,
|
|
193
|
+
// because we only ever ask for 1 page-worth of threads per query.
|
|
194
|
+
// When the response comes back, we modify it to have a `start` consistent
|
|
195
|
+
// with whatever page was being loaded so Gmail's UI makes sense.
|
|
196
|
+
driver.getPageCommunicator().setCustomListNewQuery({
|
|
197
|
+
newQuery: messageIDQuery,
|
|
198
|
+
newStart: 0,
|
|
199
|
+
query: newQuery,
|
|
200
|
+
start
|
|
201
|
+
});
|
|
202
|
+
const searchResultsResponse_promise = driver.getPageCommunicator().ajaxInterceptStream.filter(e => e.type === 'searchResultsResponse' && e.query === newQuery && e.start === start).map(x => x.response).take(1).toPromise();
|
|
203
|
+
|
|
204
|
+
// Figure out any gmail thread ids we don't know yet.
|
|
205
|
+
const completedIDPairs = (await Promise.all(idPairsWithRFC.map(pair => idPairWithRFCToCompletedIDPair(driver, pair, findIdFailure)))).filter(Boolean);
|
|
206
|
+
const response = await searchResultsResponse_promise;
|
|
207
|
+
driver.signalCustomThreadListActivity(customRouteID);
|
|
208
|
+
|
|
209
|
+
// override thread list response so that we show results in the same
|
|
210
|
+
// order that user passed in
|
|
211
|
+
let newResponse;
|
|
212
|
+
try {
|
|
213
|
+
if (driver.isUsingSyncAPI()) {
|
|
214
|
+
const extractedThreads = SyncGRP.extractThreadsFromSearchResponse(response);
|
|
215
|
+
const extractedThreadsInCompletedIDPairsOrder = completedIDPairs.map(_ref3 => {
|
|
216
|
+
let {
|
|
217
|
+
gtid
|
|
218
|
+
} = _ref3;
|
|
219
|
+
return (0, _find.default)(extractedThreads, t => t.oldGmailThreadID === gtid);
|
|
220
|
+
}).filter(Boolean);
|
|
221
|
+
const doesNeedReorder = extractedThreads.length !== extractedThreadsInCompletedIDPairsOrder.length || extractedThreads.some((extractedThread, index) => extractedThread !== extractedThreadsInCompletedIDPairsOrder[index]);
|
|
222
|
+
let reorderedThreads;
|
|
223
|
+
if (doesNeedReorder) {
|
|
224
|
+
const now = Date.now();
|
|
225
|
+
reorderedThreads = extractedThreadsInCompletedIDPairsOrder.map((extractedThread, index) => {
|
|
226
|
+
const newFormat = Array.isArray(extractedThread.rawResponse);
|
|
227
|
+
const newTime = String(now - index);
|
|
228
|
+
let newThread = (0, _immutabilityHelper.default)(extractedThread, {
|
|
229
|
+
rawResponse: newFormat ? {
|
|
230
|
+
'0': {
|
|
231
|
+
'2': {
|
|
232
|
+
$set: newTime
|
|
233
|
+
},
|
|
234
|
+
'7': {
|
|
235
|
+
$set: newTime
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
} : {
|
|
239
|
+
'1': {
|
|
240
|
+
'3': {
|
|
241
|
+
$set: newTime
|
|
242
|
+
},
|
|
243
|
+
'8': {
|
|
244
|
+
$set: newTime
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
if (newFormat ? extractedThread.rawResponse[0][4] : extractedThread.rawResponse[1][5]) {
|
|
250
|
+
newThread = (0, _immutabilityHelper.default)(newThread, {
|
|
251
|
+
rawResponse: newFormat ? {
|
|
252
|
+
'0': {
|
|
253
|
+
'4': oldVal => oldVal.map(md => ({
|
|
254
|
+
...md,
|
|
255
|
+
'6': newTime,
|
|
256
|
+
'17': newTime,
|
|
257
|
+
'30': newTime
|
|
258
|
+
}))
|
|
259
|
+
}
|
|
260
|
+
} : {
|
|
261
|
+
'1': {
|
|
262
|
+
'5': oldVal => oldVal.map(md => ({
|
|
263
|
+
...md,
|
|
264
|
+
'7': newTime,
|
|
265
|
+
'18': newTime,
|
|
266
|
+
'31': newTime
|
|
267
|
+
}))
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return newThread;
|
|
273
|
+
});
|
|
274
|
+
} else {
|
|
275
|
+
reorderedThreads = extractedThreads;
|
|
276
|
+
}
|
|
277
|
+
newResponse = SyncGRP.replaceThreadsInSearchResponse(response, reorderedThreads, {
|
|
241
278
|
start,
|
|
242
|
-
|
|
243
|
-
);
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
279
|
+
total
|
|
280
|
+
});
|
|
281
|
+
} else {
|
|
282
|
+
const extractedThreads = GRP.extractThreads(response);
|
|
283
|
+
const reorderedThreads = completedIDPairs.map(_ref4 => {
|
|
284
|
+
let {
|
|
285
|
+
gtid
|
|
286
|
+
} = _ref4;
|
|
287
|
+
return (0, _find.default)(extractedThreads, t => t.gmailThreadId === gtid);
|
|
288
|
+
}).filter(Boolean);
|
|
289
|
+
newResponse = GRP.replaceThreadsInResponse(response, reorderedThreads, {
|
|
290
|
+
start,
|
|
291
|
+
total
|
|
292
|
+
});
|
|
250
293
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
await Promise.all(
|
|
258
|
-
initialIDPairs.map((pair) =>
|
|
259
|
-
initialIDPairToIDPairWithRFC(driver, pair, findIdFailure)
|
|
260
|
-
)
|
|
261
|
-
)
|
|
262
|
-
).filter(Boolean);
|
|
263
|
-
|
|
264
|
-
const messageIDQuery: string =
|
|
265
|
-
idPairsWithRFC.length > 0
|
|
266
|
-
? idPairsWithRFC
|
|
267
|
-
.map(({ rfcId }) => 'rfc822msgid:' + rfcId)
|
|
268
|
-
.join(' OR ')
|
|
269
|
-
: '' + Math.random() + Date.now(); // google doesn't like empty searches
|
|
270
|
-
|
|
271
|
-
// Outgoing requests for list queries always need to have a `start` of 0,
|
|
272
|
-
// because we only ever ask for 1 page-worth of threads per query.
|
|
273
|
-
// When the response comes back, we modify it to have a `start` consistent
|
|
274
|
-
// with whatever page was being loaded so Gmail's UI makes sense.
|
|
275
|
-
driver.getPageCommunicator().setCustomListNewQuery({
|
|
276
|
-
newQuery: messageIDQuery,
|
|
277
|
-
newStart: 0,
|
|
278
|
-
query: newQuery,
|
|
279
|
-
start,
|
|
294
|
+
driver.getPageCommunicator().setCustomListResults(newQuery, newResponse);
|
|
295
|
+
} catch (e) {
|
|
296
|
+
driver.getLogger().error(e, {
|
|
297
|
+
responseReplacementFailure: true,
|
|
298
|
+
//response: isStreakAppId(driver.getAppId()) ? response : null,
|
|
299
|
+
idPairsLength: completedIDPairs.length
|
|
280
300
|
});
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
.
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
e.query === newQuery &&
|
|
288
|
-
e.start === start
|
|
289
|
-
)
|
|
290
|
-
.map((x) => x.response)
|
|
291
|
-
.take(1)
|
|
292
|
-
.toPromise();
|
|
293
|
-
|
|
294
|
-
// Figure out any gmail thread ids we don't know yet.
|
|
295
|
-
const completedIDPairs: Array<CompletedIDPair> = (
|
|
296
|
-
await Promise.all(
|
|
297
|
-
idPairsWithRFC.map((pair) =>
|
|
298
|
-
idPairWithRFCToCompletedIDPair(driver, pair, findIdFailure)
|
|
299
|
-
)
|
|
300
|
-
)
|
|
301
|
-
).filter(Boolean);
|
|
302
|
-
|
|
303
|
-
const response = await searchResultsResponse_promise;
|
|
304
|
-
|
|
305
|
-
driver.signalCustomThreadListActivity(customRouteID);
|
|
306
|
-
|
|
307
|
-
// override thread list response so that we show results in the same
|
|
308
|
-
// order that user passed in
|
|
309
|
-
let newResponse;
|
|
301
|
+
const butterBar = driver.getButterBar();
|
|
302
|
+
if (butterBar) {
|
|
303
|
+
butterBar.showError({
|
|
304
|
+
text: 'Failed to load custom thread list'
|
|
305
|
+
});
|
|
306
|
+
}
|
|
310
307
|
try {
|
|
311
308
|
if (driver.isUsingSyncAPI()) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
.map(({ gtid }) =>
|
|
317
|
-
find(extractedThreads, (t) => t.oldGmailThreadID === gtid)
|
|
318
|
-
)
|
|
319
|
-
.filter(Boolean);
|
|
320
|
-
|
|
321
|
-
const doesNeedReorder =
|
|
322
|
-
extractedThreads.length !==
|
|
323
|
-
extractedThreadsInCompletedIDPairsOrder.length ||
|
|
324
|
-
extractedThreads.some(
|
|
325
|
-
(extractedThread, index) =>
|
|
326
|
-
extractedThread !==
|
|
327
|
-
extractedThreadsInCompletedIDPairsOrder[index]
|
|
328
|
-
);
|
|
329
|
-
|
|
330
|
-
let reorderedThreads: typeof extractedThreads;
|
|
331
|
-
if (doesNeedReorder) {
|
|
332
|
-
const now = Date.now();
|
|
333
|
-
reorderedThreads = extractedThreadsInCompletedIDPairsOrder.map(
|
|
334
|
-
(extractedThread, index) => {
|
|
335
|
-
const newFormat = Array.isArray(extractedThread.rawResponse);
|
|
336
|
-
|
|
337
|
-
const newTime = String(now - index);
|
|
338
|
-
let newThread = update(extractedThread, {
|
|
339
|
-
rawResponse: newFormat
|
|
340
|
-
? {
|
|
341
|
-
'0': {
|
|
342
|
-
'2': { $set: newTime },
|
|
343
|
-
'7': { $set: newTime },
|
|
344
|
-
},
|
|
345
|
-
}
|
|
346
|
-
: {
|
|
347
|
-
'1': {
|
|
348
|
-
'3': { $set: newTime },
|
|
349
|
-
'8': { $set: newTime },
|
|
350
|
-
},
|
|
351
|
-
},
|
|
352
|
-
});
|
|
353
|
-
|
|
354
|
-
if (
|
|
355
|
-
newFormat
|
|
356
|
-
? extractedThread.rawResponse[0][4]
|
|
357
|
-
: extractedThread.rawResponse[1][5]
|
|
358
|
-
) {
|
|
359
|
-
newThread = update(newThread, {
|
|
360
|
-
rawResponse: newFormat
|
|
361
|
-
? {
|
|
362
|
-
'0': {
|
|
363
|
-
'4': (oldVal) =>
|
|
364
|
-
oldVal.map((md) => ({
|
|
365
|
-
...md,
|
|
366
|
-
'6': newTime,
|
|
367
|
-
'17': newTime,
|
|
368
|
-
'30': newTime,
|
|
369
|
-
})),
|
|
370
|
-
},
|
|
371
|
-
}
|
|
372
|
-
: {
|
|
373
|
-
'1': {
|
|
374
|
-
'5': (oldVal) =>
|
|
375
|
-
oldVal.map((md) => ({
|
|
376
|
-
...md,
|
|
377
|
-
'7': newTime,
|
|
378
|
-
'18': newTime,
|
|
379
|
-
'31': newTime,
|
|
380
|
-
})),
|
|
381
|
-
},
|
|
382
|
-
},
|
|
383
|
-
});
|
|
384
|
-
}
|
|
385
|
-
return newThread;
|
|
386
|
-
}
|
|
387
|
-
);
|
|
388
|
-
} else {
|
|
389
|
-
reorderedThreads = extractedThreads;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
newResponse = SyncGRP.replaceThreadsInSearchResponse(
|
|
393
|
-
response,
|
|
394
|
-
reorderedThreads,
|
|
395
|
-
{ start, total }
|
|
396
|
-
);
|
|
309
|
+
driver.getPageCommunicator().setCustomListResults(newQuery, SyncGRP.replaceThreadsInSearchResponse(response, [], {
|
|
310
|
+
start,
|
|
311
|
+
total
|
|
312
|
+
}));
|
|
397
313
|
} else {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
find(extractedThreads, (t) => t.gmailThreadId === gtid)
|
|
403
|
-
)
|
|
404
|
-
.filter(Boolean);
|
|
405
|
-
|
|
406
|
-
newResponse = GRP.replaceThreadsInResponse(
|
|
407
|
-
response,
|
|
408
|
-
reorderedThreads,
|
|
409
|
-
{ start, total }
|
|
410
|
-
);
|
|
314
|
+
driver.getPageCommunicator().setCustomListResults(newQuery, GRP.replaceThreadsInResponse(response, [], {
|
|
315
|
+
start,
|
|
316
|
+
total
|
|
317
|
+
}));
|
|
411
318
|
}
|
|
412
|
-
|
|
413
|
-
driver
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
319
|
+
} catch (e2) {
|
|
320
|
+
driver.getLogger().error(e2);
|
|
321
|
+
// The original response will be used.
|
|
322
|
+
driver.getPageCommunicator().setCustomListResults(newQuery, null);
|
|
323
|
+
}
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
setTimeout(() => {
|
|
327
|
+
const errorBar = document.querySelector('.vY .vX.UC');
|
|
328
|
+
if (errorBar && errorBar.style.display !== 'none' && /#\d+/.test(errorBar.textContent)) {
|
|
329
|
+
const isStreak = (0, _isStreakAppId.default)(driver.getAppId());
|
|
330
|
+
driver.getLogger().error(new Error('Gmail error with custom thread list'), {
|
|
331
|
+
message: errorBar.textContent,
|
|
332
|
+
completedIDPairsLength: completedIDPairs.length,
|
|
333
|
+
response: isStreak ? response : null,
|
|
334
|
+
newResponse: isStreak ? newResponse : null
|
|
421
335
|
});
|
|
422
|
-
const butterBar = driver.getButterBar();
|
|
423
|
-
if (butterBar) {
|
|
424
|
-
butterBar.showError({
|
|
425
|
-
text: 'Failed to load custom thread list',
|
|
426
|
-
});
|
|
427
|
-
}
|
|
428
|
-
try {
|
|
429
|
-
if (driver.isUsingSyncAPI()) {
|
|
430
|
-
driver.getPageCommunicator().setCustomListResults(
|
|
431
|
-
newQuery,
|
|
432
|
-
SyncGRP.replaceThreadsInSearchResponse(response, [], {
|
|
433
|
-
start,
|
|
434
|
-
total,
|
|
435
|
-
})
|
|
436
|
-
);
|
|
437
|
-
} else {
|
|
438
|
-
driver
|
|
439
|
-
.getPageCommunicator()
|
|
440
|
-
.setCustomListResults(
|
|
441
|
-
newQuery,
|
|
442
|
-
GRP.replaceThreadsInResponse(response, [], { start, total })
|
|
443
|
-
);
|
|
444
|
-
}
|
|
445
|
-
} catch (e2) {
|
|
446
|
-
driver.getLogger().error(e2);
|
|
447
|
-
// The original response will be used.
|
|
448
|
-
driver.getPageCommunicator().setCustomListResults(newQuery, null);
|
|
449
|
-
}
|
|
450
|
-
return;
|
|
451
336
|
}
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
if (
|
|
456
|
-
errorBar &&
|
|
457
|
-
errorBar.style.display !== 'none' &&
|
|
458
|
-
/#\d+/.test(errorBar.textContent)
|
|
459
|
-
) {
|
|
460
|
-
const isStreak = isStreakAppId(driver.getAppId());
|
|
461
|
-
driver
|
|
462
|
-
.getLogger()
|
|
463
|
-
.error(new Error('Gmail error with custom thread list'), {
|
|
464
|
-
message: errorBar.textContent,
|
|
465
|
-
completedIDPairsLength: completedIDPairs.length,
|
|
466
|
-
response: isStreak ? response : null,
|
|
467
|
-
newResponse: isStreak ? newResponse : null,
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
}, 1000);
|
|
471
|
-
})().catch((err) => driver.getLogger().error(err));
|
|
472
|
-
});
|
|
473
|
-
|
|
337
|
+
}, 1000);
|
|
338
|
+
})().catch(err => driver.getLogger().error(err));
|
|
339
|
+
});
|
|
474
340
|
driver.getCustomListSearchStringsToRouteIds().set(newQuery, customRouteID);
|
|
475
341
|
threadListHandlersToSearchStrings.set(onActivate, newQuery);
|
|
476
342
|
return newQuery;
|
|
477
343
|
};
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
driver
|
|
481
|
-
customRouteID: string,
|
|
482
|
-
onActivate: Function,
|
|
483
|
-
params: Array<string>,
|
|
484
|
-
findIdFailure: typeof _findIdFailure = _findIdFailure
|
|
485
|
-
) {
|
|
486
|
-
const uniqueSearch = setupSearchReplacing(
|
|
487
|
-
driver,
|
|
488
|
-
customRouteID,
|
|
489
|
-
onActivate,
|
|
490
|
-
findIdFailure
|
|
491
|
-
);
|
|
344
|
+
function showCustomThreadList(driver, customRouteID, onActivate, params) {
|
|
345
|
+
let findIdFailure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _findIdFailure;
|
|
346
|
+
const uniqueSearch = setupSearchReplacing(driver, customRouteID, onActivate, findIdFailure);
|
|
492
347
|
const customHash = document.location.hash;
|
|
493
|
-
|
|
494
|
-
const
|
|
495
|
-
GmailElementGetter.getMainContentElementChangedStream().changes().take(1);
|
|
496
|
-
|
|
497
|
-
const searchInput = GmailElementGetter.getSearchInput();
|
|
348
|
+
const nextMainContentElementChange = _gmailElementGetter.default.getMainContentElementChangedStream().changes().take(1);
|
|
349
|
+
const searchInput = _gmailElementGetter.default.getSearchInput();
|
|
498
350
|
if (!searchInput) throw new Error('could not find search input');
|
|
499
351
|
searchInput.value = '';
|
|
500
352
|
searchInput.style.visibility = 'hidden';
|
|
@@ -504,13 +356,12 @@ export default function showCustomThreadList(
|
|
|
504
356
|
});
|
|
505
357
|
|
|
506
358
|
// Change the hash *without* making a new history entry.
|
|
507
|
-
const searchHash =
|
|
508
|
-
'#search/' + [uniqueSearch, ...params].map(encodeURIComponent).join('/');
|
|
359
|
+
const searchHash = '#search/' + [uniqueSearch, ...params].map(encodeURIComponent).join('/');
|
|
509
360
|
window.history.replaceState(null, null, searchHash);
|
|
510
361
|
// Create a hashchange event so setup-route-view-driver-stream sees this event.
|
|
511
|
-
const hce = new
|
|
362
|
+
const hce = new window.HashChangeEvent('hashchange', {
|
|
512
363
|
oldURL: document.location.href.replace(/#.*$/, '') + customHash,
|
|
513
|
-
newURL: document.location.href.replace(/#.*$/, '') + searchHash
|
|
364
|
+
newURL: document.location.href.replace(/#.*$/, '') + searchHash
|
|
514
365
|
});
|
|
515
366
|
window.dispatchEvent(hce);
|
|
516
|
-
}
|
|
367
|
+
}
|