@equinor/fusion-react-power-bi
Version:
React component for displaying an person information
56 lines • 2.4 kB
JavaScript
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