{"version":3,"file":"Component-d7cDCRNK.mjs","sources":["../src/components/ConversationMessage/extensions/NodeViews/ScatterChart/utils.ts","../src/components/ConversationMessage/extensions/NodeViews/ScatterChart/hooks/useScatterChartNodeView.ts","../src/components/ConversationMessage/extensions/NodeViews/ScatterChart/Component.tsx"],"sourcesContent":["import type {\n\tReportScatterChartCircleGroups,\n\tReportScatterChartData,\n} from '@antscorp/antsomi-charts';\nimport { COLOR_CHART } from '@/constants/report';\nimport type { ApiScatterChartData, Field, ScatterChartSettings } from '@/types';\nimport { Utils } from '@/utils';\nimport { convertValueFromDataType } from '@/utils/helpers/convertValueFromDataType';\nimport { getAggregation } from '@/utils/nodeView/report/attrsToPerfPayload';\n\n('');\nfunction formatDataResponse(data: ApiScatterChartData, dimensions: Field[], metric: Field) {\n\tconst { rows = [] } = data;\n\n\tconst newRows: {\n\t\taggregations: {\n\t\t\tname: string;\n\t\t\ttype: string;\n\t\t\tvalue: string;\n\t\t}[];\n\t\t[key: string]: Record<string, string> | Record<string, string>[];\n\t}[] = [];\n\n\tfor (const fields of rows) {\n\t\tconst arrAggregation: { name: string; value: string; type: string }[] = [];\n\n\t\tconst dimension: Record<string, string | number> = {};\n\n\t\tfor (const row of fields) {\n\t\t\tif (row.semantics.conceptType === 'METRIC') {\n\t\t\t\tarrAggregation.push({\n\t\t\t\t\tname: row.name,\n\t\t\t\t\tvalue: row.value,\n\t\t\t\t\ttype: row.aggregationType,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdimension[row.name] = row.value;\n\t\t\t}\n\n\t\t\t// For Scatter Chart when duplicate field\n\t\t\tfor (const dimensionField of dimensions) {\n\t\t\t\tif (\n\t\t\t\t\tdimensionField.key &&\n\t\t\t\t\trow.name === dimensionField.name &&\n\t\t\t\t\t(row.semantics.semanticType === dimensionField.semantics.semanticType ||\n\t\t\t\t\t\trow.semantics.semanticType === dimensionField.aliasSemantics?.semanticType)\n\t\t\t\t) {\n\t\t\t\t\tdimension[dimensionField.key] = row.value;\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tmetric.key &&\n\t\t\t\t\trow.name === metric.name &&\n\t\t\t\t\trow.semantics.semanticType === metric.aliasSemantics?.semanticType\n\t\t\t\t) {\n\t\t\t\t\tdimension[metric.key] = row.value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tnewRows.push({\n\t\t\taggregations: arrAggregation,\n\t\t\t...dimension,\n\t\t});\n\t}\n\n\treturn {\n\t\trows: newRows,\n\t};\n}\n\nexport const serializeReportPerfData = (params: {\n\tsettings: ScatterChartSettings;\n\tdata: ApiScatterChartData;\n}) => {\n\tconst { settings, data } = params;\n\n\tconst {\n\t\tdimension: dimensions,\n\t\tmetricX: arrMetricX,\n\t\tmetricY: arrMetricY,\n\t\tbubbleSize: arrBubble,\n\t\tstyle,\n\t} = settings;\n\n\tconst { rows } = formatDataResponse(data, dimensions, arrMetricY[0]);\n\n\tconst arrData: ReportScatterChartData = [];\n\tlet circleGroups: ReportScatterChartCircleGroups = {};\n\n\tif (\n\t\trows.length > 0 &&\n\t\tdimensions.length > 0 &&\n\t\tarrMetricX.length > 0 &&\n\t\tarrMetricY.length > 0 &&\n\t\tarrMetricX[0] &&\n\t\tarrMetricX[0].name &&\n\t\tarrMetricY[0] &&\n\t\tarrMetricY[0].name\n\t) {\n\t\tconst metricX = arrMetricX[0];\n\t\tconst metricY = arrMetricY[0];\n\t\tconst bubbleSize = arrBubble[0];\n\n\t\tconst colorStore = style.colorBy.colors || COLOR_CHART;\n\n\t\t// Calculate bubble group color\n\t\tlet groupIndex = 0;\n\n\t\tif (dimensions[0]?.key) {\n\t\t\tcircleGroups = {\n\t\t\t\tnone: {\n\t\t\t\t\t[dimensions[0].key]: {\n\t\t\t\t\t\tvalue: dimensions[0].aliasLabel || dimensions[0].label || '',\n\t\t\t\t\t\tcolor: colorStore[0],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tfor (const row of rows) {\n\t\t\tconst item: Record<string, string | number> = {};\n\t\t\tlet itemValid = true;\n\n\t\t\tfor (const dimension of dimensions) {\n\t\t\t\t// if (dimension.id && typeof row[dimension.id] !== 'undefined') {\n\t\t\t\t// \titem[dimension.id] = row[dimension.key];\n\t\t\t\t//\n\t\t\t\t// \tif (\n\t\t\t\t// \t\tthis.state.dimension &&\n\t\t\t\t// \t\tthis.state.dimension.length &&\n\t\t\t\t// \t\tthis.state.dimension[0].dataType &&\n\t\t\t\t// \t\titem[dimension.id]\n\t\t\t\t// \t) {\n\t\t\t\t// \t\tif (['IMAGE', 'HYPERLINK'].includes(this.state.dimension[0].dataType)) {\n\t\t\t\t// \t\t\tconst arrValues = formattedHyperlink(item[dimension.id], '—');\n\t\t\t\t//\n\t\t\t\t// \t\t\tif (arrValues && arrValues.length) {\n\t\t\t\t// \t\t\t\tif (this.state.dimension[0].dataType === 'IMAGE') {\n\t\t\t\t// \t\t\t\t\titem[dimension.id] = arrValues[0];\n\t\t\t\t// \t\t\t\t} else if (this.state.dimension[0].dataType === 'HYPERLINK') {\n\t\t\t\t// \t\t\t\t\titem[dimension.id] = arrValues[1];\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\n\t\t\t\tif (dimension.name && dimension.key && typeof row[dimension.key] !== 'undefined') {\n\t\t\t\t\titem[dimension.key] = row[dimension.key].toString();\n\n\t\t\t\t\tif (dimensions.at(0)?.dataType && item[dimension.key]) {\n\t\t\t\t\t\tif (['IMAGE', 'HYPERLINK'].includes(dimensions[0].dataType)) {\n\t\t\t\t\t\t\tconst link = item[dimension.key].toString() || '';\n\n\t\t\t\t\t\t\tconst arrValues = Utils.helpers.formattedHyperlink(link, '—');\n\n\t\t\t\t\t\t\tif (arrValues.length > 0) {\n\t\t\t\t\t\t\t\tif (dimensions[0].dataType === 'IMAGE') {\n\t\t\t\t\t\t\t\t\titem[dimension.key] = arrValues[0];\n\t\t\t\t\t\t\t\t} else if (dimensions[0].dataType === 'HYPERLINK') {\n\t\t\t\t\t\t\t\t\titem[dimension.key] = arrValues[1];\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\n\t\t\t\t\tconst convertValue = convertValueFromDataType({\n\t\t\t\t\t\tvalue: item[dimension.key],\n\t\t\t\t\t\tfield: dimension,\n\t\t\t\t\t});\n\n\t\t\t\t\titem[dimension.key] = Utils.helpers\n\t\t\t\t\t\t.formatValue({\n\t\t\t\t\t\t\tvalue: convertValue,\n\t\t\t\t\t\t\tfield: dimension,\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toString();\n\n\t\t\t\t\t// Assign color to group of same dimension\n\t\t\t\t\tif (typeof item[dimension.key] !== 'undefined') {\n\t\t\t\t\t\tconst circleGroup = circleGroups[dimension.key] || {};\n\n\t\t\t\t\t\tif (circleGroup[item[dimension.key]]) {\n\t\t\t\t\t\t\tcircleGroup[item[dimension.key].toString()].data?.push(item);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcircleGroup[item[dimension.key]] = {\n\t\t\t\t\t\t\t\tvalue: item[dimension.key].toString(),\n\t\t\t\t\t\t\t\tcolor: colorStore[groupIndex % colorStore.length],\n\t\t\t\t\t\t\t\tdata: [item],\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcircleGroups[dimension.key] = circleGroup;\n\t\t\t\t\t\tgroupIndex++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\titemValid = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof row[metricX.name] !== 'undefined') {\n\t\t\t\titem[metricX.name] = row[metricX.name].toString();\n\t\t\t}\n\n\t\t\tif (typeof row[metricY.name] !== 'undefined') {\n\t\t\t\titem[metricY.name] = row[metricY.name].toString();\n\t\t\t}\n\n\t\t\tif (arrBubble.length > 0 && arrBubble[0].name) {\n\t\t\t\tif (typeof row[bubbleSize.name] !== 'undefined') {\n\t\t\t\t\titem[bubbleSize.name] = row[bubbleSize.name].toString();\n\t\t\t\t\titem[bubbleSize.name] = convertValueFromDataType({\n\t\t\t\t\t\tvalue: item[bubbleSize.name],\n\t\t\t\t\t\tfield: bubbleSize,\n\t\t\t\t\t}).toString();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// aggregation\n\t\t\tif (row.aggregations) {\n\t\t\t\tconst metricXAggregation = getAggregation(metricX);\n\t\t\t\tconst metricYAggregation = getAggregation(metricY);\n\t\t\t\tconst bubbleSizeAggregation = getAggregation(bubbleSize);\n\n\t\t\t\tfor (const aggregation of row.aggregations) {\n\t\t\t\t\tif (metricX.name === aggregation.name && metricXAggregation === aggregation.type) {\n\t\t\t\t\t\titem[metricX.name] = +aggregation.value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (metricY.name === aggregation.name && metricYAggregation === aggregation.type) {\n\t\t\t\t\t\titem[metricY.name] = +aggregation.value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tbubbleSize &&\n\t\t\t\t\t\tbubbleSizeAggregation &&\n\t\t\t\t\t\tbubbleSize.name === aggregation.name &&\n\t\t\t\t\t\tbubbleSizeAggregation === aggregation.type\n\t\t\t\t\t) {\n\t\t\t\t\t\titem[bubbleSize.name] = +aggregation.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// handle format\n\t\t\titem[metricX.name] = convertValueFromDataType({\n\t\t\t\tvalue: item[metricX.name],\n\t\t\t\tfield: metricX,\n\t\t\t});\n\n\t\t\titem[metricY.name] = convertValueFromDataType({\n\t\t\t\tvalue: item[metricY.name],\n\t\t\t\tfield: metricY,\n\t\t\t});\n\n\t\t\t// check if item is valid\n\t\t\tif (Object.keys(item).length < [...dimensions, ...arrMetricX, ...arrMetricY].length) {\n\t\t\t\titemValid = false;\n\t\t\t}\n\n\t\t\tif (itemValid) {\n\t\t\t\tarrData.push(item);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { data: arrData, circleGroups };\n};\n","import type { NodeViewProps } from '@tiptap/react';\nimport { useMemo, useState } from 'react';\nimport { useDeepCompareEffect } from 'use-deep-compare';\nimport { useChartNodeView } from '@/hooks/useChartNodeView';\nimport { ScatterChartAttrsSchema } from '@/schemas/tiptap';\nimport type { ScatterChartAttrs } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport { serializeReportPerfData } from '../utils';\n\ntype Params = {\n\tnodeViewProps: NodeViewProps;\n};\n\nexport const useScatterChartNodeView = (params: Params) => {\n\tconst { nodeViewProps } = params;\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<ScatterChartAttrs>();\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\tuseDeepCompareEffect(() => {\n\t\tsetAttrs(ScatterChartAttrsSchema.parse(node.attrs));\n\t}, [node.attrs]);\n\n\tconst serializedData = useMemo(() => {\n\t\tif (!(data && attrs && dataSourceSchema)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst settings = Utils.nodeView.report.attrsToCompSetting({\n\t\t\tdataSourceSchema,\n\t\t\tattrs,\n\t\t});\n\n\t\treturn {\n\t\t\t...serializeReportPerfData({\n\t\t\t\tdata,\n\t\t\t\tsettings,\n\t\t\t}),\n\n\t\t\tsettings,\n\t\t};\n\t}, [data, attrs, dataSourceSchema]);\n\n\treturn { ...serializedData, isLoading, error };\n};\n","import { Report } from '@antscorp/antsomi-charts';\nimport { Spin } from '@antscorp/antsomi-ui';\nimport type { ChartNodeViewProps } from '@/types/tiptap';\nimport { useScatterChartNodeView } from './hooks';\n\nexport const ScatterChartNodeView = (props: ChartNodeViewProps) => {\n\tconst { chartWrapperSize, renderDropdownAction } = props;\n\n\tconst { data, circleGroups, settings, isLoading } = useScatterChartNodeView({\n\t\tnodeViewProps: props,\n\t});\n\n\tif (isLoading || !data || !settings || !circleGroups) {\n\t\treturn <Spin indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Report.ScatterChart\n\t\t\t\tdata={data}\n\t\t\t\tcircleGroups={circleGroups}\n\t\t\t\tmetricX={settings.metricX}\n\t\t\t\tmetricY={settings.metricY}\n\t\t\t\tbubbleSize={settings.bubbleSize}\n\t\t\t\tdimension={settings.dimension}\n\t\t\t\twidth={chartWrapperSize?.width}\n\t\t\t\theight={chartWrapperSize?.height}\n\t\t\t/>\n\n\t\t\t{renderDropdownAction(data)}\n\t\t</>\n\t);\n};\n"],"names":["formatDataResponse","data","dimensions","metric","rows","newRows","fields","arrAggregation","dimension","row","dimensionField","serializeReportPerfData","params","settings","arrMetricX","arrMetricY","arrBubble","style","arrData","circleGroups","metricX","metricY","bubbleSize","colorStore","COLOR_CHART","groupIndex","item","itemValid","link","arrValues","Utils","convertValue","convertValueFromDataType","circleGroup","metricXAggregation","getAggregation","metricYAggregation","bubbleSizeAggregation","aggregation","useScatterChartNodeView","nodeViewProps","options","node","messageId","dataSourceId","attrs","setAttrs","useState","dataSourceSchema","isLoading","error","useChartNodeView","useDeepCompareEffect","ScatterChartAttrsSchema","useMemo","ScatterChartNodeView","props","chartWrapperSize","renderDropdownAction","Spin","Report"],"mappings":"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"}