@shko.online/componentframework-mock
Version:
Mocking library to help with testing PowerApps Component Framework Components
62 lines (61 loc) • 2.91 kB
JavaScript
/*
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(() => {
Object.getOwnPropertyNames(componentFrameworkMockGeneratorReact.context._parameters).forEach(p => {
var parameter = componentFrameworkMockGeneratorReact.context._parameters[p];
if (parameter instanceof DataSetMock) {
parameter._updateView = updateView;
}
});
mockNotifyOutputChanged(componentFrameworkMockGeneratorReact, componentFrameworkMockGeneratorReact.control.getOutputs?.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);
};