124 lines
4.0 KiB
TypeScript
124 lines
4.0 KiB
TypeScript
"use client";
|
|
|
|
import {
|
|
AverageEventDurationChart,
|
|
BookingKPICards,
|
|
BookingStatusLineChart,
|
|
LeastBookedTeamMembersTable,
|
|
MostBookedTeamMembersTable,
|
|
PopularEventsTable,
|
|
HighestNoShowHostTable,
|
|
RecentFeedbackTable,
|
|
HighestRatedMembersTable,
|
|
LowestRatedMembersTable,
|
|
} from "@calcom/features/insights/components";
|
|
import { FiltersProvider } from "@calcom/features/insights/context/FiltersProvider";
|
|
import { Filters } from "@calcom/features/insights/filters";
|
|
import Shell from "@calcom/features/shell/Shell";
|
|
import { UpgradeTip } from "@calcom/features/tips";
|
|
import { WEBAPP_URL } from "@calcom/lib/constants";
|
|
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
|
import { trpc } from "@calcom/trpc";
|
|
import { Button, ButtonGroup } from "@calcom/ui";
|
|
import { Icon } from "@calcom/ui";
|
|
|
|
import { getServerSideProps } from "@lib/insights/getServerSideProps";
|
|
|
|
import PageWrapper from "@components/PageWrapper";
|
|
|
|
export default function InsightsPage() {
|
|
const { t } = useLocale();
|
|
const { data: user } = trpc.viewer.me.useQuery();
|
|
|
|
const features = [
|
|
{
|
|
icon: <Icon name="users" className="h-5 w-5" />,
|
|
title: t("view_bookings_across"),
|
|
description: t("view_bookings_across_description"),
|
|
},
|
|
{
|
|
icon: <Icon name="refresh-ccw" className="h-5 w-5" />,
|
|
title: t("identify_booking_trends"),
|
|
description: t("identify_booking_trends_description"),
|
|
},
|
|
{
|
|
icon: <Icon name="user-plus" className="h-5 w-5" />,
|
|
title: t("spot_popular_event_types"),
|
|
description: t("spot_popular_event_types_description"),
|
|
},
|
|
];
|
|
|
|
return (
|
|
<div>
|
|
<Shell
|
|
withoutMain={false}
|
|
heading="Insights"
|
|
subtitle={t("insights_subtitle")}
|
|
title="Insights"
|
|
description="View booking insights across your events.">
|
|
<UpgradeTip
|
|
plan="team"
|
|
title={t("make_informed_decisions")}
|
|
description={t("make_informed_decisions_description")}
|
|
features={features}
|
|
background="/tips/insights"
|
|
buttons={
|
|
<div className="space-y-2 rtl:space-x-reverse sm:space-x-2">
|
|
<ButtonGroup>
|
|
<Button color="primary" href={`${WEBAPP_URL}/settings/teams/new`}>
|
|
{t("create_team")}
|
|
</Button>
|
|
<Button color="minimal" href="https://bls.media/cal#insights" target="_blank">
|
|
{t("learn_more")}
|
|
</Button>
|
|
</ButtonGroup>
|
|
</div>
|
|
}>
|
|
{!user ? (
|
|
<></>
|
|
) : (
|
|
<FiltersProvider>
|
|
<Filters />
|
|
|
|
<div className="mb-4 space-y-4">
|
|
<BookingKPICards />
|
|
|
|
<BookingStatusLineChart />
|
|
|
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
<PopularEventsTable />
|
|
|
|
<AverageEventDurationChart />
|
|
</div>
|
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
<MostBookedTeamMembersTable />
|
|
<LeastBookedTeamMembersTable />
|
|
</div>
|
|
<RecentFeedbackTable />
|
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2">
|
|
<HighestNoShowHostTable />
|
|
<HighestRatedMembersTable />
|
|
<LowestRatedMembersTable />
|
|
</div>
|
|
<small className="text-default block text-center">
|
|
{t("looking_for_more_insights")}{" "}
|
|
<a
|
|
className="text-blue-500 hover:underline"
|
|
href="mailto:hello@bls-media.de?subject=Idee%20zu%20BLS%20cal&body=Moin%20liebes%20Team%20von%20BLS%20media%2C%20Ich%20hab%20für%20BLS%20cal%20diese%20Idee%20...">
|
|
{" "}
|
|
{t("contact_support")}
|
|
</a>
|
|
</small>
|
|
</div>
|
|
</FiltersProvider>
|
|
)}
|
|
</UpgradeTip>
|
|
</Shell>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
InsightsPage.PageWrapper = PageWrapper;
|
|
|
|
export { getServerSideProps };
|