From aa4c667ed91f5ccc20caa63eedb0ddf0c812020e Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Tue, 3 Dec 2024 14:34:36 +0700 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(empty):=20Content?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/app/(main)/(user)/affiliate/page.tsx | 2 ++ .../app/(main)/(user)/announcement/page.tsx | 34 +++++++------------ .../(main)/(user)/dashboard/announcemnet.tsx | 2 +- apps/user/app/(main)/(user)/order/page.tsx | 2 ++ .../user/app/(main)/(user)/subscribe/page.tsx | 2 ++ apps/user/app/(main)/(user)/ticket/page.tsx | 2 ++ apps/user/app/(main)/(user)/wallet/page.tsx | 2 ++ apps/user/components/empty.tsx | 18 ++++++++++ packages/ui/src/empty.tsx | 3 +- packages/ui/src/pro-list/pro-list.tsx | 6 ++-- packages/ui/src/pro-table/pro-table.tsx | 4 ++- 11 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 apps/user/components/empty.tsx diff --git a/apps/user/app/(main)/(user)/affiliate/page.tsx b/apps/user/app/(main)/(user)/affiliate/page.tsx index 3515168..69b4080 100644 --- a/apps/user/app/(main)/(user)/affiliate/page.tsx +++ b/apps/user/app/(main)/(user)/affiliate/page.tsx @@ -1,5 +1,6 @@ 'use client'; import { Display } from '@/components/display'; +import { Empty } from '@/components/empty'; import { ProList } from '@/components/pro-list'; import useGlobalStore from '@/config/use-global'; import { queryUserAffiliate } from '@/services/user/user'; @@ -70,6 +71,7 @@ export default function Page() { ); }} + empty={} /> ); diff --git a/apps/user/app/(main)/(user)/announcement/page.tsx b/apps/user/app/(main)/(user)/announcement/page.tsx index a5aaca9..0a6c230 100644 --- a/apps/user/app/(main)/(user)/announcement/page.tsx +++ b/apps/user/app/(main)/(user)/announcement/page.tsx @@ -1,10 +1,9 @@ 'use client'; +import { Empty } from '@/components/empty'; import { queryAnnouncement } from '@/services/user/announcement'; -import Empty from '@repo/ui/empty'; import { Markdown } from '@repo/ui/markdown'; -import { formatDate } from '@repo/ui/utils'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@shadcn/ui/card'; +import { Timeline } from '@shadcn/ui/timeline'; import { useQuery } from '@tanstack/react-query'; export default function Page() { @@ -18,23 +17,16 @@ export default function Page() { return data.data?.announcements || []; }, }); - return ( -
- {data?.length ? ( - data.map((item) => ( - - - {item.title} - {formatDate(item.updated_at)} - - - {item.content} - - - )) - ) : ( - - )} -
+ return data && data.length > 0 ? ( + ({ + title: item.title, + content: {item.content}, + })) || [] + } + /> + ) : ( + ); } diff --git a/apps/user/app/(main)/(user)/dashboard/announcemnet.tsx b/apps/user/app/(main)/(user)/dashboard/announcemnet.tsx index fb45fc7..b78b666 100644 --- a/apps/user/app/(main)/(user)/dashboard/announcemnet.tsx +++ b/apps/user/app/(main)/(user)/dashboard/announcemnet.tsx @@ -1,8 +1,8 @@ 'use client'; +import { Empty } from '@/components/empty'; import { queryAnnouncement } from '@/services/user/announcement'; import { Icon } from '@iconify/react'; -import Empty from '@repo/ui/empty'; import { Markdown } from '@repo/ui/markdown'; import { Card } from '@shadcn/ui/card'; import { useQuery } from '@tanstack/react-query'; diff --git a/apps/user/app/(main)/(user)/order/page.tsx b/apps/user/app/(main)/(user)/order/page.tsx index 8f2740c..6391f55 100644 --- a/apps/user/app/(main)/(user)/order/page.tsx +++ b/apps/user/app/(main)/(user)/order/page.tsx @@ -1,6 +1,7 @@ 'use client'; import { Display } from '@/components/display'; +import { Empty } from '@/components/empty'; import { ProList, ProListActions } from '@/components/pro-list'; import { closeOrder, queryOrderList } from '@/services/user/order'; import { formatDate } from '@repo/ui/utils'; @@ -91,6 +92,7 @@ export default function Page() { ); }} + empty={} /> ); } diff --git a/apps/user/app/(main)/(user)/subscribe/page.tsx b/apps/user/app/(main)/(user)/subscribe/page.tsx index 1b9b06a..8d4e7eb 100644 --- a/apps/user/app/(main)/(user)/subscribe/page.tsx +++ b/apps/user/app/(main)/(user)/subscribe/page.tsx @@ -12,6 +12,7 @@ import { useQuery } from '@tanstack/react-query'; import { useTranslations } from 'next-intl'; import { useState } from 'react'; +import { Empty } from '@/components/empty'; import Purchase from '../order/purchase'; import { SubscribeDetail } from './detail'; @@ -133,6 +134,7 @@ export default function Page() { ))} + {data?.length === 0 && } diff --git a/apps/user/app/(main)/(user)/ticket/page.tsx b/apps/user/app/(main)/(user)/ticket/page.tsx index 5451c8b..565310b 100644 --- a/apps/user/app/(main)/(user)/ticket/page.tsx +++ b/apps/user/app/(main)/(user)/ticket/page.tsx @@ -1,5 +1,6 @@ 'use client'; +import { Empty } from '@/components/empty'; import { ProList, ProListActions } from '@/components/pro-list'; import { createUserTicket, @@ -217,6 +218,7 @@ export default function Page() { ); }} + empty={} /> ); }} + empty={} /> ); diff --git a/apps/user/components/empty.tsx b/apps/user/components/empty.tsx new file mode 100644 index 0000000..9362887 --- /dev/null +++ b/apps/user/components/empty.tsx @@ -0,0 +1,18 @@ +'use client'; + +import { default as _Empty } from '@repo/ui/empty'; +import { useTranslations } from 'next-intl'; +import { useEffect, useState } from 'react'; + +export function Empty() { + const t = useTranslations('common'); + + const [description, setDescription] = useState(''); + + useEffect(() => { + const random = Math.floor(Math.random() * 10); + setDescription(t(`empty.${random}`)); + }, []); + + return <_Empty description={description} />; +} diff --git a/packages/ui/src/empty.tsx b/packages/ui/src/empty.tsx index 018ee03..83c9700 100644 --- a/packages/ui/src/empty.tsx +++ b/packages/ui/src/empty.tsx @@ -1,4 +1,4 @@ -export default function Empty() { +export default function Empty({ description }: { description?: React.ReactNode }) { return (
+

{description}

); } diff --git a/packages/ui/src/pro-list/pro-list.tsx b/packages/ui/src/pro-list/pro-list.tsx index 1aaec91..d2d3746 100644 --- a/packages/ui/src/pro-list/pro-list.tsx +++ b/packages/ui/src/pro-list/pro-list.tsx @@ -38,6 +38,7 @@ export interface ProListProps { textPageOf: (current: number, total: number) => string; selectedRowsText: (total: number) => string; }>; + empty?: React.ReactNode; } export interface ProListActions { refresh: () => void; @@ -52,6 +53,7 @@ export function ProList>({ renderItem, action, texts, + empty, }: ProListProps) { const [columnFilters, setColumnFilters] = useState([]); const [rowSelection, setRowSelection] = useState<{ [key: number]: boolean }>({}); @@ -187,9 +189,7 @@ export function ProList>({ return
{renderItem(item, checkbox)}
; }) ) : ( -
- -
+
{empty || }
)} diff --git a/packages/ui/src/pro-table/pro-table.tsx b/packages/ui/src/pro-table/pro-table.tsx index 64ee4fb..012b62b 100644 --- a/packages/ui/src/pro-table/pro-table.tsx +++ b/packages/ui/src/pro-table/pro-table.tsx @@ -52,6 +52,7 @@ export interface ProTableProps { textPageOf: (current: number, total: number) => string; selectedRowsText: (total: number) => string; }>; + empty?: React.ReactNode; } export interface ProTableActions { refresh: () => void; @@ -66,6 +67,7 @@ export function ProTable>({ actions, action, texts, + empty, }: ProTableProps) { const [sorting, setSorting] = useState([]); const [columnFilters, setColumnFilters] = useState([]); @@ -240,7 +242,7 @@ export function ProTable>({ ) : ( - + {empty || } )}