Untitled
unknown
plain_text
2 years ago
6.0 kB
3
Indexable
import React, { memo, useMemo, useState } from 'react'; import { View } from 'react-native-ui-lib'; import { ITimeEntry, TimeHeatMap } from "react-time-heatmap"; type Props = { report: any; company?: any; }; const VisitorsOverTime = ({ report, company }: Props) => { const memozied: any = useMemo(() => { let xLabels = []; let yLabels = []; let finalData = []; let yLabelsVisibility = []; let xLabelsVisibility = []; const dayNames = []; const finalArray = []; const fArray = []; const parseDate = (date: any) => { const y = date.toString().substr(0, 4); const m = date.toString().substr(4, 2); const d = date.toString().substr(6, 2); return new Date(y, m - 1, d); }; const getDayName = (date: any) => { const y = date.toString().substr(0, 4); const m = date.toString().substr(4, 2); const d = date.toString().substr(6, 2); return new Date(y, m - 1, d).toString().split(' ')[0]; }; const getDay = (date: any) => { return date.substr(6, 2); }; const getHour = (date: any) => { return date.substr(8, 2); }; const connectionCheck = (connectList: any, type: any) => { let isConnection = false; if (connectList && connectList.length > 0) { connectList.forEach((item: any) => { if (item.type === type) { isConnection = item.connect; } }); } return isConnection; }; const gaData = report && report?.data?.analytics; const connectList = report && report?.data?.connectList; const isConnectionError = !connectionCheck(connectList, 'GOOGLE'); let isError = false; let isNoDataError = false; let errorMessageType; let isAnalyticsError = false; if (!report) { isError = true; errorMessageType = 'errorMessage'; } else if (isConnectionError || !gaData) { isAnalyticsError = true; errorMessageType = 'googleErrorMessage'; } if (!isError && !isConnectionError && !isAnalyticsError) { const userDateHourData = report && report?.data?.analytics && report?.data?.analytics?.userDateHour; if (!userDateHourData || userDateHourData.length === 0) { isNoDataError = true; errorMessageType = 'noDataErrorMessage'; } if (!isNoDataError) { const newData: any = []; userDateHourData.map((item: any) => { newData.push({ date: item.name, dateNum: parseInt(item.name, 10), dateFormat: parseDate(item.name), session: item.sessions, }); return null; }); const len = newData.length; for (let i = len - 1; i >= 0; i -= 1) { for (let j = 1; j <= i; j += 1) { if (newData[j - 1].dateNum > newData[j].dateNum) { const temp = newData[j - 1]; newData[j - 1] = newData[j]; newData[j] = temp; } } } let day = getDay(newData[0].date); const arr = []; dayNames.push(getDayName(newData[0].date)); for (let i = 0; i < 7; i += 1) { const singleArr = []; for (let k = 0; k < newData.length; k += 1) { const newDataDay = getDay(newData[k].date); if (newDataDay === 'a' || newDataDay === '') { // eslint-disable-next-line no-continue continue; } else if (newDataDay === day) { singleArr.push({ hour: getHour(newData[k].date), sessions: newData[k].session, }); newData[k].date = 'a'; } else { day = newDataDay; dayNames.push(getDayName(newData[k].date)); break; } } arr.push(singleArr); } dayNames.pop(); let h; for (let m = 0; m < 7; m += 1) { for (let n = 0; n < 24; n += 1) { if (arr[m][n]) { h = parseInt(arr[m][n].hour, 10); if (h !== n) { arr[m].splice(n, 0, { hour: n, sessions: 0 }); } } else { arr[m].push({ hour: n, sessions: 0 }); } finalArray.push(arr[m][n].sessions); } fArray.push(arr[m]); } const rotatedArray: any[] = []; for (let t = 0; t < 24; t += 1) { for (let f = 6; f >= 0; f -= 1) { rotatedArray.push(fArray[f][t].sessions); } } yLabels = new Array(24).fill(0).map((_, i) => `${i}`); yLabelsVisibility = new Array(24).fill(0).map((_, i) => true); xLabels = dayNames; finalData = new Array(yLabels.length).fill(0).map((key, index) => { const count = index; return new Array(xLabels.length) .fill(0) .map((_key, index) => rotatedArray[index + count * 7]); }); } } if (!isError && !isConnectionError && !isNoDataError && !isAnalyticsError) { xLabels = new Array(24).fill(0).map((_, i) => `${i}`); xLabelsVisibility = new Array(24).fill(0).map((_, i) => true); yLabels = dayNames; finalData = new Array(yLabels.length).fill(0).map((key, index) => { const count = index; return new Array(xLabels.length) .fill(0) .map((_key, index) => finalArray[index + count * 24]); }); } return { finalData, finalArray, dayNames, yLabels, yLabelsVisibility, xLabels, xLabelsVisibility } }, [report]); return ( <View flex-1> <TimeHeatMap xLabels={memozied?.xLabels} yLabels={memozied?.yLabels} yLabelsVisibility={memozied?.yLabelsVisibility} timeEntries={memozied?.xLabels} showCounts={true} data={memozied?.finalData} numberOfGroups={7} /> </View> ); }; export default VisitorsOverTime;
Editor is loading...