devexpress-reporting-react
Version:
DevExpress Reporting React provides the capability to develop a reporting application to create and customize reports.
27 lines (26 loc) • 1.68 kB
JavaScript
import React from 'react';
const getComponentOptions = (props, propTypes, defaultProps) => {
const validProps = Object.keys(propTypes);
const propKeys = Object.keys(props).filter(propName => validProps.indexOf(propName) !== -1 && propName !== 'children');
return propKeys.length === 0 ? void 0 : propKeys.reduce((acc, propName) => {
acc[propName] = typeof props[propName] !== 'undefined' ? props[propName] : defaultProps && defaultProps[propName];
return acc;
}, {});
};
const getControlOptions = (props, propTypes, defaultProps, validChildComponents) => {
const controlOptions = getComponentOptions(props, propTypes, defaultProps) ?? {};
const childReactElements = React.Children.toArray(props.children)
.filter(x => React.isValidElement(x));
validChildComponents && Object.keys(validChildComponents).forEach(optionsComponentkey => {
const componentRecord = validChildComponents[optionsComponentkey];
const childComponent = childReactElements.find(x => x && x.type && x.type.displayName === componentRecord.component.displayName);
if (childComponent) {
controlOptions[optionsComponentkey] = getControlOptions(childComponent.props, componentRecord.component.propTypes, componentRecord.component.defaultProps, componentRecord.children);
}
});
return controlOptions;
};
const getEventRaiser = (callbacks, getSender) => {
return (eventName, args) => callbacks && callbacks[eventName] && callbacks[eventName].call(getSender(), { sender: getSender(), args: args, component: void 0 }); // TODO - ensure component is optional
};
export default { getControlOptions, getEventRaiser };