@inboxsdk/core 1.1.8 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/inboxsdk.js +8 -8
  2. package/inboxsdk.js.map +1 -1
  3. package/package.json +1 -1
  4. package/pageWorld.js +1 -1
  5. package/pageWorld.js.map +1 -1
  6. package/src/injected-js/gmail/setup-gmail-interceptor.d.ts.map +1 -1
  7. package/src/injected-js/gmail/setup-gmail-interceptor.js +2 -5
  8. package/src/injected-js/gmail/thread-identifier/index.d.ts.map +1 -1
  9. package/src/injected-js/gmail/thread-identifier/index.js +1 -2
  10. package/src/injected-js/message-metadata-holder.d.ts.map +1 -1
  11. package/src/injected-js/setup-data-exposer.d.ts.map +1 -1
  12. package/src/injected-js/setup-data-exposer.js +0 -1
  13. package/src/injected-js/setup-error-silencer.d.ts.map +1 -1
  14. package/src/injected-js/setup-error-silencer.js +2 -3
  15. package/src/injected-js/xhr-helper.d.ts.map +1 -1
  16. package/src/injected-js/xhr-helper.js +27 -57
  17. package/src/injected-js/xhr-proxy-factory.d.ts.map +1 -1
  18. package/src/injected-js/xhr-proxy-factory.js +1 -2
  19. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.d.ts.map +1 -1
  20. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/keyboard-shortcut-help-modifier.js +1 -2
  21. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.d.ts.map +1 -1
  22. package/src/platform-implementation-js/dom-driver/gmail/gmail-driver/track-events.js +0 -1
  23. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-global-icon-area.d.ts.map +1 -1
  24. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.d.ts.map +1 -1
  25. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/add-companion-thread-icon-area.js +0 -1
  26. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-sidebar-view/primary/index.d.ts.map +1 -1
  27. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.d.ts.map +1 -1
  28. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-area-view.js +1 -1
  29. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.d.ts.map +1 -1
  30. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-attachment-card-view.js +0 -1
  31. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts +1 -1
  32. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.d.ts.map +1 -1
  33. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-collapsible-section-view.js +4 -5
  34. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.d.ts.map +1 -1
  35. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-button.js +1 -1
  36. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-tooltip-to-button.d.ts.map +1 -1
  37. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.d.ts.map +1 -1
  38. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/get-address-changes-stream.js +0 -1
  39. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/insert-link-into-body.d.ts.map +1 -1
  40. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/manage-button-grouping.d.ts.map +1 -1
  41. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.d.ts.map +1 -1
  42. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/monitor-selection-range.js +1 -2
  43. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.d.ts.map +1 -1
  44. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/size-fixer.js +1 -2
  45. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.d.ts.map +1 -1
  46. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view.js +1 -3
  47. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.d.ts.map +1 -1
  48. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-message-view.js +3 -4
  49. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.d.ts +2 -1
  50. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.d.ts.map +1 -1
  51. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-route-view/gmail-route-view.js +2 -2
  52. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.d.ts.map +1 -1
  53. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-row-list-view.js +0 -1
  54. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.d.ts.map +1 -1
  55. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-row-view.js +0 -1
  56. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts +0 -2
  57. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.d.ts.map +1 -1
  58. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-view.js +0 -3
  59. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.d.ts.map +1 -1
  60. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-toolbar-view.js +3 -4
  61. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.d.ts.map +1 -1
  62. package/src/platform-implementation-js/dom-driver/gmail/views/native-gmail-nav-item-view.js +0 -1
  63. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts +2 -2
  64. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.d.ts.map +1 -1
  65. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-accessory-button-view.js +2 -3
  66. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts +2 -2
  67. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.d.ts.map +1 -1
  68. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/create-parent-accessory-button-view.js +2 -3
  69. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts +2 -2
  70. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.d.ts.map +1 -1
  71. package/src/platform-implementation-js/dom-driver/gmail/widgets/buttons/modal-button-view.js +2 -3
  72. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.d.ts.map +1 -1
  73. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-modal-view-driver.js +2 -4
  74. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.d.ts.map +1 -1
  75. package/src/platform-implementation-js/dom-driver/gmail/widgets/gmail-tooltip-view.js +7 -14
  76. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.d.ts.map +1 -1
  77. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-backdrop.js +1 -2
  78. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.d.ts.map +1 -1
  79. package/src/platform-implementation-js/dom-driver/inbox/views/inbox-drawer-view.js +1 -2
  80. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.d.ts.map +1 -1
  81. package/src/platform-implementation-js/driver-common/sidebar/AppSidebar.js +0 -1
  82. package/src/platform-implementation-js/driver-common/sidebar/ContentPanelViewDriver.d.ts.map +1 -1
  83. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts +2 -1
  84. package/src/platform-implementation-js/driver-interfaces/compose-view-driver.d.ts.map +1 -1
  85. package/src/platform-implementation-js/driver-interfaces/driver.d.ts +2 -1
  86. package/src/platform-implementation-js/driver-interfaces/driver.d.ts.map +1 -1
  87. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.d.ts.map +1 -1
  88. package/src/platform-implementation-js/lib/dom/insert-html-at-cursor.js +1 -2
  89. package/src/platform-implementation-js/lib/handle-compose-link-chips.d.ts.map +1 -1
  90. package/src/platform-implementation-js/lib/handle-compose-link-chips.js +1 -2
  91. package/src/platform-implementation-js/lib/parseParamsFromRouteID.d.ts.map +1 -1
  92. package/src/platform-implementation-js/lib/parseParamsFromRouteID.js +1 -3
  93. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts +1 -1
  94. package/src/platform-implementation-js/lib/safe-event-emitter.d.ts.map +1 -1
  95. package/src/platform-implementation-js/lib/safe-event-emitter.js +1 -2
  96. package/src/platform-implementation-js/namespaces/app-menu.d.ts +49 -3
  97. package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -1
  98. package/src/platform-implementation-js/namespaces/app-menu.js +16 -2
  99. package/src/platform-implementation-js/namespaces/compose.d.ts.map +1 -1
  100. package/src/platform-implementation-js/namespaces/compose.js +0 -1
  101. package/src/platform-implementation-js/namespaces/conversations.d.ts.map +1 -1
  102. package/src/platform-implementation-js/namespaces/conversations.js +4 -6
  103. package/src/platform-implementation-js/namespaces/global.d.ts.map +1 -1
  104. package/src/platform-implementation-js/namespaces/global.js +0 -1
  105. package/src/platform-implementation-js/namespaces/toolbars.d.ts.map +1 -1
  106. package/src/platform-implementation-js/namespaces/toolbars.js +1 -2
  107. package/src/platform-implementation-js/platform-implementation.d.ts.map +1 -1
  108. package/src/platform-implementation-js/platform-implementation.js +1 -12
  109. package/src/platform-implementation-js/views/app-menu-item-view.d.ts +27 -1
  110. package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +1 -1
  111. package/src/platform-implementation-js/views/app-menu-item-view.js +18 -1
  112. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts +20 -0
  113. package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +1 -1
  114. package/src/platform-implementation-js/views/collapsible-panel-view.js +14 -0
  115. package/src/platform-implementation-js/views/compose-view.d.ts +4 -4
  116. package/src/platform-implementation-js/views/compose-view.d.ts.map +1 -1
  117. package/src/platform-implementation-js/views/content-panel-view.d.ts.map +1 -1
  118. package/src/platform-implementation-js/views/conversations/attachment-card-view.d.ts.map +1 -1
  119. package/src/platform-implementation-js/views/conversations/custom-message-view.d.ts.map +1 -1
  120. package/src/platform-implementation-js/views/conversations/message-view.d.ts.map +1 -1
  121. package/src/platform-implementation-js/views/conversations/message-view.js +2 -4
  122. package/src/platform-implementation-js/views/native-nav-item-view.d.ts.map +1 -1
  123. package/src/platform-implementation-js/views/nav-item-view.d.ts.map +1 -1
  124. package/src/platform-implementation-js/widgets/drawer-view.d.ts.map +1 -1
  125. package/src/platform-implementation-js/widgets/drawer-view.js +0 -1
  126. package/src/platform-implementation-js/widgets/modal-view.d.ts +1 -1
  127. package/src/platform-implementation-js/widgets/modal-view.d.ts.map +1 -1
  128. package/src/platform-implementation-js/widgets/modal-view.js +1 -2
  129. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.d.ts +0 -8
  130. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.d.ts.map +0 -1
  131. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-inner-sidebar.js +0 -20
  132. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.d.ts +0 -8
  133. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.d.ts.map +0 -1
  134. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-compose-view/add-outer-sidebar.js +0 -25
  135. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.d.ts +0 -5
  136. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.d.ts.map +0 -1
  137. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view/add-icon-area.js +0 -108
  138. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.d.ts +0 -18
  139. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.d.ts.map +0 -1
  140. package/src/platform-implementation-js/dom-driver/gmail/views/gmail-thread-sidebar-view.js +0 -555
  141. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.d.ts +0 -2
  142. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.d.ts.map +0 -1
  143. package/src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.js +0 -6
