@inboxsdk/core 0.2.29-alpha.1 → 0.2.29-alpha.3
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 +13 -13
- package/inboxsdk.js.map +1 -1
- package/package.json +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts +1 -0
- package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.d.ts.map +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.js +5 -0
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts +1 -5
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map +1 -1
- package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.js +6 -16
- package/src/platform-implementation-js/namespaces/app-menu.d.ts +15 -2
- package/src/platform-implementation-js/namespaces/app-menu.d.ts.map +1 -1
- package/src/platform-implementation-js/views/app-menu-item-view.d.ts +1 -0
- package/src/platform-implementation-js/views/app-menu-item-view.d.ts.map +1 -1
- package/src/platform-implementation-js/views/app-menu-item-view.js +185 -165
- package/src/platform-implementation-js/views/collapsible-panel-view.d.ts +2 -1
- package/src/platform-implementation-js/views/collapsible-panel-view.d.ts.map +1 -1
- package/src/platform-implementation-js/views/collapsible-panel-view.js +6 -2
package/package.json
CHANGED
|
@@ -19,6 +19,7 @@ declare const GmailElementGetter: {
|
|
|
19
19
|
getMoleParent(): HTMLElement | null;
|
|
20
20
|
shouldAddNavItemsInline(): boolean;
|
|
21
21
|
getAppMenuAsync: () => Promise<HTMLElement | undefined>;
|
|
22
|
+
isAppBurgerMenuOpen(): boolean;
|
|
22
23
|
getAppMenuContainer(): HTMLElement | null;
|
|
23
24
|
getSeparateSectionNavItemMenuInjectionContainer(): HTMLElement | null;
|
|
24
25
|
getSameSectionNavItemMenuInjectionContainer(): HTMLElement | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmail-element-getter.d.ts","sourceRoot":"","sources":["../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAA+B,EAC7B,mBAAmB,EACpB,MAAM,yCAAyC,CAAC;AAUjD,QAAA,MAAM,kBAAkB;yBACD,WAAW,GAAG,IAAI;uCAcJ,WAAW,GAAG,IAAI;kDAKP,WAAW,GAAG,IAAI;+CAKrB,WAAW,GAAG,IAAI;wBAIzC,WAAW,GAAG,IAAI;iCAOT,WAAW,GAAG,IAAI;gCAInB,WAAW,GAAG,SAAS,GAAG,IAAI;2CA8BnB,WAAW,GAAG,IAAI;iDAIZ,MAAM,UAAU,CAC3D,mBAAmB,EACnB,KAAK,CACN;uBAgBkB,WAAW,GAAG,IAAI;kCAIP,WAAW,GAAG,IAAI;+BAOrB,WAAW,GAAG,IAAI;0CAIP,WAAW,GAAG,IAAI;+BAI7B,WAAW,GAAG,IAAI;+CAQrC,GAAG,KACR,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;qBAItB,WAAW,GAAG,IAAI;+BAOR,OAAO
|
|
1
|
+
{"version":3,"file":"gmail-element-getter.d.ts","sourceRoot":"","sources":["../../../../../../src/platform-implementation-js/dom-driver/gmail/gmail-element-getter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAA+B,EAC7B,mBAAmB,EACpB,MAAM,yCAAyC,CAAC;AAUjD,QAAA,MAAM,kBAAkB;yBACD,WAAW,GAAG,IAAI;uCAcJ,WAAW,GAAG,IAAI;kDAKP,WAAW,GAAG,IAAI;+CAKrB,WAAW,GAAG,IAAI;wBAIzC,WAAW,GAAG,IAAI;iCAOT,WAAW,GAAG,IAAI;gCAInB,WAAW,GAAG,SAAS,GAAG,IAAI;2CA8BnB,WAAW,GAAG,IAAI;iDAIZ,MAAM,UAAU,CAC3D,mBAAmB,EACnB,KAAK,CACN;uBAgBkB,WAAW,GAAG,IAAI;kCAIP,WAAW,GAAG,IAAI;+BAOrB,WAAW,GAAG,IAAI;0CAIP,WAAW,GAAG,IAAI;+BAI7B,WAAW,GAAG,IAAI;+CAQrC,GAAG,KACR,MAAM,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC;qBAItB,WAAW,GAAG,IAAI;+BAOR,OAAO;;;;uDAqFiB,WAAW,GAAG,IAAI;mDAItB,WAAW,GAAG,IAAI;0BAQ3C,WAAW,EAAE;0BAIb,WAAW,GAAG,IAAI;sBAItB,gBAAgB,GAAG,IAAI;qCAMR,WAAW,GAAG,IAAI;kCAIrB,WAAW,GAAG,IAAI;2BAIzB,WAAW,GAAG,IAAI;iCAWZ,WAAW,GAAG,IAAI;yBAI1B,WAAW;8BAIN,WAAW,GAAG,IAAI;sBAM1B,OAAO;mBAaV,OAAO;qBAIL,OAAO;oBAIR,OAAO;iCAIM,OAAO;gCAOR,OAAO;;qCASJ,WAAW,GAAG,IAAI;;gCAKrB,QAAQ,IAAI,CAAC;CAG1C,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -164,6 +164,11 @@ const GmailElementGetter = {
|
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
}),
|
|
167
|
+
isAppBurgerMenuOpen() {
|
|
168
|
+
return (document
|
|
169
|
+
.querySelector('.gb_Hc[aria-expanded]')
|
|
170
|
+
?.getAttribute('aria-expanded') === 'true' ?? false);
|
|
171
|
+
},
|
|
167
172
|
getAppMenuContainer() {
|
|
168
173
|
return document.querySelector('.aqk.aql.bkL');
|
|
169
174
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AppMenuItemDescriptor } from '../../../namespaces/app-menu';
|
|
2
2
|
import GmailDriver from '../gmail-driver';
|
|
3
3
|
import TypedEventEmitter from 'typed-emitter';
|
|
4
|
-
type MessageEvents = {
|
|
4
|
+
export type MessageEvents = {
|
|
5
5
|
click: (e: MouseEvent) => void;
|
|
6
6
|
blur: (e: MouseEvent) => void;
|
|
7
7
|
hover: (e: MouseEvent) => void;
|
|
@@ -30,10 +30,6 @@ export declare class GmailAppMenuItemView extends GmailAppMenuItemView_base {
|
|
|
30
30
|
* @internal
|
|
31
31
|
*/
|
|
32
32
|
hover(): void;
|
|
33
|
-
/**
|
|
34
|
-
* @internal
|
|
35
|
-
*/
|
|
36
|
-
activate(): void;
|
|
37
33
|
}
|
|
38
34
|
export {};
|
|
39
35
|
//# sourceMappingURL=gmail-app-menu-item-view.d.ts.map
|
package/src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gmail-app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,OAAO,iBAAiB,MAAM,eAAe,CAAC;AAK9C,
|
|
1
|
+
{"version":3,"file":"gmail-app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../../../src/platform-implementation-js/dom-driver/gmail/views/gmail-app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,OAAO,iBAAiB,MAAM,eAAe,CAAC;AAK9C,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,YAAY,MAAgB,CAAC;AAC1C,eAAO,MAAM,cAAc,yBAAmC,CAAC;AAC/D,eAAO,MAAM,aAAa,4BAA+C,CAAC;mDAOL,kBAAkB,aAAa,CAAC;AAArG,qBAAa,oBAAqB,SAAQ,yBAA4D;;IACpG,MAAM,CAAC,UAAU;;;MAGN;IAOX,IAAI,OAAO,4BAEV;IAED,qBAAqB,CAAC,qBAAqB,EAAE,qBAAqB;IAKlE,IAAI,kBAAkB,sCAErB;gBAEW,MAAM,EAAE,WAAW;IAc/B,MAAM;IAON;;OAEG;IACH,IAAI;IAIJ;;OAEG;IACH,KAAK;CAqFN"}
|
|
@@ -34,8 +34,8 @@ export class GmailAppMenuItemView extends EventEmitter {
|
|
|
34
34
|
this.#driver = driver;
|
|
35
35
|
driver.getStopper().onValue(() => this.remove());
|
|
36
36
|
this.#element.addEventListener('click', (e) => this.#onClick(e));
|
|
37
|
-
this.#element.addEventListener('mouseenter', this.#onHover);
|
|
38
37
|
this.#element.addEventListener('mouseleave', this.#onBlur);
|
|
38
|
+
querySelector(this.#element, ICON_ELEMENT_SELECTOR).addEventListener('mouseenter', this.#onHover);
|
|
39
39
|
}
|
|
40
40
|
remove() {
|
|
41
41
|
if (this.#destroyed)
|
|
@@ -59,19 +59,6 @@ export class GmailAppMenuItemView extends EventEmitter {
|
|
|
59
59
|
}
|
|
60
60
|
this.element?.classList.add(GmailAppMenuItemView.elementCss.HOVER);
|
|
61
61
|
}
|
|
62
|
-
/**
|
|
63
|
-
* @internal
|
|
64
|
-
*/
|
|
65
|
-
activate() {
|
|
66
|
-
this.element?.classList.remove(GmailAppMenuItemView.elementCss.HOVER);
|
|
67
|
-
this.element?.classList.add(GmailAppMenuItemView.elementCss.ACTIVE);
|
|
68
|
-
}
|
|
69
|
-
// /**
|
|
70
|
-
// * @internal
|
|
71
|
-
// */
|
|
72
|
-
// deactivate() {
|
|
73
|
-
// this.element?.classList.remove(GmailAppMenuItemView.elementCss.ACTIVE);
|
|
74
|
-
// }
|
|
75
62
|
#setupElement() {
|
|
76
63
|
const element = document.createElement('div');
|
|
77
64
|
element.className = ELEMENT_CLASS;
|
|
@@ -98,10 +85,13 @@ export class GmailAppMenuItemView extends EventEmitter {
|
|
|
98
85
|
const iconContainerEl = querySelector(element, ICON_ELEMENT_SELECTOR);
|
|
99
86
|
const { iconUrl, iconClassName } = this.#menuItemDescriptor ?? {};
|
|
100
87
|
if (iconUrl) {
|
|
101
|
-
const
|
|
88
|
+
const rawTheme = GmailElementGetter.isDarkTheme()
|
|
102
89
|
? iconUrl.darkTheme
|
|
103
90
|
: iconUrl.lightTheme;
|
|
91
|
+
const theme = typeof rawTheme === 'string' ? rawTheme : rawTheme.default;
|
|
92
|
+
const activeImg = typeof rawTheme === 'string' ? rawTheme : rawTheme.active;
|
|
104
93
|
iconContainerEl.style.setProperty('--background-image', `url(${theme})`);
|
|
94
|
+
iconContainerEl.style.setProperty('--background-image--active', `url(${activeImg})`);
|
|
105
95
|
}
|
|
106
96
|
iconContainerEl.className = cx(ICON_ELEMENT_CLASS, iconClassName);
|
|
107
97
|
}
|
|
@@ -113,7 +103,7 @@ export class GmailAppMenuItemView extends EventEmitter {
|
|
|
113
103
|
this.emit('click', e);
|
|
114
104
|
this.#menuItemDescriptor?.onClick?.(e);
|
|
115
105
|
if (this.#menuItemDescriptor?.routeID) {
|
|
116
|
-
this.#driver.goto(this.#menuItemDescriptor.routeID, this.#menuItemDescriptor
|
|
106
|
+
this.#driver.goto(this.#menuItemDescriptor.routeID, this.#menuItemDescriptor.routeParams);
|
|
117
107
|
}
|
|
118
108
|
}
|
|
119
109
|
#onBlur = (e) => {
|
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
import { RouteView } from '../../inboxsdk';
|
|
2
2
|
import GmailDriver from '../dom-driver/gmail/gmail-driver';
|
|
3
3
|
import { AppMenuItemView } from '../views/app-menu-item-view';
|
|
4
|
+
type ThemedIcon = string | {
|
|
5
|
+
active: string;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
4
8
|
export type AppMenuItemDescriptor = {
|
|
5
9
|
name: string;
|
|
6
10
|
iconUrl?: {
|
|
7
|
-
darkTheme:
|
|
8
|
-
lightTheme:
|
|
11
|
+
darkTheme: ThemedIcon;
|
|
12
|
+
lightTheme: ThemedIcon;
|
|
9
13
|
};
|
|
10
14
|
className?: string;
|
|
11
15
|
iconClassName?: string;
|
|
12
16
|
insertIndex?: number;
|
|
13
17
|
onClick?: (e?: MouseEvent) => void | null;
|
|
14
18
|
onHover?: (e?: MouseEvent) => void | null;
|
|
19
|
+
/**
|
|
20
|
+
* If routeID is provided, isRouteActive should be as well.
|
|
21
|
+
*/
|
|
15
22
|
routeID?: string;
|
|
16
23
|
routeParams?: {};
|
|
24
|
+
/**
|
|
25
|
+
* @example (routeView) => routeView.getRouteID() === 'inbox'
|
|
26
|
+
*
|
|
27
|
+
* @see RouteView
|
|
28
|
+
*/
|
|
17
29
|
isRouteActive: (routeView: RouteView) => boolean;
|
|
18
30
|
};
|
|
19
31
|
export type AppMenuItemPanelDescriptor = {
|
|
@@ -37,4 +49,5 @@ export default class AppMenu {
|
|
|
37
49
|
addMenuItem(menuItemDescriptor: AppMenuItemDescriptor): AppMenuItemView;
|
|
38
50
|
isShown(): Promise<boolean>;
|
|
39
51
|
}
|
|
52
|
+
export {};
|
|
40
53
|
//# sourceMappingURL=app-menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-menu.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/namespaces/app-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"app-menu.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/namespaces/app-menu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,KAAK,UAAU,GACX,MAAM,GACN;IACE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,UAAU,CAAC;QACtB,UAAU,EAAE,UAAU,CAAC;KACxB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,EAAE,CAAC;IACjB;;;;OAIG;IACH,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;QACjC,OAAO,CAAC,EAAE;YACR,SAAS,EAAE,MAAM,CAAC;YAClB,UAAU,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;;gBAGd,MAAM,EAAE,WAAW;IAI/B,WAAW,CAAC,kBAAkB,EAAE,qBAAqB,GAAG,eAAe;IAKjE,OAAO;CAId"}
|
|
@@ -14,6 +14,7 @@ declare const AppMenuItemView_base: new () => TypedEmitter<MessageEvents>;
|
|
|
14
14
|
*/
|
|
15
15
|
export declare class AppMenuItemView extends AppMenuItemView_base {
|
|
16
16
|
#private;
|
|
17
|
+
get menuItemDescriptor(): AppMenuItemDescriptor;
|
|
17
18
|
constructor(driver: GmailDriver, menuItemDescriptor: AppMenuItemDescriptor);
|
|
18
19
|
addCollapsiblePanel(panelDescriptor: AppMenuItemPanelDescriptor): Promise<CollapsiblePanelView | undefined>;
|
|
19
20
|
update(menuItemDescriptor: AppMenuItemDescriptor): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/views/app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"app-menu-item-view.d.ts","sourceRoot":"","sources":["../../../../../src/platform-implementation-js/views/app-menu-item-view.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAC;AAUzC,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,WAAW,MAAM,kCAAkC,CAAC;AAK3D,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;8CAyC8D,aAAa,aAAa,CAAC;AAH3F;;GAEG;AACH,qBAAa,eAAgB,SAAQ,oBAAuD;;IAiT1F,IAAI,kBAAkB,0BAErB;gBAQW,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,qBAAqB;IAuDpE,mBAAmB,CAAC,eAAe,EAAE,0BAA0B;IAiC/D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB;IAMtD,MAAM;CAYP"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import Kefir from 'kefir';
|
|
2
|
-
import kefirStopper from 'kefir-stopper';
|
|
3
2
|
import kefirBus from 'kefir-bus';
|
|
4
3
|
import EventEmitter from '../lib/safe-event-emitter';
|
|
5
4
|
import { GmailAppMenuItemView, NATIVE_CLASS, INBOXSDK_CLASS, } from '../dom-driver/gmail/views/gmail-app-menu-item-view';
|
|
6
5
|
import { NATIVE_CLASS as PANEL_NATIVE_CLASS, CollapsiblePanelView, } from './collapsible-panel-view';
|
|
7
6
|
import { addCollapsiblePanel } from '../dom-driver/gmail/gmail-driver/add-collapsible-panel';
|
|
8
7
|
import GmailElementGetter from '../dom-driver/gmail/gmail-element-getter';
|
|
8
|
+
import defer from '../../common/defer';
|
|
9
9
|
var NativeAppMenuClassName;
|
|
10
10
|
(function (NativeAppMenuClassName) {
|
|
11
11
|
NativeAppMenuClassName["MAIL"] = "XJ";
|
|
@@ -33,12 +33,13 @@ const routeIDtoMenuItemClass = Object.fromEntries([
|
|
|
33
33
|
...SPACES_ROUTES.map((route) => [route, NativeAppMenuClassName.SPACES]),
|
|
34
34
|
...MEET_ROUTES.map((route) => [route, NativeAppMenuClassName.MEET]),
|
|
35
35
|
]);
|
|
36
|
-
const initialRoutingStateStopper = kefirStopper();
|
|
37
36
|
/**
|
|
38
37
|
* Contains both a native Gmail app menu item and a collapsible panel.
|
|
39
38
|
*/
|
|
40
39
|
export class AppMenuItemView extends EventEmitter {
|
|
41
40
|
static #menuItemChangeStream = Kefir.pool();
|
|
41
|
+
static #menuItemChangeBus = kefirBus();
|
|
42
|
+
static #menuItemAddedDeferred = defer();
|
|
42
43
|
static #routeViewDriverStream;
|
|
43
44
|
static #menuItemToPanelMap = new Map();
|
|
44
45
|
static #appMenuItemViews = new Set();
|
|
@@ -58,19 +59,9 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
58
59
|
if (AppMenuItemView.#routeViewDriverStream)
|
|
59
60
|
return;
|
|
60
61
|
AppMenuItemView.#routeViewDriverStream = driver.getRouteViewDriverStream();
|
|
61
|
-
|
|
62
|
-
AppMenuItemView.#menuItemChangeStream.plug(bus);
|
|
63
|
-
AppMenuItemView.#routeViewDriverStream
|
|
64
|
-
.takeUntilBy(initialRoutingStateStopper)
|
|
65
|
-
.onValue(async (routeView) => {
|
|
62
|
+
AppMenuItemView.#routeViewDriverStream.onValue(async (routeView) => {
|
|
66
63
|
const routeViewID = routeView.getRouteID();
|
|
67
64
|
const routeType = routeView.getRouteType();
|
|
68
|
-
const routeViewParams = routeView.getParams();
|
|
69
|
-
console.debug({
|
|
70
|
-
routeViewID,
|
|
71
|
-
routeType,
|
|
72
|
-
routeViewParams,
|
|
73
|
-
});
|
|
74
65
|
/* Handling custom app menu items */
|
|
75
66
|
const descriptors = Array.from(AppMenuItemView.#appMenuItemViews, async (appMenuItemView) => {
|
|
76
67
|
const gmailView = await appMenuItemView.#gmailViewPromise;
|
|
@@ -81,17 +72,21 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
81
72
|
return descriptor?.isRouteActive(routeView);
|
|
82
73
|
}) ?? [];
|
|
83
74
|
if (gmailView?.element) {
|
|
84
|
-
|
|
75
|
+
AppMenuItemView.#menuItemChangeBus.emit(['click', gmailView.element]);
|
|
85
76
|
return;
|
|
86
77
|
}
|
|
87
78
|
/* Handling native app menu items */
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (
|
|
93
|
-
|
|
94
|
-
|
|
79
|
+
let menuItemClass = '';
|
|
80
|
+
if (routeViewID) {
|
|
81
|
+
menuItemClass = routeIDtoMenuItemClass[routeViewID];
|
|
82
|
+
}
|
|
83
|
+
if ((!routeViewID || !menuItemClass) && routeType !== 'CUSTOM') {
|
|
84
|
+
menuItemClass = NativeAppMenuClassName.MAIL;
|
|
85
|
+
}
|
|
86
|
+
const menuItemElement = menuItemClass &&
|
|
87
|
+
document.querySelector(`.${menuItemClass}`);
|
|
88
|
+
if (menuItemElement) {
|
|
89
|
+
AppMenuItemView.#menuItemChangeBus.emit(['click', menuItemElement]);
|
|
95
90
|
}
|
|
96
91
|
});
|
|
97
92
|
}
|
|
@@ -101,6 +96,7 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
101
96
|
if (!gmailAppMenu) {
|
|
102
97
|
return;
|
|
103
98
|
}
|
|
99
|
+
AppMenuItemView.#menuItemChangeStream.plug(AppMenuItemView.#menuItemChangeBus);
|
|
104
100
|
// Set up menu item panel -> menu collapsible panel element mappings
|
|
105
101
|
for (const [menuItemClass, panelClass] of nativeButtonToPanelMap) {
|
|
106
102
|
const menuItemElement = document.querySelector(`.${NATIVE_CLASS}.${menuItemClass}`);
|
|
@@ -111,129 +107,161 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
111
107
|
AppMenuItemView.#menuItemToPanelMap.set(menuItemElement, panelElement ?? undefined);
|
|
112
108
|
}
|
|
113
109
|
}
|
|
114
|
-
// Set up event listeners we use to control menu UI
|
|
115
|
-
const stream = Kefir.stream((emitter) => {
|
|
116
|
-
// We intercept some events emitted on Gmail (native) menu items to gain full control of the menu (menu items and panels).
|
|
117
|
-
// Thus, some native event handlers won't be invoked so we replicate the Gmail's behavior by ourselves.
|
|
118
|
-
const appMenuElement = GmailElementGetter.getAppMenuContainer();
|
|
119
|
-
for (const nativeMenuItem of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}:not(.${INBOXSDK_CLASS})`) ?? []) {
|
|
120
|
-
// Gmail uses this listener for panel hover state activation. It's prevented from propagation and we handle UI updates
|
|
121
|
-
nativeMenuItem.addEventListener('mouseenter', (e) => {
|
|
122
|
-
e.stopImmediatePropagation();
|
|
123
|
-
emitter.emit(['mouseenter', nativeMenuItem, e]);
|
|
124
|
-
}, true);
|
|
125
|
-
// Gmail uses this listener for panel hover state deactivation. It's prevented from propagation and we handle UI updates
|
|
126
|
-
nativeMenuItem.addEventListener('mouseleave', (e) => {
|
|
127
|
-
e.stopImmediatePropagation();
|
|
128
|
-
emitter.emit(['mouseleave', nativeMenuItem, e]);
|
|
129
|
-
}, true);
|
|
130
|
-
// Click event isn't prevented from propagation to let Gmail handle routing. The styling is handled by us
|
|
131
|
-
nativeMenuItem.addEventListener('click', () => {
|
|
132
|
-
emitter.emit(['click', nativeMenuItem]);
|
|
133
|
-
});
|
|
134
|
-
// Handle moving cursor out of panel. We use it to enhance the styling since it won't be handled by Gmail
|
|
135
|
-
const panel = AppMenuItemView.#menuItemToPanelMap.get(nativeMenuItem);
|
|
136
|
-
panel?.addEventListener('mouseleave', (e) => {
|
|
137
|
-
emitter.emit(['mouseleave', nativeMenuItem, e]);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
AppMenuItemView.#menuItemChangeStream.plug(stream);
|
|
142
110
|
})();
|
|
143
111
|
}
|
|
112
|
+
static {
|
|
113
|
+
AppMenuItemView.#menuItemAddedDeferred.promise.then(() => {
|
|
114
|
+
// Set up event listeners we use to control menu UI
|
|
115
|
+
// We intercept some events emitted on Gmail (native) menu items to gain full control of the menu (menu items and panels).
|
|
116
|
+
// Thus, some native event handlers won't be invoked so we replicate the Gmail's behavior by ourselves.
|
|
117
|
+
const appMenuElement = GmailElementGetter.getAppMenuContainer();
|
|
118
|
+
for (const nativeMenuItem of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}:not(.${INBOXSDK_CLASS})`) ?? []) {
|
|
119
|
+
// Gmail uses this listener for panel hover state activation. It's prevented from propagation and we handle UI updates
|
|
120
|
+
const buttonElement = nativeMenuItem.querySelector('.V6.CL');
|
|
121
|
+
buttonElement?.addEventListener('mouseenter', (e) => {
|
|
122
|
+
e.stopImmediatePropagation();
|
|
123
|
+
AppMenuItemView.#menuItemChangeBus.emit([
|
|
124
|
+
'mouseenter',
|
|
125
|
+
nativeMenuItem,
|
|
126
|
+
e,
|
|
127
|
+
]);
|
|
128
|
+
}, true);
|
|
129
|
+
// Gmail uses this listener for panel hover state deactivation. It's prevented from propagation and we handle UI updates
|
|
130
|
+
nativeMenuItem.addEventListener('mouseleave', (e) => {
|
|
131
|
+
e.stopImmediatePropagation();
|
|
132
|
+
AppMenuItemView.#menuItemChangeBus.emit([
|
|
133
|
+
'mouseleave',
|
|
134
|
+
nativeMenuItem,
|
|
135
|
+
e,
|
|
136
|
+
]);
|
|
137
|
+
}, true);
|
|
138
|
+
// Click event isn't prevented from propagation to let Gmail handle routing. The styling is handled by us
|
|
139
|
+
nativeMenuItem.addEventListener('click', () => {
|
|
140
|
+
AppMenuItemView.#menuItemChangeBus.emit(['click', nativeMenuItem]);
|
|
141
|
+
});
|
|
142
|
+
// Handle moving cursor out of panel. We use it to enhance the styling since it won't be handled by Gmail
|
|
143
|
+
const panel = AppMenuItemView.#menuItemToPanelMap.get(nativeMenuItem);
|
|
144
|
+
panel?.addEventListener('mouseleave', (e) => {
|
|
145
|
+
AppMenuItemView.#menuItemChangeBus.emit([
|
|
146
|
+
'mouseleave',
|
|
147
|
+
nativeMenuItem,
|
|
148
|
+
e,
|
|
149
|
+
]);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
144
154
|
static {
|
|
145
155
|
AppMenuItemView.#menuItemChangeStream.onValue(async (v) => {
|
|
146
156
|
const [type, menuItem, mouseEvent] = v;
|
|
147
157
|
const { ACTIVE, HOVER } = GmailAppMenuItemView.elementCss;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
(
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
activePanel
|
|
161
|
-
|
|
162
|
-
|
|
158
|
+
switch (type) {
|
|
159
|
+
case 'mouseenter': {
|
|
160
|
+
const panel = AppMenuItemView.#menuItemToPanelMap.get(menuItem);
|
|
161
|
+
const activeMenuItem = AppMenuItemView.#getActiveMenuItem();
|
|
162
|
+
const activePanel = AppMenuItemView.#getActivePanel();
|
|
163
|
+
const burgerMenuOpen = GmailElementGetter.isAppBurgerMenuOpen();
|
|
164
|
+
// hover-styled panel is displayed for collapsed burger menu
|
|
165
|
+
if (activeMenuItem === menuItem &&
|
|
166
|
+
activePanel === panel &&
|
|
167
|
+
burgerMenuOpen)
|
|
168
|
+
return;
|
|
169
|
+
// deactivate active panel
|
|
170
|
+
if (activePanel) {
|
|
171
|
+
activePanel.style.removeProperty('height');
|
|
172
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.ACTIVE);
|
|
173
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.HOVER);
|
|
174
|
+
}
|
|
175
|
+
// activate new panel
|
|
176
|
+
if (panel) {
|
|
177
|
+
const height = window.innerHeight - panel.getBoundingClientRect().top;
|
|
178
|
+
panel.style.cssText = `height: ${height}px;`;
|
|
179
|
+
panel.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
180
|
+
panel.classList.add(CollapsiblePanelView.elementCss.HOVER);
|
|
181
|
+
// hover menu item
|
|
182
|
+
menuItem.classList.add(HOVER);
|
|
183
|
+
// handle burger menu collapsed
|
|
184
|
+
if (!burgerMenuOpen) {
|
|
185
|
+
for (const panel of document.querySelectorAll(CollapsiblePanelView.elementSelectors.NATIVE) ?? []) {
|
|
186
|
+
panel.classList.add(CollapsiblePanelView.elementCss.COLLAPSED_HOVER);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
// panel doesn't exist (i.e. Meet) so activate active menu item's panel instead (as Gmail currently does -- FEB 2023)
|
|
192
|
+
const panel = activeMenuItem &&
|
|
193
|
+
AppMenuItemView.#menuItemToPanelMap.get(activeMenuItem);
|
|
194
|
+
panel?.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
195
|
+
}
|
|
196
|
+
break;
|
|
163
197
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
panel.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
169
|
-
panel.classList.add(CollapsiblePanelView.elementCss.HOVER);
|
|
170
|
-
// hover menu item
|
|
171
|
-
menuItem.classList.add(HOVER);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
// panel doesn't exist (i.e. Meet) so activate active menu item's panel instead (as Gmail currently does -- FEB 2023)
|
|
175
|
-
const panel = activeMenuItem &&
|
|
198
|
+
case 'mouseleave': {
|
|
199
|
+
const activeMenuItem = AppMenuItemView.#getActiveMenuItem();
|
|
200
|
+
const activePanel = AppMenuItemView.#getActivePanel();
|
|
201
|
+
const activeMenuItemPanel = activeMenuItem &&
|
|
176
202
|
AppMenuItemView.#menuItemToPanelMap.get(activeMenuItem);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
activeMenuItemPanel.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
if (type === 'click') {
|
|
205
|
-
const appMenuElement = GmailElementGetter.getAppMenuContainer();
|
|
206
|
-
// deactivate active panel
|
|
207
|
-
const activePanel = AppMenuItemView.#getActivePanel();
|
|
208
|
-
if (activePanel) {
|
|
209
|
-
activePanel.style.removeProperty('height');
|
|
210
|
-
activePanel.classList.remove(CollapsiblePanelView.elementCss.ACTIVE);
|
|
211
|
-
activePanel.classList.remove(CollapsiblePanelView.elementCss.HOVER);
|
|
212
|
-
}
|
|
213
|
-
// deactivate menu items
|
|
214
|
-
for (const menuItem_ of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}`) ?? []) {
|
|
215
|
-
menuItem_.classList.remove(ACTIVE);
|
|
216
|
-
menuItem_.classList.remove(HOVER);
|
|
203
|
+
if (mouseEvent.relatedTarget instanceof Node &&
|
|
204
|
+
(menuItem.contains(mouseEvent.relatedTarget) ||
|
|
205
|
+
activePanel?.contains(mouseEvent.relatedTarget)))
|
|
206
|
+
return;
|
|
207
|
+
const burgerMenuOpen = GmailElementGetter.isAppBurgerMenuOpen();
|
|
208
|
+
if (activePanel === activeMenuItemPanel && burgerMenuOpen)
|
|
209
|
+
return;
|
|
210
|
+
// unhover menu item
|
|
211
|
+
menuItem.classList.remove(HOVER);
|
|
212
|
+
// handle burger menu collapsed
|
|
213
|
+
for (const panel of document.querySelectorAll(CollapsiblePanelView.elementSelectors.NATIVE) ?? []) {
|
|
214
|
+
panel.classList.remove(CollapsiblePanelView.elementCss.COLLAPSED_HOVER);
|
|
215
|
+
}
|
|
216
|
+
// deactivate active panel
|
|
217
|
+
if (activePanel) {
|
|
218
|
+
activePanel.style.removeProperty('height');
|
|
219
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.ACTIVE);
|
|
220
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.HOVER);
|
|
221
|
+
}
|
|
222
|
+
// activate active menu item panel
|
|
223
|
+
if (activeMenuItemPanel) {
|
|
224
|
+
activeMenuItemPanel.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
217
227
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
228
|
+
case 'click': {
|
|
229
|
+
const appMenuElement = GmailElementGetter.getAppMenuContainer();
|
|
230
|
+
// deactivate active panel
|
|
231
|
+
const activePanel = AppMenuItemView.#getActivePanel();
|
|
232
|
+
if (activePanel) {
|
|
233
|
+
activePanel.style.removeProperty('height');
|
|
234
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.ACTIVE);
|
|
235
|
+
activePanel.classList.remove(CollapsiblePanelView.elementCss.HOVER);
|
|
236
|
+
}
|
|
237
|
+
// deactivate menu items
|
|
238
|
+
for (const menuItem_ of appMenuElement?.querySelectorAll(`.${NATIVE_CLASS}`) ?? []) {
|
|
239
|
+
menuItem_.classList.remove(ACTIVE);
|
|
240
|
+
menuItem_.classList.remove(HOVER);
|
|
241
|
+
}
|
|
242
|
+
// activate menu item
|
|
243
|
+
menuItem.classList.add(ACTIVE);
|
|
244
|
+
// activate panel
|
|
245
|
+
const panel = AppMenuItemView.#menuItemToPanelMap.get(menuItem);
|
|
246
|
+
if (panel) {
|
|
247
|
+
panel.classList.add(CollapsiblePanelView.elementCss.ACTIVE);
|
|
248
|
+
}
|
|
224
249
|
}
|
|
225
250
|
}
|
|
226
251
|
});
|
|
227
252
|
}
|
|
253
|
+
get menuItemDescriptor() {
|
|
254
|
+
return this.#menuItemDescriptor;
|
|
255
|
+
}
|
|
228
256
|
#driver;
|
|
229
257
|
#destroyed = false;
|
|
230
258
|
#gmailViewPromise;
|
|
231
259
|
#collapsiblePanel;
|
|
232
|
-
#
|
|
233
|
-
#collapsiblePanelStream;
|
|
260
|
+
#menuItemDescriptor;
|
|
234
261
|
constructor(driver, menuItemDescriptor) {
|
|
235
262
|
super();
|
|
236
263
|
this.#driver = driver;
|
|
264
|
+
this.#menuItemDescriptor = menuItemDescriptor;
|
|
237
265
|
const gmailAppMenuItemView = this.#driver.addAppMenuItem(menuItemDescriptor);
|
|
238
266
|
this.#gmailViewPromise = gmailAppMenuItemView;
|
|
239
267
|
gmailAppMenuItemView.then((gmailView) => {
|
|
@@ -244,28 +272,34 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
244
272
|
if (gmailElement) {
|
|
245
273
|
AppMenuItemView.#menuItemToPanelMap.set(gmailElement, undefined);
|
|
246
274
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
275
|
+
gmailView.on('destroy', () => {
|
|
276
|
+
AppMenuItemView.#menuItemChangeBus.end();
|
|
277
|
+
this.remove();
|
|
278
|
+
});
|
|
279
|
+
gmailView.on('click', () => {
|
|
280
|
+
AppMenuItemView.#menuItemChangeBus.emit(['click', gmailElement]);
|
|
281
|
+
this.emit('click');
|
|
282
|
+
});
|
|
283
|
+
gmailView.on('hover', (e) => {
|
|
284
|
+
AppMenuItemView.#menuItemChangeBus.emit([
|
|
285
|
+
'mouseenter',
|
|
286
|
+
gmailElement,
|
|
287
|
+
e,
|
|
288
|
+
]);
|
|
289
|
+
this.emit('hover');
|
|
290
|
+
});
|
|
291
|
+
gmailView.on('blur', (e) => {
|
|
292
|
+
AppMenuItemView.#menuItemChangeBus.emit([
|
|
293
|
+
'mouseleave',
|
|
294
|
+
gmailElement,
|
|
295
|
+
e,
|
|
296
|
+
]);
|
|
297
|
+
this.emit('blur');
|
|
264
298
|
});
|
|
265
|
-
AppMenuItemView.#menuItemChangeStream.plug(this.#appMenuItemStream);
|
|
266
|
-
AppMenuItemView.#setUpRouteViewDriverStream(driver);
|
|
267
|
-
AppMenuItemView.#appMenuItemViews.add(this);
|
|
268
299
|
});
|
|
300
|
+
AppMenuItemView.#setUpRouteViewDriverStream(driver);
|
|
301
|
+
AppMenuItemView.#menuItemAddedDeferred.resolve(undefined);
|
|
302
|
+
AppMenuItemView.#appMenuItemViews.add(this);
|
|
269
303
|
}
|
|
270
304
|
async addCollapsiblePanel(panelDescriptor) {
|
|
271
305
|
const collapsiblePanel = await addCollapsiblePanel(this.#driver, panelDescriptor);
|
|
@@ -273,12 +307,13 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
273
307
|
this.#gmailViewPromise.then((gmailView) => {
|
|
274
308
|
const gmailElement = gmailView.element;
|
|
275
309
|
if (gmailElement) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
310
|
+
collapsiblePanel.on('blur', (e) => {
|
|
311
|
+
AppMenuItemView.#menuItemChangeBus.value([
|
|
312
|
+
'mouseleave',
|
|
313
|
+
gmailElement,
|
|
314
|
+
e,
|
|
315
|
+
]);
|
|
280
316
|
});
|
|
281
|
-
AppMenuItemView.#menuItemChangeStream.plug(this.#collapsiblePanelStream);
|
|
282
317
|
}
|
|
283
318
|
if (gmailElement && collapsiblePanel) {
|
|
284
319
|
AppMenuItemView.#menuItemToPanelMap.set(gmailElement, collapsiblePanel.element);
|
|
@@ -291,6 +326,7 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
291
326
|
async update(menuItemDescriptor) {
|
|
292
327
|
const gmailView = await this.#gmailViewPromise;
|
|
293
328
|
gmailView.setMenuItemDescriptor(menuItemDescriptor);
|
|
329
|
+
this.#menuItemDescriptor = menuItemDescriptor;
|
|
294
330
|
}
|
|
295
331
|
remove() {
|
|
296
332
|
if (this.#destroyed)
|
|
@@ -303,22 +339,6 @@ export class AppMenuItemView extends EventEmitter {
|
|
|
303
339
|
AppMenuItemView.#menuItemToPanelMap.delete(gmailView.element);
|
|
304
340
|
gmailView.remove();
|
|
305
341
|
});
|
|
306
|
-
this.#appMenuItemStream &&
|
|
307
|
-
AppMenuItemView.#menuItemChangeStream.unplug(this.#appMenuItemStream);
|
|
308
|
-
this.#collapsiblePanelStream &&
|
|
309
|
-
AppMenuItemView.#menuItemChangeStream.unplug(this.#collapsiblePanelStream);
|
|
310
342
|
AppMenuItemView.#appMenuItemViews.delete(this);
|
|
311
|
-
initialRoutingStateStopper.destroy();
|
|
312
|
-
}
|
|
313
|
-
async #activate() {
|
|
314
|
-
const gmailView = await this.#gmailViewPromise;
|
|
315
|
-
const appMenuElement = GmailElementGetter.getAppMenuContainer();
|
|
316
|
-
const { ACTIVE } = GmailAppMenuItemView.elementCss;
|
|
317
|
-
// Note this affects both the active app menu item and the collapsible panel.
|
|
318
|
-
for (const el of appMenuElement?.querySelectorAll(`.${ACTIVE}`) ?? []) {
|
|
319
|
-
el.classList.remove(ACTIVE);
|
|
320
|
-
}
|
|
321
|
-
gmailView.activate();
|
|
322
|
-
this.#collapsiblePanel?.activate();
|
|
323
343
|
}
|
|
324
344
|
}
|