{"id":9597,"date":"2021-11-30T15:49:29","date_gmt":"2021-11-30T12:49:29","guid":{"rendered":"https:\/\/dhtmlx.com\/blog\/?p=9597"},"modified":"2026-06-30T17:08:50","modified_gmt":"2026-06-30T14:08:50","slug":"build-interactive-javascript-ui-dashboard-dhtmlx","status":"publish","type":"post","link":"https:\/\/dhtmlx.com\/blog\/build-interactive-javascript-ui-dashboard-dhtmlx\/","title":{"rendered":"How to Build an Interactive JavaScript UI Dashboard with DHTMLX"},"content":{"rendered":"<p>DHTMLX Suite includes 20+ UI widgets that help to develop full-featured web applications. For instance, you can create a comprehensive dashboard to visualize and monitor the performance of a ticketing system.<\/p>\n<p>In this JavaScript dashboard tutorial, we&#8217;re going to describe how you can build and configure an interactive dashboard with the help of <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/\" target=\"_blank\" rel=\"noopener\">Suite UI widgets<\/a> and <a href=\"https:\/\/dhtmlx.com\/docs\/products\/optimus-framework\/\" target=\"_blank\" rel=\"noopener\">Optimus micro-framework<\/a>.<\/p>\n<p><a href=\"https:\/\/dhtmlx.com\/docs\/products\/demoApps\/dhtmlxDashboard\/#dashboard\" target=\"_blank\" rel=\"noopener\"><strong>View and download UI dashboard demo &gt;<\/strong><\/a><\/p>\n<h5>Demo Overview<\/h5>\n<p>The <a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxDashboard\/\" target=\"_blank\" rel=\"noopener\">UI dashboard<\/a> by DHTMLX allows users to create a new ticket, assign it to different company departments, and monitor their performance. The demo was created using the following widgets:<\/p>\n<ul>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxGrid\/\" target=\"_blank\" rel=\"noopener\">Grid<\/a> to display a list of notifications received,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxChart\/\" target=\"_blank\" rel=\"noopener\">Charts<\/a> to track yearly sales and estimate the performance of sales, marketing, quality assurance, and technical support departments,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxWindow\/\" target=\"_blank\" rel=\"noopener\">Window<\/a> to create a new ticket,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxDataView\/\" target=\"_blank\" rel=\"noopener\">DataView<\/a> to visualize a list of open tickets,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxPagination\/\" target=\"_blank\" rel=\"noopener\">Pagination<\/a> to simplify navigation in the data grid,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxToolbar\/\" target=\"_blank\" rel=\"noopener\">Toolbar<\/a> to provide navigation across the UI dashboard,<\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxLayout\/\" target=\"_blank\" rel=\"noopener\">Layout<\/a> to attach and arrange all UI components.<\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9601\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/how-to-build-ui-dashboard-with-dhtmlx.png\" alt=\"How to Build an Interactive JavaScript UI Dashboard with DHTMLX\" width=\"1918\" height=\"874\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/how-to-build-ui-dashboard-with-dhtmlx.png 1918w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/how-to-build-ui-dashboard-with-dhtmlx-300x137.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/how-to-build-ui-dashboard-with-dhtmlx-768x350.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/how-to-build-ui-dashboard-with-dhtmlx-1024x467.png 1024w\" sizes=\"auto, (max-width: 1918px) 100vw, 1918px\" \/><\/p>\n<h5>Creating JavaScript UI Dashboard<\/h5>\n<p>First of all, you have to <a href=\"https:\/\/dhtmlx.com\/docs\/products\/demoApps\/dhtmlxDashboard\/#dashboard\" target=\"_blank\" rel=\"noopener\">download the dashboard demo<\/a> and run it on your device. You may notice that DHTMLX widgets that build up the UI dashboard are divided into Views. You can initialize or configure each widget separately as well as remove it.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9602\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-views.png\" alt=\"ui-dashboard-views\" width=\"366\" height=\"512\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-views.png 366w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-views-214x300.png 214w\" sizes=\"auto, (max-width: 366px) 100vw, 366px\" \/><\/p>\n<p>Let&#8217;s make an overview of the UI dashboard demo based on Optimus Framework.<\/p>\n<p>We are to start with the <strong>index.html<\/strong> file. In the head part of the file, you can find suite.js and suite.css. We include DHTMLX Suite with all its components. Also, you can see app.js and app.css to configure webpack:<\/p>\n<p>&nbsp;<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\">...<br \/>\n<span class=\"me1\">DHTMLX<\/span> <span class=\"sy0\">-<\/span> UI Dashboard<br \/>\n...<br \/>\n<br \/>\n<span class=\"sy0\">&lt;!--<\/span> Suite <span class=\"sy0\">--&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>script src<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;.\/lib\/suite\/suite.js&quot;<\/span> type<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>script<span class=\"sy0\">&gt;<\/span><br \/>\n<br \/>\n<span class=\"sy0\">&lt;!--<\/span> App <span class=\"sy0\">--&gt;<\/span><br \/>\n<span class=\"sy0\">&lt;<\/span>script src<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;.\/app.js&quot;<\/span> type<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;text\/javascript&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>script<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>All these files are included in the demo pack. In the body part, we can see a container to render our demo:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>section id<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;top_layout&quot;<\/span> <span class=\"kw5\">class<\/span><span class=\"sy0\">=<\/span><span class=\"st0\">&quot;demo--container&quot;<\/span><span class=\"sy0\">&gt;&lt;\/<\/span>section<span class=\"sy0\">&gt;<\/span><\/div><\/div>\n<p>The initialization of the app is made via the <strong>render()<\/strong> method:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"sy0\">&lt;<\/span>script<span class=\"sy0\">&gt;<\/span><span class=\"co1\">\/\/ &lt;![CDATA[<\/span><br \/>\n<span class=\"kw1\">const<\/span> app <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> uidashboard.<span class=\"me1\">UIDashboardApp<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> app.<span class=\"me1\">render<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;#top_layout&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"co1\">\/\/ ]]&gt;&lt;\/script&gt;<\/span><\/div><\/div>\n<p>The next main file of the demo is <strong>index.js<\/strong>. It includes the <strong>UIDashboardApp<\/strong> class that renders our application. It is used in index.html to initialize the demo as we&#8217;ve described above:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">export<\/span> <span class=\"kw5\">class<\/span> UIDashboardApp <span class=\"kw5\">extends<\/span> App <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; init<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">tickets<\/span> <span class=\"sy0\">=<\/span> getTickets<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">store<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Store<span class=\"br0\">&#40;<\/span>initialState<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">params<\/span>.<span class=\"me1\">store<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">store<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">state<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">store<\/span>.<span class=\"me1\">getState<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">subscribe<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; dhx.<span class=\"me1\">scrollViewConfig<\/span>.<span class=\"me1\">enable<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;&quot;<\/span><span class=\"sy0\">,<\/span> TopLayout<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; tickets<span class=\"sy0\">:<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">tickets<\/span><span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; schedulerData<span class=\"sy0\">,<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; ganttData <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ TopLayout view<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">use<\/span><span class=\"br0\">&#40;<\/span>HistoryManager<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; subscribe<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;modeChanged&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">state<\/span>.<span class=\"me1\">mode<\/span> <span class=\"sy0\">=<\/span> id <span class=\"sy0\">||<\/span> <span class=\"st0\">&quot;dashboard&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;addTicketClicked&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#40;<\/span>obj<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">tickets<\/span>.<span class=\"me1\">add<\/span><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; title<span class=\"sy0\">:<\/span> obj.<span class=\"me1\">title<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class=\"sy0\">:<\/span> obj.<span class=\"me1\">comment<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> obj.<span class=\"me1\">type<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; icon<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Avatar_01&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name<span class=\"sy0\">:<\/span> `$<span class=\"br0\">&#123;<\/span>obj.<span class=\"me1\">name<\/span><span class=\"br0\">&#125;<\/span> $<span class=\"br0\">&#123;<\/span>obj.<span class=\"me1\">lastName<\/span><span class=\"br0\">&#125;<\/span>`<span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; comments<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;0&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; time<span class=\"sy0\">:<\/span> <span class=\"kw1\">new<\/span> <span class=\"kw4\">Date<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>.<span class=\"me1\">getTime<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"nu0\">0<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>The UIDashboardApp class is inherited from all the classes included in the index.js file. The <strong>TopLayout<\/strong> class is the next important part of the UI dashboard demo:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">import<\/span> <span class=\"st0\">&quot;.\/assets\/styles\/main.scss&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> App <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;dhx-optimus&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> Store from <span class=\"st0\">&quot;dhx-optimus-store&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> getLocationParams <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;.\/helpers\/url&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">import<\/span> TopLayout from <span class=\"st0\">&quot;.\/views\/TopLayout&quot;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ TopLayout view<\/span><br \/>\n<span class=\"kw5\">import<\/span> HistoryManager from <span class=\"st0\">&quot;.\/components\/HistoryManager&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> getTickets <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;.\/services\/dataService&quot;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Summing up, index.html and index.js files are the base of the UI dashboard demo. You can learn more about working with these files as well as how to build apps with Optimus <a href=\"https:\/\/docs.dhtmlx.com\/suite\/optimus_guides\/\" target=\"_blank\" rel=\"noopener\">in the documentation<\/a>.<\/p>\n<p>The next component of the dashboard demo is a block of Views files. You can find all of them in the view folder. Each View is a ViewName.js file. Let&#8217;s start with the <strong>TopLayout.js<\/strong> view that \u201cunites\u201d the demo.<\/p>\n<p>Here you can see how the TopLayout class is built and initiated. It includes Layout and Tabbar:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;height:600px;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">export<\/span> <span class=\"kw1\">default<\/span> <span class=\"kw5\">class<\/span> TopLayout <span class=\"kw5\">extends<\/span> View <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; init<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Layout<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> layoutConfig<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">navigationBar<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Tabbar<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;tabbar&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; mode<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;top&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tabAlign<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tabWidth<span class=\"sy0\">:<\/span> <span class=\"nu0\">200<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; noContent<span class=\"sy0\">:<\/span> <span class=\"kw2\">true<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; views<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span> id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;dashboard&quot;<\/span><span class=\"sy0\">,<\/span> tab<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;Dashboard&quot;<\/span> <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">navigationBar<\/span>.<span class=\"me1\">events<\/span>.<span class=\"me1\">on<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;change&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">fire<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;modeChanged&quot;<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#91;<\/span>id<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;top&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> TopBar<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; ready<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">observe<\/span><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span>state<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> state.<span class=\"me1\">mode<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span>mode<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">=&gt;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">const<\/span> cell <span class=\"sy0\">=<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">navigationBar<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">app<\/span>.<span class=\"me1\">state<\/span>.<span class=\"me1\">mode<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>cell<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cell.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">changeView<\/span><span class=\"br0\">&#40;<\/span>mode<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; changeView<span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">switch<\/span> <span class=\"br0\">&#40;<\/span>id<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">case<\/span> <span class=\"st0\">&quot;dashboard&quot;<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;center&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> Dashboard<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tickets<span class=\"sy0\">:<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">params<\/span>.<span class=\"me1\">tickets<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">default<\/span><span class=\"sy0\">:<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;center&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> NotReady<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">break<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Then you can configure the Layout by dividing it into three cells:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw1\">const<\/span> layoutConfig <span class=\"sy0\">=<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; rows<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;top&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; height<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;content&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;tabbar&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; height<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;content&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; css<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;cell_center&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>Here you may see an output:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9603\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-views-1024x467.png\" alt=\"ui-dashboard-layout-views\" width=\"1024\" height=\"467\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-views-1024x467.png 1024w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-views-300x137.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-views-768x350.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-views.png 1918w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>The TopLayout class is inherited from the following:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> View <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;dhx-optimus&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">import<\/span> TopBar from <span class=\"st0\">&quot;.\/TopBar&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> Dashboard from <span class=\"st0\">&quot;.\/Dashboard&quot;<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/ Dashboard demo<\/span><\/div><\/div>\n<p>Now we are ready to overview Dashboard view which initializes the UI dashboard demo. Let&#8217;s open <strong>Dashboard.js<\/strong> file.<\/p>\n<p>Here you can see the initialization of the Dashboard as well as the configuration of the Layout:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;height:600px;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">export<\/span> <span class=\"kw1\">default<\/span> <span class=\"kw5\">class<\/span> Dashboard <span class=\"kw5\">extends<\/span> View <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; init<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> dhx.<span class=\"me1\">Layout<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;space&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; cols<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;wide&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rows<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;50%&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cols<span class=\"sy0\">:<\/span> <span class=\"br0\">&#91;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;left-top&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;left-bottom&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;center&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; id<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;right&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width<span class=\"sy0\">:<\/span> <span class=\"st0\">&quot;30%&quot;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; minWidth<span class=\"sy0\">:<\/span> <span class=\"nu0\">440<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maxWidth<span class=\"sy0\">:<\/span> <span class=\"nu0\">440<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"br0\">&#93;<\/span><span class=\"sy0\">,<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;right&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> Notifications<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;center&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> Tickets<span class=\"sy0\">,<\/span> <span class=\"br0\">&#123;<\/span> <br \/>\n&nbsp; &nbsp; &nbsp; tickets<span class=\"sy0\">:<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">params<\/span>.<span class=\"me1\">tickets<\/span> <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;left-top&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> SalesChart<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">this<\/span>.<span class=\"me1\">show<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span>.<span class=\"me1\">getCell<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;left-bottom&quot;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> NotificationsChart<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">return<\/span> <span class=\"kw1\">this<\/span>.<span class=\"me1\">ui<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>Thus, we&#8217;ve divided the center cell of the Layout into 4 parts:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-9604\" src=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-cells-1024x467.png\" alt=\"ui-dashboard-layout-cells\" width=\"1024\" height=\"467\" srcset=\"https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-cells-1024x467.png 1024w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-cells-300x137.png 300w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-cells-768x350.png 768w, https:\/\/dhtmlx.com\/blog\/wp-content\/uploads\/2021\/11\/ui-dashboard-layout-cells.png 1918w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>The Dashboard class is inherited from the following classes:<\/p>\n<div class=\"codecolorer-container javascript default\" style=\"overflow:auto;white-space:nowrap;\"><div class=\"javascript codecolorer\"><span class=\"kw5\">import<\/span> <span class=\"br0\">&#123;<\/span> View <span class=\"br0\">&#125;<\/span> from <span class=\"st0\">&quot;dhx-optimus&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<br \/>\n<span class=\"kw5\">import<\/span> Notifications from <span class=\"st0\">&quot;.\/Notifications&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> Tickets from <span class=\"st0\">&quot;.\/Tickets&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> SalesChart from <span class=\"st0\">&quot;.\/SalesChart&quot;<\/span><span class=\"sy0\">;<\/span><br \/>\n<span class=\"kw5\">import<\/span> NotificationsChart from <span class=\"st0\">&quot;.\/NotificationsChart&quot;<\/span><span class=\"sy0\">;<\/span><\/div><\/div>\n<p>This is the way the DHTMLX UI dashboard demo was created. You&#8217;ll find that the structure of the views is quite the same. Each view will build the part of the dashboard demo and inherit from the bottom classes if it&#8217;s necessary. You can open the files of each view, explore their structure, and configure them according to your requirements.<\/p>\n<p><em>Please note that DHTMLX Dashboard is not a ready-made application. It is a demo of the Suite UI library. This demo can be tested under the terms of the Evaluation license. To create a commercial app based on this demo, you need to purchase DHTMLX Suite.<\/em><\/p>\n<h5>Related Resources:<\/h5>\n<ul>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/demoApps\/dhtmlxDashboard\/#dashboard\" target=\"_blank\" rel=\"noopener\">Download UI dashboard demo<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/dhtmlxSuite\/\" target=\"_blank\" rel=\"noopener\">See the full list of Suite UI widgets<\/a><\/li>\n<li><a href=\"https:\/\/dhtmlx.com\/docs\/products\/optimus-framework\/\" target=\"_blank\" rel=\"noopener\">Read about Optimus micro-framework<\/a><\/li>\n<li><a href=\"https:\/\/docs.dhtmlx.com\/suite\/optimus_guides\/how_to_start_optimus\/\" target=\"_blank\" rel=\"noopener\">Learn how to start working with Optimus<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>DHTMLX Suite includes 20+ UI widgets that help to develop full-featured web applications. For instance, you can create a comprehensive dashboard to visualize and monitor the performance of a &#8230;<\/p>\n","protected":false},"author":101013,"featured_media":9598,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[71],"tags":[33,6,10],"class_list":["post-9597","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-all-posts","tag-dhtmlxgrid","tag-dhtmlxsuite"],"_links":{"self":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/9597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/users\/101013"}],"replies":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/comments?post=9597"}],"version-history":[{"count":10,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/9597\/revisions"}],"predecessor-version":[{"id":15756,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/posts\/9597\/revisions\/15756"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media\/9598"}],"wp:attachment":[{"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/media?parent=9597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/categories?post=9597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dhtmlx.com\/blog\/wp-json\/wp\/v2\/tags?post=9597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}