@@ -1,555 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- /*
3
- This is used for PRE MATERIAL GMAIL, when sidebar only existed on threads.
4
- If you're reading this in the future, do you remember a time when there wasn't a global sidebar?
5
- It was a strange world, can you believe who the President of the United States was?
6
-
7
- */
8
- import findIndex from 'lodash/findIndex';
9
- import asap from 'asap';
10
- import autoHtml from 'auto-html';
11
- import * as Kefir from 'kefir';
12
- import kefirStopper from 'kefir-stopper';
13
- import kefirBus from 'kefir-bus';
14
- import React from 'react';
15
- import ReactDOM from 'react-dom';
16
- import findParent from '../../../../common/find-parent';
17
- import OrderManager from 'order-manager';
18
- import idMap from '../../../lib/idMap';
19
- import incrementName from '../../../lib/incrementName';
20
- import querySelector from '../../../lib/dom/querySelectorOrFail';
21
- import makeMutationObserverChunkedStream from '../../../lib/dom/make-mutation-observer-chunked-stream';
22
- import makeElementChildStream from '../../../lib/dom/make-element-child-stream';
23
- import { simulateClick } from '../../../lib/dom/simulate-mouse-event';
24
- import fakeWindowResize from '../../../lib/fake-window-resize';
25
- import AppSidebar from '../../../driver-common/sidebar/AppSidebar';
26
- import ContentPanelViewDriver from '../../../driver-common/sidebar/ContentPanelViewDriver';
27
- import GmailElementGetter from '../gmail-element-getter';
28
- import addIconArea from './gmail-thread-sidebar-view/add-icon-area';
29
- import addToIconArea from './gmail-app-sidebar-view/primary/add-to-icon-area';
30
- import cx from 'classnames';
31
- const ADD_ON_SIDEBAR_CONTENT_SELECTOR = '.J-KU-Jz';
32
- const ACTIVE_ADD_ON_ICON_SELECTOR = '.J-KU-KO';
33
- import { sidebarWaitingPlatformSelector, sidebarWaitingPlatformClassName, } from '../../../driver-common/sidebar/constants';
34
- class GmailAppSidebarView {
35
- _stopper = kefirStopper();
36
- _driver;
37
- _instanceId;
38
- constructor(driver, sidebarContainerEl, addonSidebarElement, widthManager) {
39
- this._driver = driver;
40
- // We need to be able to cooperate with other apps/extensions that are
41
- // sharing the app sidebar. We store some properties as attributes in the
42
- // shared DOM instead of as class properties; class properties are mostly
43
- // restricted to being used for references to DOM nodes. When
44
- // GmailAppSidebarView is instantiated, we check the element for an
45
- // attribute to see whether a previous extension's GmailAppSidebarView has
46
- // already set up the sidebar or not.
47
- const idElement = addonSidebarElement || sidebarContainerEl;
48
- if (!idElement)
49
- throw new Error('should not happen');
50
- const instanceId = idElement.getAttribute('data-sdk-sidebar-instance-id');
51
- if (instanceId != null) {
52
- this._instanceId = instanceId;
53
- }
54
- else {
55
- this._createElement(sidebarContainerEl, addonSidebarElement, widthManager);
56
- }
57
- }
58
- destroy() {
59
- this._stopper.destroy();
60
- }
61
- getStopper() {
62
- return this._stopper;
63
- }
64
- // This value controls whether the app sidebar should automatically open
65
- // itself when available when the chat sidebar isn't present. It's only set
66
- // if the user interacts with the app sidebar button.
67
- _getShouldAppSidebarOpen() {
68
- return (global.localStorage.getItem('inboxsdk__app_sidebar_should_open') !==
69
- 'false');
70
- }
71
- _setShouldAppSidebarOpen(open) {
72
- try {
73
- global.localStorage.setItem('inboxsdk__app_sidebar_should_open', String(open));
74
- }
75
- catch (err) {
76
- console.error('error saving', err);
77
- }
78
- }
79
- _createElement(_sidebarContainerEl, _addonSidebarContainerEl, widthManager) {
80
- let container, iconArea;
81
- let component;
82
- this._instanceId = `${Date.now()}-${Math.random()}`;
83
- {
84
- const idElement = _addonSidebarContainerEl || _sidebarContainerEl;
85
- if (!idElement)
86
- throw new Error('should not happen');
87
- idElement.setAttribute('data-sdk-sidebar-instance-id', this._instanceId);
88
- this._stopper.onValue(() => {
89
- idElement.removeAttribute('data-sdk-sidebar-instance-id');
90
- });
91
- }
92
- const el = document.createElement('div');
93
- el.className = idMap('app_sidebar_container');
94
- const buttonContainers = new Map();
95
- let activatedWhileLoading = false;
96
- let contentContainer;
97
- let usedAddonsSidebar = false;
98
- const updateHighlightedAppIconBus = kefirBus();
99
- this._stopper.onEnd(() => {
100
- updateHighlightedAppIconBus.end();
101
- });
102
- if (_addonSidebarContainerEl) {
103
- const mainContentBodyContainerElement = GmailElementGetter.getMainContentBodyContainerElement();
104
- if (mainContentBodyContainerElement) {
105
- contentContainer = mainContentBodyContainerElement.parentElement;
106
- if (!contentContainer)
107
- throw new Error('should not happen');
108
- contentContainer.classList.add('container_app_sidebar_in_use');
109
- querySelector(_addonSidebarContainerEl, ADD_ON_SIDEBAR_CONTENT_SELECTOR).insertAdjacentElement('beforebegin', el);
110
- // See if the element is visible.
111
- // Give it some content temporarily to check if it becomes sized to show it.
112
- _addonSidebarContainerEl.classList.add('app_sidebar_visible');
113
- _addonSidebarContainerEl.classList.add(idMap('app_sidebar_in_use'));
114
- contentContainer.classList.add('container_app_sidebar_visible');
115
- el.textContent = 'x';
116
- const elRect = el.getBoundingClientRect();
117
- el.textContent = '';
118
- // This gets re-added later once the panel has some content to show
119
- _addonSidebarContainerEl.classList.remove('app_sidebar_visible');
120
- contentContainer.classList.remove('container_app_sidebar_visible');
121
- const supportedScreenSize = window.innerWidth >= 1024 && window.innerHeight >= 600;
122
- if (!global._APP_SIDEBAR_TEST &&
123
- (elRect.width == 0 ||
124
- elRect.height == 0 ||
125
- (supportedScreenSize &&
126
- Math.floor(elRect.right) > Math.floor(window.innerWidth)))) {
127
- this._driver
128
- .getLogger()
129
- .error(new Error('SDK sidebar inserted into add-ons sidebar was not visible'), {
130
- rect: {
131
- // rect's properties aren't enumerable so we have to do this
132
- top: elRect.top,
133
- bottom: elRect.bottom,
134
- left: elRect.left,
135
- right: elRect.right,
136
- width: elRect.width,
137
- height: elRect.height,
138
- },
139
- window: {
140
- innerWidth: window.innerWidth,
141
- innerHeight: window.innerHeight,
142
- },
143
- });
144
- }
145
- else {
146
- usedAddonsSidebar = true;
147
- }
148
- if (!usedAddonsSidebar) {
149
- if (contentContainer)
150
- contentContainer.classList.remove('container_app_sidebar_in_use');
151
- _addonSidebarContainerEl.classList.remove(idMap('app_sidebar_in_use'));
152
- }
153
- }
154
- }
155
- const addonSidebarContainerEl = usedAddonsSidebar
156
- ? _addonSidebarContainerEl
157
- : null;
158
- const sidebarContainerEl = usedAddonsSidebar
159
- ? _addonSidebarContainerEl
160
- : _sidebarContainerEl;
161
- if (!sidebarContainerEl)
162
- throw new Error('should not happen');
163
- if (!usedAddonsSidebar) {
164
- sidebarContainerEl.insertBefore(el, sidebarContainerEl.firstElementChild);
165
- sidebarContainerEl.classList.add(idMap('app_sidebar_in_use'));
166
- }
167
- if (!document.body.querySelector(sidebarWaitingPlatformSelector)) {
168
- const waitingPlatform = document.createElement('div');
169
- waitingPlatform.className = cx(sidebarWaitingPlatformClassName, idMap('app_sidebar_waiting_platform'));
170
- document.body.appendChild(waitingPlatform);
171
- }
172
- if (addonSidebarContainerEl) {
173
- container = () => el;
174
- el.classList.add('addon_sidebar');
175
- }
176
- else {
177
- const containerEl = findParent(sidebarContainerEl, (el) => window.getComputedStyle(el).overflowY !== 'visible');
178
- container = containerEl ? () => containerEl : undefined;
179
- }
180
- const currentIds = new Set();
181
- const orderManager = new OrderManager({
182
- get() {
183
- try {
184
- return JSON.parse(global.localStorage.getItem('inboxsdk__sidebar_ordering') || 'null');
185
- }
186
- catch (err) {
187
- console.error('failed to read sidebar order data', err);
188
- }
189
- },
190
- set(data) {
191
- try {
192
- global.localStorage.setItem('inboxsdk__sidebar_ordering', JSON.stringify(data));
193
- }
194
- catch (err) {
195
- console.error('failed to set sidebar order data', err);
196
- }
197
- },
198
- });
199
- updateHighlightedAppIconBus
200
- .bufferWithTimeOrCount(150, 100)
201
- .filter((events) => events.length > 0)
202
- .takeUntilBy(this._stopper)
203
- .onValue(() => {
204
- const elBoundingBox = el.getBoundingClientRect();
205
- const boundingTop = elBoundingBox.top + el.scrollTop;
206
- const boundingBottom = boundingTop + elBoundingBox.height;
207
- const titleBars = Array.from(el.querySelectorAll(`.${idMap('app_sidebar_content_panel')}.${idMap('expanded')} .${idMap('app_sidebar_content_panel_top_line')}`));
208
- const titleBar = titleBars.find((t) => {
209
- const tBoundingBox = t.getBoundingClientRect();
210
- return (tBoundingBox.bottom > boundingTop &&
211
- tBoundingBox.bottom < boundingBottom);
212
- });
213
- if (titleBar) {
214
- const instanceId = titleBar.getAttribute('data-instance-id');
215
- const appName = titleBar.getAttribute('data-app-name');
216
- if (!appName)
217
- return;
218
- const appButton = buttonContainers.get(appName);
219
- if (!appButton || !iconArea)
220
- return;
221
- const activeButtonContainer = iconArea.querySelector('.sidebar_button_container_active');
222
- if (activeButtonContainer) {
223
- activeButtonContainer.classList.remove('sidebar_button_container_active');
224
- }
225
- appButton.classList.add('sidebar_button_container_active');
226
- }
227
- });
228
- const _appSidebarRefSetter = (threadSidebarComponent) => {
229
- if (threadSidebarComponent) {
230
- component = threadSidebarComponent;
231
- }
232
- };
233
- const render = () => {
234
- ReactDOM.render(React.createElement(AppSidebar, { ref: _appSidebarRefSetter, panels: orderManager.getOrderedItems().map((x) => x.value), onMoveEnd: (newList, movedItem, oldIndex, newIndex) => {
235
- orderManager.moveItem(oldIndex, newIndex);
236
- render();
237
- }, onExpandedToggle: () => {
238
- updateHighlightedAppIconBus.emit(null);
239
- }, container: container }), el, () => {
240
- updateHighlightedAppIconBus.emit(null);
241
- });
242
- };
243
- render();
244
- Kefir.fromEvents(window, 'storage')
245
- .filter((e) => e.key === 'inboxsdk__sidebar_ordering')
246
- .takeUntilBy(this._stopper)
247
- .onValue(() => {
248
- orderManager.reload();
249
- render();
250
- });
251
- this._stopper.onValue(() => {
252
- ReactDOM.unmountComponentAtNode(el);
253
- el.remove();
254
- sidebarContainerEl.classList.remove(idMap('app_sidebar_in_use'));
255
- sidebarContainerEl.classList.remove('app_sidebar_visible');
256
- if (iconArea)
257
- iconArea.remove();
258
- const mainContentBodyContainerElement = GmailElementGetter.getMainContentBodyContainerElement();
259
- if (mainContentBodyContainerElement) {
260
- contentContainer = mainContentBodyContainerElement.parentElement;
261
- if (contentContainer) {
262
- contentContainer.classList.remove('container_app_sidebar_in_use');
263
- contentContainer.classList.remove('container_app_sidebar_visible');
264
- }
265
- }
266
- });
267
- Kefir.fromEvents(document.body, 'inboxsdkNewSidebarPanel')
268
- .filter((e) => e.detail.sidebarId === this._instanceId)
269
- .takeUntilBy(this._stopper)
270
- .onValue((event) => {
271
- let id = event.detail.id;
272
- while (currentIds.has(id)) {
273
- id = incrementName(id);
274
- }
275
- currentIds.add(id);
276
- const appName = event.detail.appName;
277
- orderManager.addItem({
278
- groupId: event.detail.appId,
279
- id,
280
- orderHint: event.detail.orderHint,
281
- value: {
282
- id,
283
- appName,
284
- appId: event.detail.appId,
285
- instanceId: event.detail.instanceId,
286
- title: event.detail.title,
287
- iconClass: event.detail.iconClass,
288
- iconUrl: event.detail.iconUrl,
289
- hideTitleBar: event.detail.hideTitleBar,
290
- el: event.target,
291
- },
292
- });
293
- render();
294
- if (!addonSidebarContainerEl)
295
- return;
296
- iconArea = addonSidebarContainerEl.querySelector('.' + idMap('sidebar_iconArea'));
297
- if (!iconArea) {
298
- iconArea = document.createElement('div');
299
- iconArea.className = idMap('sidebar_iconArea');
300
- addIconArea(iconArea, addonSidebarContainerEl, this._stopper);
301
- }
302
- // we put adding the content panel icon in the iconArea in an asap so that we
303
- // get consistent ordering. The ordering of the icons is based on the position of the FIRST
304
- // panel with that app name. This means we need to wait for all the panels for a particular appName
305
- // to be added first, and then we can get the correct position
306
- asap(() => {
307
- if (!iconArea)
308
- throw new Error('should not happen');
309
- const instanceId = event.detail.instanceId;
310
- const appIconUrl = event.detail.appIconUrl;
311
- // If there's an existing button for the app, then just increment its
312
- // data-count attribute instead of adding a new button.
313
- const existingButtonContainer = buttonContainers.get(appName);
314
- let buttonContainer;
315
- if (existingButtonContainer) {
316
- const currentCount = Number(existingButtonContainer.getAttribute('data-count')) || 1;
317
- existingButtonContainer.setAttribute('data-count', String(currentCount + 1));
318
- buttonContainer = existingButtonContainer;
319
- }
320
- else {
321
- buttonContainer = document.createElement('div');
322
- buttonContainer.className = idMap('sidebar_button_container');
323
- buttonContainer.setAttribute('data-app-name', appName);
324
- buttonContainer.setAttribute('data-count', String(1));
325
- buttonContainer.innerHTML = autoHtml `
326
- <button class="inboxsdk__button_icon" type="button" data-tooltip="${appName}">
327
- <img class="inboxsdk__button_iconImg" src="${appIconUrl}">
328
- </button>
329
- <div class="inboxsdk__button_selectedIndicator"></div>
330
- `;
331
- if (event.detail.primaryColor) {
332
- querySelector(buttonContainer, '.inboxsdk__button_selectedIndicator').style.backgroundColor = event.detail.primaryColor;
333
- }
334
- buttonContainers.set(appName, buttonContainer);
335
- querySelector(buttonContainer, 'button').addEventListener('click', (event) => {
336
- event.stopPropagation();
337
- const activeButtonContainer = iconArea
338
- ? iconArea.querySelector('.sidebar_button_container_active')
339
- : null;
340
- if (activeButtonContainer) {
341
- activeButtonContainer.classList.remove('sidebar_button_container_active');
342
- }
343
- if (activeButtonContainer === buttonContainer) {
344
- if (addonSidebarContainerEl)
345
- addonSidebarContainerEl.classList.remove('app_sidebar_visible');
346
- if (contentContainer)
347
- contentContainer.classList.remove('container_app_sidebar_visible');
348
- this._setShouldAppSidebarOpen(false);
349
- }
350
- else {
351
- if (addonSidebarContainerEl)
352
- addonSidebarContainerEl.classList.add('app_sidebar_visible');
353
- buttonContainer.classList.add('sidebar_button_container_active');
354
- if (contentContainer)
355
- contentContainer.classList.add('container_app_sidebar_visible');
356
- this._setShouldAppSidebarOpen(true);
357
- if (addonSidebarContainerEl) {
358
- // check and deactivate add-on sidebar
359
- const activeAddOnIcon = addonSidebarContainerEl.querySelector(ACTIVE_ADD_ON_ICON_SELECTOR);
360
- if (activeAddOnIcon)
361
- simulateClick(activeAddOnIcon);
362
- //fake resize to get gmail to fix any heights that are messed up
363
- fakeWindowResize();
364
- // if the tabList is still loading then handle the case where the user
365
- // clicks on an SDK icon to bring up an SDK app when Gmail thinks that it needs
366
- // to bring up an Add-On sidebar (since that was last visible from Gmail's perspective)
367
- // so we need to suppress Gmail bringing up their sidebar. This handles the flag of if we
368
- // need to suppress
369
- const nativeIconArea = addonSidebarContainerEl.firstElementChild;
370
- if (!nativeIconArea)
371
- return;
372
- const loadingHolderAsAny = nativeIconArea.firstElementChild;
373
- const loadingHolder = loadingHolderAsAny;
374
- if (!loadingHolder)
375
- return;
376
- if (loadingHolder.style.display !== 'none') {
377
- activatedWhileLoading = true;
378
- makeMutationObserverChunkedStream(loadingHolder, {
379
- attributes: true,
380
- attributeFilter: ['style'],
381
- })
382
- .toProperty(() => null)
383
- .map(() => loadingHolder.style.display === 'none')
384
- .filter(Boolean)
385
- .take(1)
386
- .delay(150)
387
- .takeUntilBy(this._stopper)
388
- .onValue(() => {
389
- activatedWhileLoading = false;
390
- });
391
- }
392
- }
393
- component.openPanel(instanceId);
394
- component.scrollPanelIntoView(instanceId, true);
395
- }
396
- }, true);
397
- if (iconArea)
398
- addToIconArea(orderManager, appName, buttonContainer, iconArea);
399
- if (widthManager)
400
- widthManager.fixWidths();
401
- if (this._getShouldAppSidebarOpen()) {
402
- // if we last had an SDK sidebar open then bring up the SDK sidebar when the first
403
- // panel gets added
404
- const activeButtonContainer = iconArea.querySelector('.sidebar_button_container_active');
405
- if (!activeButtonContainer) {
406
- buttonContainer.classList.add('sidebar_button_container_active');
407
- if (addonSidebarContainerEl)
408
- addonSidebarContainerEl.classList.add('app_sidebar_visible');
409
- if (contentContainer)
410
- contentContainer.classList.add('container_app_sidebar_visible');
411
- //fake resize to get gmail to fix any heights that are messed up
412
- fakeWindowResize();
413
- }
414
- }
415
- }
416
- });
417
- });
418
- Kefir.fromEvents(document.body, 'inboxsdkUpdateSidebarPanel')
419
- .filter((e) => e.detail.sidebarId === this._instanceId)
420
- .takeUntilBy(this._stopper)
421
- .onValue((event) => {
422
- const orderedItems = orderManager.getOrderedItems();
423
- const index = findIndex(orderedItems, (x) => x.value.instanceId === event.detail.instanceId);
424
- if (index === -1)
425
- throw new Error('should not happen: failed to find orderItem');
426
- orderManager.updateItemValueByIndex(index, {
427
- id: orderedItems[index].value.id,
428
- appId: event.detail.appId,
429
- appName: event.detail.appName || event.detail.title,
430
- instanceId: event.detail.instanceId,
431
- title: event.detail.title,
432
- iconClass: event.detail.iconClass,
433
- iconUrl: event.detail.iconUrl,
434
- hideTitleBar: event.detail.hideTitleBar,
435
- el: event.target,
436
- });
437
- render();
438
- });
439
- Kefir.fromEvents(document.body, 'inboxsdkRemoveSidebarPanel')
440
- .filter((e) => e.detail.sidebarId === this._instanceId)
441
- .takeUntilBy(this._stopper)
442
- .onValue((event) => {
443
- const orderedItems = orderManager.getOrderedItems();
444
- const index = findIndex(orderedItems, (x) => x.value.instanceId === event.detail.instanceId);
445
- if (index === -1)
446
- throw new Error('should not happen: failed to find orderItem');
447
- currentIds.delete(orderedItems[index].id);
448
- orderManager.removeItemByIndex(index);
449
- if (orderManager.getOrderedItems().length === 0) {
450
- this.destroy();
451
- }
452
- else {
453
- render();
454
- }
455
- if (!addonSidebarContainerEl)
456
- return;
457
- iconArea = addonSidebarContainerEl.querySelector('.' + idMap('sidebar_iconArea'));
458
- if (!iconArea)
459
- return;
460
- if (widthManager)
461
- widthManager.fixWidths();
462
- const appName = event.detail.appName;
463
- const container = buttonContainers.get(appName);
464
- if (container) {
465
- const currentCount = Number(container.getAttribute('data-count'));
466
- if (currentCount <= 1) {
467
- const activeButtonContainer = el.querySelector('.sidebar_button_container_active');
468
- container.remove();
469
- buttonContainers.delete(appName);
470
- if (container === activeButtonContainer) {
471
- if (addonSidebarContainerEl) {
472
- addonSidebarContainerEl.classList.remove('app_sidebar_visible');
473
- if (contentContainer)
474
- contentContainer.classList.remove('container_app_sidebar_visible');
475
- }
476
- this._setShouldAppSidebarOpen(false);
477
- }
478
- }
479
- else if (currentCount === 2) {
480
- container.removeAttribute('data-count');
481
- }
482
- else {
483
- container.setAttribute('data-count', String(currentCount - 1));
484
- }
485
- }
486
- });
487
- Kefir.fromEvents(document.body, 'inboxsdkSidebarPanelScrollIntoView')
488
- .takeUntilBy(this._stopper)
489
- .onValue((event) => {
490
- component.scrollPanelIntoView(event.detail.instanceId);
491
- });
492
- Kefir.fromEvents(document.body, 'inboxsdkSidebarPanelClose')
493
- .takeUntilBy(this._stopper)
494
- .onValue((event) => {
495
- component.closePanel(event.detail.instanceId);
496
- });
497
- if (addonSidebarContainerEl) {
498
- // listen for add-on sidebar contents to become visible which can happen in 1 of two cases
499
- // 1. user clicks on an Add-Icon icon
500
- // 2. Gmail automatically opens an Add-on sidebar because it was last open in previous thread
501
- const addonSidebarContentContainerElement = querySelector(addonSidebarContainerEl, ADD_ON_SIDEBAR_CONTENT_SELECTOR);
502
- makeElementChildStream(addonSidebarContentContainerElement)
503
- .flatMap(({ el, removalStream }) => makeMutationObserverChunkedStream(el, {
504
- attributes: true,
505
- attributeFilter: ['style'],
506
- })
507
- .toProperty(() => null)
508
- .map(() => el.style.display !== 'none'))
509
- .takeUntilBy(this._stopper)
510
- .onValue((isDisplayingGmailAddonSidebar) => {
511
- if (isDisplayingGmailAddonSidebar) {
512
- if (contentContainer)
513
- contentContainer.classList.add('container_addon_sidebar_visible');
514
- // we need to suppress this sidebar from loading
515
- if (activatedWhileLoading) {
516
- const activeAddOnIcon = addonSidebarContainerEl.querySelector(ACTIVE_ADD_ON_ICON_SELECTOR);
517
- if (activeAddOnIcon)
518
- simulateClick(activeAddOnIcon);
519
- return;
520
- }
521
- this._setShouldAppSidebarOpen(false);
522
- const activeButtonContainer = iconArea
523
- ? iconArea.querySelector('.sidebar_button_container_active')
524
- : null;
525
- if (activeButtonContainer) {
526
- addonSidebarContainerEl.classList.remove('app_sidebar_visible');
527
- activeButtonContainer.classList.remove('sidebar_button_container_active');
528
- if (contentContainer)
529
- contentContainer.classList.remove('container_app_sidebar_visible');
530
- }
531
- }
532
- else {
533
- if (contentContainer)
534
- contentContainer.classList.remove('container_addon_sidebar_visible');
535
- }
536
- });
537
- }
538
- if (addonSidebarContainerEl) {
539
- //listen for scroll and update active icon if needed
540
- Kefir.fromEvents(el, 'scroll')
541
- .takeUntilBy(this._stopper)
542
- .onValue(() => {
543
- updateHighlightedAppIconBus.emit(null);
544
- });
545
- }
546
- }
547
- addSidebarContentPanel(descriptor) {
548
- const panel = new ContentPanelViewDriver(this._driver, descriptor, this._instanceId);
549
- this._stopper.takeUntilBy(panel.getStopper()).onValue(() => {
550
- panel.remove();
551
- });
552
- return panel;
553
- }
554
- }
555
- export default GmailAppSidebarView;
@@ -1,2 +0,0 @@
1
- export default function setValueAndDispatchInputEvent(element: HTMLElement, value: string, eventName: string): void;
2
- //# sourceMappingURL=set-value-and-dispatch-event.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"set-value-and-dispatch-event.d.ts","sourceRoot":"","sources":["../../../../../../src/platform-implementation-js/lib/dom/set-value-and-dispatch-event.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,6BAA6B,CACnD,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,QAMlB"}
@@ -1,6 +0,0 @@
1
- export default function setValueAndDispatchInputEvent(element, value, eventName) {
2
- element.value = value;
3
- const event = document.createEvent('Event');
4
- event.initEvent(eventName);
5
- element.dispatchEvent(event);
6
- }