devexpress-reporting-react 24.1.2-beta → 24.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +1 -1
  2. package/core/options-manager.js +1 -2
  3. package/dx-report-designer/DxReportDesigner.d.ts +6 -2
  4. package/dx-report-designer/DxReportDesigner.js +21 -8
  5. package/dx-report-designer/index.d.ts +6 -4
  6. package/dx-report-designer/index.js +4 -3
  7. package/dx-report-designer/options/Callbacks.d.ts +34 -33
  8. package/dx-report-designer/options/Callbacks.js +2 -1
  9. package/dx-report-designer/options/DesignerModelSettings.js +2 -2
  10. package/dx-report-designer/options/ParameterEditingSettings.d.ts +2 -2
  11. package/dx-report-designer/options/ParameterEditingSettings.js +4 -4
  12. package/dx-report-designer/options/RequestOptions.d.ts +8 -0
  13. package/dx-report-designer/options/{RequestSettings.js → RequestOptions.js} +4 -4
  14. package/dx-report-viewer/DxReportViewer.d.ts +6 -2
  15. package/dx-report-viewer/DxReportViewer.js +32 -15
  16. package/dx-report-viewer/components/analytics/Actions/Actions.js +5 -8
  17. package/dx-report-viewer/components/analytics/Designer/Designer.js +2 -3
  18. package/dx-report-viewer/components/analytics/Properties/CollectionEditor/CollectionEditor.js +1 -1
  19. package/dx-report-viewer/components/analytics/Properties/Editors/EditorBase/EditorBase.js +1 -2
  20. package/dx-report-viewer/components/analytics/Properties/Editors/SelectBox/SelectBoxEditor.js +5 -8
  21. package/dx-report-viewer/components/analytics/Properties/Editors/editorHooks.js +1 -1
  22. package/dx-report-viewer/components/analytics/TabPanel/TabPanel.js +1 -1
  23. package/dx-report-viewer/components/analytics/Widgets/Treelist/Treelist.js +11 -7
  24. package/dx-report-viewer/components/core/LazyTemplate/LazyTemplate.js +2 -4
  25. package/dx-report-viewer/components/core/Template/Template.js +2 -4
  26. package/dx-report-viewer/components/core/TemplateEngineProvider/TemplateEngineProvider.js +1 -2
  27. package/dx-report-viewer/components/reporting/DocumentMap/DocumentMap.js +2 -3
  28. package/dx-report-viewer/components/reporting/Editing/CharacterComb/CharacterComb.js +10 -3
  29. package/dx-report-viewer/components/reporting/Editing/ExportTool/ExportTool.js +1 -1
  30. package/dx-report-viewer/components/reporting/Editing/TextField/Container/EditingFieldContainer.js +1 -12
  31. package/dx-report-viewer/components/reporting/Mobile/Actions/MobileActionsExport/MobileActionsExport.js +1 -1
  32. package/dx-report-viewer/components/reporting/Mobile/Gallery/MobileGallery.js +4 -2
  33. package/dx-report-viewer/components/reporting/Mobile/Parameters/MobileParametersDateRange/MobileParametersDateRange.js +1 -1
  34. package/dx-report-viewer/components/reporting/Mobile/Parameters/MobileParametersPopup/MobileParametersPopup.js +1 -2
  35. package/dx-report-viewer/components/reporting/Mobile/Search/MobileSearch.js +1 -1
  36. package/dx-report-viewer/components/reporting/ParametersPanel/DateRange/DateRange/DateRange.js +1 -1
  37. package/dx-report-viewer/components/reporting/ParametersPanel/DateRange/Mobile/DateRangeMobile.js +1 -2
  38. package/dx-report-viewer/components/reporting/ParametersPanel/DateRange/PopupContainer/PopupContainer.js +1 -2
  39. package/dx-report-viewer/components/reporting/ParametersPanel/Editor/Editor/Editor.js +1 -2
  40. package/dx-report-viewer/components/reporting/ParametersPanel/MultiValue/MultiValue/MultiValue.js +5 -6
  41. package/dx-report-viewer/components/reporting/ReportPreview/Breadcrumbs/Breadcrumbs.js +6 -3
  42. package/dx-report-viewer/components/reporting/ReportPreview/BrickClickable/BrickClickable.js +2 -2
  43. package/dx-report-viewer/components/reporting/ReportPreview/ProgressBar/ProgressBar.js +1 -1
  44. package/dx-report-viewer/components/reporting/ReportPreview/Surface/Surface.js +1 -2
  45. package/dx-report-viewer/components/reporting/Search/Search.js +1 -2
  46. package/dx-report-viewer/components/reporting/Toolbar/Pager/Pager.js +5 -2
  47. package/dx-report-viewer/components/reporting/Widgets/PictureEditor/Painter/Painter.js +5 -7
  48. package/dx-report-viewer/components/reporting/Widgets/PictureEditor/PictureEditor.js +3 -5
  49. package/dx-report-viewer/core/processStyles.d.ts +1 -0
  50. package/dx-report-viewer/core/processStyles.js +9 -0
  51. package/dx-report-viewer/core/template-engine.js +1 -1
  52. package/dx-report-viewer/hooks/dxEllipsisEditor.js +1 -1
  53. package/dx-report-viewer/hooks/dxMutationObserver.d.ts +1 -1
  54. package/dx-report-viewer/hooks/dxMutationObserver.js +2 -2
  55. package/dx-report-viewer/hooks/dxResizable.js +3 -3
  56. package/dx-report-viewer/index.d.ts +4 -3
  57. package/dx-report-viewer/index.js +2 -2
  58. package/dx-report-viewer/options/RequestOptions.d.ts +8 -0
  59. package/dx-report-viewer/options/{RequestSettings.js → RequestOptions.js} +5 -5
  60. package/package.json +4 -4
  61. package/dx-report-designer/options/RequestSettings.d.ts +0 -8
  62. package/dx-report-viewer/options/RequestSettings.d.ts +0 -8
