Skip to main content

Customize the Document Viewer Tab Panel in React Application

  • 3 minutes to read

Remove the Tab Panel

Use the CustomizeElements callback to get the Tab Panel by its PreviewElements ID and remove the Tab Panel from the collection of UI elements:

import './App.css';
import { React, useEffect, useRef } from 'react';
import { DxReportViewer, PreviewElements} from 'devexpress-reporting/dx-webdocumentviewer';
import * as ko from 'knockout';


const ReportViewer = () => {
  const reportUrl = ko.observable("TestReport");
  const viewerRef = useRef();
  const requestOptions = {
    host: "https://localhost:54114/",
    invokeAction: "DXXRDV"
  };

  useEffect(() => {
    const viewer = new DxReportViewer(viewerRef.current, 
      { reportUrl, 
        requestOptions,
        callbacks: {
          CustomizeElements: function(s, e) {
            var panelPart = e.GetById(PreviewElements.RightPanel);
            var index = e.Elements.indexOf(panelPart);
            e.Elements.splice(index, 1);
          }
        }});
    viewer.render(); 
    return () => viewer.dispose();
  })
  return (<div ref={viewerRef}></div>);
}

function App() {
  return (<div style={{ width: "100%", height: "1000px" }}>
      <ReportViewer />
  </div>);
  }

export default App;

Add a New Tab

Create a new tab and add it to the tab collection in the Document Viewer’s View Model. The tab content is defined in a template specified in the tab constructor.

Use the BeforeRender callback to customize toolbar commands.

The callback function receives the IPreviewModel object and the Document Viewer’s View Model object as arguments.

The view model’s tabPanel property allows you to access a tab collection in the Tab Panel. Create a new tab (an instance of the TabInfo<T> class) and add it to the collection.

In the TabInfo constructor, specify the template used to render the tab content and the template used to render the tab image.

The customized tab panel is shown in the image below:

web-customize-document-viewer-panel

<!-- -->
  <body>
    <script type="text/html" id="my-test-panel">
        <div>
            <button> <span>Button</span> </button>
        </div>
    </script>
    <script type="text/html" id="fivestar">
        <svg viewBox="-3.4 -4 32 32" xmlns="http://www.w3.org/2000/svg"
             xmlns:xlink="http://www.w3.org/1999/xlink">
            <g id="Layer_1" transform="translate(-3.4, -4)"
               style="enable-background:new 0 0 32 32">
                <g id="Rating_1_">
                    <polygon class="dxd-icon-fill"
                             points="16,4 19.9,11.9 28.6,13.2 22.3,19.3 23.8,28 16,23.9 8.2,28 9.7,19.3 3.4,13.2 12.1,11.9  " />
                </g>
            </g>
        </svg>
    </script>
    <!-- -->
  </body>
<!-- -->

A custom template can contain standard ASP.NET Web Forms components or custom controls. If you wish to use the DevExpress client-side controls, see the following help section: DevExtreme Widgets.

You can use our SVG Icon Builder tool to create custom icons. For more information, review the following help topic: How To: Draw and Use SVG Images.