UNPKG

@equinor/fusion-react-power-bi

Version:
56 lines 2.4 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { useContext, useEffect, useMemo } from 'react'; import { PowerBIEmbed } from 'powerbi-client-react'; import { context, PowerBIEmbedEvents } from '../../context'; import { service as PowerBIServices, factories } from 'powerbi-client'; import useConfig from './useConfig'; import usePowerBIFilters from './useFilters'; import { createStyles, makeStyles } from '@equinor/fusion-react-styles'; const service = new PowerBIServices.Service(factories.hpmFactory, factories.wpmpFactory, factories.routerFactory); const useStyles = makeStyles(() => createStyles({ iframeContainer: { display: 'flex', height: '100%', width: '100%', '&>iframe': { border: 'none' }, }, }), { name: 'fusion-powerBi-iframe' }); export const PowerBIReportView = ({ config }) => { const { metrics, component, event$ } = useContext(context); const embedConfig = useConfig(config); const eventHandlers = useMemo(() => Object.values(PowerBIEmbedEvents).reduce((cur, type) => cur.set(type, (event, entity) => event$.next({ type, event, entity })), new Map()), [event$]); const getEmbeddedComponent = (value) => { if (component) { component.current = value; } }; usePowerBIFilters(event$, config?.filters); // when access token changes reload the component useEffect(() => { if (!embedConfig?.accessToken) return; metrics?.performance.mark('load'); try { // component might been unmounted console.debug('updating access token'); component?.current?.setAccessToken(embedConfig.accessToken); } catch (err) { // TODO - make own action console.error(err); metrics?.error({ name: 'access_token_error', properties: { error: err } }); } }, [metrics, component, embedConfig?.accessToken]); const cssClassName = useStyles().iframeContainer; // only render component when access token if (embedConfig) { return ( // TODO // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore _jsx(PowerBIEmbed, { ...{ embedConfig, eventHandlers, getEmbeddedComponent, cssClassName, service } })); } return null; }; export default PowerBIReportView; //# sourceMappingURL=PowerBIReportView.js.map