{"version":3,"file":"Component-YV3sGbWg.mjs","sources":["../node_modules/es-toolkit/dist/array/groupBy.mjs","../node_modules/es-toolkit/dist/compat/predicate/isArray.mjs","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/utils.ts","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/hooks/useHeatmapNodeView.ts","../src/components/ConversationMessage/extensions/NodeViews/Heatmap/Component.tsx"],"sourcesContent":["function groupBy(arr, getKeyFromItem) {\n    const result = Object.create(null);\n    for (let i = 0; i < arr.length; i++) {\n        const item = arr[i];\n        const key = getKeyFromItem(item);\n        if (result[key] == null) {\n            result[key] = [];\n        }\n        result[key].push(item);\n    }\n    return result;\n}\n\nexport { groupBy };\n","function isArray(value) {\n    return Array.isArray(value);\n}\n\nexport { isArray };\n","import type { ReportHeatmapData } from '@antscorp/antsomi-charts';\nimport { groupBy, orderBy } from 'es-toolkit';\nimport { isArray, isNumber } from 'es-toolkit/compat';\nimport type { ApiHeatmaptData, Field, HeatmapSettings } from '@/types';\nimport { Utils } from '@/utils';\n\nconst random = (number: number) => {\n\tlet text = '';\n\tconst possible = 'abcdefghijklmnopqrstuvwxyz0123456789';\n\n\tfor (let i = 0; i < number; i++) {\n\t\ttext += possible.charAt(Math.floor(Math.random() * possible.length));\n\t}\n\n\treturn text;\n};\n\ntype Row = {\n\taggregations: {\n\t\tname: string;\n\t\ttype: string;\n\t\tvalue: string;\n\t}[];\n\t[key: string]: Record<string, string> | Record<string, string>[];\n};\n\nconst handleHeaderLabel = (\n\trowsHeader: Row[],\n\tdimension: Field[],\n\tmetric: Field[],\n\ti: number,\n\tdataSort: (Field & { numberDisplay?: number })[],\n\taz: string,\n\theaderId = '',\n\ttype = 'ROW',\n\t_headerId = '',\n) => {\n\tif (dimension.length <= 0) {\n\t\treturn [];\n\t}\n\n\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension[i] });\n\tconst processKey =\n\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\tconst rowsHeaderClone = [...rowsHeader];\n\tconst dimensionId = dimension[i].id || '';\n\tconst dimensionName = dimension[i].name;\n\tconst dataType = dimension[i].dataType;\n\tconst semantics = dimension[i].aliasSemantics || dimension[i].semantics;\n\n\ttype Header = {\n\t\tdataType?: string;\n\n\t\tsemantics?: {\n\t\t\tconceptType: string;\n\t\t\tsemanticType: string;\n\t\t};\n\n\t\taggregations?: Record<string, string | number>[];\n\n\t\t[key: string]:\n\t\t\t| string\n\t\t\t| Record<string, string>\n\t\t\t| Record<string, string | number>[]\n\t\t\t| Header[]\n\t\t\t| undefined;\n\t};\n\n\tlet arrayHeader: Header[] = [];\n\tconst itemSort = dataSort[i];\n\n\tconst sortId = itemSort.name || metric[0].name;\n\tconst sortType = az === 'descending' ? 'desc' : 'asc';\n\n\tconst groupRow = groupBy(rowsHeaderClone, (row) => row[processKey]?.toString());\n\n\tfor (const groupId of Object.keys(groupRow)) {\n\t\tconst row: Header = {};\n\n\t\tconst _id = random(6);\n\n\t\tfor (const item of groupRow[groupId]) {\n\t\t\trow.dataType = dataType;\n\t\t\trow.semantics = semantics;\n\t\t\trow[dimensionId] = item[processKey]?.toString();\n\t\t\trow[dimensionName] = item[processKey]?.toString();\n\n\t\t\tfor (const [key, value] of Object.entries(item)) {\n\t\t\t\tif (key === 'aggregations' && isArray(value)) {\n\t\t\t\t\tif (row[key] !== undefined && isArray(row[key])) {\n\t\t\t\t\t\tfor (let i = 0, length = value.length; i < +length; i++) {\n\t\t\t\t\t\t\tconst aggItem = value[i];\n\n\t\t\t\t\t\t\trow[key][i].value = +row[key][i].value + +aggItem.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\trow[key] = value.map((a) => ({ ...a }));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst cellId = headerId + row[dimensionId];\n\t\tconst _cellId = _headerId + _id;\n\n\t\tif (i < dimension.length - 1 && groupRow[groupId]) {\n\t\t\tconst level = i + 1;\n\n\t\t\trow.child = handleHeaderLabel(\n\t\t\t\tgroupRow[groupId],\n\t\t\t\tdimension,\n\t\t\t\tmetric,\n\t\t\t\tlevel,\n\t\t\t\tdataSort,\n\t\t\t\taz,\n\t\t\t\t`${cellId}>`,\n\t\t\t\ttype,\n\t\t\t\t`${_cellId}>`,\n\t\t\t);\n\t\t}\n\n\t\trow.cellId = type === 'ROW' ? `${cellId};;` : `;${cellId};`;\n\t\trow._cellId = type === 'ROW' ? `${_cellId};;` : `;${_cellId};`;\n\t\trow._id = _id;\n\t\trow.id = row[dimensionId];\n\t\trow.value =\n\t\t\trow[dimensionName] || isNumber(row[dimensionName] || Number.NaN)\n\t\t\t\t? Utils.helpers\n\t\t\t\t\t\t.formatValue({\n\t\t\t\t\t\t\tvalue: row[dimensionName]?.toString(),\n\t\t\t\t\t\t\tfield: dimension[i],\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.toString()\n\t\t\t\t: '--';\n\n\t\trow.rawValue =\n\t\t\trow[dimensionName] || isNumber(row[dimensionName] || Number.NaN) ? row[dimensionName] : '';\n\n\t\tarrayHeader.push(row);\n\t}\n\n\tarrayHeader = orderBy<Header>(\n\t\tarrayHeader,\n\t\t[\n\t\t\t(row) => {\n\t\t\t\tif (row.aggregations?.some((item) => item.name === sortId)) {\n\t\t\t\t\tlet valueItem = 0;\n\n\t\t\t\t\tfor (const aggItem of row.aggregations) {\n\t\t\t\t\t\tif (aggItem.name === sortId) {\n\t\t\t\t\t\t\tvalueItem += +aggItem.value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn valueItem;\n\t\t\t\t}\n\n\t\t\t\tif (row[sortId] !== undefined && !Number.isNaN(row[sortId])) {\n\t\t\t\t\treturn +row[sortId];\n\t\t\t\t}\n\n\t\t\t\tif (typeof row[sortId] === 'string') {\n\t\t\t\t\tconst arrValue = row[sortId].split('—');\n\n\t\t\t\t\tswitch (row.dataType) {\n\t\t\t\t\t\tcase 'HYPERLINK': {\n\t\t\t\t\t\t\tif (arrValue.length === 3) {\n\t\t\t\t\t\t\t\tconst imgPath = arrValue[1];\n\n\t\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(imgPath).toLowerCase();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst labelLink = arrValue[1];\n\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(labelLink).toLowerCase();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 'IMAGE': {\n\t\t\t\t\t\t\tconst imgPath = arrValue[0];\n\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(imgPath).toLowerCase();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn Utils.helpers.removeAccent(row[sortId]).toLowerCase();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn row[sortId];\n\t\t\t},\n\t\t],\n\t\t[sortType],\n\t);\n\n\tif (\n\t\titemSort.numberDisplay &&\n\t\t+itemSort.numberDisplay > 0 &&\n\t\t+itemSort.numberDisplay < arrayHeader.length\n\t) {\n\t\tarrayHeader = arrayHeader.splice(0, +itemSort.numberDisplay);\n\t}\n\n\treturn arrayHeader;\n};\n\nconst formatDataResponse = (data: ApiHeatmaptData) => {\n\tconst { rows = [] } = data;\n\n\tconst newRows: Row[] = [];\n\n\tfor (const fields of rows) {\n\t\tconst arrAggregation: { name: string; value: string; type: string }[] = [];\n\t\tconst dimension: Record<string, string> = {};\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\tconst key =\n\t\t\t\t\t`${row.name}-${row.semantics.semanticType}-${row.aggregationType}`.toLowerCase();\n\n\t\t\t\tdimension[key] = row.value;\n\t\t\t\tdimension[row.name] = row.value;\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 { rows: newRows };\n};\n\nexport const serializeReportPerfData = (params: {\n\tsettings: HeatmapSettings;\n\tdata: ApiHeatmaptData;\n}) => {\n\tconst { data, settings } = params;\n\n\tconst { rows } = formatDataResponse(data);\n\n\tconst {\n\t\tcolumnDimension,\n\t\trowDimension,\n\t\tsortRow,\n\t\tsortColumn,\n\t\tazRow,\n\t\tazColumn,\n\t\tmetric: metrics,\n\t} = settings;\n\n\tlet metricLabel = '';\n\n\tconst renderMetric = settings.renderMetric\n\t\t? Utils.helpers.safeParseListField(settings.renderMetric)\n\t\t: metrics;\n\n\tconst conceptTypeSortRow = sortRow[0].semantics.conceptType;\n\tconst conceptTypeSortColumn = sortColumn[0].semantics.conceptType;\n\n\tlet updateSortRow = sortRow;\n\tlet updateSortColumn = sortColumn;\n\n\tif (conceptTypeSortRow === 'METRIC' || conceptTypeSortColumn === 'METRIC') {\n\t\tif (conceptTypeSortRow === 'METRIC') {\n\t\t\tif (renderMetric.at(0)?.name && renderMetric[0].name !== sortRow[0].name) {\n\t\t\t\tupdateSortRow = renderMetric;\n\t\t\t}\n\t\t}\n\n\t\tif (conceptTypeSortColumn === 'METRIC') {\n\t\t\tif (renderMetric.at(0)?.name && renderMetric[0].name !== sortColumn[0].name) {\n\t\t\t\tupdateSortColumn = renderMetric;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (renderMetric.length > 0 && renderMetric[0]) {\n\t\tconst { label } = renderMetric[0];\n\n\t\tmetricLabel = label;\n\n\t\t// setMetricLabel(label);\n\t}\n\n\tconst arrData: ReportHeatmapData = [];\n\tconst labelDimension: string[] = [];\n\tconst keyDimension: string[] = [];\n\n\tlet arrRow: string[] = [];\n\tlet arrColumn: string[] = [];\n\n\tif (columnDimension.length > 0) {\n\t\tcolumnDimension.forEach((value) => {\n\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: value });\n\t\t\tconst key =\n\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\tlabelDimension.push(value.label);\n\t\t\tkeyDimension.push(key);\n\t\t});\n\t}\n\n\tif (rowDimension.length > 0) {\n\t\trowDimension.forEach((value) => {\n\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: value });\n\t\t\tconst key =\n\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\tlabelDimension.push(value.label);\n\t\t\tkeyDimension.push(key);\n\t\t});\n\t}\n\n\t// setLabelDimension(labelDimension);\n\t// setKeyDimension(keyDimension);\n\n\tconst rowHeaderLabel = handleHeaderLabel(\n\t\trows,\n\t\trowDimension,\n\t\trenderMetric,\n\t\t0,\n\t\tupdateSortRow,\n\t\tazRow,\n\t\t'',\n\t\t'ROW',\n\t);\n\n\tconst columnHeaderLabel = handleHeaderLabel(\n\t\trows,\n\t\tcolumnDimension,\n\t\trenderMetric,\n\t\t0,\n\t\tupdateSortColumn,\n\t\tazColumn,\n\t\t'',\n\t\t'COLUMN',\n\t);\n\n\tarrRow = rowHeaderLabel.map((rowItem) => rowItem.value?.toString() || '');\n\tarrColumn = columnHeaderLabel.map((colItem) => colItem.value?.toString() || '');\n\n\trowHeaderLabel.forEach((rowItem, rowIndex) => {\n\t\tconst rowItemId = typeof rowItem.cellId === 'string' ? rowItem.cellId.split(';') : '';\n\t\tconst arrRowItemId = typeof rowItemId[0] === 'string' ? rowItemId[0].split('>') : [];\n\n\t\tif (columnHeaderLabel.length > 0) {\n\t\t\tcolumnHeaderLabel.forEach((columnItem, columnIndex) => {\n\t\t\t\tfor (const metric of renderMetric) {\n\t\t\t\t\tlet isValid = false;\n\t\t\t\t\tlet value = 0;\n\n\t\t\t\t\tconst metricAggregation = metric.aliasAggregation || metric.aggregation || '';\n\n\t\t\t\t\tconst columnItemId =\n\t\t\t\t\t\ttypeof columnItem.cellId === 'string' ? columnItem.cellId.split(';') : '';\n\t\t\t\t\tconst arrColumnItemId =\n\t\t\t\t\t\ttypeof columnItemId[1] === 'string' ? columnItemId[1].split('>') : [];\n\n\t\t\t\t\t// Compute cell of table\n\t\t\t\t\t// biome-ignore lint/suspicious/useIterableCallbackReturn: \"\"\n\t\t\t\t\trows.some((item) => {\n\t\t\t\t\t\tconst checkIdRowDimension = rowDimension.every((dimension, index) => {\n\t\t\t\t\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension });\n\t\t\t\t\t\t\tconst key =\n\t\t\t\t\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\t\t\t\t\treturn `${item[key]}` === arrRowItemId[index];\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst checkIdColumnDimension = columnDimension.every((dimension, index) => {\n\t\t\t\t\t\t\tconst infoField = Utils.helpers.getInfoFieldToQuery({ field: dimension });\n\t\t\t\t\t\t\tconst key =\n\t\t\t\t\t\t\t\t`${infoField.name}-${infoField.semantics.semanticType}-${infoField.aggregationType}`.toLowerCase();\n\n\t\t\t\t\t\t\treturn `${item[key]}` === arrColumnItemId[index];\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (checkIdRowDimension && checkIdColumnDimension) {\n\t\t\t\t\t\t\tif (Array.isArray(item.aggregations) && item.aggregations.length > 0) {\n\t\t\t\t\t\t\t\tlet valueItem = 0;\n\n\t\t\t\t\t\t\t\tfor (const aggItem of item.aggregations) {\n\t\t\t\t\t\t\t\t\tif (aggItem.name === metric.name && aggItem.type === metricAggregation) {\n\t\t\t\t\t\t\t\t\t\tvalueItem += +aggItem.value;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\t\tvalue += valueItem;\n\n\t\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tisValid = true;\n\t\t\t\t\t\t\tvalue += +item[metric.name];\n\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tarrData.push({\n\t\t\t\t\t\t\tx: columnIndex,\n\t\t\t\t\t\t\ty: rowIndex,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\tvalueLabel: Utils.helpers.formatValue({ value, field: metric }).toString(),\n\t\t\t\t\t\t\tdataY: rowItem.value?.toString() || '',\n\t\t\t\t\t\t\tdataX: columnItem.value?.toString() || '',\n\t\t\t\t\t\t\trawDataX: columnItem.rawValue?.toString() || '',\n\t\t\t\t\t\t\trawDataY: rowItem.rawValue?.toString() || '',\n\t\t\t\t\t\t\tisActive: false,\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\t});\n\n\treturn { metricLabel, labelDimension, keyDimension, arrColumn, arrRow, data: arrData };\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 { HeatmapAttrsSchema } from '@/schemas/tiptap';\nimport type { HeatmapAttrs } from '@/types/tiptap';\nimport { Utils } from '@/utils';\nimport { serializeReportPerfData } from '../utils';\n\ntype Params = {\n\tnodeViewProps: NodeViewProps;\n};\n\nexport const useHeatmapNodeView = (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<HeatmapAttrs>();\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(HeatmapAttrsSchema.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 { useHeatmapNodeView } from './hooks';\n\nexport const HeatmapNodeView = (props: ChartNodeViewProps) => {\n\tconst { chartWrapperSize, renderDropdownAction } = props;\n\n\tconst {\n\t\tdata,\n\t\tarrColumn,\n\t\tarrRow,\n\t\tlabelDimension,\n\t\tmetricLabel,\n\t\tkeyDimension,\n\t\tsettings,\n\t\tisLoading,\n\t} = useHeatmapNodeView({\n\t\tnodeViewProps: props,\n\t});\n\n\tif (isLoading || !data || !settings) {\n\t\treturn <Spin indicatorSize={20} />;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Report.Heatmap\n\t\t\t\tdata={data}\n\t\t\t\tdimension={settings.dimension}\n\t\t\t\tarrXAxis={arrColumn}\n\t\t\t\tarrYAxis={arrRow}\n\t\t\t\tkeyDimension={keyDimension}\n\t\t\t\tlabelDimension={labelDimension}\n\t\t\t\tmetricLabel={metricLabel}\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":["groupBy","arr","getKeyFromItem","result","i","item","key","isArray","value","random","number","text","possible","handleHeaderLabel","rowsHeader","dimension","metric","dataSort","az","headerId","type","_headerId","infoField","Utils","processKey","rowsHeaderClone","dimensionId","dimensionName","dataType","semantics","arrayHeader","itemSort","sortId","sortType","groupRow","row","groupId","_id","length","aggItem","a","cellId","_cellId","level","isNumber","orderBy","valueItem","arrValue","imgPath","labelLink","formatDataResponse","data","rows","newRows","fields","arrAggregation","serializeReportPerfData","params","settings","columnDimension","rowDimension","sortRow","sortColumn","azRow","azColumn","metrics","metricLabel","renderMetric","conceptTypeSortRow","conceptTypeSortColumn","updateSortRow","updateSortColumn","label","arrData","labelDimension","keyDimension","arrRow","arrColumn","rowHeaderLabel","columnHeaderLabel","rowItem","colItem","rowIndex","rowItemId","arrRowItemId","columnItem","columnIndex","isValid","metricAggregation","columnItemId","arrColumnItemId","checkIdRowDimension","index","checkIdColumnDimension","useHeatmapNodeView","nodeViewProps","options","node","messageId","dataSourceId","attrs","setAttrs","useState","dataSourceSchema","isLoading","error","useChartNodeView","useDeepCompareEffect","HeatmapAttrsSchema","useMemo","HeatmapNodeView","props","chartWrapperSize","renderDropdownAction","Spin","Report"],"mappings":"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","x_google_ignoreList":[0,1]}