Event Handler
This page is a reference to the Event Handler used in the `embed-dossier-mstr-react` library.
Type Definition
export type EventHandler = () => void
The EventHandler is defined as a simple function type that takes no arguments and returns no value (void). However, in practice, when the event is triggered, the handler often receives an event object containing relevant data about the event.
EventHandlers Interface
This type is used throughout the library, notably in the EventHandlers interface which provides typed properties for all available event handlers:
export interface EventHandlers {
onComponentSelectionChanged?: EventHandler
onDossierAuthoringClosed?: EventHandler
onDossierAuthoringSaved?: EventHandler
onDossierInstanceChanged?: EventHandler
onDossierInstanceIDChange?: EventHandler
onError?: EventHandler
onFilterUpdated?: EventHandler
onGraphicsSelected?: EventHandler
onLayoutChanged?: EventHandler
onLibraryItemSelected?: EventHandler
onLibraryItemSelectionCleared?: EventHandler
onLibraryMenuSelected?: EventHandler
onPageLoaded?: EventHandler
onPageRenderFinished?: EventHandler
onPageSwitched?: EventHandler
onPanelSwitched?: EventHandler
onPromptAnswered?: EventHandler
onPromptLoaded?: EventHandler
onSessionError?: EventHandler
onVisualizationResized?: EventHandler
onVisualizationElementsChanged?: EventHandler
onVizSelectionChanged?: EventHandler
}
Usage Examples
Basic Usage
Here's a simple example of defining and using an EventHandler:
import React, { useEffect, useRef } from "react"
import { useLoadMstrSDK } from "embed-dossier-mstr-react"
const DossierWithEventHandler = () => {
const containerRef = useRef<HTMLDivElement>(null)
const serverUrl = "https://your-microstrategy-server.com/MicroStrategyLibrary"
const { isSdkLoaded } = useLoadMstrSDK({ serverUrlLibrary: serverUrl })
useEffect(() => {
if (!isSdkLoaded || !containerRef.current) return
const embedDossier = async () => {
try {
// Authentication and other setup code...
const dossier = await window.microstrategy.dossier.create({
placeholder: containerRef.current,
url: `${serverUrl}/app/D3B3BA4411E9AF7761940080EFC55F57/F5929595477EAFE63242EF8985BD8CA5`,
})
// Define an event handler function
const pageSwitchHandler: EventHandler = () => {
console.log("Page switched in the dossier")
// Access current page information or perform other actions
}
// Register the event handler
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_PAGE_SWITCHED,
pageSwitchHandler
)
} catch (error) {
console.error("Error:", error)
}
}
embedDossier()
}, [isSdkLoaded])
return <div ref={containerRef} style={{ width: "100%", height: "600px" }} />
}
export default DossierWithEventHandler
Accessing Event Data
While the EventHandler type is defined as taking no arguments, in practice you can define your handlers to accept an event parameter:
// Define handler with event parameter
const filterUpdateHandler = (event: any) => {
console.log("Filter updated with data:", event)
// Access event data properties
if (event && event.filterInfo) {
console.log("Filter name:", event.filterInfo.name)
console.log("Filter values:", event.filterInfo.values)
}
}
// Register the handler
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_FILTER_UPDATED,
filterUpdateHandler
)
Multiple Events
You can register the same handler for multiple events or different handlers for different events:
// Same handler for multiple events
const genericHandler: EventHandler = () => {
console.log("An event occurred!")
}
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_PAGE_LOADED,
genericHandler
)
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_PAGE_RENDER_FINISHED,
genericHandler
)
// Different handlers for different events
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_ERROR,
(error) => {
console.error("Error occurred:", error)
}
)
dossier.registerEventHandler(
window.microstrategy.dossier.EventType.ON_SESSION_ERROR,
(sessionError) => {
console.error("Session error:", sessionError)
// Redirect to login page or show session expired message
}
)
Using Event Handlers with Cleanup
It's important to clean up event handlers when your component unmounts:
useEffect(() => {
let dossierInstance: any = null
const embedDossier = async () => {
// Create dossier and assign to dossierInstance...
const pageSwitchHandler = () => {
console.log("Page switched")
}
dossierInstance.registerEventHandler(
window.microstrategy.dossier.EventType.ON_PAGE_SWITCHED,
pageSwitchHandler
)
}
embedDossier()
// Cleanup function
return () => {
if (dossierInstance) {
dossierInstance.removeEventHandler(
window.microstrategy.dossier.EventType.ON_PAGE_SWITCHED,
pageSwitchHandler
)
}
}
}, [])
Best Practices
-
Define reusable handlers: For complex applications, consider defining event handlers as standalone functions that can be reused and tested independently.
const handleFilterUpdate = (event: any) => { // Handle filter update logic } const handlePageSwitch = (event: any) => { // Handle page switch logic } // Register handlers dossier.registerEventHandler( window.microstrategy.dossier.EventType.ON_FILTER_UPDATED, handleFilterUpdate ) dossier.registerEventHandler( window.microstrategy.dossier.EventType.ON_PAGE_SWITCHED, handlePageSwitch ) -
Use wrapper functions: When available, use the specific wrapper functions provided by the MicroStrategy SDK:
// Instead of: dossier.registerEventHandler( window.microstrategy.dossier.EventType.ON_FILTER_UPDATED, handleFilterUpdate ) // Use: dossier.registerFilterUpdateHandler(handleFilterUpdate) -
Handle errors gracefully: Always wrap your event handler logic in try-catch blocks to prevent uncaught exceptions.
const handleFilterUpdate = (event: any) => { try { // Handle filter update logic } catch (error) { console.error("Error in filter update handler:", error) } } -
Clean up handlers: Always remove event handlers when components unmount to prevent memory leaks and unexpected behavior.
Related Types
EventTypes: A type that represents all possible event types that can be handled.EventHandlers: An interface that provides typed event handler properties for all available events.MicroStrategyDossier: The main interface that exposes event registration methods.