UNPKG

@shko.online/componentframework-mock

Version:

Mocking library to help with testing PowerApps Component Framework Components

63 lines (62 loc) 3.05 kB
/* Copyright (c) 2022 Betim Beja and Shko Online LLC Licensed under the MIT license. */ import { createElement, Fragment, useCallback, useEffect, useRef, useState } from 'react'; import { mockNotifyOutputChanged } from './mockNotifyOutputChanged'; import { mockRefreshDatasets } from './mockRefreshDatasets'; import { DataSetMock } from '../ComponentFramework-Mock/PropertyTypes'; export const ReactResizeObserver = ({ componentFrameworkMockGeneratorReact, circuitBreaker }) => { const containerRef = useRef(); const [Component, setComponent] = useState(/*#__PURE__*/createElement(Fragment)); const updateView = useCallback(() => { setComponent(componentFrameworkMockGeneratorReact.control.updateView(componentFrameworkMockGeneratorReact.context)); }, [setComponent, componentFrameworkMockGeneratorReact]); useEffect(() => { var _componentFrameworkMo; Object.getOwnPropertyNames(componentFrameworkMockGeneratorReact.context._parameters).forEach(p => { var parameter = componentFrameworkMockGeneratorReact.context._parameters[p]; if (parameter instanceof DataSetMock) { parameter._updateView = updateView; } }); mockNotifyOutputChanged(componentFrameworkMockGeneratorReact, (_componentFrameworkMo = componentFrameworkMockGeneratorReact.control.getOutputs) === null || _componentFrameworkMo === void 0 ? void 0 : _componentFrameworkMo.bind(componentFrameworkMockGeneratorReact.control), () => { componentFrameworkMockGeneratorReact.RefreshParameters(); updateView(); componentFrameworkMockGeneratorReact.RefreshDatasets(); }); componentFrameworkMockGeneratorReact.resizeObserver = new ResizeObserver(entries => { const size = entries[0]; componentFrameworkMockGeneratorReact.context.mode.allocatedHeight = size.contentRect.height; componentFrameworkMockGeneratorReact.context.mode.allocatedWidth = size.contentRect.width; componentFrameworkMockGeneratorReact.RefreshParameters(); updateView(); }); mockRefreshDatasets(componentFrameworkMockGeneratorReact, updateView); componentFrameworkMockGeneratorReact.context.mode.trackContainerResize.callsFake(value => { if (!containerRef.current) { console.error('Container Ref is null'); return; } if (value) componentFrameworkMockGeneratorReact.resizeObserver.observe(containerRef.current);else componentFrameworkMockGeneratorReact.resizeObserver.unobserve(containerRef.current); }); if (componentFrameworkMockGeneratorReact.context.mode._TrackingContainerResize && containerRef.current) { componentFrameworkMockGeneratorReact.resizeObserver.observe(containerRef.current); } }, []); useEffect(() => { componentFrameworkMockGeneratorReact.RefreshParameters(); updateView(); componentFrameworkMockGeneratorReact.RefreshDatasets(); }, [circuitBreaker]); return /*#__PURE__*/createElement('div', { style: { width: '100%', height: '100%' }, ref: containerRef }, Component); };