Global EventBus events
Jump to navigation
Jump to search
Intro
You can now use the event bus events below in order to manage page navigation, sessions and loading states outside of the portals app (e.g. in custom components:
- elementHover - now you can invoke the element over to turbo-load into memory from external applications
- elementClick - now you can invoke the element click to turbo-load into memory from external applications and navigate to the page
- sessionUpdate - you can set the session externally
- refreshPage - you can cause a page refresh
- isLoading - you can set the portal loading status externally
You can create your own event bus implementation like so:
//Facilitates communication between sibling components
export default class EventBus {
static fireEvent(eventName, payload) {
if (!window?.eventListeners) {
window["eventListeners"] = {};
}
if (!window?.eventsPayload) {
window["eventsPayload"] = {};
}
window.eventsPayload[eventName] = payload;
if (window.eventListeners[eventName]) {
window.eventListeners[eventName].forEach((listener) => {
try {
listener(payload);
} catch (error) {
console.error(error);
}
});
}
}
static getEvent(eventName) {
if (!window?.eventsPayload) {
window["eventsPayload"] = {};
}
return window.eventsPayload[eventName] ?? null;
}
static addEventListener(eventName, listener) {
if (!window?.eventListeners) {
window["eventListeners"] = {};
}
if (!window?.eventListeners[eventName]) {
window.eventListeners[eventName] = [];
}
window?.eventListeners[eventName].push(listener);
}
static removeEventListener(eventName, listener) {
if (!window?.eventListeners) {
window["eventListeners"] = {};
}
if (window?.eventListeners[eventName]) {
const index = window?.eventListeners[eventName].indexOf(listener);
if (index !== -1) {
window.eventListeners[eventName].splice(index, 1);
}
}
}
}
Then simply raise the correct event:
//This will cause a navigation to the index page
EventBus.fireEvent('elementClick', {
detail: '#Index',
});