phx-react
Version:
PHX REACT
148 lines • 12.8 kB
JavaScript
"use strict";
exports.__esModule = true;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importStar(require("react"));
var recharts_1 = require("recharts");
function PHXBarChart(props) {
var data = props.data, dataKeyLineChart = props.dataKeyLineChart, colorLineChart = props.colorLineChart, dataKeyChartA = props.dataKeyChartA, dataKeyChartB = props.dataKeyChartB, xAxisKey = props.xAxisKey, yAxisRightKey = props.yAxisRightKey, domain = props.domain, nameLineChart = props.nameLineChart, hiddenLineChart = props.hiddenLineChart, doubleColumnInRow = props.doubleColumnInRow, barSize = props.barSize, nameColumnDouble = props.nameColumnDouble, chartType = props.chartType, radiusChart = props.radiusChart, chartColumnA = props.chartColumnA, chartColumnB = props.chartColumnB;
var _a = (0, react_1.useState)(null), hoveredBar = _a[0], setHoveredBar = _a[1];
var onMouseEnter = function (value) {
setHoveredBar(value.tooltipPayload[0].name);
};
var onMouseLeave = function () {
setHoveredBar(null);
};
var CustomToolLegend = function (propsTooltip) {
var payload = propsTooltip.payload;
// gộp những item có label name giống nhau thành 1
var aggregatedItems = {};
payload.forEach(function (item) {
var _a;
var name = (_a = item === null || item === void 0 ? void 0 : item.payload) === null || _a === void 0 ? void 0 : _a.name;
if (!aggregatedItems[name]) {
aggregatedItems[name] = tslib_1.__assign(tslib_1.__assign({}, item), { count: 1 });
}
else {
aggregatedItems[name].count++;
}
});
var aggregatedItemsArray = Object.values(aggregatedItems);
return (react_1["default"].createElement("div", { className: 'custom-legend mt-4' },
react_1["default"].createElement("div", { className: 'flex flex-wrap justify-end gap-2' }, aggregatedItemsArray === null || aggregatedItemsArray === void 0 ? void 0 : aggregatedItemsArray.map(function (item) { return (react_1["default"].createElement("div", { key: item.id, style: {
backgroundColor: '#F6F6F7',
padding: 5,
borderRadius: '5px'
} },
react_1["default"].createElement("div", { style: {
display: 'flex',
alignItems: 'center',
opacity: !hoveredBar ? 1 : hoveredBar === item.payload.name ? 1 : 0.5
} },
react_1["default"].createElement("div", { style: {
borderRadius: '4px',
width: '18px',
height: '18px',
background: "linear-gradient(".concat(item.color, ", ").concat(item.color, ")"),
alignItems: 'center',
alignContent: 'center'
} }),
react_1["default"].createElement("p", { style: {
marginLeft: '10px',
fontSize: '14px',
marginRight: 4
} }, item === null || item === void 0 ? void 0 : item.payload.name)))); }))));
};
var CustomToolTip = function (propsTooltip) {
var _a, _b;
var active = propsTooltip.active, payload = propsTooltip.payload;
if (!active || !payload || payload.length === 0) {
return null;
}
var groupedItems = {};
payload.forEach(function (item) {
var name = item.name;
if (!groupedItems[name]) {
groupedItems[name] = item;
}
});
var groupedItemsArray = Object.values(groupedItems);
return (react_1["default"].createElement("div", { style: {
backgroundColor: '#f5f5f5',
margin: 10,
width: '10rem',
padding: 3,
borderRadius: 8
} },
react_1["default"].createElement("div", { className: 'ml-2 mt-2' }, (_b = (_a = groupedItemsArray[0]) === null || _a === void 0 ? void 0 : _a.payload) === null || _b === void 0 ? void 0 : _b.name),
groupedItemsArray.map(function (item) { return (react_1["default"].createElement("div", { key: item.id, style: {
display: 'flex',
padding: 5,
marginTop: 4
} },
react_1["default"].createElement("div", { style: {
borderRadius: '4px',
width: '18px',
height: '18px',
background: "linear-gradient(".concat(item.color, ", ").concat(item.color, ")"),
alignItems: 'center',
alignContent: 'center',
opacity: hoveredBar === item.name ? 1 : 0.5
} }),
react_1["default"].createElement("div", { className: 'ml-2', style: { opacity: hoveredBar === item.name ? 1 : 0.5 } }, item.name),
react_1["default"].createElement("div", { style: {
marginLeft: 'auto',
opacity: hoveredBar === item.name ? 1 : 0.5
} }, item.payload.amt))); })));
};
var columns = chartColumnA === null || chartColumnA === void 0 ? void 0 : chartColumnA.map(function (item) { return (tslib_1.__assign({}, item)); });
var columnsPageB = chartColumnB === null || chartColumnB === void 0 ? void 0 : chartColumnB.map(function (item) { return (tslib_1.__assign({}, item)); });
var handleBoderChart = function (index, chartColumn) {
var chartIndex = index === chartColumn.length - 1 ? radiusChart !== null && radiusChart !== void 0 ? radiusChart : [6, 6, 0, 0] : [0, 0, 0, 0];
return chartIndex;
};
return (react_1["default"].createElement(recharts_1.ResponsiveContainer, { height: 500, width: '100%' },
react_1["default"].createElement(recharts_1.ComposedChart, { barGap: 20, data: data, height: 300, width: 500 },
react_1["default"].createElement(recharts_1.CartesianGrid, { strokeDasharray: '3 3', vertical: false }),
react_1["default"].createElement(recharts_1.XAxis, { axisLine: false, dataKey: xAxisKey !== null && xAxisKey !== void 0 ? xAxisKey : 'name' }),
react_1["default"].createElement(recharts_1.YAxis, { axisLine: false }),
react_1["default"].createElement(recharts_1.YAxis, { axisLine: false, dataKey: yAxisRightKey !== null && yAxisRightKey !== void 0 ? yAxisRightKey : 'yAxisRight', domain: domain, minTickGap: 20, orientation: 'right', tickCount: 5, yAxisId: 2 }),
react_1["default"].createElement(recharts_1.Tooltip, { content: react_1["default"].createElement(CustomToolTip, null) }),
react_1["default"].createElement(recharts_1.Legend, { content: react_1["default"].createElement(CustomToolLegend, null) }),
chartType === 'one-to-many' && (react_1["default"].createElement(react_1["default"].Fragment, null,
react_1["default"].createElement(recharts_1.Bar, { barSize: barSize, dataKey: dataKeyChartA !== null && dataKeyChartA !== void 0 ? dataKeyChartA : 'pv', onMouseEnter: function (value) { return onMouseEnter(value); }, fill: '#dd75c1', name: 'name' },
react_1["default"].createElement(recharts_1.Cell, { fill: '#dd75c1' })), columnsPageB === null || columnsPageB === void 0 ? void 0 :
columnsPageB.map(function (item, index) { return (react_1["default"].createElement(recharts_1.Bar, { key: "bar-pageB-".concat(index), onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'amt', fill: item.color, name: item.name, position: { x: 30 },
// @ts-ignore
radius: handleBoderChart(index, columnsPageB), stackId: 'stackB' },
react_1["default"].createElement(recharts_1.Cell, { key: "cell-pageB-".concat(index), fill: item.color }))); }))),
chartType === 'many-to-one' && (react_1["default"].createElement(react_1["default"].Fragment, null, columnsPageB === null || columnsPageB === void 0 ? void 0 :
columnsPageB.map(function (item, index) { return (react_1["default"].createElement(recharts_1.Bar, { key: "bar-pageB-".concat(index), onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: 'pv', fill: item.color, name: item.name, position: { x: 30 },
// @ts-ignore
radius: handleBoderChart(index, columnsPageB), stackId: 'stackB' },
react_1["default"].createElement(recharts_1.Cell, { key: "cell-pageB-".concat(index), fill: item.color }))); }),
react_1["default"].createElement(recharts_1.Bar, { onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'uv', fill: '#dd75c1', name: 'name' },
react_1["default"].createElement(recharts_1.Cell, { fill: '#dd75c1' })))),
chartType === 'single' && (
// @ts-ignore
react_1["default"].createElement(recharts_1.Bar, { onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'pv', fill: '#dd75c1', name: 'name' },
react_1["default"].createElement(recharts_1.Cell, { fill: '#dd75c1' }))),
chartType === 'double' && (react_1["default"].createElement(react_1["default"].Fragment, null,
react_1["default"].createElement(recharts_1.Bar, { onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'pv', fill: '#dd75c1', name: 'name' },
react_1["default"].createElement(recharts_1.Cell, { fill: '#dd75c1' })),
doubleColumnInRow && (
// @ts-ignore
react_1["default"].createElement(recharts_1.Bar, { onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'uv', fill: '#8868ee', name: nameColumnDouble },
react_1["default"].createElement(recharts_1.Cell, { fill: '#8868ee' }))))),
chartType === 'many-to-many' && (react_1["default"].createElement(react_1["default"].Fragment, null, columns === null || columns === void 0 ? void 0 :
columns.map(function (item, index) { return (react_1["default"].createElement(recharts_1.Bar, { key: "bar-pageA-".concat(index), onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'uv', fill: item.color, name: item.name, position: { x: 30 },
// @ts-ignore
radius: handleBoderChart(index, columns), stackId: 'stackA' },
react_1["default"].createElement(recharts_1.Cell, { key: "cell-pageA-".concat(index), fill: item.color }))); }), columnsPageB === null || columnsPageB === void 0 ? void 0 :
columnsPageB.map(function (item, index) { return (react_1["default"].createElement(recharts_1.Bar, { key: "bar-pageB-".concat(index), onMouseEnter: function (value) { return onMouseEnter(value); }, onMouseLeave: onMouseLeave, barSize: barSize, dataKey: dataKeyChartB !== null && dataKeyChartB !== void 0 ? dataKeyChartB : 'pv', fill: item.color, name: item.name, position: { x: 30 },
// @ts-ignore
radius: handleBoderChart(index, columnsPageB), stackId: 'stackB' },
react_1["default"].createElement(recharts_1.Cell, { key: "cell-pageB-".concat(index), fill: item.color }))); }))),
!hiddenLineChart && (react_1["default"].createElement(recharts_1.Line, { type: 'monotone', name: nameLineChart, dataKey: dataKeyLineChart !== null && dataKeyLineChart !== void 0 ? dataKeyLineChart : 'lineChart', stroke: colorLineChart !== null && colorLineChart !== void 0 ? colorLineChart : '#ff7300' })))));
}
exports["default"] = PHXBarChart;
//# sourceMappingURL=BarChart.js.map