{"version":3,"file":"Component-G49xxeB4.mjs","sources":["../node_modules/es-toolkit/dist/compat/array/concat.mjs","../src/components/ConversationMessage/extensions/NodeViews/AreaChart/utils.ts","../src/components/ConversationMessage/extensions/NodeViews/AreaChart/hooks/useAreaChartNodeView.ts","../src/components/ConversationMessage/extensions/NodeViews/AreaChart/Component.tsx"],"sourcesContent":["import { flatten } from '../../array/flatten.mjs';\n\nfunction concat(...values) {\n    return flatten(values);\n}\n\nexport { concat };\n","import { getSizeOfText } from '@antscorp/antsomi-charts';\nimport { concat, isEmpty, toNumber } from 'es-toolkit/compat';\nimport type { TupleToUnion } from 'type-fest';\nimport { REGEX_DIMENSION } from '@/constants/report';\nimport type { ApiAreaChartData, ApiLineChartData, Field } from '@/types';\nimport type { AreaChartSettings } from '@/types/report/areachart';\nimport { Utils } from '@/utils';\n\nconst MAX_LINE_PER_METRIC = 16;\n\nconst handleFormatRowObjectPattern = (row: TupleToUnion<ApiLineChartData['rows']>) => {\n\tconst [time, dimension, metric] = row || [];\n\n\treturn {\n\t\ttime: time.value,\n\t\tdimension: dimension.value,\n\t\taggregations: [\n\t\t\t{\n\t\t\t\tname: metric.name,\n\t\t\t\ttype: metric.aggregationType,\n\t\t\t\tvalue: metric.value,\n\t\t\t},\n\t\t],\n\t};\n};\n\nexport const serializeReportPerfData = (params: {\n\tdata: ApiAreaChartData;\n\tsettings: AreaChartSettings;\n\topts?: {\n\t\trenderMetric?: Field[];\n\t\tsetXAxisSize?: (params: { width: number; height: number }) => void;\n\t\tupdateValidateData?: (params: unknown) => void;\n\t};\n}) => {\n\ttype YAxis = {\n\t\tisActive: boolean;\n\t\tkey: string;\n\t\tlabel: string;\n\t\tname: string;\n\t\tshowOtherInfo?: {\n\t\t\tindex: number;\n\t\t};\n\t\tyAxisId: string;\n\t\tcolor: string;\n\t};\n\n\tconst { data: apiData, settings, opts } = params;\n\n\tconst { mode = 'EDIT', style } = settings;\n\n\tconst metrics = Utils.helpers.safeParseListField(settings.metric);\n\tconst dimensions = Utils.helpers.safeParseListField(settings.dimension);\n\tconst timeDimensions = Utils.helpers.safeParseListField(settings.timeDimension);\n\n\tconst renderMetric = opts?.renderMetric\n\t\t? Utils.helpers.safeParseListField(opts.renderMetric)\n\t\t: metrics;\n\n\tconst { rows } = apiData;\n\n\tconst { general, columns = [], xAxis, areaChart: styleAreaChart } = style;\n\n\tconst missingDataOption = general.missingData || 'lineToZero';\n\tconst missingDataValue = missingDataOption === 'lineToZero' ? 0 : null;\n\n\tconst range = xAxis.range || 'rangeByDateRange';\n\n\tlet arrData: {\n\t\ttime: string;\n\t\t[key: string]: null | number | string;\n\t}[] = [];\n\n\tlet number = 0;\n\n\tconst arrYAxis: YAxis[] = [];\n\tconst arrTotalValue: Record<string, number> = {};\n\n\tlet arrDimensionName: string[] = [];\n\n\tconst rowsShowOther: { normalValue: number; negativeValue: number; positiveValue: number }[][] =\n\t\t[];\n\n\tlet isPositive = true;\n\n\tif (\n\t\tmode === 'EDIT' &&\n\t\t!renderMetric.every((metric) => metrics.some((item) => item.key === metric.key))\n\t) {\n\t\treturn;\n\t}\n\n\t('');\n\trows.forEach((raw, rowIndex) => {\n\t\tconst row = handleFormatRowObjectPattern(raw) || {};\n\n\t\tconst item: {\n\t\t\ttime: string;\n\t\t\t[key: string]: null | number | string;\n\t\t} = { time: row.time };\n\n\t\tif (dimensions.length === 0) {\n\t\t\t// Not have breakdown dimension\n\t\t\tfor (const metric of renderMetric) {\n\t\t\t\t// Handle y axis key\n\t\t\t\tif (number < 1 && metric.name) {\n\t\t\t\t\tarrYAxis.push({\n\t\t\t\t\t\tkey: metric.key || '',\n\t\t\t\t\t\tname: metric.name,\n\t\t\t\t\t\tlabel: metric.aliasLabel || metric.label,\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t\tyAxisId: '',\n\t\t\t\t\t\tcolor: '',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Check dimension moved metric\n\t\t\t\tconst isAggregation = true;\n\n\t\t\t\tlet value = 0;\n\n\t\t\t\tif (isAggregation) {\n\t\t\t\t\tif (row.aggregations.length > 0) {\n\t\t\t\t\t\tconst aggregationItem = row.aggregations.find((aggregation) => {\n\t\t\t\t\t\t\treturn aggregation.name === metric.name;\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (aggregationItem?.value) {\n\t\t\t\t\t\t\tvalue = +aggregationItem.value[0] || 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t//      else if (\n\t\t\t\t// \trow['metrics'] &&\n\t\t\t\t// \ttypeof row['metrics'][metric.name] !== 'undefined' &&\n\t\t\t\t// \trow['metrics'][metric.name].length\n\t\t\t\t// ) {\n\t\t\t\t// \tvalue = +row['metrics'][metric.name][0];\n\t\t\t\t// }\n\n\t\t\t\tvalue = +Utils.helpers.convertValueFromDataType({\n\t\t\t\t\tvalue,\n\t\t\t\t\tfield: metric,\n\t\t\t\t});\n\n\t\t\t\titem[metric.key] = value && +value > 0 ? value : missingDataValue;\n\n\t\t\t\t// Collect data to show cumulative\n\t\t\t\tconst keyCumulative = `${metric.key}_cumulative`;\n\t\t\t\tconst prevValue = toNumber(arrData[rowIndex - 1]?.[keyCumulative]) || 0;\n\n\t\t\t\titem[keyCumulative] = Number.parseFloat(prevValue.toString()) + value;\n\n\t\t\t\t// Total value by metric\n\t\t\t\tconst totalValue = arrTotalValue[metric.key] ? arrTotalValue[metric.key] : 0;\n\n\t\t\t\tarrTotalValue[metric.key] = totalValue + value;\n\t\t\t}\n\t\t} else {\n\t\t\t// Have breakdown dimension\n\t\t\tif (number < 1 && typeof row.dimension !== 'undefined' && row.dimension.length > 0) {\n\t\t\t\tconst arrDimension = row.dimension;\n\n\t\t\t\tif (dimensions.length > 0 && dimensions[0].dataType && arrDimension.length > 0) {\n\t\t\t\t\tif (['IMAGE', 'HYPERLINK'].includes(dimensions[0].dataType)) {\n\t\t\t\t\t\t('');\n\t\t\t\t\t\tarrDimensionName = arrDimension.reduce<string[]>((arr, item) => {\n\t\t\t\t\t\t\tif (item.toString().indexOf('—')) {\n\t\t\t\t\t\t\t\tconst arrValues = Utils.helpers.formattedHyperlink(item.toString(), '—');\n\n\t\t\t\t\t\t\t\tif (arrValues.length > 0) {\n\t\t\t\t\t\t\t\t\tif (dimensions[0].dataType === 'IMAGE') {\n\t\t\t\t\t\t\t\t\t\treturn concat(arr, arrValues[0]);\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tif (dimensions[0].dataType === 'HYPERLINK') {\n\t\t\t\t\t\t\t\t\t\treturn concat(arr, arrValues[1]);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn concat(arr, item.toString());\n\t\t\t\t\t\t}, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tarrDimensionName = arrDimension.map((i) => i.toString());\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (arrDimensionName.length > 0) {\n\t\t\t\tarrDimensionName.forEach((name, index) => {\n\t\t\t\t\t'';\n\t\t\t\t\trenderMetric.forEach((metric, metricIndex) => {\n\t\t\t\t\t\tconst inputMaxLine =\n\t\t\t\t\t\t\tstyleAreaChart &&\n\t\t\t\t\t\t\t(styleAreaChart.numberOfSeries || styleAreaChart.numberOfSeries === 0)\n\t\t\t\t\t\t\t\t? styleAreaChart.numberOfSeries\n\t\t\t\t\t\t\t\t: MAX_LINE_PER_METRIC;\n\n\t\t\t\t\t\tconst maxLine = Math.min(inputMaxLine, MAX_LINE_PER_METRIC);\n\n\t\t\t\t\t\tconst isShowOther = styleAreaChart.showOther ? styleAreaChart.showOther : false;\n\n\t\t\t\t\t\tif (metric.name) {\n\t\t\t\t\t\t\tlet value = 0;\n\n\t\t\t\t\t\t\tconst isAggregation = true;\n\n\t\t\t\t\t\t\tif (isAggregation) {\n\t\t\t\t\t\t\t\tif (row.aggregations.length > 0) {\n\t\t\t\t\t\t\t\t\tconst aggregationItem = row.aggregations.find((aggregation) => {\n\t\t\t\t\t\t\t\t\t\treturn aggregation.name === metric.name;\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tvalue = toNumber(aggregationItem?.value[index]) || 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//         else {\n\t\t\t\t\t\t\t// \tvalue = getObjectPropSafely(() => row['metrics'][metric.name][index]) || 0;\n\t\t\t\t\t\t\t// }\n\n\t\t\t\t\t\t\t// Check value diverging if have negative\n\t\t\t\t\t\t\tisPositive = isPositive && value >= 0;\n\n\t\t\t\t\t\t\tconst targetMetric =\n\t\t\t\t\t\t\t\t!!value &&\n\t\t\t\t\t\t\t\trenderMetric.find((item) => {\n\t\t\t\t\t\t\t\t\treturn item.name === metric.name;\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tif (targetMetric) {\n\t\t\t\t\t\t\t\tvalue = +Utils.helpers.convertValueFromDataType({\n\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\tfield: targetMetric,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\titem[`D${index}_${metric.key}`] = value || missingDataValue;\n\n\t\t\t\t\t\t\t// Collect data to show cumulative\n\t\t\t\t\t\t\tconst keyCumulative = `D${index}_${metric.key}_cumulative`;\n\n\t\t\t\t\t\t\tconst prevValue = arrData.at(rowIndex - 1)?.[keyCumulative] || 0;\n\n\t\t\t\t\t\t\titem[keyCumulative] = Number.parseFloat(prevValue.toString()) + value;\n\n\t\t\t\t\t\t\t// Collect data to show other with each selected metric\n\t\t\t\t\t\t\tif (!rowsShowOther[metricIndex]) {\n\t\t\t\t\t\t\t\trowsShowOther[metricIndex] = [];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (isShowOther && (index >= maxLine - 1 || index === arrDimensionName.length - 1)) {\n\t\t\t\t\t\t\t\tconst currentValue = rowsShowOther[metricIndex][rowIndex] || 0;\n\t\t\t\t\t\t\t\tconst normalValue = currentValue.normalValue || 0;\n\t\t\t\t\t\t\t\tconst negativeValue = currentValue.negativeValue || 0;\n\t\t\t\t\t\t\t\tconst positiveValue = currentValue.positiveValue || 0;\n\n\t\t\t\t\t\t\t\trowsShowOther[metricIndex][rowIndex] = {\n\t\t\t\t\t\t\t\t\tnormalValue: toNumber(normalValue) + value,\n\t\t\t\t\t\t\t\t\tnegativeValue: toNumber(negativeValue) + ((value < 0 && value) || 0),\n\t\t\t\t\t\t\t\t\tpositiveValue: toNumber(positiveValue) + ((value > 0 && value) || 0),\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Total value by metric\n\t\t\t\t\t\t\tconst totalValue = arrTotalValue[metric.key] ? arrTotalValue[metric.key] : 0;\n\n\t\t\t\t\t\t\tarrTotalValue[metric.key] = totalValue + value;\n\n\t\t\t\t\t\t\t// Process for negative metric\n\t\t\t\t\t\t\titem[`D${index}_${metric.key}_positive`] = (value > 0 && value) || 0;\n\t\t\t\t\t\t\titem[`D${index}_${metric.key}_negative`] = (value < 0 && value) || 0;\n\n\t\t\t\t\t\t\tconst positiveKeyCumulative = `D${index}_${metric.key}_cumulative_positive`;\n\t\t\t\t\t\t\tconst prevPositiveValue = arrData.at(rowIndex - 1)?.[positiveKeyCumulative] || 0;\n\t\t\t\t\t\t\tconst negativeKeyCumulative = `D${index}_${metric.key}_cumulative_negative`;\n\t\t\t\t\t\t\tconst prevNegativeValue = arrData.at(rowIndex - 1)?.[negativeKeyCumulative] || 0;\n\n\t\t\t\t\t\t\titem[positiveKeyCumulative] =\n\t\t\t\t\t\t\t\ttoNumber(prevPositiveValue) + ((value > 0 && value) || 0);\n\n\t\t\t\t\t\t\titem[negativeKeyCumulative] =\n\t\t\t\t\t\t\t\ttoNumber(prevNegativeValue) + ((value < 0 && value) || 0);\n\n\t\t\t\t\t\t\tif (number < 1) {\n\t\t\t\t\t\t\t\tconst regex = `D[0-9]+_${metric.key}`;\n\n\t\t\t\t\t\t\t\tconst lineOfCurrentMetric = arrYAxis.filter((item) => {\n\t\t\t\t\t\t\t\t\treturn new RegExp(regex).test(item.key);\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tconst numberOfLines = lineOfCurrentMetric.length;\n\n\t\t\t\t\t\t\t\tconst targetDimension = dimensions.at(0);\n\n\t\t\t\t\t\t\t\tlet labelName = '';\n\n\t\t\t\t\t\t\t\tif (targetDimension) {\n\t\t\t\t\t\t\t\t\tlabelName = Utils.helpers\n\t\t\t\t\t\t\t\t\t\t.convertValueFromDataType({\n\t\t\t\t\t\t\t\t\t\t\tvalue: name,\n\t\t\t\t\t\t\t\t\t\t\tfield: targetDimension,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.toString();\n\n\t\t\t\t\t\t\t\t\tlabelName = Utils.helpers\n\t\t\t\t\t\t\t\t\t\t.formatValue({\n\t\t\t\t\t\t\t\t\t\t\tvalue: labelName,\n\t\t\t\t\t\t\t\t\t\t\tfield: targetDimension,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.toString();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst arrDimensionNameLength = arrDimensionName.length;\n\t\t\t\t\t\t\t\tconst maxAcceptIndex = Math.min(arrDimensionNameLength, maxLine);\n\n\t\t\t\t\t\t\t\tconst isShowLine =\n\t\t\t\t\t\t\t\t\tnumberOfLines <= MAX_LINE_PER_METRIC &&\n\t\t\t\t\t\t\t\t\tmaxAcceptIndex > 0 &&\n\t\t\t\t\t\t\t\t\t((!isShowOther && index < maxAcceptIndex) ||\n\t\t\t\t\t\t\t\t\t\t(isShowOther && (index < maxAcceptIndex - 1 || index === 0)));\n\n\t\t\t\t\t\t\t\tif (isShowLine) {\n\t\t\t\t\t\t\t\t\tarrYAxis.push({\n\t\t\t\t\t\t\t\t\t\tkey: `D${index}_${metric.key}`,\n\t\t\t\t\t\t\t\t\t\tname: `D${index}_${metric.name}`,\n\t\t\t\t\t\t\t\t\t\tlabel: labelName,\n\t\t\t\t\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t\t\t\t\t\tyAxisId: '',\n\t\t\t\t\t\t\t\t\t\tcolor: '',\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst currentDimension = timeDimensions.at(0);\n\n\t\tif (range === 'rangeByData') {\n\t\t\tconst arrKey = arrYAxis.map((yAxis) => yAxis.key);\n\t\t\tconst checkData = arrKey.some((key) => item[key] !== 0);\n\n\t\t\tif (checkData) {\n\t\t\t\titem.time = row.time;\n\n\t\t\t\tif (currentDimension) {\n\t\t\t\t\titem.time = Utils.helpers\n\t\t\t\t\t\t.formatValue({\n\t\t\t\t\t\t\tvalue: row.time,\n\t\t\t\t\t\t\tfield: currentDimension,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toString();\n\t\t\t\t}\n\n\t\t\t\tarrData.push(item);\n\t\t\t}\n\t\t} else {\n\t\t\titem.time = row.time;\n\n\t\t\tif (currentDimension) {\n\t\t\t\titem.time = Utils.helpers\n\t\t\t\t\t.formatValue({\n\t\t\t\t\t\tvalue: row.time,\n\t\t\t\t\t\tfield: currentDimension,\n\t\t\t\t\t})\n\t\t\t\t\t.toString();\n\t\t\t}\n\n\t\t\tarrData.push(item);\n\t\t}\n\n\t\tnumber++;\n\t});\n\n\t// ---- Show other: Add axis and data\n\tif (renderMetric.length > 0 && dimensions.length > 0) {\n\t\trenderMetric.forEach((metric, metricIndex) => {\n\t\t\tconst mappingKey = `D00${metricIndex}_${metric.key}`;\n\t\t\tconst isShowOther = styleAreaChart.showOther;\n\t\t\tconst numberOfLines = styleAreaChart.numberOfSeries || MAX_LINE_PER_METRIC;\n\n\t\t\tif (isShowOther && numberOfLines > 1 && arrDimensionName && arrDimensionName.length > 1) {\n\t\t\t\tarrYAxis.push({\n\t\t\t\t\tlabel: 'Other',\n\t\t\t\t\tkey: mappingKey,\n\t\t\t\t\tname: `D00${metricIndex}_${metric.name}`,\n\t\t\t\t\tisActive: true,\n\t\t\t\t\tshowOtherInfo: { index: metricIndex },\n\t\t\t\t\tcolor: '',\n\t\t\t\t\tyAxisId: '',\n\t\t\t\t});\n\n\t\t\t\tlet normalCumulative = 0;\n\t\t\t\tlet negativeCumulative = 0;\n\t\t\t\tlet positiveCumulative = 0;\n\n\t\t\t\tarrData = arrData.map((row, index) => {\n\t\t\t\t\tconst valueInShowOther = rowsShowOther[metricIndex][index] || 0;\n\t\t\t\t\tconst normalValue = valueInShowOther.normalValue || 0;\n\t\t\t\t\tconst negativeValue = valueInShowOther.negativeValue || 0;\n\t\t\t\t\tconst positiveValue = valueInShowOther.positiveValue || 0;\n\n\t\t\t\t\tnormalCumulative += normalValue;\n\t\t\t\t\tnegativeCumulative += negativeValue;\n\t\t\t\t\tpositiveCumulative += positiveValue;\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...row,\n\t\t\t\t\t\t[mappingKey]: normalValue,\n\t\t\t\t\t\t[`${mappingKey}_negative`]: negativeValue,\n\t\t\t\t\t\t[`${mappingKey}_positive`]: positiveValue,\n\t\t\t\t\t\t[`${mappingKey}_cumulative`]: normalCumulative,\n\t\t\t\t\t\t[`${mappingKey}_cumulative_negative`]: negativeCumulative,\n\t\t\t\t\t\t[`${mappingKey}_cumulative_positive`]: positiveCumulative,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// ---- Build coordinateAxis, build never has right\n\n\tconst coordinateAxis: Record<string, string> = {};\n\n\tif (!isEmpty(arrTotalValue)) {\n\t\tlet minValue = 0;\n\t\tlet maxValue = 0;\n\n\t\tfor (const metric in arrTotalValue) {\n\t\t\tif (arrTotalValue[metric]) {\n\t\t\t\tif (!minValue) {\n\t\t\t\t\tminValue = arrTotalValue[metric];\n\t\t\t\t} else if (minValue > arrTotalValue[metric]) {\n\t\t\t\t\tminValue = arrTotalValue[metric];\n\t\t\t\t}\n\n\t\t\t\tif (maxValue < arrTotalValue[metric]) {\n\t\t\t\t\tmaxValue = arrTotalValue[metric];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (minValue !== maxValue) {\n\t\t\tlet position = 0;\n\t\t\tlet hasStackedBarOnRight = false;\n\n\t\t\tfor (const metric in arrTotalValue) {\n\t\t\t\tif (arrTotalValue[metric]) {\n\t\t\t\t\tconst chartType = columns[position].chartType ? columns[position].chartType : 'line';\n\n\t\t\t\t\t// Min < 1tr and max > 1tr\n\t\t\t\t\tif (minValue < 10 ** 6 && maxValue > 10 ** 6) {\n\t\t\t\t\t\tif (arrTotalValue[metric] < 10 ** 6) {\n\t\t\t\t\t\t\t// Left coordinate axis\n\t\t\t\t\t\t\tcoordinateAxis[metric] = 'left';\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Right coordinate axis\n\t\t\t\t\t\t\tcoordinateAxis[metric] = 'right';\n\n\t\t\t\t\t\t\tif (!hasStackedBarOnRight && chartType === 'bar') {\n\t\t\t\t\t\t\t\thasStackedBarOnRight = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arrTotalValue[metric] - minValue <= 0) {\n\t\t\t\t\t\tcoordinateAxis[metric] = 'left';\n\t\t\t\t\t} else if (arrTotalValue[metric] - minValue < arrTotalValue[metric] - maxValue) {\n\t\t\t\t\t\t// Left\n\t\t\t\t\t\tcoordinateAxis[metric] = 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Right\n\t\t\t\t\t\tcoordinateAxis[metric] = 'right';\n\n\t\t\t\t\t\tif (!hasStackedBarOnRight && chartType === 'bar') {\n\t\t\t\t\t\t\thasStackedBarOnRight = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tposition++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// ---- Add color for area\n\n\tif (\n\t\tarrYAxis.length > 0 &&\n\t\tstyle.colorBy &&\n\t\tstyle.colorBy.colors &&\n\t\tstyle.colorBy.colors.length > 0\n\t) {\n\t\tconst { colors } = style.colorBy;\n\n\t\t('');\n\t\tarrYAxis.forEach((yAxis, key) => {\n\t\t\tlet name = '';\n\n\t\t\tif (yAxis.name) {\n\t\t\t\tif (dimensions.length > 0) {\n\t\t\t\t\tif (REGEX_DIMENSION.test(yAxis.name)) {\n\t\t\t\t\t\tname = yAxis.name.replace(REGEX_DIMENSION, '');\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tname = yAxis.name;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (name) {\n\t\t\t\tif (coordinateAxis[name]) {\n\t\t\t\t\tarrYAxis[key].yAxisId = coordinateAxis[name];\n\t\t\t\t} else {\n\t\t\t\t\tarrYAxis[key].yAxisId = 'left';\n\t\t\t\t\tcoordinateAxis[name] = 'left';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tarrYAxis[key].yAxisId = 'left';\n\t\t\t}\n\n\t\t\tif (colors[key]) {\n\t\t\t\tarrYAxis[key].color = colors[key];\n\t\t\t} else {\n\t\t\t\tarrYAxis[key].color = colors[0];\n\t\t\t}\n\t\t});\n\t}\n\n\t// responseData.current = rows;\n\t// includeMinMaxRef.current = includeMinMax;\n\n\t// ---- Get width of text xAxis\n\tconst xAxisSize = {\n\t\twidth: 0,\n\t\theight: 0,\n\t};\n\n\tif (arrData.at(0)?.time) {\n\t\tconst { width: widthText, height: heightText } = getSizeOfText({\n\t\t\tstr: arrData.at(0)?.time || '',\n\t\t\tfontFamily: style.grid.fontFamily.label,\n\t\t\tfontSize: style.grid.axisFontSize.name,\n\t\t});\n\n\t\txAxisSize.width = widthText;\n\t\txAxisSize.height = heightText;\n\t}\n\n\topts?.updateValidateData?.({\n\t\tdata: false,\n\t});\n\n\treturn {\n\t\txAxisSize,\n\t\tisDiverging: !isPositive,\n\t\tdata: arrData,\n\t\tcoordinateAxis,\n\t\tarrYAxis,\n\t};\n};\n","import { useMemo, useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { useChartNodeView } from '@/hooks/useChartNodeView';\nimport { AreaChartAttrsSchema } from '@/schemas/tiptap';\nimport type { AreaChartAttrs, ChartNodeViewProps } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport { serializeReportPerfData } from '../utils';\n\ntype Params = {\n\tnodeViewProps: ChartNodeViewProps;\n};\n\nexport const useAreaChartNodeView = (params: Params) => {\n\tconst { nodeViewProps } = params;\n\n\tconst {\n\t\textension: { options = {} },\n\t\tnode,\n\t} = nodeViewProps;\n\n\tconst messageId = `${options.messageId}`;\n\tconst dataSourceId = parseInt(options.dataSourceId, 10) || 0;\n\n\tconst [attrs, setAttrs] = useState<AreaChartAttrs>();\n\n\tuseDeepCompareEffect(() => {\n\t\tsetAttrs(AreaChartAttrsSchema.parse(node.attrs));\n\t}, [node.attrs]);\n\n\tconst { data, dataSourceSchema, isLoading, error } = useChartNodeView({\n\t\tid: messageId,\n\t\tattrs,\n\t\tdataSourceId,\n\t\tenabled: !!attrs,\n\t});\n\n\tconst settings = useMemo(() => {\n\t\tif (!(attrs && dataSourceSchema)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn Utils.nodeView.report.attrsToCompSetting({\n\t\t\tdataSourceSchema,\n\t\t\tattrs,\n\t\t});\n\t}, [attrs, dataSourceSchema]);\n\n\tconst serializedData = useMemo(() => {\n\t\tif (!(data && settings)) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn serializeReportPerfData({\n\t\t\tdata,\n\t\t\tsettings,\n\t\t});\n\t}, [data, settings]);\n\n\treturn { data: serializedData, settings, isLoading, error };\n};\n","import { Report } from '@antscorp/antsomi-charts';\nimport { Spin } from '@antscorp/antsomi-ui';\nimport type { ChartNodeViewProps } from '@/types/tiptap';\nimport { useAreaChartNodeView } from './hooks';\n\nexport const AreaChartNodeView = (props: ChartNodeViewProps) => {\n\tconst { chartWrapperSize, renderDropdownAction } = props;\n\n\tconst { settings, isLoading, data } = useAreaChartNodeView({ nodeViewProps: props });\n\n\tif (isLoading || !data || !settings || !chartWrapperSize) {\n\t\treturn <Spin indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Report.AreaChart\n\t\t\t\twidth={chartWrapperSize.width}\n\t\t\t\theight={chartWrapperSize.height}\n\t\t\t\tarrYAxis={data.arrYAxis}\n\t\t\t\tcoordinateAxis={data.coordinateAxis}\n\t\t\t\tdata={data.data}\n\t\t\t\trenderMetric={settings.metric}\n\t\t\t\ttimeDimension={settings.timeDimension}\n\t\t\t\tdimension={settings.dimension}\n\t\t\t\tstyle={settings.style}\n\t\t\t/>\n\n\t\t\t{renderDropdownAction(data.data)}\n\t\t</>\n\t);\n};\n"],"names":["concat","values","flatten","MAX_LINE_PER_METRIC","handleFormatRowObjectPattern","row","time","dimension","metric","serializeReportPerfData","params","apiData","settings","opts","mode","style","metrics","Utils","dimensions","timeDimensions","renderMetric","rows","general","columns","xAxis","styleAreaChart","missingDataValue","range","arrData","number","arrYAxis","arrTotalValue","arrDimensionName","rowsShowOther","isPositive","item","raw","rowIndex","value","aggregationItem","aggregation","keyCumulative","prevValue","toNumber","totalValue","arrDimension","arr","arrValues","i","name","index","metricIndex","inputMaxLine","maxLine","isShowOther","targetMetric","currentValue","normalValue","negativeValue","positiveValue","positiveKeyCumulative","prevPositiveValue","negativeKeyCumulative","prevNegativeValue","regex","numberOfLines","targetDimension","labelName","arrDimensionNameLength","maxAcceptIndex","currentDimension","yAxis","key","mappingKey","normalCumulative","negativeCumulative","positiveCumulative","valueInShowOther","coordinateAxis","isEmpty","minValue","maxValue","position","colors","REGEX_DIMENSION","xAxisSize","widthText","heightText","getSizeOfText","useAreaChartNodeView","nodeViewProps","options","node","messageId","dataSourceId","attrs","setAttrs","useState","useDeepCompareEffect","AreaChartAttrsSchema","data","dataSourceSchema","isLoading","error","useChartNodeView","useMemo","AreaChartNodeView","props","chartWrapperSize","renderDropdownAction","Spin","Report"],"mappings":"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","x_google_ignoreList":[0]}