/**
* @namespace flexygo.ui.wc
*/
var flexygo;
(function (flexygo) {
var ui;
(function (ui) {
var wc;
(function (wc) {
/**
* Library for the flx-chartElement web component.
*
* @class FlxChartElement
* @constructor
* @return {FlxChartElement} .
*/
class FlxChartElement extends HTMLElement {
constructor() {
super();
/**
* Set when component is attached to DOM
* @property connected {boolean}
*/
this.connected = false;
this.data = null;
}
/**
* Fires when element is attached to DOM
* @method connectedCallback
*/
connectedCallback() {
let element = $(this);
this.connected = true;
this.moduleName = element.attr("ModuleName");
this.data = element.attr('value');
this.AdditionalWhere = element.attr('additionalwhere');
if (element.attr('manualInit') != 'true') {
this.init();
}
}
/**
* Array of observed attributes.
* @property observedAttributes {Array}
*/
static get observedAttributes() {
return ['ObjectName', 'ObjectWhere', 'modulename', 'value', 'additionalwhere'];
}
/**
* Fires when the attribute value of the element is changed.
* @method attributeChangedCallback
*/
attributeChangedCallback(attrName, oldVal, newVal) {
if (!this.connected) {
return;
}
if (attrName.toLowerCase() == 'modulename' && newVal && newVal != '') {
this.moduleName = newVal;
if (this.moduleName) {
this.refresh();
}
}
if (attrName.toLowerCase() == 'value' && newVal && newVal != '') {
this.data = newVal;
if (this.data) {
this.refresh();
}
}
if (attrName.toLowerCase() == 'additionalwhere' && newVal && newVal != '') {
this.AdditionalWhere = newVal;
this.refresh();
}
}
/**
* Refresh de webcomponent.
* @method refresh
*/
refresh() {
let me = $(this);
let params = {
ObjectName: (me.attr('ObjectName') ? me.attr('ObjectName') : null),
ObjectWhere: (me.attr('ObjectWhere') ? me.attr('ObjectWhere') : null),
AdditionalWhere: (this.AdditionalWhere ? this.AdditionalWhere : null),
ModuleName: me.attr('ModuleName'),
PageName: flexygo.history.getPageName(me)
};
flexygo.storage.cache.remove('chart', params);
if ($(this).attr('manualInit') != 'true') {
this.init();
}
}
/**
* Init the webcomponent.
* @method init
*/
init() {
let me = $(this);
me.removeAttr('manualInit');
let parentModule = me.closest('flx-module');
let wcModule = parentModule[0];
if (parentModule && wcModule) {
wcModule.moduleLoaded(this);
}
me.html('<div><canvas></canvas></div>');
if (parentModule.attr("type") != 'flx-list') {
let params = {
ObjectName: (me.attr('ObjectName') ? me.attr('ObjectName') : null),
ObjectWhere: (me.attr('ObjectWhere') ? me.attr('ObjectWhere') : null),
AdditionalWhere: (this.AdditionalWhere ? this.AdditionalWhere : null),
ModuleName: me.attr('ModuleName'),
PageName: flexygo.history.getPageName(me)
};
/** Read Cache **/
let cacheResponse = flexygo.storage.cache.get('chart', params);
/** If Cache use cache**/
if (cacheResponse) {
this.data = cacheResponse.response.Values;
this.settings = cacheResponse.response.Settings;
this.options = cacheResponse.response.Options;
this.Title = cacheResponse.response.Title;
this.Labels = cacheResponse.response.Labels;
this.Series = cacheResponse.response.Series;
this.Values = cacheResponse.response.Value;
this.Params = cacheResponse.response.Params;
this.type = cacheResponse.response.ChartType;
this.Background = cacheResponse.response.ChartBackground;
this.Border = cacheResponse.response.ChartBorder;
this.MixedChartLabels = cacheResponse.response.MixedChartLabels;
this.MixedChartTypes = cacheResponse.response.MixedChartTypes;
this.ChartLineBorderDash = cacheResponse.response.ChartLineBorderDash;
this.ChartLineFill = cacheResponse.response.ChartLineFill;
this.render();
}
else {
flexygo.ajax.post('~/api/Chart', 'GetHTML', params, (response) => {
if (response) {
flexygo.storage.cache.add('chart', params, response, response.Cache);
this.data = response.Values;
this.settings = response.Settings;
this.options = response.Options;
this.Title = response.Title;
this.Labels = response.Labels;
this.Series = response.Series;
this.Values = response.Value;
this.Params = response.Params;
this.type = response.ChartType;
this.Background = response.ChartBackground;
this.Border = response.ChartBorder;
this.MixedChartLabels = response.MixedChartLabels;
this.MixedChartTypes = response.MixedChartTypes;
this.ChartLineBorderDash = response.ChartLineBorderDash;
this.ChartLineFill = response.ChartLineFill;
this.render();
}
}, null, () => { this.stopLoading(); }, () => { this.startLoading(); });
}
}
else {
let params = {
ChartSettingName: me.attr("chartsetting") ? me.attr("chartsetting") : "syscs-default-legendandlabels"
};
flexygo.ajax.post('~/api/Chart', 'GetSettings', params, (response) => {
if (response) {
this.settings = response.Settings;
this.render();
}
}, null, () => { this.stopLoading(); }, () => { this.startLoading(); });
}
}
/**
* Renders the chart
* @method render
*/
render() {
let me = $(this);
let name = '';
let listModule = me.closest('flx-list');
let wcListModule = listModule[0];
if (me.attr('type') && me.attr('type') != '') {
this.type = me.attr('type');
}
if (me.attr('options') && me.attr('options') != '') {
this.options = me.attr('options');
}
if (me.attr('series') && me.attr('series') != '') {
this.Series = me.attr('series');
}
if (me.attr('labels') && me.attr('labels') != '') {
this.Labels = me.attr('labels');
}
if (me.attr('value') && me.attr('value') != '') {
this.Values = me.attr('value');
}
if (me.attr('borderdash') && me.attr('borderdash') != '') {
this.ChartLineBorderDash = Boolean(me.attr('borderdash'));
}
if (me.attr('linefill') && me.attr('linefill') != '') {
this.ChartLineFill = Boolean(me.attr('linefill'));
}
if (listModule.attr("mode") === 'list') {
this.data = wcListModule.data.length > 0 ? wcListModule.data.map(s => ({ serie: s[this.Series], label: s[this.Labels], value: s[this.Values] })) : wcListModule.data;
}
if (this.data.length > 0) {
let options = {
Showlabels: this.settings.ShowLabels,
ShowLegend: this.settings.ShowLegend,
ShowTitle: this.settings.ShowTitle,
LegendPos: this.settings.LegendPos.toLowerCase(),
ToolTipBackgroundColor: this.settings.ToolTipBackgroundColor,
Title: this.Title,
TitleFontSize: this.settings.TitleFontSize,
TitleFontColor: this.settings.TitleFontColor,
TitlePosition: this.settings.TitlePosition.toLowerCase(),
TitleFontStyle: this.settings.TitleFontStyle,
Responsive: this.settings.Responsive,
AnimationDuration: this.settings.AnimationDuration,
AnimationStyle: this.settings.AnimationStyle,
BackgroundColor: this.settings.Colors.split("|"),
BorderColor: this.settings.BorderColors.split("|"),
MinXAxes: this.settings.MinXAxes,
MinYAxes: this.settings.MinYAxes,
};
let defaultOptions = {
responsive: options.Responsive,
responsiveAnimationDuration: 0,
maintainAspectRatio: true,
aspectRatio: 2,
onResize: null,
onHover: null,
onClick: null,
hover: {
mode: 'nearest',
intersect: true,
animationDuration: 400,
},
events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'],
animation: {
duration: options.AnimationDuration,
onProgress: null,
onComplete: null,
easing: options.AnimationStyle ? options.AnimationStyle : 'easeOutBounce'
},
legend: {
display: options.ShowLegend,
position: options.LegendPos,
align: 'center',
fullWidth: true,
onHover: null,
onClick: (e, p) => {
let original = Chart.defaults.global.legend.onClick;
let allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
else {
original.call(this, e, p);
}
},
onLeave: null,
labels: {
boxWidth: 40,
fontSize: 12,
fontStyle: 'normal',
fontColor: '#666',
fontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
padding: 10,
legendCallback: null,
filter: null,
usePointStyle: false
}
},
title: {
display: options.ShowTitle,
position: options.TitlePosition,
fontColor: options.TitleFontColor,
fontFamily: options.TitleFontStyle,
fontSize: options.TitleFontSize,
text: options.Title,
fontStyle: 'bold',
padding: 10,
lineHeight: 1.2
},
tooltips: {
enabled: true,
mode: 'point',
intersect: true,
backgroundColor: options.ToolTipBackgroundColor,
titleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
titleFontSize: 12,
titleFontStyle: 'bold',
titleFontColor: '#fff',
titleAlign: 'left',
titleSpacing: 2,
titleMarginBottom: 6,
bodyFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
bodyFontSize: 12,
bodyFontStyle: 'normal',
bodyFontColor: '#fff',
bodyAlign: 'left',
bodySpacing: 2,
footerFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
footerFontSize: 12,
footerFontStyle: 'bold',
footerFontColor: '#fff',
footerAlign: 'left',
footerSpacing: 2,
footerMarginTop: 6,
xPadding: 6,
yPadding: 6,
caretPadding: 2,
caretSize: 5,
cornerRadius: 6,
multiKeyBackground: '#fff',
displayColors: true,
borderColor: 'rgba(0, 0, 0, 0)',
borderWidth: 0,
rtl: true,
textDirection: 'rtl'
},
stacked: false,
elements: {
point: {
radius: 5,
pointStyle: 'circle',
rotation: 0,
backgroundColor: 'rgba(0, 0, 0, 0.1)',
borderWidth: 1,
borderColor: 'rgba(0, 0, 0, 0.1)',
hitRadius: 1,
hoverRadius: 6,
hoverBorderWidth: 1
},
line: {
tension: 0.4,
backgroundColor: 'rgba(0, 0, 0, 0.1)',
borderWidth: 3,
borderColor: 'rgba(0, 0, 0, 0.1)',
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
capBezierPoints: true,
cubicInterpolationMode: 'default',
fill: false,
stepped: false
},
rectangle: {
backgroundColor: 'rgba(0, 0, 0, 0.1)',
borderWidth: 0,
borderColor: 'rgba(0, 0, 0, 0.1)',
borderSkipped: 'bottom'
},
arc: {
backgroundColor: 'rgba(0, 0, 0, 0.1)',
borderAlign: 'center',
borderColor: '#fff',
borderWidth: 2
}
},
};
let original = Chart.defaults.global.legend.onClick;
var ctxx = me.find('canvas');
let label = [], serie = [], series = [], value = [], mixedLabels = [], backgroundColors = [], borderColor = [], hoverBackgroundColor = [], Datasets = [];
for (let i = 0; i < this.data.length; i++) {
//Meto todos los labels y las series distintas
if (label.indexOf(this.data[i].label) == -1) {
label.push(this.data[i].label);
}
if (serie.indexOf(this.data[i].serie) == -1) {
serie.push(this.data[i].serie);
}
if (mixedLabels.indexOf(this.data[i].chartLabel) == -1) {
mixedLabels.push(this.data[i].chartLabel);
}
if (!this.checkValue(series, this.data[i].serie, this.data[i].chartLabel)) {
series.push({ serial: this.data[i].serie, chartLabel: this.data[i].chartLabel, backgroundColor: this.data[i].backgroundColor, borderColor: this.data[i].borderColor });
}
}
switch (this.type) {
case 'line':
//Para cada serie y label sus valores correspondientes
for (let z = 0; z < series.length; z++) {
value = [];
for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (label[i] == this.data[x].label && serie[z] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
}
Datasets.push({ label: serie[z], fill: this.ChartLineFill, borderDash: this.ChartLineBorderDash ? [5, 5] : [0, 0], backgroundColor: flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"], borderColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], data: value });
}
var optionsLine = {
scales: {
xAxes: [{
display: true,
scaleLabel: {
display: true,
labelString: this.Labels
}
}],
yAxes: [{
display: true,
stacked: false,
scaleLabel: {
display: true,
labelString: this.Values
}
}]
}
};
let overwriteOptionsLine = Object.assign({}, defaultOptions, optionsLine);
!flexygo.utils.isBlank(this.options) ? overwriteOptionsLine = Object.assign({}, overwriteOptionsLine, JSON.parse(this.options)) : overwriteOptionsLine;
this.chart = new Chart(ctxx, {
type: this.type,
data: {
labels: label,
datasets: Datasets
},
options: overwriteOptionsLine
});
break;
case 'bubble':
//Para cada serie y label sus valores correspondientes
for (let z = 0; z < series.length; z++) {
value = [];
for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (label[i] == this.data[x].label && serie[z] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push({ x: parseFloat(label[i]), y: parseFloat(valor), r: this.getRadiusBubble(parseFloat(valor), Math.max.apply(null, this.data.map(d => d.value)), Math.min.apply(null, this.data.map(d => d.value))) });
}
Datasets.push({ label: serie[z], backgroundColor: flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"], borderColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], hoverBackgroundColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], hoverRadius: 0, data: value });
}
var optionsBubble = {
responsive: options.Responsive,
hoverMode: 'label',
hoverAnimationDuration: 400,
stacked: false,
title: {
display: options.ShowTitle,
position: options.TitlePosition,
fontColor: options.TitleFontColor,
fontFamily: options.TitleFontStyle,
fontSize: options.TitleFontSize,
text: options.Title
},
legend: {
position: options.LegendPos,
display: options.ShowLegend,
onClick: (e, p) => {
let original = Chart.defaults.global.legend.onClick;
let allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
else {
original.call(this, e, p);
}
}
},
elements: {
points: {
borderWidth: 1,
borderColor: 'rgb(0, 0, 0)'
}
},
scales: {
xAxes: [{
scaleLabel: {
display: true,
labelString: this.Labels
},
ticks: {
display: options.Showlabels
}
}],
yAxes: [{
scaleLabel: {
display: true,
labelString: this.Values
},
ticks: {
display: options.Showlabels
}
}]
},
tooltips: {
backgroundColor: options.ToolTipBackgroundColor
}
};
let overwriteOptionsBubble = Object.assign({}, defaultOptions, optionsBubble);
!flexygo.utils.isBlank(this.options) ? overwriteOptionsBubble = Object.assign({}, overwriteOptionsBubble, JSON.parse(this.options)) : overwriteOptionsBubble;
this.chart = new Chart(ctxx, {
type: this.type,
data: {
datasets: Datasets
},
options: overwriteOptionsBubble
});
break;
case 'doughnut':
case 'semidoughnut':
//Para cada serie y label sus valores correspondientes
value = [];
for (let z = 0; z < series.length; z++) {
//for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (series[z]["serial"] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
// }
backgroundColors.push(flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"]);
borderColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
hoverBackgroundColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
//, label: series[z]["serial"]
}
Datasets.push({ data: value, backgroundColor: backgroundColors, borderColor: borderColor, hoverBackgroundColor: hoverBackgroundColor });
var optionsDoughnut = {
circumference: this.type == 'doughnut' ? 2 * Math.PI : Math.PI,
rotation: this.type == 'doughnut' ? -Math.PI / 2 : -Math.PI,
legend: {
position: options.LegendPos,
display: options.ShowLegend,
onClick: (e, p) => {
original = Chart.defaults.doughnut.legend.onClick;
original.call(this, e, p);
var allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
}
}
};
let overwriteOptionsDoughnut = Object.assign({}, defaultOptions, optionsDoughnut);
!flexygo.utils.isBlank(this.options) ? overwriteOptionsDoughnut = Object.assign({}, overwriteOptionsDoughnut, JSON.parse(this.options)) : overwriteOptionsDoughnut;
this.chart = new Chart(ctxx, {
type: 'doughnut',
data: {
labels: serie,
datasets: Datasets
},
options: overwriteOptionsDoughnut
});
break;
case 'radar':
//Para cada serie y label sus valores correspondientes
for (let z = 0; z < series.length; z++) {
value = [];
for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (label[i] == this.data[x].label && serie[z] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
}
Datasets.push({ label: serie[z], backgroundColor: flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"], borderColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], data: value });
}
var optionsRadar = {
responsive: options.Responsive,
hoverMode: 'label',
hoverAnimationDuration: 400,
stacked: false,
title: {
display: options.ShowTitle,
position: options.TitlePosition,
fontColor: options.TitleFontColor,
fontFamily: options.TitleFontStyle,
fontSize: options.TitleFontSize,
text: options.Title
},
animation: {
animateScale: options.animateScale !== "False",
animateRotate: options.animateRotate !== "False",
duration: options.AnimationDuration
},
legend: {
position: options.LegendPos,
display: options.ShowLegend,
onClick: (e, p) => {
original.call(this, e, p);
var allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
}
},
scale: {
reverse: false,
ticks: {
beginAtZero: true
}
},
tooltips: {
backgroundColor: options.ToolTipBackgroundColor
},
};
let overwriteOptionsRadar = Object.assign({}, defaultOptions, optionsRadar);
!flexygo.utils.isBlank(this.options) ? overwriteOptionsRadar = Object.assign({}, overwriteOptionsRadar, JSON.parse(this.options)) : overwriteOptionsRadar;
this.chart = new Chart(ctxx, {
type: this.type,
data: {
labels: label,
datasets: Datasets
},
options: overwriteOptionsRadar
});
break;
case 'polarArea':
case 'polararea':
//Para cada serie y label sus valores correspondientes
value = [];
for (let z = 0; z < series.length; z++) {
//for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (series[z]["serial"] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
backgroundColors.push(flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"]);
borderColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
hoverBackgroundColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
//}
}
Datasets.push({ data: value, backgroundColor: backgroundColors, borderColor: borderColor, hoverBackgroundColor: hoverBackgroundColor });
var optionsPolarArea = {
legend: {
position: options.LegendPos,
display: options.ShowLegend,
onClick: (e, p) => {
original = Chart.defaults.polarArea.legend.onClick;
original.call(this, e, p);
var allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
}
},
elements: {
arc: {
borderColor: "#000000"
}
},
};
let overwritePolarArea = Object.assign({}, defaultOptions, optionsPolarArea);
!flexygo.utils.isBlank(this.options) ? overwritePolarArea = Object.assign({}, overwritePolarArea, JSON.parse(this.options)) : overwritePolarArea;
this.chart = new Chart(ctxx, {
type: 'polarArea',
data: {
labels: serie,
datasets: Datasets
},
options: overwritePolarArea
});
break;
case 'mixed':
//Para cada serie y label sus valores correspondientes
for (let z = 0; z < series.length; z++) {
//Por cada mixedLabel del dataset
//for (let y = 0; y < mixedLabels.length; y++) {
value = [];
let mixedChartType = "";
for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (label[i] == this.data[x].label && series[z]["chartLabel"] == this.data[x].chartLabel && series[z]["serial"] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
mixedChartType = this.data[x].chartType;
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
}
Datasets.push({ label: series[z]["serial"] + ' - ' + series[z]["chartLabel"], type: mixedChartType, backgroundColor: flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"], borderColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], hoverBackgroundColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], borderWidth: 1, data: value });
//}
}
this.chart = new Chart(ctxx, {
type: this.data[0].chartType,
data: {
labels: label,
datasets: Datasets
},
options: defaultOptions
});
break;
case 'bar':
case 'horizontalBar':
case 'horizontalbar':
//Para cada serie y label sus valores correspondientes
for (let z = 0; z < series.length; z++) {
value = [];
for (let i = 0; i < label.length; i++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (label[i] == this.data[x].label && series[z].serial == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
}
Datasets.push({ label: series[z].serial, backgroundColor: flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"], borderColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], hoverBackgroundColor: flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"], borderWidth: 1, data: value });
}
let overwriteBar = defaultOptions;
!flexygo.utils.isBlank(this.options) ? overwriteBar = Object.assign({}, overwriteBar, JSON.parse(this.options)) : overwriteBar;
this.chart = new Chart(ctxx, {
type: this.type.toLowerCase() === 'horizontalbar' ? 'horizontalBar' : this.type,
data: {
labels: label,
datasets: Datasets
},
options: overwriteBar
});
break;
case 'pie':
//Para cada serie y label sus valores correspondientes
value = [];
for (let z = 0; z < series.length; z++) {
let valor;
for (let x = 0; x < this.data.length; x++) {
if (series[z]["serial"] == this.data[x].serie) {
valor = parseFloat(this.data[x].value.toString().replace(',', '.'));
}
}
if (!valor) {
valor = 0;
}
value.push(valor);
backgroundColors.push(flexygo.utils.isBlank(series[z]["backgroundColor"]) ? options.BackgroundColor[z] : series[z]["backgroundColor"]);
borderColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
hoverBackgroundColor.push(flexygo.utils.isBlank(series[z]["borderColor"]) ? options.BorderColor[z] : series[z]["borderColor"]);
}
Datasets.push({ data: value, backgroundColor: backgroundColors, borderColor: borderColor, hoverBackgroundColor: hoverBackgroundColor });
var optionsPie = {
legend: {
position: options.LegendPos,
display: options.ShowLegend,
onClick: (e, p) => {
original = Chart.defaults.pie.legend.onClick;
original.call(this, e, p);
var allPageCharts = me.closest('main').find('flx-chart[link-group="' + me.attr('link-group') + '"]');
if (this.options && !flexygo.utils.isBlank(this.options.GroupName)) {
allPageCharts.each((i, e) => {
if (!$(e).is(me)) {
e.toggleLabel(p.text, null, this.options.GroupName);
}
});
}
}
},
cutoutPercentage: 0,
};
let overwritePie = Object.assign({}, defaultOptions, optionsPie);
!flexygo.utils.isBlank(this.options) ? overwritePie = Object.assign({}, overwritePie, JSON.parse(this.options)) : overwritePie;
this.chart = new Chart(ctxx, {
type: this.type,
data: {
labels: serie,
datasets: Datasets
},
options: overwritePie
});
break;
default:
break;
}
}
else {
me.html('<div class="box-info"><i class="flx-icon icon-information-2 icon-lg icon-margin-right"></i><span><strong>Info!</strong> ' + flexygo.localization.translate('flxlist.noentriesfound') + '</span></div>');
}
}
checkValue(array, value, chartLabel) {
let exists = false;
for (var i = 0; i < array.length; i++) {
if (array[i].serial === value && array[i].chartLabel === chartLabel) {
exists = true;
break;
}
}
return exists;
}
getRadiusBubble(value, max, min) {
let rMin = 5;
let rMax = 30;
let percentage = (value - min) / (max - min) * 100;
let r = this.getRadius(percentage, rMin, rMax);
if (r < rMin) {
r = rMin;
}
if (r > rMax) {
r = rMax;
}
return r;
}
getRadius(percent, min, max) {
return min + (max - min) * percent / 100;
}
toggleLabel(nom, boo, GroupName, ctxx) {
let ci = this.chart;
let found;
let nombres = [];
for (let k in ci.data.datasets) {
nombres.push(ci.data.datasets[k].label);
}
let index = nombres.indexOf(nom);
if (index >= 0 && boo === true) {
let meta = ci.getDatasetMeta(index);
meta.hidden = null;
ci.update();
}
else if (index >= 0 && boo === false) {
let meta = ci.getDatasetMeta(index);
meta.hidden = !ci.data.datasets[index].hidden;
ci.update();
}
else if (index >= 0 && boo === null && this.options.GroupName == GroupName && GroupName != null) {
var meta = ci.getDatasetMeta(index);
meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
ci.update();
}
}
/**
* Start loading
* @method startLoading
*/
startLoading() {
if ($(this).parents('flx-module').length > 0) {
$(this).parents('flx-module')[0].startLoading();
}
}
/**
* Stop loading
* @method stopLoading
*/
stopLoading() {
if ($(this).parents('flx-module').length > 0) {
$(this).parents('flx-module')[0].stopLoading();
}
}
}
wc.FlxChartElement = FlxChartElement;
})(wc = ui.wc || (ui.wc = {}));
})(ui = flexygo.ui || (flexygo.ui = {}));
})(flexygo || (flexygo = {}));
window.customElements.define('flx-chart', flexygo.ui.wc.FlxChartElement);
//# sourceMappingURL=flx-chart.js.map