<template>
<div>
<div class="control-section dashboard-dynamic">
<div>
<div style="width:100%;height: 30px;margin-bottom:5px">
<ejs-button style="float:right;width:75px;" id="toggleBtn" ref="toggleBtn" :iconCss='iconCss' cssClass="e-outline e-flat e-primary" isToggle=true v-on:click='toggleClick'>Edit</ejs-button>
</div>
<div style="padding:5px;text-align: end;">
<div class="add-widget-button e-control e-btn e-lib" id="dialogBtn" v-on:click="dialogButtonClick($event)">
Add New Widget
</div>
</div>
</div>
<ejs-dashboardlayout ref="DashbordInstance" :columns="2" id='edit_dashboard' :allowResizing="false" :allowDragging="false" :cellSpacing="spacing" :resizeStop="onPanelResize">
<e-panels>
<e-panel :row="0" :col="0" :sizeX="1" :sizeY="1" header="<div>Line Chart</div>" :content="line"></e-panel>
<e-panel :row="0" :col="1" :sizeX="1" :sizeY="1" header="<div>Pie Chart</div>" :content="pie"></e-panel>
<e-panel :row="1" :col="0" :sizeX="2" :sizeY="1" header="<div>Spline Chart</div>" :content="spline"></e-panel>
</e-panels>
</ejs-dashboardlayout>
<ejs-dialog :header='header' ref="dialogObj" :content='contenttemplateVue' :showCloseIcon='showCloseIcon' :target='target' :width='width' :visible='false' :isModal='true'></ejs-dialog>
</div>
</div>
</template>
<script>
import { createApp } from "vue";
import { DashboardLayoutComponent, PanelsDirective, PanelDirective } from "@syncfusion/ej2-vue-layouts";
import lineTemplate from "./linetemplate.vue";
import pieTemplate from "./pietemplate.vue";
import splineTemplate from "./splinetemplate.vue";
import { ButtonComponent } from "@syncfusion/ej2-vue-buttons";
import { DialogComponent } from '@syncfusion/ej2-vue-popups';
export default {
components: {
'ejs-dashboardlayout': DashboardLayoutComponent,
'e-panel': PanelDirective,
'e-panels': PanelsDirective,
'ejs-button': ButtonComponent,
'ejs-dialog': DialogComponent
},
data: function() {
return {
spacing: [10,10],
iconCss: 'edit',
header:'Add a Content',
target:'.control-section',
width:'43%',
showCloseIcon: true,
contenttemplateVue:'<div id="dialogcontent"><div><div id="linetemplate"><p class="dialog-text">Linechart (1x1) </p></div><div id="pietemplate"><p class="dialog-text">Piechart (1x1) </p></div><div id="splinetemplate"><p class="dialog-text">Splinechart (2x1) </p></div></div></div></div>',
spline: function () {
return { template : createApp({}).component('splineTemplate', splineTemplate) }
},
pie: function () {
return { template : createApp({}).component('pieTemplate', pieTemplate) }
},
line: function () {
return { template : createApp({}).component('lineTemplate', lineTemplate) }
},
};
},
methods: {
toggleClick: function() {
if (this.$refs.toggleBtn.$el.textContent == 'Edit') {
this.$refs.DashbordInstance.$el.allowResizing = true;
this.$refs.DashbordInstance.$el.allowDragging = true;
this.$refs.toggleBtn.$el.textContent = 'Save';
this.iconCss = "save";
document.getElementById('dialogBtn').style.display = 'block';
} else {
this.$refs.DashbordInstance.$el.allowResizing = false;
this.$refs.DashbordInstance.$el.allowDragging = false;
this.$refs.toggleBtn.$el.textContent = 'Edit';
this.iconCss = "edit";
document.getElementById('dialogBtn').style.display = 'none';
}
},
onPanelResize: function(args) {
var dashboardObject = this.$refs.DashbordInstance;
if (dashboardObject && args.element && args.element.querySelector('.e-panel-container .e-panel-content div')) {
var chartObj = (args.element.querySelector('.e-panel-container .e-panel-content div.e-control')).ej2_instances[0];
chartObj.height = '95%';
chartObj.width = '100%';
chartObj.refresh();
}
},
dialogButtonClick: function() {
this.$refs.dialogObj.show();
var proxy = this;
this.$refs.dialogObj.$el.querySelector('#linetemplate').onclick = function () {
var panel = {
sizeX: 1,
sizeY: 1,
header: '<div>Line Chart</div>',
row: 0,
col:0,
content: proxy.line
}
proxy.$refs.DashbordInstance.addPanel(panel);
proxy.$refs.dialogObj.hide();
}
this.$refs.dialogObj.$el.querySelector('#pietemplate').onclick = function () {
var panel = {
sizeX: 1,
sizeY: 1,
header: '<div>Pie Chart</div>',
row: 0,
col:0,
content: proxy.pie
}
proxy.$refs.DashbordInstance.addPanel(panel);
proxy.$refs.dialogObj.hide();
}
this.$refs.dialogObj.$el.querySelector('#splinetemplate').onclick = function () {
var panel = {
sizeX: 2,
sizeY: 1,
header: '<div>Spline Chart</div>',
row: 0,
col:0,
content: proxy.spline
}
proxy.$refs.DashbordInstance.addPanel(panel);
proxy.$refs.dialogObj.hide();
}
}
},
}
</script>