feat: add typefully card to open page (#979)
**Description:** The new card for typefully looks like the below screenshot <img width="960" alt="Screenshot 2024-03-01 at 12 53 00" src="https://github.com/documenso/documenso/assets/23498248/925d3362-f883-48b2-8870-83b8115bac7d">
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { HTMLAttributes, useEffect, useState } from 'react';
|
import type { HTMLAttributes } from 'react';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
|
||||||
import { Cell, Legend, Pie, PieChart, Tooltip } from 'recharts';
|
import { Cell, Legend, Pie, PieChart, Tooltip } from 'recharts';
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export type MonthlyNewUsersChartProps = {
|
|||||||
export const MonthlyNewUsersChart = ({ className, data }: MonthlyNewUsersChartProps) => {
|
export const MonthlyNewUsersChart = ({ className, data }: MonthlyNewUsersChartProps) => {
|
||||||
const formattedData = [...data].reverse().map(({ month, count }) => {
|
const formattedData = [...data].reverse().map(({ month, count }) => {
|
||||||
return {
|
return {
|
||||||
month: DateTime.fromFormat(month, 'yyyy-MM').toFormat('LLL'),
|
month: DateTime.fromFormat(month, 'yyyy-MM').toFormat('LLLL'),
|
||||||
count: Number(count),
|
count: Number(count),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -32,6 +32,9 @@ export const MonthlyNewUsersChart = ({ className, data }: MonthlyNewUsersChartPr
|
|||||||
<YAxis />
|
<YAxis />
|
||||||
|
|
||||||
<Tooltip
|
<Tooltip
|
||||||
|
labelStyle={{
|
||||||
|
color: 'hsl(var(--primary-foreground))',
|
||||||
|
}}
|
||||||
formatter={(value) => [Number(value).toLocaleString('en-US'), 'New Users']}
|
formatter={(value) => [Number(value).toLocaleString('en-US'), 'New Users']}
|
||||||
cursor={{ fill: 'hsl(var(--primary) / 10%)' }}
|
cursor={{ fill: 'hsl(var(--primary) / 10%)' }}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ export type MonthlyTotalUsersChartProps = {
|
|||||||
export const MonthlyTotalUsersChart = ({ className, data }: MonthlyTotalUsersChartProps) => {
|
export const MonthlyTotalUsersChart = ({ className, data }: MonthlyTotalUsersChartProps) => {
|
||||||
const formattedData = [...data].reverse().map(({ month, cume_count: count }) => {
|
const formattedData = [...data].reverse().map(({ month, cume_count: count }) => {
|
||||||
return {
|
return {
|
||||||
month: DateTime.fromFormat(month, 'yyyy-MM').toFormat('LLL'),
|
month: DateTime.fromFormat(month, 'yyyy-MM').toFormat('LLLL'),
|
||||||
count: Number(count),
|
count: Number(count),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@@ -32,6 +32,9 @@ export const MonthlyTotalUsersChart = ({ className, data }: MonthlyTotalUsersCha
|
|||||||
<YAxis />
|
<YAxis />
|
||||||
|
|
||||||
<Tooltip
|
<Tooltip
|
||||||
|
labelStyle={{
|
||||||
|
color: 'hsl(var(--primary-foreground))',
|
||||||
|
}}
|
||||||
formatter={(value) => [Number(value).toLocaleString('en-US'), 'Total Users']}
|
formatter={(value) => [Number(value).toLocaleString('en-US'), 'Total Users']}
|
||||||
cursor={{ fill: 'hsl(var(--primary) / 10%)' }}
|
cursor={{ fill: 'hsl(var(--primary) / 10%)' }}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import { MonthlyNewUsersChart } from './monthly-new-users-chart';
|
|||||||
import { MonthlyTotalUsersChart } from './monthly-total-users-chart';
|
import { MonthlyTotalUsersChart } from './monthly-total-users-chart';
|
||||||
import { TeamMembers } from './team-members';
|
import { TeamMembers } from './team-members';
|
||||||
import { OpenPageTooltip } from './tooltip';
|
import { OpenPageTooltip } from './tooltip';
|
||||||
|
import { Typefully } from './typefully';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'Open Startup',
|
title: 'Open Startup',
|
||||||
@@ -237,6 +238,8 @@ export default async function OpenPage() {
|
|||||||
<MonthlyTotalUsersChart data={MONTHLY_USERS} className="col-span-12 lg:col-span-6" />
|
<MonthlyTotalUsersChart data={MONTHLY_USERS} className="col-span-12 lg:col-span-6" />
|
||||||
<MonthlyNewUsersChart data={MONTHLY_USERS} className="col-span-12 lg:col-span-6" />
|
<MonthlyNewUsersChart data={MONTHLY_USERS} className="col-span-12 lg:col-span-6" />
|
||||||
|
|
||||||
|
<Typefully className="col-span-12 lg:col-span-6" />
|
||||||
|
|
||||||
<div className="col-span-12 mt-12 flex flex-col items-center justify-center">
|
<div className="col-span-12 mt-12 flex flex-col items-center justify-center">
|
||||||
<h2 className="text-2xl font-bold">Where's the rest?</h2>
|
<h2 className="text-2xl font-bold">Where's the rest?</h2>
|
||||||
|
|
||||||
|
|||||||
39
apps/marketing/src/app/(marketing)/open/typefully.tsx
Normal file
39
apps/marketing/src/app/(marketing)/open/typefully.tsx
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
'use client';
|
||||||
|
|
||||||
|
import type { HTMLAttributes } from 'react';
|
||||||
|
|
||||||
|
import Link from 'next/link';
|
||||||
|
|
||||||
|
import { FaXTwitter } from 'react-icons/fa6';
|
||||||
|
|
||||||
|
import { cn } from '@documenso/ui/lib/utils';
|
||||||
|
import { Button } from '@documenso/ui/primitives/button';
|
||||||
|
|
||||||
|
export type TypefullyProps = HTMLAttributes<HTMLDivElement>;
|
||||||
|
|
||||||
|
export const Typefully = ({ className, ...props }: TypefullyProps) => {
|
||||||
|
return (
|
||||||
|
<div className={cn('flex flex-col', className)} {...props}>
|
||||||
|
<h3 className="px-4 text-lg font-semibold">Twitter Stats</h3>
|
||||||
|
|
||||||
|
<div className="border-border mt-2.5 flex flex-1 items-center justify-center rounded-2xl border py-8 shadow-sm hover:shadow">
|
||||||
|
<div className="flex flex-col items-center gap-y-4 text-center">
|
||||||
|
<FaXTwitter className="h-12 w-12" />
|
||||||
|
<Link href="https://typefully.com/documenso/stats" target="_blank">
|
||||||
|
<h1>Documenso on X</h1>
|
||||||
|
</Link>
|
||||||
|
<Button className="rounded-full" size="sm" asChild>
|
||||||
|
<Link href="https://typefully.com/documenso/stats" target="_blank">
|
||||||
|
View all stats
|
||||||
|
</Link>
|
||||||
|
</Button>
|
||||||
|
<Button className="rounded-full bg-white" size="sm" asChild>
|
||||||
|
<Link href="https://twitter.com/documenso" target="_blank">
|
||||||
|
Follow us on X
|
||||||
|
</Link>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user