diff --git a/frontend/app/components/Dashboard/Widgets/CardSessionsByList.tsx b/frontend/app/components/Dashboard/Widgets/CardSessionsByList.tsx index a150c787f..135c5cb76 100644 --- a/frontend/app/components/Dashboard/Widgets/CardSessionsByList.tsx +++ b/frontend/app/components/Dashboard/Widgets/CardSessionsByList.tsx @@ -1,60 +1,60 @@ import React from 'react'; -import { List, Progress, Typography } from "antd"; -import cn from "classnames"; +import { List, Progress, Typography } from 'antd'; +import cn from 'classnames'; interface Props { - list: any; - selected?: any; - onClickHandler?: (event: any, data: any) => void; + list: any; + selected?: any; + onClickHandler?: (event: any, data: any) => void; } function CardSessionsByList({ list, selected, onClickHandler = () => null }: Props) { - return ( - ( - onClickHandler(e, row)} // Remove onClick handler to disable click interaction - style={{ - borderBottom: '1px dotted rgba(0, 0, 0, 0.05)', - padding: '4px 10px', - lineHeight: '1px' - }} - className={cn('rounded', selected === row.name ? 'bg-active-blue' : '')} // Remove hover:bg-active-blue and cursor-pointer - > - -
- {row.name} - {row.sessionCount} -
+ return ( + ( + onClickHandler(e, row)} // Remove onClick handler to disable click interaction + style={{ + borderBottom: '1px dotted rgba(0, 0, 0, 0.05)', + padding: '4px 10px', + lineHeight: '1px' + }} + className={cn('rounded', selected === row.name ? 'bg-active-blue' : '')} // Remove hover:bg-active-blue and cursor-pointer + > + +
+ {row.displayName} + {row.sessionCount} +
- - - )} - /> -
+ + )} - /> - ); + /> +
+ )} + /> + ); } export default CardSessionsByList; diff --git a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/SessionsBy.tsx b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/SessionsBy.tsx index 33352d59c..288e40992 100644 --- a/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/SessionsBy.tsx +++ b/frontend/app/components/Dashboard/Widgets/CustomMetricsWidgets/SessionsBy.tsx @@ -67,6 +67,7 @@ function SessionsBy(props: Props) { /> ) : (
+ {/* TODO - remove slice once the api pagination is fixed */} @@ -74,7 +75,7 @@ function SessionsBy(props: Props) {
diff --git a/frontend/app/components/shared/Breadcrumb/BackButton.tsx b/frontend/app/components/shared/Breadcrumb/BackButton.tsx index 334aebbd7..a93ad705f 100644 --- a/frontend/app/components/shared/Breadcrumb/BackButton.tsx +++ b/frontend/app/components/shared/Breadcrumb/BackButton.tsx @@ -8,7 +8,6 @@ function BackButton() { const siteId = location.pathname.split('/')[1]; const handleBackClick = () => { - console.log('siteId', siteId); history.push(`/${siteId}/dashboard`); }; diff --git a/frontend/app/mstore/types/sessionsCardData.ts b/frontend/app/mstore/types/sessionsCardData.ts index 459ecd3c3..2e98f05d2 100644 --- a/frontend/app/mstore/types/sessionsCardData.ts +++ b/frontend/app/mstore/types/sessionsCardData.ts @@ -1,98 +1,86 @@ -import {numberWithCommas} from "App/utils"; -import {countries} from "App/constants"; +import { numberWithCommas } from 'App/utils'; +import { countries } from 'App/constants'; import { - BrowserIconProvider, - CountryIconProvider, DeviceIconProvider, - IconProvider, - IssueIconProvider, OsIconProvider, - UrlIconProvider, UserIconProvider -} from "./IconProvider"; + BrowserIconProvider, + CountryIconProvider, DeviceIconProvider, + IconProvider, + IssueIconProvider, OsIconProvider, + UrlIconProvider, UserIconProvider +} from './IconProvider'; +import React from 'react'; interface NameFormatter { - format(name: string): string; + format(name: string): string; } class BaseFormatter implements NameFormatter { - format(name: string): string { - return name.replace(/_/g, ' ').replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase()))).trim(); - } + format(name: string): string { + return name.replace(/_/g, ' ').replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase()))).trim(); + } } class BrowserFormatter extends BaseFormatter { - format(name: string): string { - return super.format(name); - } + format(name: string): string { + return super.format(name); + } } class CountryFormatter extends BaseFormatter { - format(name: string): string { - if (name === 'UN') { - return 'Unknown Country'; - } - return countries[name.toUpperCase()] || name; + format(name: string): string { + if (name === 'UN') { + return 'Unknown Country'; } + return countries[name.toUpperCase()] || name; + } } class IssueFormatter extends BaseFormatter { - format(name: string): string { - return super.format(name); - } + format(name: string): string { + return super.format(name); + } } export class SessionsByRow { - name: string; - sessionCount: number; - progress: number; - icon: React.ReactNode; + name: string; + displayName: string; + sessionCount: number; + progress: number; + icon: React.ReactNode; - fromJson(json: any, totalSessions: number, metricType: string) { - const {nameFormatter, iconProvider} = this.getFormatters(metricType); - this.name = nameFormatter.format(json.name) || 'Unidentified'; - this.sessionCount = numberWithCommas(json.sessionCount); - this.progress = Math.round((json.sessionCount / totalSessions) * 100); - this.icon = iconProvider.getIcon(json.name); - return this; - } + fromJson(json: any, totalSessions: number, metricType: string) { + const { nameFormatter, iconProvider } = this.getFormatters(metricType); + this.name = json.name; + this.displayName = nameFormatter.format(json.name) || 'Unidentified'; + this.sessionCount = numberWithCommas(json.sessionCount); + this.progress = Math.round((json.sessionCount / totalSessions) * 100); + this.icon = iconProvider.getIcon(json.name); + return this; + } - private getFormatters(metricType: string): { nameFormatter: NameFormatter; iconProvider: IconProvider } { - switch (metricType) { - case 'userBrowser': - return {nameFormatter: new BrowserFormatter(), iconProvider: new BrowserIconProvider()}; - case 'userCountry': - return {nameFormatter: new CountryFormatter(), iconProvider: new CountryIconProvider()}; - case 'issue': - return {nameFormatter: new IssueFormatter(), iconProvider: new IssueIconProvider()}; - case 'location': - return {nameFormatter: new BaseFormatter(), iconProvider: new UrlIconProvider()}; - case 'userDevice': - return {nameFormatter: new BaseFormatter(), iconProvider: new DeviceIconProvider()}; - case 'platform': - return {nameFormatter: new BaseFormatter(), iconProvider: new OsIconProvider()}; - case 'userId': - return {nameFormatter: new BaseFormatter(), iconProvider: new UserIconProvider()}; - default: - return {nameFormatter: new BaseFormatter(), iconProvider: new DefaultIconProvider()}; - } + private getFormatters(metricType: string): { nameFormatter: NameFormatter; iconProvider: IconProvider } { + switch (metricType) { + case 'userBrowser': + return { nameFormatter: new BrowserFormatter(), iconProvider: new BrowserIconProvider() }; + case 'userCountry': + return { nameFormatter: new CountryFormatter(), iconProvider: new CountryIconProvider() }; + case 'issue': + return { nameFormatter: new IssueFormatter(), iconProvider: new IssueIconProvider() }; + case 'location': + return { nameFormatter: new BaseFormatter(), iconProvider: new UrlIconProvider() }; + case 'userDevice': + return { nameFormatter: new BaseFormatter(), iconProvider: new DeviceIconProvider() }; + case 'platform': + return { nameFormatter: new BaseFormatter(), iconProvider: new OsIconProvider() }; + case 'userId': + return { nameFormatter: new BaseFormatter(), iconProvider: new UserIconProvider() }; + default: + return { nameFormatter: new BaseFormatter(), iconProvider: new DefaultIconProvider() }; } + } } class DefaultIconProvider implements IconProvider { - getIcon(name: string): string { - return 'ic-user-path'; - } + getIcon(name: string): string { + return 'ic-user-path'; + } } - -// Usage example -// const data = [ -// { -// values: [ -// {name: 'chrome', sessionCount: 120}, -// {name: 'firefox', sessionCount: 80}, -// {name: 'safari', sessionCount: 50}, -// ] -// } -// ]; -// const totalSessions = 1000; -// const metricOf = 'browser'; -// -// data[0]['values'] = data[0]['values'].map((s: any) => new SessionsByRow().fromJson(s, totalSessions, metricOf));