{"version":3,"file":"group_equation_chart_controller-BMlXxDpA.js","sources":["../../../app/javascript/entrypoints/controllers/group_equation_chart_controller.jsx"],"sourcesContent":["/** @jsx renderer.create */\n\nimport { Controller } from \"@hotwired/stimulus\";\nimport dayjs from \"dayjs\";\n\nimport {\n Chart,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n} from \"chart.js\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\n\nimport _ from \"lodash\";\n\nimport { useWindowResize } from \"stimulus-use\";\nimport { useResize } from \"stimulus-use\";\nimport currency from \"currency.js\";\n\nimport { CommonDOMRenderer } from \"render-jsx/dom\";\nimport { ticksCallback } from \"../utils\";\n\nimport numbro from \"numbro\";\n\nChart.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n Title,\n Tooltip,\n Legend,\n ChartDataLabels\n);\n\nconst red = \"rgba(255, 0, 0, 1)\";\nconst black = \"rgb(0, 0, 0, 1)\";\n\nconst tooltipWidth = 350;\n\nexport default class extends Controller {\n chart = null;\n initial = false;\n values = [];\n labels = [];\n\n static targets = [\"chart\"];\n\n static values = {\n jsonData: Object,\n };\n\n initialize() {\n this.resize = _.debounce(this.resize, 250).bind(this);\n this.windowResize = _.debounce(this.windowResize, 250).bind(this);\n\n Chart.defaults.plugins.legend.onHover = function () {\n document.body.style.cursor = \"pointer\";\n };\n\n Chart.defaults.plugins.legend.onLeave = function () {\n document.body.style.cursor = \"unset\";\n };\n }\n\n chartTargetDisconnect(element) {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.destroy();\n }\n }\n\n jsonDataValueChanged(element) {\n if (!this.initial) {\n this.initial = true;\n } else {\n let chart = Chart.getChart(element.id);\n\n const parsedData = this.jsonDataValue;\n\n const parsedEntries = parsedData.entries.map((entry) =>\n JSON.parse(entry)\n );\n const datasets = parsedEntries.map((entry) => ({\n type: \"line\",\n label: entry.name,\n data: Object.values(entry.rows),\n backgroundColor: entry.color,\n segmentColor: entry.color,\n borderColor: entry.color,\n ...this.baseDatalabelOptions(),\n }));\n\n const firstDataset = parsedEntries[0];\n const rows = firstDataset.rows;\n\n this.values = datasets;\n\n this.min = Math.min(...parsedEntries.map((entry) => entry.min)) || null;\n this.max = Math.max(...parsedEntries.map((entry) => entry.max)) || null;\n\n this.dataType = firstDataset.data_type;\n this.reverse = firstDataset.upside_down;\n this.decimalPlaces = firstDataset.decimal_places;\n this.tracking = firstDataset.tracking;\n this.endOfWeek = firstDataset.end_of_week;\n\n this.equations = firstDataset.equations;\n\n if (this.tracking == \"week\") {\n this.labels = Object.keys(firstDataset.rows).map(\n (key) => this.endOfWeek[key]\n );\n } else {\n this.labels = Object.keys(firstDataset.rows) || [];\n }\n\n if (chart) {\n chart.data.labels = this.labels;\n chart.data.datasets = this.values;\n\n chart.options = this.options(rows);\n\n chart.update(\"reset\");\n chart.update(\"normal\");\n } else {\n const ctx = document.getElementById(\"canvas-element\").getContext(\"2d\");\n this.createChart(ctx, rows, this.element);\n }\n }\n }\n\n chartTargetConnected(element) {\n useWindowResize(this);\n useResize(this);\n\n const parsedData = this.jsonDataValue;\n\n if (_.isEmpty(parsedData)) {\n return;\n }\n\n const ctx = document.getElementById(element.id).getContext(\"2d\");\n\n const parsedEntries = parsedData.entries.map((entry) => JSON.parse(entry));\n const datasets = parsedEntries.map((entry) => ({\n type: \"line\",\n label: entry.name,\n data: Object.values(entry.rows),\n backgroundColor: entry.color,\n segmentColor: entry.color,\n borderColor: entry.color,\n ...this.baseDatalabelOptions(),\n }));\n\n const firstDataset = JSON.parse(parsedData.entries[0]);\n\n const data = firstDataset.rows;\n\n this.values = datasets;\n this.equations = firstDataset.equations;\n\n this.min = Math.min(...parsedEntries.map((entry) => entry.min)) || null;\n this.max = Math.max(...parsedEntries.map((entry) => entry.max)) || null;\n\n this.dataType = firstDataset.data_type;\n this.reverse = firstDataset.upside_down;\n this.decimalPlaces = firstDataset.decimal_places;\n this.tracking = firstDataset.tracking;\n this.endOfWeek = firstDataset.end_of_week;\n\n if (this.tracking == \"week\") {\n this.labels = Object.keys(firstDataset.rows).map(\n (key) => this.endOfWeek[key]\n );\n } else {\n this.labels = Object.keys(firstDataset.rows) || [];\n }\n\n if (_.isEmpty(this.labels) || _.isEmpty(this.values)) {\n return;\n }\n\n this.createChart(ctx, data, element);\n }\n\n getOrCreateTooltip = (chart) => {\n let tooltipEl = chart.canvas.parentNode.querySelector(\"div\");\n\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n\n tooltipEl.classList.add(\n \"bg-gray-100\",\n \"text-black\",\n \"rounded\",\n \"shadow-lg\",\n \"border\"\n );\n\n tooltipEl.style.opacity = 1;\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.transform = \"translate(-50%, 0)\";\n tooltipEl.style.transition = \"all .1s ease\";\n tooltipEl.style.zIndex = \"9999999999999999999999\";\n\n const table = document.createElement(\"table\");\n table.style.margin = \"0px\";\n\n tooltipEl.appendChild(table);\n chart.canvas.parentNode.appendChild(tooltipEl);\n }\n\n return tooltipEl;\n };\n\n externalTooltipHandler = (context) => {\n const { chart, tooltip } = context;\n const tooltipEl = this.getOrCreateTooltip(chart);\n\n tooltipEl.innerHTML = \"\";\n\n if (tooltip.opacity === 0) {\n tooltipEl.style.opacity = 0;\n return;\n }\n\n if (tooltip.body) {\n const bodyLines = tooltip.body.map((b) => b.lines);\n const titleLines = tooltip.title || [];\n const renderer = new CommonDOMRenderer();\n\n renderer\n .render(\n
\n
\n

\n {dayjs(titleLines[0]).format(\"MMM DD, YYYY\")}\n

\n
\n {\" \"}\n {tooltip.labelColors.map((color) => (\n \n ))}\n {bodyLines.map((body, i) => (\n
\n
{body}
\n
\n ))}\n
\n
\n
\n
Equation: 
\n
{this.equations[titleLines[0]]}
\n
\n
\n
\n
\n )\n .on(tooltipEl);\n\n const { offsetLeft: positionX, offsetTop: positionY } = chart.canvas;\n\n const groupedContainer = document.getElementById(\"grouped-container\");\n\n const left = positionX + tooltip.caretX + tooltipWidth / 2 + 10;\n\n const container = groupedContainer;\n const containerRect = container.getBoundingClientRect();\n const containerRight = container.right;\n\n if (\n left + tooltipWidth / 2 > containerRight ||\n left + tooltipWidth / 2 > containerRect.width\n ) {\n tooltipEl.style.left = left - 350 + \"px\";\n } else {\n tooltipEl.style.left = left + \"px\";\n }\n\n tooltipEl.style.opacity = 1;\n tooltipEl.style.top = positionY + 15 + tooltip.caretY + \"px\";\n tooltipEl.style.font = tooltip.options.bodyFont.string;\n tooltipEl.style.padding =\n tooltip.options.padding + \"px \" + tooltip.options.padding + \"px\";\n tooltipEl.style.zIndex = \"9999999999999999999999\";\n tooltipEl.style.width = \"350px\";\n tooltipEl.style.maxWidth = \"350px\";\n }\n };\n\n baseDatalabelOptions = () => ({\n ...this.lineChartSettings(),\n datalabels: {\n display: true,\n color: \"black\",\n textStrokeWidth: 0.5,\n align: \"top\",\n offset: 12,\n font: {\n size: 14,\n },\n },\n });\n\n createChart = (ctx, data, element) => {\n let delayed;\n\n new Chart(ctx, {\n type: \"line\",\n data: {\n labels: this.labels,\n datasets: this.values,\n },\n options: {\n animation: {\n onComplete: () => {\n delayed = true;\n },\n delay: (context) => {\n let delay = 0;\n if (\n context.type === \"data\" &&\n context.mode === \"default\" &&\n !delayed\n ) {\n delay = context.dataIndex * 50 + context.datasetIndex * 25;\n }\n\n return delay;\n },\n },\n font: {\n family: \"Inter var\",\n size: 12,\n },\n ...this.options(data),\n },\n });\n };\n\n resize() {\n [...this.chartTargets].forEach((element) => {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.resize();\n }\n });\n }\n\n windowResize({ width, height, event }) {\n [...this.chartTargets].forEach((element) => {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.resize();\n }\n });\n }\n\n options = (data) => {\n return {\n clip: 50,\n layout: {\n padding: {\n top: 40,\n bottom: 0,\n left: 10,\n right: 5,\n },\n },\n responsive: true,\n maintainAspectRatio: true,\n plugins: {\n legend: false,\n tooltip: {\n enabled: false,\n position: \"nearest\",\n external: this.externalTooltipHandler,\n },\n datalabels: {\n formatter: (value, context) => {\n if (value == \"NR\") return \"NR\";\n\n if (this.dataType === \"currency\") {\n return currency(context.dataset.data[context.dataIndex] || 0, {\n precision: this.decimalPlaces,\n }).format();\n }\n\n if (this.dataType === \"percentage\") {\n return `${numbro(context.dataset.data[context.dataIndex]).format({\n thousandSeparated: true,\n mantissa: this.decimalPlaces,\n })}%`;\n }\n\n return numbro(value).format({\n thousandSeparated: true,\n mantissa: this.decimalPlaces,\n });\n },\n },\n },\n scales: {\n x: {\n grid: {\n color: \"rgb(0, 0, 0, .20)\",\n },\n ticks: {\n includeBounds: false,\n padding: 20,\n reverse: true,\n autoSkip: false,\n color: \"rgb(0, 0, 0)\",\n font: {\n family: \"Inter var\",\n size: 12,\n weight: \"bold\",\n },\n callback: (index) =>\n ticksCallback(index, this.tracking, this.labels),\n },\n },\n y: {\n suggestedMin: this.min,\n suggestedMax: this.max,\n position: \"left\",\n reverse: this.reverse,\n ticks: {\n position: \"left\",\n precision: this.decimalPlaces,\n font: {\n family: \"Inter var\",\n size: 12,\n weight: \"bold\",\n },\n padding: 20,\n color: \"rgb(0, 0, 0)\",\n callback: (value, index, values) => {\n if (value == \"NR\") return \"NR\";\n\n if (this.dataType === \"currency\") {\n try {\n return currency(value, {\n precision: this.decimalPlaces,\n }).format();\n } catch (_) {\n return `$${value}`;\n }\n }\n\n if (this.dataType === \"percentage\") {\n return `${numbro(value).format({\n thousandSeparated: true,\n mantissa: this.decimalPlaces,\n })}%`;\n }\n\n return numbro(value).format({\n average: true,\n mantissa: 0,\n });\n },\n },\n },\n },\n };\n };\n\n lineChartSettings = () => {\n return {\n borderColor: (ctx) => {\n let color = black;\n\n if (\n ctx.index != 0 &&\n parseFloat(this.values[ctx.index - 1]) >=\n parseFloat(this.values[ctx.index])\n ) {\n color = red;\n }\n\n if (this.reverse) return color == black ? red : black;\n return color;\n },\n backgroundColor: (ctx, options) => {\n let color = black;\n\n if (\n ctx.index != 0 &&\n parseFloat(this.values[ctx.index - 1]) >=\n parseFloat(this.values[ctx.index])\n ) {\n color = red;\n }\n\n if (this.reverse) return color == black ? red : black;\n return color;\n },\n segment: {\n borderColor: (ctx) => {\n let color = black;\n\n if (parseFloat(ctx.p0.raw) >= parseFloat(ctx.p1.raw)) {\n color = red;\n }\n\n if (this.reverse) return color == black ? red : black;\n return color;\n },\n },\n };\n };\n}\n"],"names":["Chart","CategoryScale","LinearScale","PointElement","LineElement","Title","Tooltip","Legend","ChartDataLabels","red","black","tooltipWidth","group_equation_chart_controller","Controller","__publicField","chart","tooltipEl","table","context","tooltip","bodyLines","b","titleLines","renderer","CommonDOMRenderer","dayjs","color","body","i","positionX","positionY","groupedContainer","left","container","containerRect","containerRight","ctx","data","element","delayed","delay","value","currency","numbro","index","ticksCallback","values","options","_","parsedEntries","entry","datasets","firstDataset","rows","key","useWindowResize","useResize","parsedData","width","height","event"],"mappings":"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"}