From f811d3237196c460323974a3898b8dc93b0c9087 Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Thu, 7 Apr 2022 20:36:46 +0800 Subject: [PATCH] refactor(console): add paginations for applications and resources (#495) --- .../src/pages/ApiResources/index.module.scss | 4 +++ .../console/src/pages/ApiResources/index.tsx | 29 ++++++++++++++---- .../src/pages/Applications/index.module.scss | 4 +++ .../console/src/pages/Applications/index.tsx | 30 ++++++++++++++----- packages/console/src/pages/Users/index.tsx | 2 +- 5 files changed, 55 insertions(+), 14 deletions(-) diff --git a/packages/console/src/pages/ApiResources/index.module.scss b/packages/console/src/pages/ApiResources/index.module.scss index 1122ae523..43664e39b 100644 --- a/packages/console/src/pages/ApiResources/index.module.scss +++ b/packages/console/src/pages/ApiResources/index.module.scss @@ -14,6 +14,10 @@ flex: 1; } +.pagination { + min-height: 64px; +} + .apiResourceName { width: 360px; } diff --git a/packages/console/src/pages/ApiResources/index.tsx b/packages/console/src/pages/ApiResources/index.tsx index c5c5e5e28..d11510b45 100644 --- a/packages/console/src/pages/ApiResources/index.tsx +++ b/packages/console/src/pages/ApiResources/index.tsx @@ -1,11 +1,10 @@ import { Resource } from '@logto/schemas'; -import { conditional } from '@silverhand/essentials/lib/utilities/conditional.js'; import classNames from 'classnames'; import React, { useState } from 'react'; import { toast } from 'react-hot-toast'; import { useTranslation } from 'react-i18next'; import Modal from 'react-modal'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import useSWR from 'swr'; import Button from '@/components/Button'; @@ -14,6 +13,7 @@ import CardTitle from '@/components/CardTitle'; import CopyToClipboard from '@/components/CopyToClipboard'; import ImagePlaceholder from '@/components/ImagePlaceholder'; import ItemPreview from '@/components/ItemPreview'; +import Pagination from '@/components/Pagination'; import TableEmpty from '@/components/Table/TableEmpty'; import TableError from '@/components/Table/TableError'; import TableLoading from '@/components/Table/TableLoading'; @@ -26,12 +26,19 @@ import * as styles from './index.module.scss'; const buildDetailsLink = (id: string) => `/api-resources/${id}`; +const pageSize = 20; + const ApiResources = () => { const [isCreateFormOpen, setIsCreateFormOpen] = useState(false); const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); - const { data, error, mutate } = useSWR('/api/resources'); + const [query, setQuery] = useSearchParams(); + const pageIndex = Number(query.get('page') ?? '1'); + const { data, error, mutate } = useSWR<[Resource[], number], RequestError>( + `/api/resources?page=${pageIndex}&page_size=${pageSize}` + ); const isLoading = !data && !error; const navigate = useNavigate(); + const [apiResources, totalCount] = data ?? []; return ( @@ -54,7 +61,6 @@ const ApiResources = () => { setIsCreateFormOpen(false); if (createdApiResource) { - void mutate(conditional(data && [...data, createdApiResource])); toast.success( t('api_resources.api_resource_created', { name: createdApiResource.name }) ); @@ -85,7 +91,7 @@ const ApiResources = () => { /> )} {isLoading && } - {data?.length === 0 && ( + {apiResources?.length === 0 && (