Files
taxbaik/legacy/smartadmin/scripts/pages/apexcolumnchart.js
T
kjh2064 40cffb3beb
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m26s
fix: implement Blazor-native login form to properly update authentication state
Problem: JavaScript login form saved tokens to localStorage but didn't notify
CustomAuthenticationStateProvider, causing [Authorize] pages to remain in
'loading' state indefinitely. The provider only reads tokens when:
1. GetAuthenticationStateAsync() is called (page load)
2. NotifyAuthenticationStateChanged() is triggered (UI updates)

But JavaScript login didn't trigger either, leaving the authentication state
stale.

Solution: Convert AdminLoginForm from HTML+JavaScript to pure Blazor component.
Now the login flow is:
1. User enters credentials in Blazor form
2. HttpClient POST to /api/auth/login
3. Save tokens to localStorage
4. Call CustomAuthenticationStateProvider.LoginAsync() directly
5. Blazor detects auth state change and re-evaluates [Authorize] pages
6. Dashboard [Authorize] page renders successfully

Result: Immediate authentication state update, no loading timeout on protected pages.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-03 13:03:53 +09:00

1442 lines
46 KiB
JavaScript

import ApexCharts from '../thirdparty/apexchartsWrapper.js';
document.addEventListener('DOMContentLoaded', function() {
'use strict';
// Basic Column Chart
if (document.getElementById('basic-column-chart')) {
const basicColumnOptions = {
series: [{
name: 'Net Profit',
data: [44, 55, 57, 56, 61, 58, 63, 60, 66]
}, {
name: 'Revenue',
data: [76, 85, 101, 98, 87, 105, 91, 114, 94]
}, {
name: 'Free Cash Flow',
data: [35, 41, 36, 26, 45, 48, 52, 53, 41]
}],
chart: {
type: 'bar',
height: 350,
toolbar: {
show: true
},
zoom: {
enabled: false
}
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '55%',
endingShape: 'rounded'
},
},
dataLabels: {
enabled: false
},
stroke: {
show: true,
width: 2,
colors: ['transparent']
},
xaxis: {
categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
axisBorder: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
},
axisTicks: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
}
},
yaxis: {
title: {
text: '$ (thousands)',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
},
row: {
colors: [window.colorMap.bootstrapVars.bodyColor.rgba(0.05), 'transparent'],
opacity: 0.5
}
},
fill: {
opacity: 1
},
tooltip: {
y: {
formatter: function (val) {
return "$ " + val + " thousands"
}
},
theme: 'dark'
},
legend: {
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.primary[200].hex]
};
const basicColumnChart = new ApexCharts(
document.getElementById('basic-column-chart'),
basicColumnOptions
);
basicColumnChart.render();
}
// Column with Data Labels
if (document.getElementById('column-with-data-labels-chart')) {
const columnWithDataLabelsOptions = {
series: [{
name: 'Inflation',
data: [2.3, 3.1, 4.0, 10.1, 4.0, 3.6, 3.2, 2.3, 1.4, 0.8, 0.5, 0.2]
}],
chart: {
height: 350,
type: 'bar',
toolbar: {
show: true
},
zoom: {
enabled: false
}
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '55%',
endingShape: 'rounded'
},
},
dataLabels: {
enabled: true,
offsetY: -20,
style: {
fontSize: '12px',
colors: ['#fff']
}
},
stroke: {
show: true,
width: 2,
colors: ['transparent']
},
xaxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
axisBorder: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
},
axisTicks: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
}
},
yaxis: {
title: {
text: 'Servings',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
},
row: {
colors: [window.colorMap.bootstrapVars.bodyColor.rgba(0.05), 'transparent'],
opacity: 0.5
}
},
fill: {
opacity: 1
},
tooltip: {
y: {
formatter: function (val) {
return val + " Servings"
}
},
theme: 'dark'
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.primary[200].hex]
};
const columnWithDataLabelsChart = new ApexCharts(
document.getElementById('column-with-data-labels-chart'),
columnWithDataLabelsOptions
);
columnWithDataLabelsChart.render();
}
// Stacked Column Chart
if (document.getElementById('stacked-column-chart')) {
const stackedColumnOptions = {
series: [{
name: 'PRODUCT A',
data: [44, 55, 41, 67, 22, 43]
}, {
name: 'PRODUCT B',
data: [13, 23, 20, 8, 13, 27]
}, {
name: 'PRODUCT C',
data: [11, 17, 15, 15, 21, 14]
}, {
name: 'PRODUCT D',
data: [21, 7, 25, 13, 22, 8]
}],
chart: {
height: 350,
type: 'bar',
stacked: true,
toolbar: {
show: true
},
zoom: {
enabled: true
}
},
responsive: [{
breakpoint: 480,
options: {
legend: {
position: 'bottom',
offsetX: -10,
offsetY: 0
}
}
}],
plotOptions: {
bar: {
horizontal: false,
columnWidth: '55%',
endingShape: 'rounded'
},
},
dataLabels: {
enabled: true,
style: {
fontSize: '12px',
colors: ["#304758"]
}
},
stroke: {
show: true,
width: 2,
colors: ['transparent']
},
xaxis: {
type: 'category',
categories: ['Q1 2020', 'Q2 2020', 'Q3 2020', 'Q4 2020', 'Q1 2021', 'Q2 2021'],
labels: {
style: {
colors: Array(6).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
},
axisBorder: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
},
axisTicks: {
show: true,
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.1)
}
},
yaxis: {
title: {
text: 'Sales',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
style: {
colors: [window.colorMap.bootstrapVars.bodyColor.hex]
}
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
},
row: {
colors: [window.colorMap.bootstrapVars.bodyColor.rgba(0.05), 'transparent'],
opacity: 0.5
}
},
legend: {
position: 'right',
offsetY: 40,
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
fill: {
opacity: 1
},
tooltip: {
theme: 'dark',
y: {
formatter: function (val) {
return val + " units"
}
}
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.primary[200].hex, window.colorMap.primary[100].hex]
};
const stackedColumnChart = new ApexCharts(
document.getElementById('stacked-column-chart'),
stackedColumnOptions
);
stackedColumnChart.render();
}
// Stacked 100 Column Chart
if (document.getElementById('stacked-100-column-chart')) {
const stacked100ColumnOptions = {
series: [{
name: 'PRODUCT A',
data: [44, 55, 41, 67, 22, 43, 21, 49]
}, {
name: 'PRODUCT B',
data: [13, 23, 20, 8, 13, 27, 33, 12]
}, {
name: 'PRODUCT C',
data: [11, 17, 15, 15, 21, 14, 15, 13]
}, {
name: 'PRODUCT D',
data: [21, 7, 25, 13, 22, 8, 10, 7]
}],
chart: {
type: 'bar',
height: 350,
stacked: true,
stackType: '100%',
toolbar: {
show: true
}
},
responsive: [{
breakpoint: 480,
options: {
legend: {
position: 'bottom',
offsetX: -10,
offsetY: 0
}
}
}],
xaxis: {
categories: ['2011 Q1', '2011 Q2', '2011 Q3', '2011 Q4', '2012 Q1', '2012 Q2',
'2012 Q3', '2012 Q4'
],
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
yaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
fill: {
opacity: 1
},
legend: {
position: 'right',
offsetX: 0,
offsetY: 50,
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
},
tooltip: {
theme: 'dark'
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.primary[200].hex, window.colorMap.primary[100].hex]
};
const stacked100ColumnChart = new ApexCharts(
document.getElementById('stacked-100-column-chart'),
stacked100ColumnOptions
);
stacked100ColumnChart.render();
}
// Grouped Stacked Column Chart
if (document.getElementById('grouped-stacked-column-chart')) {
const groupedStackedColumnOptions = {
series: [{
name: 'Actual Budget',
group: 'Budget',
data: [44000, 55000, 41000, 67000, 22000, 43000]
}, {
name: 'Expected Budget',
group: 'Budget',
data: [13000, 36000, 20000, 8000, 13000, 27000]
}, {
name: 'Actual Spending',
group: 'Spending',
data: [48000, 17000, 15000, 29000, 21000, 14000]
}, {
name: 'Expected Spending',
group: 'Spending',
data: [17000, 28000, 13000, 23000, 15000, 13000]
}],
chart: {
type: 'bar',
height: 350,
stacked: true,
toolbar: {
show: true
}
},
stroke: {
width: 1,
colors: ['#fff']
},
plotOptions: {
bar: {
horizontal: false
}
},
xaxis: {
categories: [
'Marketing',
'Research',
'Operations',
'Sales',
'HR',
'IT'
],
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
yaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
fill: {
opacity: 1
},
legend: {
position: 'top',
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
tooltip: {
theme: 'dark'
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.danger[500].hex, window.colorMap.danger[300].hex]
};
const groupedStackedColumnChart = new ApexCharts(
document.getElementById('grouped-stacked-column-chart'),
groupedStackedColumnOptions
);
groupedStackedColumnChart.render();
}
// Column Range (Dumbbell Chart)
if (document.getElementById('column-range-chart')) {
const columnRangeOptions = {
series: [{
data: [{
x: '2015',
y: [5000, 8000]
}, {
x: '2016',
y: [4000, 9500]
}, {
x: '2017',
y: [5000, 7500]
}, {
x: '2018',
y: [4500, 8500]
}, {
x: '2019',
y: [6000, 9000]
}, {
x: '2020',
y: [5000, 8700]
}, {
x: '2021',
y: [6500, 8800]
}]
}],
xaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
yaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
chart: {
height: 350,
type: 'rangeBar',
toolbar: {
show: true
}
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '30%',
borderRadius: 5
}
},
dataLabels: {
enabled: false
},
title: {
text: 'Column Range Chart (Dumbbell)',
align: 'left'
},
colors: [window.colorMap.primary[500].hex],
tooltip: {
theme: 'dark'
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const columnRangeChart = new ApexCharts(
document.getElementById('column-range-chart'),
columnRangeOptions
);
columnRangeChart.render();
}
// Distributed Column Chart
if (document.getElementById('distributed-column-chart')) {
const distributedColumnOptions = {
series: [{
data: [21, 22, 10, 28, 16, 21, 13, 30, 18, 20]
}],
chart: {
height: 350,
type: 'bar',
toolbar: {
show: true
},
events: {
click: function(chart, w, e) {
// Handle click events if needed
}
}
},
colors: [
window.colorMap.primary[500].hex, window.colorMap.primary[300].hex, window.colorMap.primary[200].hex, window.colorMap.primary[100].hex, window.colorMap.danger[500].hex,
window.colorMap.danger[50].hex, window.colorMap.info[200].hex, window.colorMap.info[600].hex, window.colorMap.success[300].hex, window.colorMap.warning[300].hex
],
plotOptions: {
bar: {
columnWidth: '45%',
distributed: true,
borderRadius: 4,
dataLabels: {
position: 'top'
}
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
},
dataLabels: {
enabled: true,
formatter: function(val) {
return val;
},
offsetY: -20,
style: {
fontSize: '12px',
colors: [window.colorMap.bootstrapVars.bodyColor.hex]
}
},
legend: {
show: false
},
xaxis: {
categories: [
'Team A', 'Team B', 'Team C', 'Team D', 'Team E',
'Team F', 'Team G', 'Team H', 'Team I', 'Team J'
],
labels: {
style: {
fontSize: '12px',
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
title: {
text: 'Distributed Column Chart',
align: 'left',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
subtitle: {
text: 'Each column has a different color',
align: 'left',
style: {
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.5)
}
}
};
const distributedColumnChart = new ApexCharts(
document.getElementById('distributed-column-chart'),
distributedColumnOptions
);
distributedColumnChart.render();
}
// Column with Negative Values
if (document.getElementById('column-with-negative-values-chart')) {
const columnWithNegativeValuesOptions = {
series: [{
name: 'Cash Flow',
data: [1.45, 5.42, 5.9, -0.42, -12.6, -18.1, -18.2, -14.16, -11.1, -6.09, 0.34, 3.88, 13.07,
5.8, 2, 7.37, 8.1, 13.57, 15.75, 17.1, 19.8, -27.03, -54.4, -47.2, -43.3, -18.6,
-48.6, -41.1, -39.6, -37.6, -29.4, -21.4, -2.4
]
}],
chart: {
type: 'bar',
height: 350,
toolbar: {
show: true
}
},
plotOptions: {
bar: {
colors: {
ranges: [{
from: -100,
to: -46,
color: window.colorMap.danger[500].hex
}, {
from: -45,
to: 0,
color: window.colorMap.warning[500].hex
}]
},
columnWidth: '80%'
}
},
dataLabels: {
enabled: false
},
xaxis: {
type: 'datetime',
categories: [
'2011-01-01', '2011-02-01', '2011-03-01', '2011-04-01', '2011-05-01', '2011-06-01',
'2011-07-01', '2011-08-01', '2011-09-01', '2011-10-01', '2011-11-01', '2011-12-01',
'2012-01-01', '2012-02-01', '2012-03-01', '2012-04-01', '2012-05-01', '2012-06-01',
'2012-07-01', '2012-08-01', '2012-09-01', '2012-10-01', '2012-11-01', '2012-12-01',
'2013-01-01', '2013-02-01', '2013-03-01', '2013-04-01', '2013-05-01', '2013-06-01',
'2013-07-01', '2013-08-01', '2013-09-01'
],
labels: {
rotate: -90,
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
yaxis: {
title: {
text: 'Growth',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
formatter: function(val) {
return val.toFixed(0) + "%";
},
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
tooltip: {
theme: 'dark',
y: {
formatter: function(val) {
return val.toFixed(2) + "%";
}
}
},
colors: [window.colorMap.primary[500].hex],
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const columnWithNegativeValuesChart = new ApexCharts(
document.getElementById('column-with-negative-values-chart'),
columnWithNegativeValuesOptions
);
columnWithNegativeValuesChart.render();
}
// Column with Markers
if (document.getElementById('column-with-markers-chart')) {
const columnWithMarkersOptions = {
series: [{
name: 'Actual',
data: [
{
x: '2011',
y: 1292,
goals: [
{
name: 'Expected',
value: 1400,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2012',
y: 4432,
goals: [
{
name: 'Expected',
value: 5400,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2013',
y: 5423,
goals: [
{
name: 'Expected',
value: 5200,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2014',
y: 6653,
goals: [
{
name: 'Expected',
value: 6500,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2015',
y: 8133,
goals: [
{
name: 'Expected',
value: 6600,
strokeHeight: 13,
strokeWidth: 0,
strokeLineCap: 'round',
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2016',
y: 7132,
goals: [
{
name: 'Expected',
value: 7500,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2017',
y: 7332,
goals: [
{
name: 'Expected',
value: 8700,
strokeHeight: 5,
strokeColor: window.colorMap.primary[300].hex
}
]
},
{
x: '2018',
y: 6553,
goals: [
{
name: 'Expected',
value: 7300,
strokeHeight: 2,
strokeDashArray: 2,
strokeColor: window.colorMap.primary[300].hex
}
]
}
]
}],
chart: {
height: 350,
type: 'bar',
toolbar: {
show: true
}
},
plotOptions: {
bar: {
columnWidth: '60%',
borderRadius: 3
}
},
colors: [window.colorMap.warning[500].hex],
dataLabels: {
enabled: false
},
legend: {
show: true,
showForSingleSeries: true,
customLegendItems: ['Actual', 'Expected'],
markers: {
fillColors: [window.colorMap.warning[500].hex, window.colorMap.primary[300].hex]
},
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
stroke: {
width: 1
},
title: {
text: 'Actual vs Expected Values',
align: 'left',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
xaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
yaxis: {
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
}
},
tooltip: {
theme: 'dark',
shared: true,
intersect: false
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const columnWithMarkersChart = new ApexCharts(
document.getElementById('column-with-markers-chart'),
columnWithMarkersOptions
);
columnWithMarkersChart.render();
}
// Column with Group Labels
if (document.getElementById('column-with-group-label-chart')) {
const columnWithGroupLabelOptions = {
series: [{
name: 'Actual',
data: [150000, 205000, 178000, 235000, 210000, 280000, 310000, 300000, 340000, 365000, 340000, 400000]
}, {
name: 'Target',
data: [190000, 230000, 200000, 255000, 235000, 300000, 330000, 320000, 360000, 385000, 360000, 420000]
}],
chart: {
type: 'bar',
height: 350,
toolbar: {
show: true
}
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '60%',
borderRadius: 3,
rangeBarOverlap: false
}
},
dataLabels: {
enabled: false
},
stroke: {
show: true,
width: 0,
colors: ['transparent']
},
xaxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
labels: {
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
axisBorder: {
show: false
},
axisTicks: {
show: false
}
},
yaxis: {
title: {
text: 'Sales (in dollars)',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
formatter: function(val) {
return '$' + val.toLocaleString(undefined, {maximumFractionDigits: 0});
},
style: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
min: 0,
max: 450000,
tickAmount: 5
},
fill: {
opacity: 1
},
legend: {
position: 'top',
horizontalAlign: 'left',
labels: {
colors: window.colorMap.bootstrapVars.bodyColor.hex
}
},
colors: [window.colorMap.primary[500].hex, window.colorMap.primary[300].hex],
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
},
tooltip: {
theme: 'dark',
y: {
formatter: function(val) {
return '$' + val.toLocaleString(undefined, {maximumFractionDigits: 0});
}
}
}
};
const columnWithGroupLabelChart = new ApexCharts(
document.getElementById('column-with-group-label-chart'),
columnWithGroupLabelOptions
);
columnWithGroupLabelChart.render();
}
// Column with Rotated Labels
if (document.getElementById('column-with-rotated-labels-chart')) {
const columnWithRotatedLabelsOptions = {
series: [{
name: 'Population',
data: [2.8, 3.9, 5.2, 6.1, 8.5, 11.7, 14.3, 16.5, 19.8, 24.1, 31.0]
}],
chart: {
height: 350,
type: 'bar',
toolbar: {
show: true
}
},
plotOptions: {
bar: {
borderRadius: 4,
columnWidth: '70%',
}
},
dataLabels: {
enabled: false
},
stroke: {
width: 2
},
xaxis: {
categories: [
'South Korea', 'Canada', 'United Kingdom', 'France', 'Germany',
'Japan', 'Russia', 'Brazil', 'United States', 'Indonesia', 'India'
],
labels: {
rotate: -45,
rotateAlways: true,
style: {
fontSize: '12px',
colors: Array(11).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
yaxis: {
title: {
text: 'Population (in millions)',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
formatter: function(val) {
return val.toFixed(1) + 'M';
},
style: {
colors: Array(6).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
fill: {
type: 'gradient',
gradient: {
shade: 'light',
type: 'vertical',
shadeIntensity: 0.4,
gradientToColors: ['#ffffff'],
inverseColors: false,
opacityFrom: 0.7,
opacityTo: 0.2,
stops: [0, 100]
}
},
tooltip: {
theme: 'dark',
y: {
formatter: function(val) {
return val.toFixed(1) + ' million';
}
}
},
colors: [window.colorMap.primary[500].hex],
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const columnWithRotatedLabelsChart = new ApexCharts(
document.getElementById('column-with-rotated-labels-chart'),
columnWithRotatedLabelsOptions
);
columnWithRotatedLabelsChart.render();
}
// Dynamic Loaded Column Chart
if (document.getElementById('dynamic-loaded-column-chart')) {
const dynamicLoadedColumnOptions = {
series: [{
name: "Load",
data: []
}],
chart: {
height: 350,
type: 'bar',
toolbar: {
show: true
},
animations: {
enabled: true,
easing: 'easeinout',
speed: 800,
animateGradually: {
enabled: true,
delay: 150
},
dynamicAnimation: {
enabled: true,
speed: 350
}
}
},
plotOptions: {
bar: {
borderRadius: 4,
columnWidth: '45%',
distributed: false
}
},
dataLabels: {
enabled: false
},
legend: {
show: false
},
stroke: {
show: true,
width: 2
},
xaxis: {
categories: [],
labels: {
rotate: 0,
style: {
colors: Array(10).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
yaxis: {
labels: {
style: {
colors: Array(6).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
tooltip: {
theme: 'dark',
y: {
formatter: function(val) {
return val.toFixed(0);
}
}
},
colors: [window.colorMap.primary[500].hex],
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const dynamicLoadedColumnChart = new ApexCharts(
document.getElementById('dynamic-loaded-column-chart'),
dynamicLoadedColumnOptions
);
dynamicLoadedColumnChart.render();
// Function to simulate loading data
const updateDynamicChart = function() {
const newData = [];
const newCategories = [];
// Generate random data
for (let i = 1; i <= 10; i++) {
newData.push(Math.floor(Math.random() * 90) + 10);
newCategories.push('Item ' + i);
}
// Update chart with new data
dynamicLoadedColumnChart.updateOptions({
xaxis: {
categories: newCategories
}
});
dynamicLoadedColumnChart.updateSeries([{
name: 'Load',
data: newData
}]);
};
// Initial load
setTimeout(updateDynamicChart, 1000);
// Set up reload button if it exists
const reloadButton = document.getElementById('reload-dynamic-chart');
if (reloadButton) {
reloadButton.addEventListener('click', updateDynamicChart);
} else {
// If no button exists, reload every 5 seconds
setInterval(updateDynamicChart, 5000);
}
}
// Dumbbell Column Chart
if (document.getElementById('dumbbell-column-chart')) {
const dumbbellColumnOptions = {
series: [{
data: [{
x: '2015',
y: [5000, 8000]
}, {
x: '2016',
y: [4000, 9500]
}, {
x: '2017',
y: [5000, 7500]
}, {
x: '2018',
y: [4500, 8500]
}, {
x: '2019',
y: [6000, 9000]
}, {
x: '2020',
y: [5000, 8700]
}, {
x: '2021',
y: [6500, 8800]
}, {
x: '2022',
y: [7200, 9400]
}, {
x: '2023',
y: [7800, 10200]
}]
}],
chart: {
height: 350,
type: 'rangeBar',
toolbar: {
show: true
}
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '30%',
borderRadius: 5,
isDumbbell: true,
dumbbellColors: [[window.colorMap.primary[500].hex, window.colorMap.danger[500].hex]]
}
},
title: {
text: 'Year-wise Revenue Range (Min-Max)',
align: 'left',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
subtitle: {
text: 'Range between minimum and maximum revenue',
align: 'left',
style: {
color: window.colorMap.bootstrapVars.bodyColor.rgba(0.5)
}
},
legend: {
show: false
},
xaxis: {
type: 'category',
labels: {
rotate: -45,
rotateAlways: true,
style: {
colors: Array(9).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
yaxis: {
title: {
text: 'Revenue ($ thousands)',
style: {
color: window.colorMap.bootstrapVars.bodyColor.hex
}
},
labels: {
formatter: function(val) {
return '$' + val.toFixed(0) + 'k';
},
style: {
colors: Array(20).fill(window.colorMap.bootstrapVars.bodyColor.hex)
}
}
},
tooltip: {
theme: 'dark',
custom: function({series, seriesIndex, dataPointIndex, w}) {
const data = w.globals.initialSeries[seriesIndex].data[dataPointIndex];
const min = data.y[0];
const max = data.y[1];
const range = max - min;
return (
'<div class="p-2">' +
'<div class="mb-1"><b>' + data.x + ' Revenue Range</b></div>' +
'<div>Min: $' + min.toLocaleString() + '</div>' +
'<div>Max: $' + max.toLocaleString() + '</div>' +
'<div>Range: $' + range.toLocaleString() + '</div>' +
'</div>'
);
}
},
grid: {
show: true,
borderColor: window.colorMap.bootstrapVars.bodyColor.rgba(0.08),
strokeDashArray: 5,
position: 'back',
xaxis: {
lines: {
show: false
}
}
}
};
const dumbbellColumnChart = new ApexCharts(
document.getElementById('dumbbell-column-chart'),
dumbbellColumnOptions
);
dumbbellColumnChart.render();
}
});