{"version":3,"file":"survey-page-statistics.js","sources":["../Views/Surveys/SurveyPageStatistics/SurveyChart/surveyChartConfig.ts","../Views/Surveys/SurveyPageStatistics/SurveyChart/SurveyChart.vue","../Views/Surveys/SurveyPageStatistics/SurveyPageStatistics.entry.ts"],"sourcesContent":["import { ChartData, ChartOptions, TooltipItem } from 'chart.js';\r\nimport { PageTimeStat } from '../interfaces';\r\n\r\nexport function surveyChartOptions(pageTimeStats: PageTimeStat[]): ChartOptions<'bar' | 'line'> {\r\n return {\r\n responsive: true,\r\n plugins: {\r\n tooltip: {\r\n callbacks: {\r\n label: (tooltipItem: TooltipItem<'bar' | 'line'>) => {\r\n const pageCount = pageTimeStats[tooltipItem.dataIndex].PageCount;\r\n const mainLabel =\r\n tooltipItem.datasetIndex === 0 ? `${tooltipItem.raw} ${$Resources.SurveyPageSeconds}` : `${$Resources.SurveyViews} ${pageCount}`;\r\n return mainLabel;\r\n },\r\n labelColor: (tooltipItem: TooltipItem<'bar' | 'line'>) => {\r\n const index = tooltipItem.datasetIndex;\r\n if (index === 1) {\r\n return {\r\n backgroundColor: 'rgba(255, 0, 255, 1)',\r\n borderColor: 'rgba(255, 0, 255, 1)',\r\n };\r\n } else {\r\n return {\r\n backgroundColor: 'rgba(31,169,176,1)',\r\n borderColor: 'rgba(31,169,176,1)',\r\n };\r\n }\r\n },\r\n title: (tooltipItems: TooltipItem<'bar' | 'line'>[]) => {\r\n const dataIndex = tooltipItems[0].dataIndex;\r\n const fullLabel = pageTimeStats?.[dataIndex]\r\n ? `${$Resources.SurveyPage} ${pageTimeStats[dataIndex].PageIndex} - ${pageTimeStats[dataIndex].FirstQuestion}`\r\n : '';\r\n return fullLabel;\r\n },\r\n footer: (tooltipItems: TooltipItem<'bar' | 'line'>[]) => {\r\n const pageCount = pageTimeStats[tooltipItems[0].dataIndex].PageCount;\r\n const firstPageCount = pageTimeStats[0]?.PageCount || 1;\r\n const percentage = ((pageCount / firstPageCount) * 100).toFixed(0);\r\n const percentageLabel = `${percentage}% ${$Resources.SurveyGraphLabel}`;\r\n return percentageLabel;\r\n },\r\n },\r\n },\r\n },\r\n scales: {\r\n y: {\r\n beginAtZero: true,\r\n type: 'linear',\r\n position: 'left',\r\n title: {\r\n display: true,\r\n text: $Resources.SurveyPageTimeDuration,\r\n },\r\n ticks: {\r\n callback: (value: string | number) => {\r\n if (typeof value === 'number') {\r\n if (value < 60) {\r\n return `${value} s`;\r\n } else {\r\n const minutes = Math.floor(value / 60);\r\n const seconds = value % 60;\r\n return `${minutes}:${seconds < 10 ? '0' : ''}${seconds} min`;\r\n }\r\n }\r\n return value;\r\n },\r\n },\r\n },\r\n y1: {\r\n beginAtZero: true,\r\n type: 'linear',\r\n position: 'right',\r\n title: {\r\n display: true,\r\n text: $Resources.SurveyVisitsOnPageCount,\r\n },\r\n grid: {\r\n drawOnChartArea: false,\r\n },\r\n },\r\n },\r\n };\r\n}\r\n\r\nexport function surveyChartData(pageTimeStats?: PageTimeStat[]): ChartData<'bar' | 'line'> {\r\n return {\r\n labels: pageTimeStats?.map((x) => {\r\n const labelText = `${$Resources.SurveyPage} ${x.PageIndex.toString()} - ${x.FirstQuestion}`;\r\n return labelText.length > 14 ? `${labelText.substring(0, 14)}...` : labelText;\r\n }),\r\n datasets: [\r\n {\r\n type: 'bar' as const,\r\n label: $Resources.SurveyPageTimeDuration,\r\n data: pageTimeStats?.map((x) => +x.AverageDuration.toFixed(1)) ?? [],\r\n backgroundColor: 'rgba(31,169,176,1)',\r\n borderColor: 'rgba(31,169,176,1)',\r\n borderWidth: 1,\r\n yAxisID: 'y',\r\n order: 2,\r\n maxBarThickness: 90,\r\n },\r\n {\r\n type: 'line' as const,\r\n label: $Resources.SurveyVisitsOnPageCount,\r\n data: pageTimeStats?.map((x) => x.PageCount) ?? [],\r\n backgroundColor: 'rgba(255, 0, 255, 1)',\r\n borderColor: 'rgba(255, 0, 255, 1)',\r\n borderWidth: 2,\r\n fill: false,\r\n yAxisID: 'y1',\r\n order: 1,\r\n },\r\n ],\r\n };\r\n}\r\n","\r\n\r\n 0\">\r\n {{ $Resources.SurveyChartNoData }}