(function (factory) {
typeof define === 'function' && define.amd ? define(factory) :
factory();
})((function () { 'use strict';
// import * as echarts from 'echarts';
const { merge } = window._;
// form config.js
const echartSetOption = (
chart,
userOptions,
getDefaultOptions,
responsiveOptions
) => {
const { breakpoints, resize } = window.phoenix.utils;
const handleResize = options => {
Object.keys(options).forEach(item => {
if (window.innerWidth > breakpoints[item]) {
chart.setOption(options[item]);
}
});
};
const themeController = document.body;
// Merge user options with lodash
chart.setOption(merge(getDefaultOptions(), userOptions));
const navbarVerticalToggle = document.querySelector(
'.navbar-vertical-toggle'
);
if (navbarVerticalToggle) {
navbarVerticalToggle.addEventListener('navbar.vertical.toggle', () => {
chart.resize();
if (responsiveOptions) {
handleResize(responsiveOptions);
}
});
}
resize(() => {
chart.resize();
if (responsiveOptions) {
handleResize(responsiveOptions);
}
});
if (responsiveOptions) {
handleResize(responsiveOptions);
}
themeController.addEventListener(
'clickControl',
({ detail: { control } }) => {
if (control === 'phoenixTheme') {
chart.setOption(window._.merge(getDefaultOptions(), userOptions));
}
if (responsiveOptions) {
handleResize(responsiveOptions);
}
}
);
};
// -------------------end config.js--------------------
const echartTabs = document.querySelectorAll('[data-tab-has-echarts]');
if (echartTabs) {
echartTabs.forEach(tab => {
tab.addEventListener('shown.bs.tab', e => {
const el = e.target;
const { hash } = el;
const id = hash || el.dataset.bsTarget;
const content = document.getElementById(id.substring(1));
const chart = content?.querySelector('[data-echart-tab]');
if (chart) {
window.echarts.init(chart).resize();
}
});
});
}
/* -------------------------------------------------------------------------- */
/* Echarts Total Sales */
/* -------------------------------------------------------------------------- */
const completedTaskChartInit = () => {
const { getColor, getData, getDates } = window.phoenix.utils;
const $totalSalesChart = document.querySelector(
'.echart-completed-task-chart'
);
const dates = getDates(
new Date('5/1/2022'),
new Date('5/30/2022'),
1000 * 60 * 60 * 24
);
const currentMonthData = [
50, 115, 180, 180, 180, 150, 120, 120, 120, 120, 120, 240, 240, 240, 240,
270, 300, 330, 360, 390, 340, 290, 310, 330, 350, 320, 290, 330, 370, 350
];
const prevMonthData = [
130, 130, 130, 90, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 110, 170,
230, 230, 230, 270, 310, 270, 230, 260, 290, 320, 280, 280, 280
];
const tooltipFormatter = params => {
const currentDate = window.dayjs(params[0].axisValue);
const prevDate = window.dayjs(params[0].axisValue).subtract(1, 'month');
const result = params.map((param, index) => ({
value: param.value,
date: index > 0 ? prevDate : currentDate,
color: param.color
}));
let tooltipItem = ``;
result.forEach((el, index) => {
tooltipItem += `
${el.date.format('MMM DD')} : ${el.value}
`;
});
return `
${tooltipItem}
`;
};
if ($totalSalesChart) {
const userOptions = getData($totalSalesChart, 'echarts');
const chart = window.echarts.init($totalSalesChart);
const getDefaultOptions = () => ({
color: [getColor('primary'), getColor('info')],
tooltip: {
trigger: 'axis',
padding: 10,
backgroundColor: getColor('body-highlight-bg'),
borderColor: getColor('border-color'),
textStyle: { color: getColor('light-text-emphasis') },
borderWidth: 1,
transitionDuration: 0,
axisPointer: {
type: 'none'
},
formatter: tooltipFormatter,
extraCssText: 'z-index: 1000'
},
xAxis: [
{
type: 'category',
data: dates,
axisLabel: {
formatter: value => window.dayjs(value).format('DD MMM'),
interval: 13,
showMinLabel: true,
showMaxLabel: false,
color: getColor('secondary-color'),
align: 'left',
fontFamily: 'Nunito Sans',
fontWeight: 600,
fontSize: 12.8
},
axisLine: {
show: true,
lineStyle: {
color: getColor('secondary-bg')
}
},
axisTick: {
show: false
},
splitLine: {
show: true,
interval: 0,
lineStyle: {
color: getColor('secondary-bg')
}
},
boundaryGap: false
},
{
type: 'category',
position: 'bottom',
data: dates,
axisLabel: {
formatter: value => window.dayjs(value).format('DD MMM'),
interval: 130,
showMaxLabel: true,
showMinLabel: false,
color: getColor('secondary-color'),
align: 'right',
fontFamily: 'Nunito Sans',
fontWeight: 600,
fontSize: 12.8
},
axisLine: {
show: false
},
axisTick: {
show: false
},
splitLine: {
show: false
},
boundaryGap: false
}
],
yAxis: {
position: 'right',
axisPointer: { type: 'none' },
axisTick: 'none',
splitLine: {
show: false
},
axisLine: { show: false },
axisLabel: { show: false }
},
series: [
{
name: 'd',
type: 'line',
// data: Array.from(Array(30).keys()).map(() =>
// getRandomNumber(100, 300)
// ),
data: currentMonthData,
showSymbol: false,
symbol: 'circle'
},
{
name: 'e',
type: 'line',
// data: Array.from(Array(30).keys()).map(() =>
// getRandomNumber(100, 300)
// ),
data: prevMonthData,
// symbol: 'none',
lineStyle: {
type: 'dashed',
width: 1,
color: getColor('info')
},
showSymbol: false,
symbol: 'circle'
}
],
grid: {
right: 2,
left: 5,
bottom: '20px',
top: '2%',
containLabel: false
},
animation: false
});
echartSetOption(chart, userOptions, getDefaultOptions);
}
};
// import * as echarts from 'echarts';
const { echarts } = window;
/* -------------------------------------------------------------------------- */
/* Market Share */
/* -------------------------------------------------------------------------- */
const topCouponsChartInit = () => {
const { getData, getColor } = window.phoenix.utils;
const ECHART_TOP_COUPONS = '.echart-top-coupons';
const $echartTopCoupons = document.querySelector(ECHART_TOP_COUPONS);
if ($echartTopCoupons) {
const userOptions = getData($echartTopCoupons, 'options');
const chart = echarts.init($echartTopCoupons);
const getDefaultOptions = () => ({
color: [
getColor('primary'),
getColor('primary-lighter'),
getColor('info-dark')
],
tooltip: {
trigger: 'item',
padding: [7, 10],
backgroundColor: getColor('body-highlight-bg'),
borderColor: getColor('border-color'),
textStyle: { color: getColor('light-text-emphasis') },
borderWidth: 1,
transitionDuration: 0,
position(pos, params, el, elRect, size) {
const obj = { top: pos[1] - 35 }; // set tooltip position over 35px from pointer
if (window.innerWidth > 540) {
if (pos[0] <= size.viewSize[0] / 2) {
obj.left = pos[0] + 20; // 'move in right';
} else {
obj.left = pos[0] - size.contentSize[0] - 20;
}
} else {
obj[pos[0] < size.viewSize[0] / 2 ? 'left' : 'right'] = 0;
}
return obj;
},
formatter: params => {
return `${params.data.name}: ${params.percent}%`;
},
extraCssText: 'z-index: 1000'
},
legend: { show: false },
series: [
{
name: '72%',
type: 'pie',
radius: ['100%', '87%'],
avoidLabelOverlap: false,
emphasis: {
scale: false,
itemStyle: {
color: 'inherit'
}
},
itemStyle: {
borderWidth: 2,
borderColor: getColor('body-bg')
},
label: {
show: true,
position: 'center',
formatter: '{a}',
fontSize: 23,
color: getColor('light-text-emphasis')
},
data: [
{ value: 7200000, name: 'Percentage discount' },
{ value: 1800000, name: 'Fixed card discount' },
{ value: 1000000, name: 'Fixed product discount' }
]
}
],
grid: { containLabel: true }
});
echartSetOption(chart, userOptions, getDefaultOptions);
}
};
const { docReady } = window.phoenix.utils;
docReady(completedTaskChartInit);
docReady(topCouponsChartInit);
}));
//# sourceMappingURL=project-details.js.map