Designer Component - Loading Reports

These samples show how to load reports in the ActiveReportsJS Designer component within Angular, React, Vue, and pure JavaScript applications. When the application loads, the designer shows the template report. The "New" button loads the same template report. The "Open" button displays the dialog where a user selects the report to open. Finally, the "Load Blank Report" button loads the empty report into the designer. For more details, please visit the Loading Reports page. To view the code, scroll down the page.

app.jsx
index.html
index.css
Copy to CodeMine
import React, { Fragment, useState } from "react"; import ReactDOM from "react-dom"; import { Designer } from "@mescius/activereportsjs-react"; import { FontStore } from "@mescius/activereportsjs/core"; var CPLReport = { Name: "Report", Body: { Width: "8.5in", Height: "11in", }, }; var FPLReport = { Name: "Report", Page: { PageWidth: "8.5in", PageHeight: "11in", }, FixedPage: { Pages: [{}] }, }; function App() { const designer = React.useRef(); const [modalOpen, setModalOpen] = useState(false); const [selectedReport, setSelectedReport] = useState(null); const [reportPromise, setReportPromise] = useState(null); function onLoadBlank(fpl) { designer.current.setReport({ definition: fpl ? FPLReport : CPLReport, }); } function onSelectReport(report) { setSelectedReport({ id: report }); setModalOpen(false); } function onCreateReport() { return Promise.resolve({ id: "reports/company-template.rdlx-json" }); } function onCloseDialog() { setModalOpen(false); if (reportPromise) { reportPromise.resolve(null); setReportPromise(null); } } function onOpenReport() { setModalOpen(true); return new Promise((resolve, reject) => { setReportPromise({ resolve, reject }); }); } React.useEffect(() => { if (selectedReport && reportPromise) { reportPromise.resolve(selectedReport); setReportPromise(null); setSelectedReport(null); } }, [selectedReport, reportPromise]); return ( <Fragment> <div id="designer-toolbar" className="container-fluid"> <div className="row mt-3 mb-3"> <button type="button" className="btn btn-outline-primary btn-sm col-sm-2 ml-1" onClick={() => onLoadBlank(false)} > Load Blank Report </button> </div> </div> <div id="designer-host"> <Designer ref={designer} report={{ id: "reports/company-template.rdlx-json" }} onOpen={onOpenReport} onCreate={onCreateReport} /> </div> {modalOpen && ( <div className="modal"> <div className="modal-content" > <div class="modal-header"> <h5 className="modal-title">Open Report</h5> <button type="button" class="close" onClick={()=>onCloseDialog()} > <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <strong>Select Report:</strong> <button type="button" className="list-group-item list-group-item-action" onClick={() => onSelectReport("reports/CustomersTable.rdlx-json") } > Customers Report </button> <button type="button" className="list-group-item list-group-item-action" onClick={() => onSelectReport("reports/TaxiDrives.rdlx-json")} > Taxi Drives Report </button> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-secondary" onClick={()=>onCloseDialog()} > Close </button> </div> </div> </div> )} </Fragment> ); } FontStore.registerFonts("/activereportsjs/demos/resource/fontsConfig.json"); ReactDOM.render(<App />, document.getElementById("root"));
import React, { Fragment, useState } from "react"; import ReactDOM from "react-dom"; import { Designer } from "@mescius/activereportsjs-react"; import { FontStore } from "@mescius/activereportsjs/core"; var CPLReport = { Name: "Report", Body: { Width: "8.5in", Height: "11in", }, }; var FPLReport = { Name: "Report", Page: { PageWidth: "8.5in", PageHeight: "11in", }, FixedPage: { Pages: [{}] }, }; function App() { const designer = React.useRef(); const [modalOpen, setModalOpen] = useState(false); const [selectedReport, setSelectedReport] = useState(null); const [reportPromise, setReportPromise] = useState(null); function onLoadBlank(fpl) { designer.current.setReport({ definition: fpl ? FPLReport : CPLReport, }); } function onSelectReport(report) { setSelectedReport({ id: report }); setModalOpen(false); } function onCreateReport() { return Promise.resolve({ id: "reports/company-template.rdlx-json" }); } function onCloseDialog() { setModalOpen(false); if (reportPromise) { reportPromise.resolve(null); setReportPromise(null); } } function onOpenReport() { setModalOpen(true); return new Promise((resolve, reject) => { setReportPromise({ resolve, reject }); }); } React.useEffect(() => { if (selectedReport && reportPromise) { reportPromise.resolve(selectedReport); setReportPromise(null); setSelectedReport(null); } }, [selectedReport, reportPromise]); return ( <Fragment> <div id="designer-toolbar" className="container-fluid"> <div className="row mt-3 mb-3"> <button type="button" className="btn btn-outline-primary btn-sm col-sm-2 ml-1" onClick={() => onLoadBlank(false)} > Load Blank Report </button> </div> </div> <div id="designer-host"> <Designer ref={designer} report={{ id: "reports/company-template.rdlx-json" }} onOpen={onOpenReport} onCreate={onCreateReport} /> </div> {modalOpen && ( <div className="modal"> <div className="modal-content" > <div class="modal-header"> <h5 className="modal-title">Open Report</h5> <button type="button" class="close" onClick={()=>onCloseDialog()} > <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <strong>Select Report:</strong> <button type="button" className="list-group-item list-group-item-action" onClick={() => onSelectReport("reports/CustomersTable.rdlx-json") } > Customers Report </button> <button type="button" className="list-group-item list-group-item-action" onClick={() => onSelectReport("reports/TaxiDrives.rdlx-json")} > Taxi Drives Report </button> </div> <div class="modal-footer"> <button type="button" class="btn btn-outline-secondary" onClick={()=>onCloseDialog()} > Close </button> </div> </div> </div> )} </Fragment> ); } FontStore.registerFonts("/activereportsjs/demos/resource/fontsConfig.json"); ReactDOM.render(<App />, document.getElementById("root"));
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>ActiveReportsJS Report Designer Report Loading Sample</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="stylesheet" href="index.css" /> <link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap" rel="stylesheet" /> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous" /> <!-- SystemJS --> <script src="./vendor/system.src.js"></script> <script src="systemjs.config.js"></script> <script> System.import("./src/app"); </script> </head> <body> <div id="root"></div> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous" ></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous" ></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous" ></script> </body> </html>
@import url("/activereportsjs/demos/arjs/styles/ar-js-ui.css"); @import url("/activereportsjs/demos/arjs/styles/ar-js-designer.css"); #designer-host { width: 100%; height: 500px; } .modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; } .modal-content { background: white; padding: 20px; border-radius: 4px; width: 50%; max-width: 500px; max-height: 80%; overflow-y: auto; }
(function (global) { System.config({ transpiler: "plugin-babel", babelOptions: { es2015: true, react: true, }, meta: { "*.css": { loader: "css" }, }, paths: { // paths serve as alias "npm:": "node_modules/", }, // map tells the System loader where to look for things map: { css: "npm:systemjs-plugin-css/css.js", react: "npm:react/umd/react.production.min.js", "react-dom": "npm:react-dom/umd/react-dom.production.min.js", "@mescius/activereportsjs/pdfexport": "npm:@mescius/activereportsjs/dist/ar-js-pdf.js", "@mescius/activereportsjs/tabulardataexport": "npm:@mescius/activereportsjs/dist/ar-js-tabular-data.js", "@mescius/activereportsjs/htmlexport": "npm:@mescius/activereportsjs/dist/ar-js-html.js", "@mescius/activereportsjs/xlsxexport": "npm:@mescius/activereportsjs/dist/ar-js-xlsx.js", "@mescius/activereportsjs-react": "npm:@mescius/activereportsjs-react/lib/index.js", "@mescius/activereportsjs/reportviewer": "npm:@mescius/activereportsjs/dist/ar-js-viewer.js", "@mescius/activereportsjs/viewer": "npm:@mescius/activereportsjs/dist/ar-js-viewer.js", "@mescius/activereportsjs/reportdesigner": "npm:@mescius/activereportsjs/dist/ar-js-designer.js", "@mescius/activereportsjs/core": "npm:@mescius/activereportsjs/dist/ar-js-core.js", "@mescius/activereportsjs/styles": "npm:@mescius/activereportsjs/styles", "@mescius/activereportsjs-i18n-ja": "npm:@mescius/activereportsjs-i18n/dist/designer/ja-locale.js", "@mescius/activereportsjs-i18n-zh": "npm:@mescius/activereportsjs-i18n/dist/designer/zh-locale.js", "@mescius/ar-js-pagereport": "npm:@mescius/activereportsjs/dist/ar-js-core.js", "plugin-babel": "npm:systemjs-plugin-babel/plugin-babel.js", "systemjs-babel-build": "npm:systemjs-plugin-babel/systemjs-babel-browser.js", }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: "jsx", }, node_modules: { defaultExtension: "js", }, }, }); })(this);