Merge branch 'dev' into analytics

This commit is contained in:
Mike Cao 2024-05-27 21:23:35 -07:00
commit f6786a0a86
26 changed files with 27 additions and 118 deletions

View File

@ -167,6 +167,10 @@ const config = {
source: '/telemetry.js', source: '/telemetry.js',
destination: '/api/scripts/telemetry', destination: '/api/scripts/telemetry',
}, },
{
source: '/teams/:teamId/:path*',
destination: '/:path*',
},
]; ];
}, },
async redirects() { async redirects() {

View File

@ -6,6 +6,7 @@ import Lightbulb from 'assets/lightbulb.svg';
import Magnet from 'assets/magnet.svg'; import Magnet from 'assets/magnet.svg';
import Tag from 'assets/tag.svg'; import Tag from 'assets/tag.svg';
import Target from 'assets/target.svg'; import Target from 'assets/target.svg';
import Path from 'assets/path.svg';
import styles from './ReportTemplates.module.css'; import styles from './ReportTemplates.module.css';
import { useMessages, useTeamUrl } from 'components/hooks'; import { useMessages, useTeamUrl } from 'components/hooks';
@ -44,6 +45,12 @@ export function ReportTemplates({ showHeader = true }: { showHeader?: boolean })
url: renderTeamUrl('/reports/goals'), url: renderTeamUrl('/reports/goals'),
icon: <Target />, icon: <Target />,
}, },
{
title: formatMessage(labels.journey),
description: formatMessage(labels.journeyDescription),
url: renderTeamUrl('/reports/journey'),
icon: <Path />,
},
]; ];
return ( return (

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/dashboard/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/[reportId]/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/create/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/event-data/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/funnel/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/insights/page';
export default Page;

View File

@ -1,8 +0,0 @@
import Page from 'app/(main)/reports/page';
import { Metadata } from 'next';
export default Page;
export const metadata: Metadata = {
title: 'Team Reports',
};

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/retention/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/reports/utm/page';
export default Page;

View File

@ -1,28 +0,0 @@
'use client';
import { ReactNode } from 'react';
import MenuLayout from 'components/layout/MenuLayout';
import { useMessages } from 'components/hooks';
export default function ({ children, teamId }: { children: ReactNode; teamId: string }) {
const { formatMessage, labels } = useMessages();
const items = [
{
key: 'team',
label: formatMessage(labels.team),
url: `/teams/${teamId}/settings/team`,
},
{
key: 'websites',
label: formatMessage(labels.websites),
url: `/teams/${teamId}/settings/websites`,
},
{
key: 'members',
label: formatMessage(labels.members),
url: `/teams/${teamId}/settings/members`,
},
].filter(n => n);
return <MenuLayout items={items}>{children}</MenuLayout>;
}

View File

@ -1,10 +0,0 @@
import TeamSettingsLayout from './TeamSettingsLayout';
import { Metadata } from 'next';
export default function ({ children, params: { teamId } }) {
return <TeamSettingsLayout teamId={teamId}>{children}</TeamSettingsLayout>;
}
export const metadata: Metadata = {
title: 'Team Settings',
};

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/settings/teams/[teamId]/members/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/settings/teams/[teamId]/team/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/settings/websites/[websiteId]/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/settings/teams/[teamId]/websites/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/[websiteId]/compare/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/[websiteId]/event-data/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/[websiteId]/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/[websiteId]/realtime/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/[websiteId]/reports/page';
export default Page;

View File

@ -1,3 +0,0 @@
import Page from 'app/(main)/websites/page';
export default Page;

View File

@ -24,8 +24,3 @@
color: var(--base700); color: var(--base700);
background: var(--base100); background: var(--base100);
} }
.new {
color: var(--blue900);
background: var(--blue100);
}

View File

@ -6,12 +6,14 @@ import styles from './ChangeLabel.module.css';
export function ChangeLabel({ export function ChangeLabel({
value, value,
size, size,
title,
reverseColors, reverseColors,
className, className,
children, children,
}: { }: {
value: number; value: number;
size?: 'xs' | 'sm' | 'md' | 'lg'; size?: 'xs' | 'sm' | 'md' | 'lg';
title?: string;
reverseColors?: boolean; reverseColors?: boolean;
showPercentage?: boolean; showPercentage?: boolean;
className?: string; className?: string;
@ -19,20 +21,19 @@ export function ChangeLabel({
}) { }) {
const positive = value * (reverseColors ? -1 : 1) >= 0; const positive = value * (reverseColors ? -1 : 1) >= 0;
const negative = value * (reverseColors ? -1 : 1) < 0; const negative = value * (reverseColors ? -1 : 1) < 0;
const isNew = isNaN(value); const neutral = value === 0 || isNaN(value);
return ( return (
<div <div
className={classNames(styles.label, className, { className={classNames(styles.label, className, {
[styles.positive]: positive, [styles.positive]: positive,
[styles.negative]: negative, [styles.negative]: negative,
[styles.neutral]: value === 0, [styles.neutral]: neutral,
[styles.new]: isNew,
})} })}
title={value.toString()} title={title}
> >
{!isNew && ( {!neutral && (
<Icon rotate={value === 0 ? 0 : positive || reverseColors ? -45 : 45} size={size}> <Icon rotate={value === 0 ? 0 : positive || reverseColors ? -90 : 90} size={size}>
<Icons.ArrowRight /> <Icons.ArrowRight />
</Icon> </Icon>
)} )}

View File

@ -37,19 +37,21 @@ export const MetricCard = ({
return ( return (
<div className={classNames(styles.card, className, showPrevious && styles.compare)}> <div className={classNames(styles.card, className, showPrevious && styles.compare)}>
{showLabel && <div className={styles.label}>{label}</div>} {showLabel && <div className={styles.label}>{label}</div>}
<animated.div className={styles.value} title={formatValue(value)}> <animated.div className={styles.value} title={value.toString()}>
{props?.x?.to(x => formatValue(x))} {props?.x?.to(x => formatValue(x))}
</animated.div> </animated.div>
{showChange && ( {showChange && (
<ChangeLabel className={styles.change} value={change} reverseColors={reverseColors}> <ChangeLabel
<animated.span title={formatValue(change)}> className={styles.change}
{changeProps?.x?.to(x => Math.abs(~~x))} value={change}
</animated.span> title={formatValue(change)}
% reverseColors={reverseColors}
>
<animated.span>{changeProps?.x?.to(x => `${Math.abs(~~x)}%`)}</animated.span>
</ChangeLabel> </ChangeLabel>
)} )}
{showPrevious && ( {showPrevious && (
<animated.div className={classNames(styles.value, styles.prev)} title={formatValue(diff)}> <animated.div className={classNames(styles.value, styles.prev)} title={diff.toString()}>
{prevProps?.x?.to(x => formatValue(x))} {prevProps?.x?.to(x => formatValue(x))}
</animated.div> </animated.div>
)} )}