@inboxsdk/core 1.0.5 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/inboxsdk.js +25 -192
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -1
  4. package/pageWorld.js +3 -47
  5. package/pageWorld.js.map +1 -1
  6. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.d.ts +3 -0
  7. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.d.ts.map +1 -0
  8. package/src/inboxsdk-js/inboxsdk-NONREMOTE-INTEGRATED-PAGEWORLD.js +3 -8
  9. package/src/inboxsdk-js/inboxsdk-NONREMOTE.d.ts +3 -0
  10. package/src/inboxsdk-js/inboxsdk-NONREMOTE.d.ts.map +1 -0
  11. package/src/inboxsdk-js/inboxsdk-NONREMOTE.js +4 -6
  12. package/src/inboxsdk-js/inboxsdk-REMOTE.d.ts +3 -0
  13. package/src/inboxsdk-js/inboxsdk-REMOTE.d.ts.map +1 -0
  14. package/src/inboxsdk-js/inboxsdk-REMOTE.js +2 -5
  15. package/src/inboxsdk-js/inboxsdk-TEST.d.ts +3 -0
  16. package/src/inboxsdk-js/inboxsdk-TEST.d.ts.map +1 -0
  17. package/src/inboxsdk-js/inboxsdk-TEST.js +5 -6
  18. package/src/inboxsdk-js/inboxsdk.d.ts +8 -0
  19. package/src/inboxsdk-js/inboxsdk.d.ts.map +1 -0
  20. package/src/inboxsdk-js/inboxsdk.js +22 -32
  21. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.d.ts +2 -0
  22. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.d.ts.map +1 -0
  23. package/src/inboxsdk-js/loading/load-platform-implementation-DEV.js +14 -16
  24. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts +1 -1
  25. package/src/inboxsdk-js/loading/platform-implementation-loader.d.ts.map +1 -1
  26. package/src/injected-js/gmail/setup-gmail-interceptor.js +7 -14
  27. package/src/injected-js/main.js +0 -9
  28. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.d.ts.map +1 -1
  29. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver.js +0 -2
  30. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +2 -1
  31. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.js +1 -2
  32. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/index.test.js +10 -1
  33. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.js +39 -35
  34. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-toolbar-button-view.js +1 -2
  35. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +2 -3
  36. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +13 -14
  37. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-compose-notice.js +1 -2
  38. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +2 -2
  39. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +3 -4
  40. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +7 -8
  41. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +28 -31
  42. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +4 -5
  43. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +2 -3
  44. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +1 -2
  45. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.test.js +10 -0
  46. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +10 -11
  47. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +4 -5
  48. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +3 -4
  49. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-mole-view-driver.js +2 -3
  50. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +2 -3
  51. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +2 -3
  52. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +5 -6
  53. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +1 -2
  54. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.js +4 -5
  55. package/src/platform-implementation-js/lib/idMap.d.ts +1 -2
  56. package/src/platform-implementation-js/lib/idMap.d.ts.map +1 -1
  57. package/src/platform-implementation-js/lib/idMap.js +4 -44
  58. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.d.ts.map +1 -1
  59. package/src/platform-implementation-js/lib/inject-script-EMBEDDED.js +3 -4
  60. package/src/platform-implementation-js/lib/react/ElementContainer.js +3 -7
  61. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.d.ts +3 -0
  62. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.d.ts.map +1 -0
  63. package/src/platform-implementation-js/main-INTEGRATED-PAGEWORLD.js +5 -9
  64. package/src/platform-implementation-js/main.d.ts +5 -0
  65. package/src/platform-implementation-js/main.d.ts.map +1 -0
  66. package/src/platform-implementation-js/main.js +38 -61
  67. package/src/platform-implementation-js/namespaces/conversations.js +2 -3
  68. package/src/platform-implementation-js/namespaces/lists.js +1 -2
  69. package/src/platform-implementation-js/namespaces/nav-menu.js +2 -3
  70. package/src/platform-implementation-js/namespaces/router.js +3 -4
  71. package/src/platform-implementation-js/namespaces/toolbars.js +1 -2
  72. package/src/platform-implementation-js/platform-implementation.d.ts +0 -3
  73. package/src/platform-implementation-js/platform-implementation.js +1 -11
  74. package/src/platform-implementation-js/views/app-menu-item-view.js +2 -1
  75. package/src/platform-implementation-js/views/collapsible-panel-view.js +2 -1
  76. package/src/platform-implementation-js/views/content-panel-view.js +1 -2
  77. package/src/platform-implementation-js/views/conversations/custom-message-view.js +3 -4
  78. package/src/platform-implementation-js/views/conversations/message-view.js +1 -2
  79. package/src/platform-implementation-js/views/conversations/thread-view.js +1 -2
  80. package/src/platform-implementation-js/views/nav-item-view.js +1 -2
  81. package/src/platform-implementation-js/views/route-view/dummy-route-view-driver.js +2 -3
  82. package/src/platform-implementation-js/widgets/drawer-view.js +1 -2
  83. package/src/platform-implementation-js/widgets/modal-view.js +1 -2
  84. package/src/platform-implementation-js/widgets/mole-view.js +1 -2
  85. package/src/injected-js/inbox/setupAjaxInterceptor.js +0 -211
  86. package/src/injected-js/inbox/setupClickAndGetNewIframeSrc.js +0 -67
  87. package/src/injected-js/inbox/setupComposeViewDraftIDFinder.js +0 -35
  88. package/src/injected-js/inbox/setupInboxFakeWindowResizeListener.js +0 -29
  89. package/src/platform-implementation-js/dom-driver/gmail/custom-style.d.ts +0 -2
  90. package/src/platform-implementation-js/dom-driver/gmail/custom-style.d.ts.map +0 -1
  91. package/src/platform-implementation-js/dom-driver/gmail/custom-style.js +0 -17
  92. package/src/platform-implementation-js/dom-driver/inbox/__mocks__/getSidebarClassnames.js +0 -13
  93. package/src/platform-implementation-js/dom-driver/inbox/addNavItem.js +0 -38
  94. package/src/platform-implementation-js/dom-driver/inbox/addRecipientRow.js +0 -55
  95. package/src/platform-implementation-js/dom-driver/inbox/createLink.js +0 -19
  96. package/src/platform-implementation-js/dom-driver/inbox/createLink.test.js +0 -27
  97. package/src/platform-implementation-js/dom-driver/inbox/custom-style.js +0 -23
  98. package/src/platform-implementation-js/dom-driver/inbox/detection/appToolbarLocation/parser.js +0 -43
  99. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentCard/parser.js +0 -34
  100. package/src/platform-implementation-js/dom-driver/inbox/detection/attachmentOverlay/parser.js +0 -53
  101. package/src/platform-implementation-js/dom-driver/inbox/detection/chatSidebar/parser.js +0 -31
  102. package/src/platform-implementation-js/dom-driver/inbox/detection/compose/parser.js +0 -103
  103. package/src/platform-implementation-js/dom-driver/inbox/detection/message/parser.js +0 -69
  104. package/src/platform-implementation-js/dom-driver/inbox/detection/nativeDrawer/parser.js +0 -32
  105. package/src/platform-implementation-js/dom-driver/inbox/detection/searchBar/parser.js +0 -28
  106. package/src/platform-implementation-js/dom-driver/inbox/detection/thread/parser.js +0 -49
  107. package/src/platform-implementation-js/dom-driver/inbox/detection/thread-row/parser.js +0 -100
  108. package/src/platform-implementation-js/dom-driver/inbox/getComposeViewDriverLiveSet.js +0 -99
  109. package/src/platform-implementation-js/dom-driver/inbox/getInboxMessageIdForInboxThreadId.js +0 -36
  110. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.js +0 -114
  111. package/src/platform-implementation-js/dom-driver/inbox/getSidebarClassnames.test.js +0 -73
  112. package/src/platform-implementation-js/dom-driver/inbox/gotoView.js +0 -39
  113. package/src/platform-implementation-js/dom-driver/inbox/gotoView.test.js +0 -28
  114. package/src/platform-implementation-js/dom-driver/inbox/inbox-butter-bar-driver.js +0 -148
  115. package/src/platform-implementation-js/dom-driver/inbox/inbox-driver.js +0 -866
  116. package/src/platform-implementation-js/dom-driver/inbox/inbox-page-communicator.js +0 -62
  117. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.js +0 -12
  118. package/src/platform-implementation-js/dom-driver/inbox/inboxResponseProcessor.test.js +0 -18
  119. package/src/platform-implementation-js/dom-driver/inbox/makePageParserTree.js +0 -33
  120. package/src/platform-implementation-js/dom-driver/inbox/pageParserOptions.js +0 -265
  121. package/src/platform-implementation-js/dom-driver/inbox/registerSearchSuggestionsProvider.js +0 -301
  122. package/src/platform-implementation-js/dom-driver/inbox/setupCustomAutocompleteSelectionHandling.js +0 -183
  123. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.js +0 -64
  124. package/src/platform-implementation-js/dom-driver/inbox/setupRouteViewDriverStream.test.js +0 -72
  125. package/src/platform-implementation-js/dom-driver/inbox/views/InboxLabelView.js +0 -78
  126. package/src/platform-implementation-js/dom-driver/inbox/views/InboxMoleViewDriver.js +0 -297
  127. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarButtonView.js +0 -92
  128. package/src/platform-implementation-js/dom-driver/inbox/views/InboxToolbarView.js +0 -54
  129. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-sidebar-view.js +0 -272
  130. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-button-view.js +0 -161
  131. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-app-toolbar-tooltip-view.js +0 -58
  132. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-card-view.js +0 -198
  133. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-attachment-overlay-view.js +0 -90
  134. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-chat-sidebar-view.js +0 -46
  135. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-button-view.js +0 -116
  136. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-compose-view.js +0 -843
  137. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.js +0 -76
  138. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-custom-route-view.test.js +0 -31
  139. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dropdown-view.js +0 -25
  140. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-dummy-route-view.js +0 -64
  141. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-message-view.js +0 -275
  142. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-modal-view.js +0 -113
  143. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-route-view.js +0 -97
  144. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-row-view.js +0 -316
  145. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.js +0 -219
  146. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-thread-view.test.js +0 -171
  147. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-tooltip-view.js +0 -128
  148. package/src/platform-implementation-js/dom-driver/inbox/views/inboxNavItemView.js +0 -312
  149. package/src/platform-implementation-js/dom-driver/inbox/waitForAnimationClickBlockerGone.js +0 -26
  150. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.d.ts +0 -2
  151. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.d.ts.map +0 -1
  152. package/src/platform-implementation-js/lib/rewriteCssWithIdMap.js +0 -4
  153. package/src/platform-implementation-js/lib/shared-style.js +0 -23
  154. package/src/types/gulp-add-src.d.ts +0 -7