@@ -1,11 +1,18 @@
1
1
  import React from 'react';
2
2
  import dxZoom from '../../../../hooks/dxZoom';
3
+ import { processStyles } from '../../../../core/processStyles';
3
4
  const CharacterComb = ({ data }) => {
4
5
  const zoomRef = dxZoom(data.zoom);
5
- return (React.createElement("div", { ref: zoomRef, style: data.containerStyle, onClick: event => data.activateEditor(data, event.nativeEvent), className: `dxrp-editing-field-charactercomb dx-accessibility-editing-field-item dx-accessibility-border-accented ${data.active ? 'active' : ''} ${data.field.readOnly ? 'readOnly' : ''}` },
6
+ const [value, setValue] = React.useState(data.field.editorValue.toString());
7
+ const handleValueChanged = event => {
8
+ const newValue = event.target.value;
9
+ setValue(newValue);
10
+ data.field.editorValue = newValue;
11
+ };
12
+ return (React.createElement("div", { ref: zoomRef, style: processStyles(data.containerStyle), onClick: event => data.activateEditor(data, event.nativeEvent), className: `dxrp-editing-field-charactercomb dx-accessibility-editing-field-item dx-accessibility-border-accented ${data.active ? 'active' : ''} ${data.field.readOnly ? 'readOnly' : ''}` },
6
13
  (!data.active || data.field.readOnly) &&
7
- data.cells.map((cell, index) => (React.createElement("div", { key: index, className: "dxrp-editing-field-charactercomb-cell", style: cell.style }, cell.text))),
14
+ data.cells.map((cell, index) => (React.createElement("div", { key: index, className: "dxrp-editing-field-charactercomb-cell", style: processStyles(cell.style) }, cell.text))),
8
15
  data.active && !data.field.readOnly &&
9
- React.createElement("textarea", { className: "dxrp-editing-field-text dxrd-background-white", value: data.field.editorValue.toString(), style: data.textStyle, onBlur: () => data.hideEditor(true), onKeyUp: event => data.keypressAction(data, event.nativeEvent) })));
16
+ React.createElement("textarea", { className: "dxrp-editing-field-text dxrd-background-white", value: value, onChange: handleValueChanged, style: processStyles(data.textStyle), onBlur: () => data.hideEditor(true), onKeyUp: event => data.keypressAction(data, event.nativeEvent) })));
10
17
  };
11
18
  export default CharacterComb;
