mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
78 lines
3.8 KiB
JavaScript
78 lines
3.8 KiB
JavaScript
import { shouldExpandGlobalContextPanel } from '../rightRailPolicy.js';
|
|
|
|
export function _initGlobalContextPanel() {
|
|
const contextTabs = [this._globalContextFlightsBtn, this._globalContextMissionsBtn].filter(Boolean);
|
|
contextTabs.forEach((tab, index) => this.listen(tab, 'keydown', (event) => {
|
|
let nextIndex = null;
|
|
if (event.key === 'ArrowRight') nextIndex = (index + 1) % contextTabs.length;
|
|
else if (event.key === 'ArrowLeft') nextIndex = (index - 1 + contextTabs.length) % contextTabs.length;
|
|
else if (event.key === 'Home') nextIndex = 0;
|
|
else if (event.key === 'End') nextIndex = contextTabs.length - 1;
|
|
if (nextIndex === null) return;
|
|
event.preventDefault();
|
|
contextTabs[nextIndex].focus({ preventScroll: true });
|
|
contextTabs[nextIndex].click();
|
|
}));
|
|
this.listen(this._globalContextFlightsBtn, 'click', () => {
|
|
if (this.destroyed || this._contextModeChanging || this._clearSelectedLayersPromise) return;
|
|
const nextMode = this._contextMode === 'flights' ? null : 'flights';
|
|
this._claimContextVisualAuthority();
|
|
void this._runUserFacingContextAction(
|
|
(notificationToken) => this._selectContextMode(
|
|
nextMode,
|
|
{ notificationToken },
|
|
),
|
|
'Contacts could not complete the requested transition; try again',
|
|
).then((succeeded) => {
|
|
if (!this.destroyed && nextMode && shouldExpandGlobalContextPanel({
|
|
action: 'contacts',
|
|
explicitUserAction: true,
|
|
succeeded: succeeded === true,
|
|
})) this.actions.setPanelCollapsed('global-context-panel', false, { explicit: true });
|
|
});
|
|
});
|
|
this.listen(this._globalContextMissionsBtn, 'click', () => {
|
|
if (this.destroyed || this._contextModeChanging || this._clearSelectedLayersPromise) return;
|
|
const nextMode = this._contextMode === 'space-missions' ? null : 'space-missions';
|
|
this._claimContextVisualAuthority();
|
|
void this._runUserFacingContextAction(
|
|
(notificationToken) => this._selectContextMode(
|
|
nextMode,
|
|
{ notificationToken },
|
|
),
|
|
'Space Missions could not complete the requested transition; try again',
|
|
).then((succeeded) => {
|
|
if (!this.destroyed && nextMode && shouldExpandGlobalContextPanel({
|
|
action: 'space-missions',
|
|
explicitUserAction: true,
|
|
succeeded: succeeded === true,
|
|
})) this.actions.setPanelCollapsed('global-context-panel', false, { explicit: true });
|
|
});
|
|
});
|
|
this.listen(this._installationsSearchBtn, 'click', () => {
|
|
if (this.destroyed || !this._dataManager?.layers?.has('military-installations')) return;
|
|
const button = this._installationsSearchBtn;
|
|
if (button.getAttribute('aria-busy') === 'true') return;
|
|
button.setAttribute('aria-disabled', 'true');
|
|
button.setAttribute('aria-busy', 'true');
|
|
void this._runUserFacingContextAction(async (notificationToken) => {
|
|
const enabled = await this._dataManager.setEnabled('military-installations', true, {
|
|
origin: 'user',
|
|
notificationToken,
|
|
});
|
|
if (this.destroyed || enabled === false || !this._dataManager.isEnabled('military-installations')) return false;
|
|
const searched = await this.installations.searchNearby?.();
|
|
if (this.destroyed || searched === false) return false;
|
|
const stats = this.installations.getStats?.();
|
|
this.showToast(stats?.statusMessage || (stats?.status === 'zoom-in'
|
|
? 'Zoom in to search mapped installations'
|
|
: 'Nearby installations refreshed'));
|
|
return true;
|
|
}, 'Nearby installations could not be refreshed; try again').finally(() => {
|
|
if (this.destroyed) return;
|
|
button.setAttribute('aria-disabled', 'false');
|
|
button.setAttribute('aria-busy', 'false');
|
|
});
|
|
});
|
|
}
|