@@ -1,843 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _escape = _interopRequireDefault(require("lodash/escape"));
10
- var _find = _interopRequireDefault(require("lodash/find"));
11
- var _ud = require("ud");
12
- var _closestNg = _interopRequireDefault(require("closest-ng"));
13
- var _kefir = _interopRequireDefault(require("kefir"));
14
- var _kefirStopper = _interopRequireDefault(require("kefir-stopper"));
15
- var _kefirBus = _interopRequireDefault(require("kefir-bus"));
16
- var _autoHtml = _interopRequireDefault(require("auto-html"));
17
- var _censorHTMLstring = _interopRequireDefault(require("../../../../common/censorHTMLstring"));
18
- var _delayAsap = _interopRequireDefault(require("../../../lib/delay-asap"));
19
- var _arrayToLifetimes = _interopRequireDefault(require("../../../lib/array-to-lifetimes"));
20
- var _querySelectorOrFail = _interopRequireDefault(require("../../../lib/dom/querySelectorOrFail"));
21
- var _makeMutationObserverChunkedStream = _interopRequireDefault(require("../../../lib/dom/make-mutation-observer-chunked-stream"));
22
- var _simulateMouseEvent = require("../../../lib/dom/simulate-mouse-event");
23
- var _simulateKey = _interopRequireDefault(require("../../../lib/dom/simulate-key"));
24
- var _insertHtmlAtCursor = _interopRequireDefault(require("../../../lib/dom/insert-html-at-cursor"));
25
- var _querySelectorOne = _interopRequireDefault(require("../../../lib/dom/querySelectorOne"));
26
- var _ErrorCollector = _interopRequireDefault(require("../../../lib/ErrorCollector"));
27
- var _handleComposeLinkChips = _interopRequireDefault(require("../../../lib/handle-compose-link-chips"));
28
- var _insertLinkChipIntoBody = _interopRequireDefault(require("../../../lib/insert-link-chip-into-body"));
29
- var _getPresendingStream = _interopRequireDefault(require("../../../driver-common/compose/getPresendingStream"));
30
- var _getDiscardStream = _interopRequireDefault(require("../../../driver-common/compose/getDiscardStream"));
31
- var _addRecipientRow = _interopRequireDefault(require("../addRecipientRow"));
32
- var _inboxComposeButtonView = _interopRequireDefault(require("./inbox-compose-button-view"));
33
- var _getSelection = require("../../../lib/dom/get-selection");
34
- var _getGmailThreadIdForRfcMessageId = _interopRequireDefault(require("../../../driver-common/getGmailThreadIdForRfcMessageId"));
35
- let cachedFromContacts = null;
36
- class InboxComposeView {
37
- constructor(driver, el, parsed) {
38
- (0, _defineProperty2.default)(this, "_eventStream", (0, _kefirBus.default)());
39
- (0, _defineProperty2.default)(this, "_stopper", (0, _kefirStopper.default)());
40
- (0, _defineProperty2.default)(this, "_isMinimized", false);
41
- (0, _defineProperty2.default)(this, "_isFullscreenMode", false);
42
- (0, _defineProperty2.default)(this, "_isPresending", false);
43
- (0, _defineProperty2.default)(this, "_closedProgrammatically", false);
44
- this;
45
- this._element = el;
46
- this._driver = driver;
47
- this._modifierButtonContainer = null;
48
- this._lastBodySelectionRange = null;
49
- this._p = parsed;
50
- this._els = parsed.elements;
51
- const bottomAreaElementCount = this._els.sendBtn && this._els.sendBtn.parentElement && this._els.sendBtn.parentElement.childElementCount;
52
- this._driver.getLogger().eventSite('compose open', {
53
- errorCount: this._p.errors.length,
54
- bottomAreaElementCount,
55
- isInline: this._p.attributes.isInline
56
- });
57
- const draftSaveTriggerer = (0, _kefirBus.default)();
58
- this._queueDraftSave = () => {
59
- draftSaveTriggerer.emit(null);
60
- };
61
- const bodyEl = this._els.body;
62
- if (bodyEl) {
63
- draftSaveTriggerer.bufferBy(draftSaveTriggerer.flatMap(() => (0, _delayAsap.default)(null))).filter(x => x.length > 0).takeUntilBy(this._stopper).onValue(() => {
64
- var unsilence = this._driver.getPageCommunicator().silenceGmailErrorsForAMoment();
65
- try {
66
- (0, _simulateKey.default)(bodyEl, 13, 0);
67
- } finally {
68
- unsilence();
69
- }
70
- });
71
- _kefir.default.merge([_kefir.default.fromEvents(document.body, 'mousedown'), _kefir.default.fromEvents(document.body, 'keydown')]).takeUntilBy(this.getStopper()).onValue(event => {
72
- const selection = document.getSelection();
73
- if (selection.rangeCount > 0 && bodyEl.contains(selection.anchorNode)) {
74
- this._lastBodySelectionRange = selection.getRangeAt(0);
75
- }
76
- });
77
- this._eventStream.plug((0, _makeMutationObserverChunkedStream.default)(bodyEl, {
78
- childList: true,
79
- subtree: true,
80
- characterData: true
81
- }).map(() => ({
82
- eventName: 'bodyChanged'
83
- })));
84
- }
85
- _kefir.default.fromEvents(this._element, 'closedProgrammatically').takeUntilBy(this._stopper).onValue(() => {
86
- this._closedProgrammatically = true;
87
- });
88
- this._draftID = this._driver.getPageCommunicator().getDraftIDForComposeView(this.getElement());
89
- this._ajaxInterceptStream = this._driver.getPageCommunicator().ajaxInterceptStream.takeUntilBy(this._stopper).filter(_ref => {
90
- let {
91
- draftID
92
- } = _ref;
93
- return draftID === this._draftID;
94
- });
95
- this._setupStreams();
96
- this.getEventStream().takeUntilBy(this._stopper).onValue(_ref2 => {
97
- let {
98
- eventName
99
- } = _ref2;
100
- if (eventName === 'presending') {
101
- this._isPresending = true;
102
- const sendCanceledStream = this.getEventStream().filter(_ref3 => {
103
- let {
104
- eventName
105
- } = _ref3;
106
- return eventName === 'sendCanceled';
107
- });
108
- this._sendingStream = _kefir.default.merge([_kefir.default.combine([this.getEventStream().filter(_ref4 => {
109
- let {
110
- eventName
111
- } = _ref4;
112
- return eventName === 'sending';
113
- }), this.getEventStream().filter(_ref5 => {
114
- let {
115
- eventName
116
- } = _ref5;
117
- return eventName === 'sent';
118
- })]), this._ajaxInterceptStream.filter(_ref6 => {
119
- let {
120
- type
121
- } = _ref6;
122
- return type === 'emailSendFailed';
123
- }), _kefir.default.later(60 * 1000).flatMap(() => _kefir.default.constantError(new Error('Timed out waiting for ComposeView send')))]).takeUntilBy(sendCanceledStream).takeUntilBy(this._stopper).take(1).takeErrors(1);
124
- this._sendingStream.onValue(() => {
125
- this._isPresending = false;
126
- }).onError(error => {
127
- this._driver.getLogger().error(error);
128
- });
129
- this._driver.getPageCommunicator().notifyEmailSending();
130
- if (!this._p.attributes.isInline) {
131
- // TODO make this code less fragile on slow machines/connections
132
- _kefir.default.later(5 * 1000).takeUntilBy(this.getEventStream().filter(_ref7 => {
133
- let {
134
- eventName
135
- } = _ref7;
136
- return ['sendCanceled', 'presending'].indexOf(eventName) !== -1;
137
- })).onValue(() => {
138
- // In cases where Inbox decides to cancel the send client-side,
139
- // we need to make sure we realize sending is not going to happen
140
- // and inform consumers who might be expecting a send.
141
- // The most common case for this is trying to send an email
142
- // with no recipients.
143
- if (document.contains(this._element)) {
144
- this._eventStream.emit({
145
- eventName: 'sendCanceled'
146
- });
147
- }
148
- });
149
- }
150
- } else if (eventName === 'sendCanceled') {
151
- this._isPresending = false;
152
- this._driver.getPageCommunicator().notifyEmailSendCanceled();
153
- }
154
- });
155
- (0, _handleComposeLinkChips.default)(this);
156
- const {
157
- fromPickerEmailSpan
158
- } = this._els;
159
- if (fromPickerEmailSpan) {
160
- this._eventStream.plug((0, _makeMutationObserverChunkedStream.default)(fromPickerEmailSpan, {
161
- childList: true,
162
- subtree: true,
163
- characterData: true
164
- }).map(() => ({
165
- eventName: 'fromContactChanged',
166
- data: {
167
- contact: this.getFromContact()
168
- }
169
- })));
170
- }
171
- const {
172
- minimizeBtnImage
173
- } = this._els;
174
- if (minimizeBtnImage) {
175
- const isMinimized = () => /_maximize_/.test(minimizeBtnImage.src);
176
- const minimizeButtonChanges = (0, _makeMutationObserverChunkedStream.default)(minimizeBtnImage, {
177
- attributes: true
178
- });
179
- minimizeButtonChanges.toProperty(() => null).takeUntilBy(this._stopper).onValue(() => {
180
- this._isMinimized = isMinimized();
181
- });
182
- this._eventStream.plug(minimizeButtonChanges.map(() => ({
183
- eventName: isMinimized() ? 'minimized' : 'restored'
184
- })));
185
- }
186
- const {
187
- toggleFullscreenButtonImage
188
- } = this._els;
189
- if (toggleFullscreenButtonImage) {
190
- const isFullscreenMode = () => !/_enter_full_screen/.test(toggleFullscreenButtonImage.src);
191
- const toggleButtonChanges = (0, _makeMutationObserverChunkedStream.default)(toggleFullscreenButtonImage, {
192
- attributes: true
193
- });
194
- toggleButtonChanges.toProperty(() => null).takeUntilBy(this._stopper).onValue(() => {
195
- this._isFullscreenMode = isFullscreenMode();
196
- });
197
- this._eventStream.plug(toggleButtonChanges.map(() => ({
198
- eventName: 'fullscreenChanged',
199
- data: {
200
- fullscreen: isFullscreenMode()
201
- }
202
- })));
203
- }
204
- }
205
- removedFromDOM() {
206
- // The element of an inline draft may be re-used with a new ID.
207
- this._element.removeAttribute('data-inboxsdk-draft-id');
208
- const cleanup = () => {
209
- this._eventStream.emit({
210
- eventName: 'destroy',
211
- data: {
212
- closedByInboxSDK: this._closedProgrammatically
213
- }
214
- });
215
- this._eventStream.end();
216
- this._stopper.destroy();
217
- };
218
- if (this._isPresending) {
219
- this._sendingStream && this._sendingStream.onEnd(cleanup);
220
- } else {
221
- cleanup();
222
- }
223
- }
224
- getEventStream() {
225
- return this._eventStream;
226
- }
227
- getStopper() {
228
- return this._stopper;
229
- }
230
- getElement() {
231
- return this._element;
232
- }
233
- // Call this whenever we change the body directly by mucking with the
234
- // elements.
235
- _informBodyChanged() {
236
- if (this._els.bodyPlaceholder) {
237
- if (this._els.body && this._els.body.textContent.length > 0) {
238
- this._els.bodyPlaceholder.style.display = 'none';
239
- } else {
240
- // To do this properly, we have to re-add whatever the visible class is.
241
- // It's a bit of work for a pretty minor detail (making the placeholder
242
- // re-appear immediately when SDK methods are used to clear a compose).
243
- //this._els.bodyPlaceholder.style.display = "";
244
- }
245
- }
246
- this._queueDraftSave();
247
- }
248
- _getAddressChangesStream() {
249
- const {
250
- toInput,
251
- ccInput,
252
- bccInput
253
- } = this._els;
254
- function makeChangesStream(prefix, input, cb) {
255
- if (!input) return _kefir.default.never();
256
- const contactArrayStream = (0, _makeMutationObserverChunkedStream.default)(input.parentElement, {
257
- childList: true,
258
- attributes: true,
259
- subtree: true
260
- }).merge(_kefir.default.later(0)).map(cb);
261
- return (0, _arrayToLifetimes.default)(contactArrayStream, c => c.emailAddress).flatMap(_ref8 => {
262
- let {
263
- el,
264
- removalStream
265
- } = _ref8;
266
- return _kefir.default.constant({
267
- eventName: prefix + 'ContactAdded',
268
- data: {
269
- contact: el
270
- }
271
- }).merge(removalStream.map(() => ({
272
- eventName: prefix + 'ContactRemoved',
273
- data: {
274
- contact: el
275
- }
276
- })));
277
- });
278
- }
279
- return _kefir.default.merge([makeChangesStream('to', toInput, () => this.getToRecipients()), makeChangesStream('cc', ccInput, () => this.getCcRecipients()), makeChangesStream('bcc', bccInput, () => this.getBccRecipients())]).takeUntilBy(this._stopper);
280
- }
281
- _setupStreams() {
282
- this._eventStream.plug(this._getAddressChangesStream());
283
- this._eventStream.plug((0, _getPresendingStream.default)({
284
- element: this.getElement(),
285
- sendButton: this.getSendButton()
286
- }));
287
- this._eventStream.plug((0, _getDiscardStream.default)({
288
- element: this.getElement(),
289
- discardButton: this.getDiscardButton()
290
- }));
291
- this._eventStream.plug(_kefir.default.fromEvents(this.getElement(), 'inboxSDKsendCanceled').map(() => ({
292
- eventName: 'sendCanceled'
293
- })));
294
- this._eventStream.plug(_kefir.default.fromEvents(this.getElement(), 'inboxSDKdiscardCanceled').map(() => ({
295
- eventName: 'discardCanceled'
296
- })));
297
- this._eventStream.plug(this._ajaxInterceptStream.filter(_ref9 => {
298
- let {
299
- type
300
- } = _ref9;
301
- return type === 'emailSending';
302
- }).map(() => ({
303
- eventName: 'sending'
304
- })));
305
- this._eventStream.plug(this._ajaxInterceptStream.filter(_ref10 => {
306
- let {
307
- type
308
- } = _ref10;
309
- return type === 'emailSent';
310
- }).map(event => {
311
- const data = {
312
- getThreadID: () => (0, _getGmailThreadIdForRfcMessageId.default)(this._driver, event.rfcID),
313
- getMessageID: () => this._driver.getGmailMessageIdForSyncMessageId(`msg-a:${event.draftID}`)
314
- };
315
- ['gmailThreadId', 'gmailMessageId', 'threadID', 'messageID'].forEach(name => {
316
- Object.defineProperty(data, name, {
317
- get: () => {
318
- this._driver.getLogger().deprecationWarning(`ComposeView sent event.${name}`, 'ComposeView sent event.getThreadID() or event.getMessageID()');
319
- throw new Error('Not supported');
320
- }
321
- });
322
- });
323
- return {
324
- eventName: 'sent',
325
- data
326
- };
327
- }));
328
- }
329
- getFromContact() {
330
- const {
331
- fromPickerEmailSpan
332
- } = this._els;
333
- if (!fromPickerEmailSpan) {
334
- return this._driver.getUserContact();
335
- }
336
- const email = fromPickerEmailSpan.textContent;
337
- const contact = (0, _find.default)(this.getFromContactChoices(), c => c.emailAddress === email);
338
- if (!contact) {
339
- throw new Error('Failed to find from contact');
340
- }
341
- return contact;
342
- }
343
- getFromContactChoices() {
344
- if (this._p.attributes.isInline) throw new Error("Can't get from values of inline compose");
345
- if (cachedFromContacts) {
346
- return cachedFromContacts;
347
- }
348
- const {
349
- fromPicker
350
- } = this._els;
351
- if (!fromPicker) {
352
- cachedFromContacts = [this._driver.getUserContact()];
353
- return cachedFromContacts;
354
- }
355
- const startActiveElement = document.activeElement;
356
- const grandUncle = this._element.parentElement.parentElement.firstElementChild;
357
- let fromOptionEls = grandUncle.querySelectorAll('li[role=menuitem][data-jsaction*=".switch_custom_from"]');
358
- const needToOpenMenu = fromOptionEls.length === 0;
359
- try {
360
- if (needToOpenMenu) {
361
- (0, _simulateMouseEvent.simulateClick)(fromPicker);
362
- fromOptionEls = grandUncle.querySelectorAll('li[role=menuitem][data-jsaction*=".switch_custom_from"]');
363
- }
364
- if (fromOptionEls.length === 0) {
365
- cachedFromContacts = [this._driver.getUserContact()];
366
- return cachedFromContacts;
367
- }
368
- cachedFromContacts = Array.from(fromOptionEls).map(el => ({
369
- name: (0, _querySelectorOrFail.default)(el, 'span[title]').title,
370
- emailAddress: (0, _querySelectorOrFail.default)(el, 'span:not([title])').textContent
371
- }));
372
- } finally {
373
- if (needToOpenMenu) {
374
- (0, _simulateMouseEvent.simulateClick)(document.body);
375
- }
376
- if (startActiveElement) {
377
- startActiveElement.focus();
378
- }
379
- }
380
- return cachedFromContacts;
381
- }
382
- setFromEmail(email) {
383
- if (this._p.attributes.isInline) throw new Error("Can't set from value of inline compose");
384
- if (this.getFromContact().emailAddress === email) return;
385
- const {
386
- fromPicker
387
- } = this._els;
388
- if (!fromPicker) throw new Error('from picker element not found');
389
- const startActiveElement = document.activeElement;
390
- const grandUncle = this._element.parentElement.parentElement.firstElementChild;
391
- let fromOptionEls = grandUncle.querySelectorAll('li[role=menuitem][data-jsaction*=".switch_custom_from"]');
392
- const needToOpenMenu = fromOptionEls.length === 0;
393
- try {
394
- if (needToOpenMenu) {
395
- (0, _simulateMouseEvent.simulateClick)(fromPicker);
396
- fromOptionEls = grandUncle.querySelectorAll('li[role=menuitem][data-jsaction*=".switch_custom_from"]');
397
- }
398
- const fromOptionEl = (0, _find.default)(fromOptionEls, el => el.querySelector('span:not([title])').textContent === email);
399
- if (!fromOptionEl) {
400
- throw new Error('Failed to find from contact to set');
401
- }
402
- (0, _simulateMouseEvent.simulateClick)(fromOptionEl);
403
- } finally {
404
- if (needToOpenMenu) {
405
- (0, _simulateMouseEvent.simulateClick)(fromPicker);
406
- }
407
- if (startActiveElement) {
408
- startActiveElement.focus();
409
- }
410
- }
411
- }
412
- focus() {
413
- if (!this._els.body) throw new Error('Compose View missing body element');
414
- this._els.body.focus();
415
- const selection = document.getSelection();
416
- const lastSelectionRange = this._lastBodySelectionRange;
417
- if (lastSelectionRange && selection) {
418
- selection.removeAllRanges();
419
- selection.addRange(lastSelectionRange);
420
- }
421
- }
422
- insertBodyTextAtCursor(text) {
423
- return this.insertBodyHTMLAtCursor((0, _escape.default)(text).replace(/\n/g, '<br>'));
424
- }
425
- insertBodyHTMLAtCursor(html) {
426
- var retVal = (0, _insertHtmlAtCursor.default)(this.getBodyElement(), html, this._lastBodySelectionRange);
427
- this._informBodyChanged();
428
- return retVal;
429
- }
430
- insertLinkIntoBody(text, href) {
431
- var html = (0, _autoHtml.default)`<a href="${href}">${text}</a>`;
432
- return this.insertBodyHTMLAtCursor(html);
433
- }
434
- insertLinkChipIntoBody(options) {
435
- var retval = (0, _insertLinkChipIntoBody.default)(this, options);
436
- this._informBodyChanged();
437
- return retval;
438
- }
439
- setBodyHTML(html) {
440
- if (!this._els.body) throw new Error('Compose View missing body element');
441
- this._els.body.innerHTML = html;
442
- this._informBodyChanged();
443
- }
444
- setBodyText(text) {
445
- if (!this._els.body) throw new Error('Compose View missing body element');
446
- this._els.body.textContent = text;
447
- this._informBodyChanged();
448
- }
449
- _setRecipients(inputElement, emails) {
450
- const chipContainer = inputElement.parentElement;
451
- if (!chipContainer) throw new Error('Should not happen');
452
- const startActiveElement = document.activeElement;
453
-
454
- // Inbox re-uses the chip elements as some are removed, so finding all the
455
- // button elements at once and then clicking on each of them wouldn't work.
456
- const removeButtonCount = chipContainer.querySelectorAll('[role=button][jsaction*="remove_chip"]').length;
457
- for (let i = 0; i < removeButtonCount; i++) {
458
- const removeButton = chipContainer.querySelector('[role=button][jsaction*="remove_chip"]');
459
- if (!removeButton) break;
460
- (0, _simulateMouseEvent.simulateClick)(removeButton);
461
- }
462
- emails.forEach(email => {
463
- inputElement.value = email;
464
- inputElement.dispatchEvent(new window.FocusEvent('blur'));
465
- });
466
- if (startActiveElement) {
467
- startActiveElement.focus();
468
- }
469
- }
470
- setToRecipients(emails) {
471
- if (this._p.attributes.isInline) throw new Error("Can't set recipients of inline compose");
472
- const {
473
- toInput
474
- } = this._els;
475
- if (!toInput) throw new Error('Compose View missing recipient input');
476
- this._setRecipients(toInput, emails);
477
- }
478
- setCcRecipients(emails) {
479
- if (this._p.attributes.isInline) throw new Error("Can't set recipients of inline compose");
480
- const {
481
- ccInput
482
- } = this._els;
483
- if (!ccInput) throw new Error('Compose View missing recipient input');
484
- this._setRecipients(ccInput, emails);
485
- const {
486
- toggleCcBccButton
487
- } = this._els;
488
- if (emails.length && toggleCcBccButton && toggleCcBccButton.style.display !== 'none') {
489
- (0, _simulateMouseEvent.simulateClick)(toggleCcBccButton);
490
- }
491
- }
492
- setBccRecipients(emails) {
493
- if (this._p.attributes.isInline) throw new Error("Can't set recipients of inline compose");
494
- const {
495
- bccInput
496
- } = this._els;
497
- if (!bccInput) throw new Error('Compose View missing recipient input');
498
- this._setRecipients(bccInput, emails);
499
- const {
500
- toggleCcBccButton
501
- } = this._els;
502
- if (emails.length && toggleCcBccButton && toggleCcBccButton.style.display !== 'none') {
503
- (0, _simulateMouseEvent.simulateClick)(toggleCcBccButton);
504
- }
505
- }
506
- replaceSendButton(el) {
507
- const {
508
- sendBtn
509
- } = this._p.elements;
510
- if (!sendBtn) throw new Error('Could not locate send button');
511
- sendBtn.style.display = 'none';
512
- const container = document.createElement('div');
513
- container.classList.add('inboxsdk__compose_customSendContainer');
514
- container.appendChild(el);
515
- this._element.setAttribute('data-inboxsdk-send-replaced', '');
516
- sendBtn.insertAdjacentElement('afterend', container);
517
- const removalStopper = (0, _kefirStopper.default)();
518
- return () => {
519
- removalStopper.destroy();
520
- container.remove();
521
- this._element.removeAttribute('data-inboxsdk-send-replaced');
522
- sendBtn.style.display = '';
523
- };
524
- }
525
- hideDiscardButton() {
526
- const {
527
- discardBtn
528
- } = this._p.elements;
529
- if (!discardBtn) throw new Error('Could not locate discard button');
530
- const discardDivider = discardBtn.previousElementSibling;
531
- if (!(discardDivider instanceof HTMLElement)) {
532
- throw new Error('Could not locate discard button divider');
533
- }
534
- discardBtn.style.display = 'none';
535
- discardDivider.style.display = 'none';
536
- return () => {
537
- discardBtn.style.display = '';
538
- discardDivider.style.display = '';
539
- };
540
- }
541
- close() {
542
- if (this._p.attributes.isInline) {
543
- throw new Error('Not implemented for inline compose');
544
- }
545
- const {
546
- closeBtn
547
- } = this._els;
548
- if (closeBtn) {
549
- this._element.dispatchEvent(new CustomEvent('closedProgrammatically', {
550
- bubbles: false,
551
- cancelable: false,
552
- detail: null
553
- }));
554
- (0, _simulateMouseEvent.simulateClick)(closeBtn);
555
- }
556
- }
557
- send(_ref11) {
558
- let {
559
- sendAndArchive
560
- } = _ref11;
561
- if (!this._els.sendBtn) throw new Error('Compose View missing send element');
562
- (0, _simulateMouseEvent.simulateClick)(this._els.sendBtn);
563
- }
564
- discard() {
565
- (0, _simulateMouseEvent.simulateClick)(this.getDiscardButton());
566
- }
567
- setMinimized(minimized) {
568
- if (minimized !== this.isMinimized()) {
569
- if (this._p.attributes.isInline) throw new Error('Not implemented for inline compose views');
570
- const {
571
- minimizeBtn
572
- } = this._els;
573
- if (!minimizeBtn) throw new Error('Could not find minimize button');
574
- minimizeBtn.click();
575
- }
576
- }
577
- setFullscreen(fullscreen) {
578
- if (fullscreen !== this.isFullscreen()) {
579
- if (this._p.attributes.isInline) throw new Error('Not implemented for inline compose views');
580
- const {
581
- toggleFullscreenButton
582
- } = this._els;
583
- if (!toggleFullscreenButton) throw new Error('Could not find fullscreen button');
584
- toggleFullscreenButton.click();
585
- }
586
- }
587
- setTitleBarColor(color) {
588
- const {
589
- isInline
590
- } = this._p.attributes;
591
- if (isInline) throw new Error('Cannot set title bar of inline compose');
592
- const {
593
- titleBar
594
- } = this._p.elements;
595
- if (!titleBar) throw new Error('Could not locate compose title bar');
596
- titleBar.style.backgroundColor = color;
597
- return () => {
598
- titleBar.style.backgroundColor = '';
599
- };
600
- }
601
- setTitleBarText(text) {
602
- throw new Error('Not supported in Inbox');
603
- }
604
- addButton(buttonDescriptor, groupOrderHint, extraOnClickOptions) {
605
- var buttonViewController = new _inboxComposeButtonView.default(this, buttonDescriptor, groupOrderHint, extraOnClickOptions);
606
- return Promise.resolve({
607
- buttonViewController,
608
- buttonDescriptor: {}
609
- });
610
- }
611
- getModifierButtonContainer() {
612
- if (this._modifierButtonContainer) {
613
- return this._modifierButtonContainer;
614
- }
615
- this._modifierButtonContainer = this._element.querySelector('.inboxsdk__compose_actionToolbar');
616
- if (this._modifierButtonContainer) {
617
- return this._modifierButtonContainer;
618
- }
619
- const div = document.createElement('div');
620
- div.className = 'inboxsdk__compose_actionToolbar';
621
- if (!this._p.attributes.isInline) {
622
- const hiddenAttachBtn = this._els.attachBtn ? this._els.attachBtn.nextSibling : null;
623
- if (hiddenAttachBtn instanceof HTMLElement && hiddenAttachBtn.style.position === 'absolute') {
624
- hiddenAttachBtn.style.display = 'none';
625
- } else {
626
- this._driver.getLogger().error(new Error("Didn't find hiddenAttachBtn"));
627
- }
628
- }
629
- const sendBtn = this._els.sendBtn;
630
- if (!sendBtn) throw new Error('Compose View missing send element');
631
- const sendParent = sendBtn.parentElement;
632
- if (!sendParent) throw new Error('Could not find send button parent');
633
- sendParent.insertBefore(div, sendBtn.nextSibling);
634
- this._modifierButtonContainer = div;
635
- return div;
636
- }
637
- addRecipientRow(options) {
638
- if (this._p.attributes.isInline) throw new Error('Cannot add recipient rows to inline compose views');
639
- return (0, _addRecipientRow.default)(this, options);
640
- }
641
- forceRecipientRowsOpen() {
642
- console.warn('ComposeView.forceRecipientRowsOpen() is a no-op in Inbox');
643
- return () => {};
644
- }
645
- hideNativeRecipientRows() {
646
- if (this._p.attributes.isInline) throw new Error('Cannot hide recipient rows on inline compose views');
647
- const rows = [this.getToRow(), this.getCCRow(), this.getBCCRow()];
648
- rows.forEach(row => {
649
- row.classList.add('inboxsdk__compose_forceRecipientRowHidden');
650
- });
651
- return () => {
652
- rows.forEach(row => {
653
- row.classList.remove('inboxsdk__compose_forceRecipientRowHidden');
654
- });
655
- };
656
- }
657
- hideRecipientArea() {
658
- throw new Error('Not implemented');
659
- }
660
- addOuterSidebar(options) {
661
- throw new Error('Not implemented');
662
- }
663
- addInnerSidebar(options) {
664
- throw new Error('Not implemented');
665
- }
666
- addComposeNotice(composeNoticeDescriptor) {
667
- throw new Error('Not implemented');
668
- }
669
- addStatusBar(options) {
670
- throw new Error('Not implemented');
671
- }
672
- hideNativeStatusBar() {
673
- throw new Error('Not Implemented');
674
- }
675
- isForward() {
676
- throw new Error('Not Implemented');
677
- }
678
- isReply() {
679
- if (this._p.attributes.isInline) return true;
680
- throw new Error('Not implemented');
681
- }
682
- isInlineReplyForm() {
683
- return this._p.attributes.isInline;
684
- }
685
- popOut() {
686
- if (!this._p.attributes.isInline) {
687
- throw new Error('Can only pop out inline reply compose views');
688
- }
689
- if (!this._els.popOutBtn) {
690
- throw new Error('Should not happen');
691
- }
692
- (0, _simulateMouseEvent.simulateClick)(this._els.popOutBtn);
693
- }
694
- registerRequestModifier(modifier) {
695
- throw new Error('Not implemented');
696
- }
697
- attachFiles(files) {
698
- throw new Error('Not implemented');
699
- }
700
- attachInlineFiles(files) {
701
- throw new Error('Not implemented');
702
- }
703
- isFullscreen() {
704
- return this._isFullscreenMode;
705
- }
706
- isMinimized() {
707
- return this._isMinimized;
708
- }
709
- getSubjectInput() {
710
- return this._els.subject;
711
- }
712
- getMetadataFormElement() {
713
- throw new Error('Not supported in Inbox.');
714
- }
715
- getToRow() {
716
- const {
717
- toRow
718
- } = this._els;
719
- if (!toRow) throw new Error('Could not locate To row');
720
- return toRow;
721
- }
722
- getCCRow() {
723
- const {
724
- ccRow
725
- } = this._els;
726
- if (!ccRow) throw new Error('Could not locate CC row');
727
- return ccRow;
728
- }
729
- getBCCRow() {
730
- const {
731
- bccRow
732
- } = this._els;
733
- if (!bccRow) throw new Error('Could not locate BCC row');
734
- return bccRow;
735
- }
736
- getBodyElement() {
737
- if (!this._els.body) throw new Error('Compose View missing body element');
738
- return this._els.body;
739
- }
740
- getHTMLContent() {
741
- return this.getBodyElement().innerHTML;
742
- }
743
- getTextContent() {
744
- return this.getBodyElement().textContent;
745
- }
746
- getSelectedBodyHTML() {
747
- return (0, _getSelection.getSelectedHTMLInElement)(this.getBodyElement(), this._lastBodySelectionRange);
748
- }
749
- getSelectedBodyText() {
750
- return (0, _getSelection.getSelectedTextInElement)(this.getBodyElement(), this._lastBodySelectionRange);
751
- }
752
- getSubject() {
753
- const {
754
- subject
755
- } = this._els;
756
- if (!subject) {
757
- throw new Error('InboxSDK: Could not locate subject field');
758
- }
759
- return subject.value;
760
- }
761
- setSubject(text) {
762
- if (this._p.attributes.isInline) {
763
- throw new Error('setSubject is not supported for inline compose views');
764
- }
765
- if (!this._els.subject) {
766
- throw new Error('InboxSDK: Could not locate subject field');
767
- }
768
- this._els.subject.value = text;
769
- }
770
- _getRecipients(inputElement) {
771
- const chipContainer = inputElement.parentElement;
772
- if (!chipContainer) throw new Error('Should not happen');
773
- return Array.from(chipContainer.children).filter(el => el.nodeName === 'DIV' && el.hasAttribute('email') && el.style.display !== 'none').map(chip => ({
774
- emailAddress: chip.getAttribute('email') || '',
775
- name: chip.textContent
776
- }));
777
- }
778
- getToRecipients() {
779
- if (this._p.attributes.isInline) throw new Error("Can't get recipients of inline compose");
780
- const {
781
- toInput
782
- } = this._els;
783
- if (!toInput) throw new Error('Compose View missing recipient input');
784
- return this._getRecipients(toInput);
785
- }
786
- getCcRecipients() {
787
- if (this._p.attributes.isInline) throw new Error("Can't get recipients of inline compose");
788
- const {
789
- ccInput
790
- } = this._els;
791
- if (!ccInput) throw new Error('Compose View missing recipient input');
792
- return this._getRecipients(ccInput);
793
- }
794
- getBccRecipients() {
795
- if (this._p.attributes.isInline) throw new Error("Can't get recipients of inline compose");
796
- const {
797
- bccInput
798
- } = this._els;
799
- if (!bccInput) throw new Error('Compose View missing recipient input');
800
- return this._getRecipients(bccInput);
801
- }
802
- getComposeID() {
803
- throw new Error('This method was discontinued');
804
- }
805
- getInitialMessageID() {
806
- throw new Error('composeView.getInitialMessageID is not implemented in Inbox');
807
- }
808
- getMessageID() {
809
- throw new Error('composeView.getMessageID is not implemented in Inbox');
810
- }
811
- getThreadID() {
812
- // TODO
813
- return null;
814
- }
815
- getCurrentDraftID() {
816
- return Promise.resolve(this._draftID);
817
- }
818
- getDraftID() {
819
- return Promise.resolve(this._draftID);
820
- }
821
- addTooltipToButton(buttonViewController, buttonDescriptor, tooltipDescriptor) {
822
- buttonViewController.showTooltip(tooltipDescriptor);
823
- }
824
- closeButtonTooltip(buttonViewController) {
825
- buttonViewController.closeTooltip();
826
- }
827
- getDiscardButton() {
828
- if (!this._els.discardBtn) throw new Error('Compose View missing discard button');
829
- return this._els.discardBtn;
830
- }
831
- getSendButton() {
832
- if (!this._els.sendBtn) throw new Error('Compose View missing send button');
833
- return this._els.sendBtn;
834
- }
835
- ensureAppButtonToolbarsAreClosed() {
836
- //TODO
837
- }
838
- ensureFormattingToolbarIsHidden() {
839
- //TODO
840
- }
841
- }
842
- var _default = (0, _ud.defn)(module, InboxComposeView);
843
- exports.default = _default;