@@ -15,7 +15,7 @@ const ExportTool = ({ data }) => {
15
15
  return (React.createElement("div", { ref: elementRef },
16
16
  React.createElement("div", { className: "dxrd-visually-hidden" },
17
17
  React.createElement("form", { action: "data.exportActionUri", method: "post" }, data.exportFormData.map(item => (React.createElement("input", { key: item.name, name: item.name, value: item.value }))))),
18
- React.createElement(Popup, { width: data.popupOptions.width, height: data.popupOptions.height, title: data.popupOptions.title, visible: data.popupOptions.visible, showCloseButton: true, onHidden: () => data.popupOptions.onHidden(), toolbarItems: data.popupOptions.toolbarItems, wrapperAttr: data.popupOptions.wrapperAttr, container: popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.container, position: popupOptions === null || popupOptions === void 0 ? void 0 : popupOptions.position },
18
+ React.createElement(Popup, { width: data.popupOptions.width, height: data.popupOptions.height, title: data.popupOptions.title, visible: data.popupOptions.visible, showCloseButton: true, onHidden: () => data.popupOptions.onHidden(), toolbarItems: data.popupOptions.toolbarItems, wrapperAttr: data.popupOptions.wrapperAttr, container: popupOptions?.container, position: popupOptions?.position },
19
19
  React.createElement("div", { className: "dxrd-print-dialog-content" },
20
20
  React.createElement("div", null, data.printingTexts.caption),
21
21
  React.createElement("p", null),
@@ -1,18 +1,7 @@
1
1
  import React from 'react';
2
2
  import Template from '../../../../core/Template';
3
3
  import dxZoom from '../../../../../hooks/dxZoom';
4
- const processStyles = styles => {
5
- const updateKey = (obj, key, newKey) => {
6
- if (obj[key]) {
7
- obj[newKey] = obj[key];
8
- delete obj[key];
9
- }
10
- };
11
- const newStyles = Object.assign({}, styles);
12
- updateKey(newStyles, 'line-height', 'lineHeight');
13
- updateKey(newStyles, 'border-color', 'borderColor');
14
- return newStyles;
15
- };
4
+ import { processStyles } from '../../../../../core/processStyles';
16
5
  const EditingFieldContainer = ({ data }) => {
17
6
  const zoomRef = dxZoom(data.zoom);
18
7
  return (React.createElement("div", { ref: zoomRef, style: processStyles(data.containerStyle), className: `dxrp-editing-field-container dx-accessibility-editing-field-item dx-accessibility-border-accented ${data.active ? 'active' : ''} ${data.field.readOnly ? 'readonly' : ''}` },
@@ -4,6 +4,6 @@ import useDxParentContainer from '../../hooks/mobileParentContainer';
4
4
  const MobileActionsExport = ({ data }) => {
5
5
  const [ref, parentContainer] = useDxParentContainer();
6
6
  const renderContent = () => (React.createElement("div", null, data.items.map(item => React.createElement("div", { key: item.text, className: "dxrd-menu-export-item", onClick: item.action }, item.text))));
7
- return (React.createElement(Popover, { ref: ref, className: "dxrd-menu-export-popover", wrapperAttr: { class: 'dxrd-menu-export-popover' }, width: "266px", height: "266px", visible: data.visible, target: ".dxrdp-mobile-action.dxrd-image-export-to", container: parentContainer, contentRender: renderContent }));
7
+ return (React.createElement(Popover, { ref: ref, className: "dxrd-menu-export-popover", wrapperAttr: { class: 'dxrd-menu-export-popover' }, width: "266px", height: "266px", visible: data.visible, target: ".dxrdp-mobile-action.dxrd-image-export-to", container: parentContainer, onHidden: data.hide, contentRender: renderContent }));
8
8
  };
9
9
  export default MobileActionsExport;
@@ -10,7 +10,7 @@ const renderGalleryItem = () => (item) => (React.createElement(ScrollView, { cla
10
10
  React.createElement("div", { className: "dxrd-gallery-blocks", style: {
11
11
  width: item.gallery.contentSize ? item.gallery.contentSize.width + 'px' : undefined,
12
12
  height: item.gallery.contentSize ? item.gallery.contentSize.height + +'px' : undefined
13
- } }, item.blocks.filter(block => block.page).map(block => (React.createElement("div", { className: `dxrd-gallery-block ${block.classSet}`, style: {
13
+ } }, item.blocks.filter(block => block.page).map(block => (React.createElement("div", { key: block.page.unifier, className: `dxrd-gallery-block ${block.classSet}`, style: {
14
14
  left: block.position.left + 'px',
15
15
  right: block.position.right + 'px',
16
16
  top: block.position.top + 'px',
@@ -35,7 +35,9 @@ const MobileGallery = ({ data, slideOptions, gallery }) => {
35
35
  const widget = galleryRef.current.instance();
36
36
  widget.option('gallery', gallery || data.gallery);
37
37
  widget.option('slideOptions', slideOptions || data.slideOptions);
38
- new dxGalleryExtender(widget).extend(widget.element());
38
+ const extender = new dxGalleryExtender(widget);
39
+ extender.extend(widget.element());
40
+ return () => extender.dispose();
39
41
  }, []);
40
42
  return (React.createElement(Gallery, { className: "dxrd-mobile-gallery", ref: galleryRef, dataSource: data.gallery.items, animationEnabled: data.gallery.animationEnabled, disabled: data.zoomUpdating, width: "100%", height: "100%", showIndicator: false, loop: true, onSelectionChanged: data.onSlide, onOptionChanged: data.gallery.onOptionChanged, itemRender: renderGalleryItem() }));
41
43
  };
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import DateRange from '../../../ParametersPanel/DateRange/DateRange';
3
- const MobileParametersDateRange = ({ data }) => (React.createElement(DateRange, { data: Object.assign(Object.assign({}, data), { isMobile: true }) }));
3
+ const MobileParametersDateRange = ({ data }) => (React.createElement(DateRange, { data: { ...data, isMobile: true } }));
4
4
  export default MobileParametersDateRange;
@@ -8,9 +8,8 @@ const MobileParametersPopup = ({ data }) => {
8
8
  const [ref, parentContainer] = useDxParentContainer();
9
9
  const forceRerender = useDxForceRerender();
10
10
  React.useEffect(() => {
11
- var _a;
12
11
  const eventHolder = data;
13
- return (_a = eventHolder._viewModelEvents) === null || _a === void 0 ? void 0 : _a.on(ViewModelChangedEvent, forceRerender);
12
+ return eventHolder._viewModelEvents?.on(ViewModelChangedEvent, forceRerender);
14
13
  }, []);
15
14
  const renderContent = () => {
16
15
  if (!data.visible)
@@ -8,6 +8,6 @@ const MobileSearch = ({ data }) => {
8
8
  React.createElement("div", { className: "dxrdp-taptosearch", hidden: data.editorVisible, onClick: event => data.focusEditor(data, event) },
9
9
  React.createElement("div", { className: "dxrdp-taptosearch-text" }, data.tapToSearchText)),
10
10
  React.createElement("div", { className: "dxrdp-search-panel", hidden: !data.editorVisible },
11
- React.createElement(TextBox, { className: "dxrdp-search-editor", value: data.searchText, onValueChanged: event => data.onSearchTextChanged(event), onEnterKey: data.startSearch })))));
11
+ React.createElement(TextBox, { className: "dxrdp-search-editor", onValueChanged: event => data.onSearchTextChanged(event), onEnterKey: data.startSearch })))));
12
12
  };
13
13
  export default MobileSearch;
@@ -17,7 +17,7 @@ const DateRangeWrapper = ({ data }) => {
17
17
  setViewModel(vm);
18
18
  return () => {
19
19
  subscription && subscription();
20
- editor === null || editor === void 0 ? void 0 : editor.dispose();
20
+ editor?.dispose();
21
21
  };
22
22
  }, []);
23
23
  return (React.createElement("div", { ref: dateRangeEditorRef, className: "dxrv-daterange-editor" }, viewModel && React.createElement(DateRange, { viewModel: viewModel })));
@@ -7,9 +7,8 @@ import { ViewModelChangedEvent } from '@devexpress/analytics-core/serializer/nat
7
7
  const DateRangeMobile = ({ data }) => {
8
8
  const forceRerender = useDxForceRerender();
9
9
  React.useEffect(() => {
10
- var _a;
11
10
  const eventHolder = data.popupModel;
12
- return (_a = eventHolder._viewModelEvents) === null || _a === void 0 ? void 0 : _a.on(ViewModelChangedEvent, forceRerender);
11
+ return eventHolder._viewModelEvents?.on(ViewModelChangedEvent, forceRerender);
13
12
  }, []);
14
13
  return (React.createElement("div", { className: "dxrv-preview-date-range-mobile" },
15
14
  React.createElement("div", { className: "dx-fieldset" },
@@ -20,8 +20,7 @@ const DateRangePopupContainer = ({ data }) => {
20
20
  const scrollViewRef = React.useRef();
21
21
  const predefinedRangesRef = React.useRef();
22
22
  React.useEffect(() => {
23
- var _a;
24
- predefinedRangesRef.current = (_a = scrollViewRef.current) === null || _a === void 0 ? void 0 : _a.instance().element();
23
+ predefinedRangesRef.current = scrollViewRef.current?.instance().element();
25
24
  }, []);
26
25
  useDxMutationObserver(predefinedRangesRef, data.predefinedRanges.accessibilityKeyboardHelper);
27
26
  return (React.createElement(Popup, { width: popupOptions.width, height: popupOptions.height, wrapperAttr: popupOptions.wrapperAttr, position: popupOptions.position, container: popupOptions.container, showTitle: popupOptions.showTitle, showCloseButton: popupOptions.showCloseButton, hideOnOutsideClick: popupOptions.hideOnOutsideClick, onHidden: popupOptions.onHidden, animation: popupOptions.animation, shading: popupOptions.shading, visible: popupOptions.visible },
@@ -16,13 +16,12 @@ const EditorLabel = ({ data }) => {
16
16
  !data.isComplexEditor && React.createElement("label", { className: `propertygrid-editor-displayName ${data.isRequired ? 'dx-field-label-required' : ''}`, title: data.displayName, htmlFor: data.editorInputId, style: { fontWeight: data.isPropertyModified ? 'Bold' : '' }, "data-bind": data.textToSearch ? 'searchHighlighting: { text: displayName, textToSearch: textToSearch }' : undefined }, !data.textToSearch && data.displayName)));
17
17
  };
18
18
  const PropertyEditor = ({ data }) => {
19
- var _a;
20
19
  const accordionRef = React.useRef();
21
20
  useDxAccordion(accordionRef, data);
22
21
  const treeItemCssClasses = ['dx-field'];
23
22
  data.isComplexEditor && treeItemCssClasses.push('dxrd-accessibility-accordion-trigger');
24
23
  data.isComplexEditor && treeItemCssClasses.push('dx-accessibility-focus-border-accented');
25
- ((_a = data.editorOptions) === null || _a === void 0 ? void 0 : _a.hasVerticalLabel) && treeItemCssClasses.push('dxrd-vertical-label');
24
+ data.editorOptions?.hasVerticalLabel && treeItemCssClasses.push('dxrd-vertical-label');
26
25
  const isResolved = (newVal) => data.setIsRendered(newVal);
27
26
  return (React.createElement("div", { className: "dx-editor", hidden: !data.visible },
28
27
  React.createElement("div", { className: "dx-group", ref: accordionRef },
@@ -34,13 +34,12 @@ const MultiValue = ({ data }) => {
34
34
  }
35
35
  }));
36
36
  const validatorOptions = useValidatorOptions(data);
37
- if (value !== options.value) {
38
- setValue(options.value);
39
- }
40
37
  React.useEffect(() => {
41
- var _a;
42
- const model = (_a = data.getModel()) === null || _a === void 0 ? void 0 : _a.value;
43
- return model === null || model === void 0 ? void 0 : model.events.on('valueChanged', () => setValue(model.value));
38
+ const model = data.getModel()?.value;
39
+ if (value !== options.value) {
40
+ setValue(options.value);
41
+ }
42
+ return model?.events.on('valueChanged', () => setValue(model.value));
44
43
  }, []);
45
44
  return (React.createElement(TagBox, { ref: tagBoxRef, dataSource: options.dataSource, searchEnabled: options.searchEnabled, useItemTextAsTitle: options.useItemTextAsTitle, searchExpr: options.searchExpr, value: value, displayExpr: options.displayExpr, valueExpr: options.valueExpr, multiline: options.multiline, showSelectionControls: options.showSelectionControls, onValueChanged: options.onValueChanged, onMultiTagPreparing: options.onMultiTagPreparing, inputAttr: options.inputAttr, disabled: options.disabled, selectAllText: options.selectAllText, placeholder: options.placeholder, maxDisplayedTags: options.maxDisplayedTags, showMultiTagOnly: options.showMultiTagOnly, dropDownOptions: dropDownOptions, selectAllMode: options.selectAllMode }, !!data.validationRules && React.createElement(Validator, { validationRules: validatorOptions.validationRules })));
46
45
  };
@@ -1,15 +1,18 @@
1
1
  import React from 'react';
2
2
  import Template from '../../../core/Template';
3
+ import useDxMutationObserver from '../../../../hooks/dxMutationObserver';
3
4
  const ClickableCrumb = ({ item, handleClick }) => (React.createElement(React.Fragment, null,
4
- React.createElement("a", { className: "breadcrump-link breadcrumb-item dxd-text-accented", onClick: handleClick },
5
+ React.createElement("a", { className: "breadcrump-link breadcrumb-item dxd-text-accented dx-accessibility-border-accented", onClick: handleClick },
5
6
  React.createElement("span", null, item.displayText)),
6
7
  React.createElement(Template, { className: "breadcrumb-item-seperator", template: "dxrd-svg-preview-breadcrumbs_seperator" })));
7
- const CurrentCrumb = ({ item }) => (React.createElement("a", { className: "breadcrumb-item dxd-text-primary" },
8
+ const CurrentCrumb = ({ item }) => (React.createElement("a", { className: "breadcrumb-item dxd-text-primary dx-accessibility-border-accented", "aria-current": "location" },
8
9
  React.createElement("span", null, item.displayText)));
9
10
  const Breadcrumbs = ({ data }) => {
10
11
  if (data.listItems.length <= 1)
11
12
  return null;
12
- return (React.createElement("div", { className: "breadcrumbs-wrapper" }, data.listItems.map((item, index) => data.listItems.length === (index + 1)
13
+ const dxMutationObserverRef = React.useRef();
14
+ useDxMutationObserver(dxMutationObserverRef, data.keyboardHelper);
15
+ return (React.createElement("div", { className: "breadcrumbs-wrapper", ref: dxMutationObserverRef, "aria-label": "Breadcrumbs", role: "navigation" }, data.listItems.map((item, index) => data.listItems.length === (index + 1)
13
16
  ? React.createElement(CurrentCrumb, { key: index, item: item })
14
17
  : React.createElement(ClickableCrumb, { key: index, item: item, handleClick: () => data.onClick(item.position) }))));
15
18
  };
@@ -4,8 +4,8 @@ const BrickClickable = ({ data }) => {
4
4
  const navigationBrickClasses = ['dxrd-report-preview-brick-navigation'];
5
5
  drillDownKey && navigationBrickClasses.push('dxrdp-navigation-brick-drill-down');
6
6
  sortData && navigationBrickClasses.push('dxrdp-navigation-brick-sorting');
7
- (sortData === null || sortData === void 0 ? void 0 : sortData.order) === 1 && navigationBrickClasses.push('dxrdp-navigation-brick-sorting-desc');
8
- (sortData === null || sortData === void 0 ? void 0 : sortData.order) === 2 && navigationBrickClasses.push('dxrdp-navigation-brick-sorting-asc');
7
+ sortData?.order === 1 && navigationBrickClasses.push('dxrdp-navigation-brick-sorting-desc');
8
+ sortData?.order === 2 && navigationBrickClasses.push('dxrdp-navigation-brick-sorting-asc');
9
9
  return (React.createElement("div", { className: `dxrd-report-preview-brick ${data.active ? 'dxrd-report-preview-brick-selected' : ''} ${!data.bricks ? 'dxrd-report-preview-brick-selectable' : ''}`, style: { top: data.topP, left: data.leftP, right: data.rightP, height: data.heightP, width: data.widthP }, onClick: e => { data.onClick(e); e.stopPropagation(); } }, data.navigation && React.createElement("div", { className: navigationBrickClasses.join(' ') })));
10
10
  };
11
11
  export default BrickClickable;
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import useDxMutationObserver from '../../../../hooks/dxMutationObserver';
3
3
  const ProgressBar = ({ data }) => {
4
4
  const mutationObserverRef = React.useRef();
5
- useDxMutationObserver(mutationObserverRef, data === null || data === void 0 ? void 0 : data.progressBarAccessibilityKeyboardHelper);
5
+ useDxMutationObserver(mutationObserverRef, data?.progressBarAccessibilityKeyboardHelper);
6
6
  const handleCancelButtonClick = () => data.cancelButton.action && data.cancelButton.action();
7
7
  return (React.createElement("div", { role: "dialog", className: `dxrd-preview-progress dxd-popup-back-color dxd-back-primary2 dxd-border-primary ${data.cssClasses}`, hidden: !data.visible, ref: mutationObserverRef },
8
8
  React.createElement("div", { className: "dxrd-preview-progress-text dxd-text-primary" }, data.text),
@@ -20,10 +20,9 @@ const MultiPageItem = ({ page }) => {
20
20
  React.createElement(Template, { template: "dxrd-preview-page", data: page })));
21
21
  };
22
22
  const Surface = ({ data }) => {
23
- var _a;
24
23
  const clipboardMessage = getLocalization('Clipboard', 'ASPxReportsStringId.WebDocumentViewer_AriaClipboard');
25
24
  const autoFitRef = React.useRef();
26
- useDxAutoFit(autoFitRef, (_a = data.currentPage) === null || _a === void 0 ? void 0 : _a.autoFitOptions);
25
+ useDxAutoFit(autoFitRef, data.currentPage?.autoFitOptions);
27
26
  const dxMutationObserverRef = React.useRef();
28
27
  useDxMutationObserver(dxMutationObserverRef, data.previewBrickKeyboardHelper);
29
28
  return (React.createElement(React.Fragment, null,
@@ -14,8 +14,7 @@ const SearchResultItem = ({ item }) => {
14
14
  const SearchComponent = ({ data }) => {
15
15
  const viewModel = data.model.getViewModel();
16
16
  React.useEffect(() => {
17
- var _a;
18
- const disposeCallback = (_a = viewModel._viewModelEvents) === null || _a === void 0 ? void 0 : _a.on(ViewModelChangedEvent, (args) => {
17
+ const disposeCallback = viewModel._viewModelEvents?.on(ViewModelChangedEvent, (args) => {
19
18
  data._viewModelEvents.call(ViewModelChangedEvent, args);
20
19
  });
21
20
  return () => disposeCallback();
@@ -4,11 +4,14 @@ const ToolbarPager = ({ data }) => {
4
4
  const [dropDownOptions, setDropDownOptions] = React.useState();
5
5
  const htmlRef = React.useRef(null);
6
6
  React.useEffect(() => {
7
- setDropDownOptions(Object.assign({ container: data.getPopupContainer(htmlRef.current) }, data.widget.dropDownOptions));
7
+ setDropDownOptions({
8
+ container: data.getPopupContainer(htmlRef.current),
9
+ ...data.widget.dropDownOptions,
10
+ });
8
11
  }, [data.widget.dropDownOptions]);
9
12
  return (React.createElement("div", { ref: htmlRef, className: "dxrd-preview-pager dxrd-toolbar-item", hidden: !data.visible },
10
13
  React.createElement("div", { className: "dx-accessibility-toolbar-item dx-accessibility-focus-border-accented" },
11
- React.createElement(SelectBox, { className: "dxrd-preview-pager-selectbox", dataSource: data.widget.dataSource, onValueChanged: data.widget.onValueChanged, value: data.widget.value, opened: data.widget.opened, displayExpr: data.widget.displayExpr, useItemTextAsTitle: true, onKeyUp: data.widget.onKeyUp, itemTemplate: data.widget.itemTemplate, searchMode: data.widget.searchMode, searchEnabled: data.widget.searchEnabled, searchTimeout: data.widget.searchTimeout, disabled: data.disabled, dropDownOptions: dropDownOptions, tabIndex: -1, inputAttr: data.widget.inputAttr })),
14
+ React.createElement(SelectBox, { className: "dxrd-preview-pager-selectbox", dataSource: data.widget.dataSource, onValueChanged: data.widget.onValueChanged, value: data.widget.value, displayExpr: data.widget.displayExpr, useItemTextAsTitle: true, itemTemplate: data.widget.itemTemplate, searchMode: data.widget.searchMode, searchEnabled: data.widget.searchEnabled, searchTimeout: data.widget.searchTimeout, disabled: data.disabled, dropDownOptions: dropDownOptions, tabIndex: -1, inputAttr: data.widget.inputAttr })),
12
15
  React.createElement("div", { className: "dxrd-toolbar-item-separator dxd-toolbar-separator-color dxd-border-secondary", hidden: !data.hasSeparator })));
13
16
  };
14
17
  export default ToolbarPager;
@@ -1,22 +1,20 @@
1
- import { __rest } from "tslib";
2
1
  import React from 'react';
3
2
  import dxZoom from '../../../../../hooks/dxZoom';
4
3
  import { Painter } from 'devexpress-reporting/viewer/widgets/pictureEditor/_painter';
5
- const PainterComponent = (_a) => {
6
- var { options, className } = _a, delegatedProps = __rest(_a, ["options", "className"]);
4
+ const PainterComponent = ({ options, className, ...delegatedProps }) => {
7
5
  const ref = React.useRef();
8
6
  const [model, setModel] = React.useState();
9
- const canvasRef = dxZoom(model === null || model === void 0 ? void 0 : model.scale);
7
+ const canvasRef = dxZoom(model?.scale);
10
8
  React.useLayoutEffect(() => {
11
9
  const painter = new Painter(ref.current, options);
12
10
  options.setPainter(painter);
13
11
  setModel(painter);
14
12
  return () => {
15
- painter === null || painter === void 0 ? void 0 : painter.dispose();
16
- options === null || options === void 0 ? void 0 : options.setPainter(null);
13
+ painter?.dispose();
14
+ options?.setPainter(null);
17
15
  };
18
16
  }, []);
19
- return (React.createElement("div", Object.assign({ ref: ref, className: `dx-painter ${className}` }, delegatedProps),
17
+ return (React.createElement("div", { ref: ref, className: `dx-painter ${className}`, ...delegatedProps },
20
18
  React.createElement("canvas", { ref: canvasRef })));
21
19
  };
22
20
  export default PainterComponent;
@@ -13,11 +13,10 @@ const PictureEditor = ({ options, className }) => {
13
13
  const forceRerender = useDxForceRerender();
14
14
  const canvasRef = dxZoom(zoomScale);
15
15
  React.useEffect(() => {
16
- var _a;
17
16
  const pictureEditorFieldModel = options.getModel();
18
17
  const pictureEditorModel = new PictureEditorModel(pictureEditorFieldModel, pictureEditingRef.current, forceRerender);
19
18
  const data = pictureEditorModel.getViewModel();
20
- (_a = data.painter._viewModelEvents) === null || _a === void 0 ? void 0 : _a.on(ViewModelChangedEvent, arg => {
19
+ data.painter._viewModelEvents?.on(ViewModelChangedEvent, arg => {
21
20
  if (arg.propertyName === 'scale')
22
21
  setZoomScale(arg.newValue);
23
22
  });
@@ -47,9 +46,8 @@ const PictureEditor = ({ options, className }) => {
47
46
  }, []);
48
47
  const renderContent = () => {
49
48
  const popupContentRerender = useDxForceRerender();
50
- return (React.createElement("div", { className: `dx-picture-editing-toolbar ${className}` }, pictureEditorViewModel === null || pictureEditorViewModel === void 0 ? void 0 : pictureEditorViewModel.actions.map(action => {
51
- var _a, _b;
52
- (_b = (_a = action.templateOptions) === null || _a === void 0 ? void 0 : _a._viewModelEvents) === null || _b === void 0 ? void 0 : _b.on(ViewModelChangedEvent, popupContentRerender);
49
+ return (React.createElement("div", { className: `dx-picture-editing-toolbar ${className}` }, pictureEditorViewModel?.actions.map(action => {
50
+ action.templateOptions?._viewModelEvents?.on(ViewModelChangedEvent, popupContentRerender);
53
51
  return (React.createElement("div", { key: action.id },
54
52
  React.createElement("div", { className: "dx-picture-editing-toolbar-item", onClick: event => action.action(action, event.nativeEvent), title: action.title },
55
53
  React.createElement(Template, { className: "dx-picture-editing-toolbar-item-icon", template: action.icon })),
@@ -0,0 +1 @@
1
+ export declare const processStyles: (styles: any) => {};
@@ -0,0 +1,9 @@
1
+ const toCamelCase = style => style.replace(/-([a-z])/g, (_, char) => char.toUpperCase());
2
+ export const processStyles = styles => {
3
+ const newStyles = {};
4
+ for (const style in styles) {
5
+ const reactStyle = toCamelCase(style);
6
+ newStyles[reactStyle] = styles[style];
7
+ }
8
+ return newStyles;
9
+ };
@@ -2,7 +2,7 @@ import { analyticsTemplates } from '../components/analytics/_templates';
2
2
  import { reportingTemplates } from '../components/reporting/_templates';
3
3
  export class TemplateEngine {
4
4
  constructor() {
5
- this._templates = Object.assign(Object.assign({}, analyticsTemplates), reportingTemplates);
5
+ this._templates = { ...analyticsTemplates, ...reportingTemplates };
6
6
  }
7
7
  getTemplate(templateName) {
8
8
  return this._templates[templateName];
@@ -7,7 +7,7 @@ const useDxEllipsisEditor = (options) => {
7
7
  const editorInstance = new dxEllipsisEditor(ref.current, options);
8
8
  setEditor(editorInstance);
9
9
  return () => {
10
- editorInstance === null || editorInstance === void 0 ? void 0 : editorInstance.dispose();
10
+ editorInstance?.dispose();
11
11
  setEditor(null);
12
12
  };
13
13
  }, []);
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
- import { IMutationObserverArgs } from '@devexpress/analytics-core/analytics-internal';
2
+ import { IMutationObserverArgs } from '@devexpress/analytics-core/accessibility/_keyboardHelperBase';
3
3
  declare const useDxMutationObserver: (ref: React.MutableRefObject<HTMLElement>, args: IMutationObserverArgs) => void;
4
4
  export default useDxMutationObserver;
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { accesibilitySettingsContext } from '../components/core/AccessibilitySettingsProvider';
3
- import { initializeMutationObserver } from '@devexpress/analytics-core/analytics-internal';
3
+ import { initializeMutationObserver } from '@devexpress/analytics-core/accessibility/_dxMutationObserver';
4
4
  const useDxMutationObserver = (ref, args) => {
5
5
  const accesibilitySetting = React.useContext(accesibilitySettingsContext);
6
6
  React.useEffect(() => {
7
- if (args && ref.current)
7
+ if (args && !args.isDisposing && ref.current)
8
8
  return initializeMutationObserver(ref.current, args, accesibilitySetting.accessibilityCompliant);
9
9
  return () => { };
10
10
  }, [args, accesibilitySetting, ref.current]);
@@ -1,15 +1,15 @@
1
1
  import React from 'react';
2
2
  import { initializeBaseResizableOptions, initializeResize } from '@devexpress/analytics-core/core/internal/_resizable';
3
3
  const useDxResizable = (ref, options) => {
4
- const [subscription, setSubscription] = React.useState(null);
4
+ const [subscription, setSubscription] = React.useState();
5
5
  React.useEffect(() => {
6
6
  if (!subscription && options) {
7
- setSubscription(initializeResize(ref.current, initializeBaseResizableOptions(options)));
7
+ setSubscription(() => initializeResize(ref.current, initializeBaseResizableOptions(options)));
8
8
  }
9
9
  return () => {
10
10
  subscription && subscription();
11
11
  setSubscription(undefined);
12
12
  };
13
- }, [options, ref.current]);
13
+ }, [options]);
14
14
  };
15
15
  export default useDxResizable;
@@ -1,12 +1,13 @@
1
- import DxReportViewer from './DxReportViewer';
1
+ import DxReportViewer, { DxReportViewerProps, DxReportViewerRef } from './DxReportViewer';
2
2
  import Callbacks from './options/Callbacks';
3
3
  import ExportSettings from './options/ExportSettings';
4
4
  import MobileModeSettings from './options/MobileModeSettings';
5
5
  import ProgressBarSettings from './options/ProgressBarSettings';
6
6
  import RemoteSettings from './options/RemoteSettings';
7
- import RequestSettings from './options/RequestSettings';
7
+ import RequestOptions from './options/RequestOptions';
8
8
  import SearchSettings from './options/SearchSettings';
9
9
  import TabPanelSettings from './options/TabPanelSettings';
10
10
  import { TemplateEngine } from './core/template-engine';
11
- export { Callbacks, ExportSettings, MobileModeSettings, ProgressBarSettings, RemoteSettings, RequestSettings, SearchSettings, TabPanelSettings, DxReportViewer, TemplateEngine };
11
+ export { Callbacks, ExportSettings, MobileModeSettings, ProgressBarSettings, RemoteSettings, RequestOptions, SearchSettings, TabPanelSettings, DxReportViewer, TemplateEngine };
12
+ export type { DxReportViewerProps, DxReportViewerRef };
12
13
  export default DxReportViewer;
@@ -4,9 +4,9 @@ import ExportSettings from './options/ExportSettings';
4
4
  import MobileModeSettings from './options/MobileModeSettings';
5
5
  import ProgressBarSettings from './options/ProgressBarSettings';
6
6
  import RemoteSettings from './options/RemoteSettings';
7
- import RequestSettings from './options/RequestSettings';
7
+ import RequestOptions from './options/RequestOptions';
8
8
  import SearchSettings from './options/SearchSettings';
9
9
  import TabPanelSettings from './options/TabPanelSettings';
10
10
  import { TemplateEngine } from './core/template-engine';
11
- export { Callbacks, ExportSettings, MobileModeSettings, ProgressBarSettings, RemoteSettings, RequestSettings, SearchSettings, TabPanelSettings, DxReportViewer, TemplateEngine };
11
+ export { Callbacks, ExportSettings, MobileModeSettings, ProgressBarSettings, RemoteSettings, RequestOptions, SearchSettings, TabPanelSettings, DxReportViewer, TemplateEngine };
12
12
  export default DxReportViewer;
@@ -0,0 +1,8 @@
1
+ import { FunctionComponent } from 'react';
2
+ type RequestOptionsPropsType = {
3
+ invokeAction: string;
4
+ getLocalizationAction?: string;
5
+ host: string;
6
+ };
7
+ declare const RequestOptions: FunctionComponent<RequestOptionsPropsType>;
8
+ export default RequestOptions;
@@ -1,12 +1,12 @@
1
1
  import PropTypes from 'prop-types';
2
- const RequestSettings = () => null;
3
- RequestSettings.displayName = 'DxReportViewerRequestSettings';
4
- RequestSettings.propTypes = {
2
+ const RequestOptions = () => null;
3
+ RequestOptions.displayName = 'DxReportViewerRequestOptions';
4
+ RequestOptions.propTypes = {
5
5
  invokeAction: PropTypes.string.isRequired,
6
6
  getLocalizationAction: PropTypes.string,
7
7
  host: PropTypes.string.isRequired,
8
8
  };
9
- RequestSettings.defaultProps = {
9
+ RequestOptions.defaultProps = {
10
10
  invokeAction: '/DXXRDV',
11
11
  };
12
- export default RequestSettings;
12
+ export default RequestOptions;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "devexpress-reporting-react",
3
- "version": "24.1.2-beta",
3
+ "version": "24.1.4",
4
4
  "homepage": "https://www.devexpress.com/",
5
5
  "bugs": "https://www.devexpress.com/support/",
6
6
  "author": "Developer Express Inc.",
@@ -16,19 +16,19 @@
16
16
  "main": "./index.js",
17
17
  "dependencies": {
18
18
  "prop-types": "^15.8.1",
19
- "devexpress-reporting": "24.1.2-beta"
19
+ "devexpress-reporting": "24.1.4"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "@types/react": "^18.0.28",
23
23
  "@types/react-dom": "^18.0.28",
24
- "devextreme-react": "24.1.2-beta",
24
+ "devextreme-react": "24.1.4",
25
25
  "react": "^18.0.28",
26
26
  "react-dom": "^18.0.28"
27
27
  },
28
28
  "devDependencies": {
29
29
  "shx": "^0.3.4",
30
30
  "typescript": "~5.0.4",
31
- "@devexpress/analytics-core": "24.1.2-beta"
31
+ "@devexpress/analytics-core": "24.1.4"
32
32
  },
33
33
  "scripts": {
34
34
  "prebuild": "npx shx rm -rf dist && npx shx mkdir dist && npx shx cp README.md dist/ && npx shx cp package.json dist/",
@@ -1,8 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- export type RequestSettingsPropsType = {
3
- getDesignerModelAction: string;
4
- getLocalizationAction?: string;
5
- host: string;
6
- };
7
- declare const RequestSettings: FunctionComponent<RequestSettingsPropsType>;
8
- export default RequestSettings;
@@ -1,8 +0,0 @@
1
- import { FunctionComponent } from 'react';
2
- type RequestSettingsPropsType = {
3
- invokeAction: string;
4
- getLocalizationAction?: string;
5
- host: string;
6
- };
7
- declare const RequestSettings: FunctionComponent<RequestSettingsPropsType>;
8
- export default RequestSettings;