UNPKG

devexpress-reporting-react

Version:

DevExpress Reporting React provides the capability to develop a reporting application to create and customize reports.

65 lines (64 loc) 2.89 kB
import React from 'react'; import { getParentContainer } from '@devexpress/analytics-core/widgets/_utils'; import { extend } from '@devexpress/analytics-core/analytics-internal-native'; export const useDropDownOptions = (ref, mapper) => { const [dropDownOptions, setDropDownOptions] = React.useState({}); React.useEffect(() => { const widget = ref.current; if (!widget) return; const element = widget.instance().element(); const container = getParentContainer(element); setDropDownOptions(mapper({ element, container })); }, []); return dropDownOptions; }; const useEditorExtendedOptions = (ref, data, getPrivateWidgetOptions) => { React.useEffect(() => { if (!ref.current || !(data.extendedOptions || getPrivateWidgetOptions())) return; const dxWidget = ref.current.instance(); dxWidget.beginUpdate(); const options = extend(true, {}, getPrivateWidgetOptions(), data.extendedOptions); dxWidget.option(options); dxWidget.endUpdate(); }, [data.extendedOptions]); }; const onPropertyChanged = (expectedWidgetOptions, widgetOptionsState, setWidgetOptionsState) => { const nextWidgetState = { ...widgetOptionsState }; for (const name in expectedWidgetOptions) { if (typeof expectedWidgetOptions[name] !== 'function' && expectedWidgetOptions[name] !== widgetOptionsState[name]) { if (Array.isArray(expectedWidgetOptions[name])) { if (JSON.stringify(widgetOptionsState[name]) !== JSON.stringify(expectedWidgetOptions[name])) nextWidgetState[name] = expectedWidgetOptions[name]; } else { nextWidgetState[name] = expectedWidgetOptions[name]; } } } setWidgetOptionsState(nextWidgetState); }; export const useEditorOptions = (ref, data, args) => { const { getOptions, getEditorOptions, getPrivateWidgetOptions = () => null } = args; const getExpectedOptions = () => { if (getOptions) return getOptions(); return data.getOptions(getEditorOptions()); }; const [options, setOptions] = React.useState(getExpectedOptions()); React.useEffect(() => { const model = data.getModel(); return model.events.on('propertyChanged', () => onPropertyChanged(getExpectedOptions(), options, setOptions)); }, [data]); useEditorExtendedOptions(ref, data, getPrivateWidgetOptions); return options; }; export const useValidatorOptions = (data) => { const getOptions = () => data.getValidatorOptions(data.validatorOptions || { validationRules: data.validationRules || [] }); const [validationOptions, setValidationOptions] = React.useState(getOptions()); React.useEffect(() => { setValidationOptions(getOptions()); }, [data]); return validationOptions; };