From 5786d8156f7473357cf0f398ecea0d6f0e6efb3b Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Thu, 5 Jan 2023 16:22:45 +0800 Subject: [PATCH] feat(console): roles page (#2820) --- packages/console/src/App.tsx | 16 ++-- packages/console/src/assets/images/role.svg | 5 ++ .../AppContent/components/Sidebar/hook.tsx | 10 +++ packages/console/src/pages/Roles/index.tsx | 78 +++++++++++++++++++ .../de/translation/admin-console/index.ts | 2 + .../de/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../de/translation/admin-console/tabs.ts | 1 + .../en/translation/admin-console/index.ts | 2 + .../en/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../en/translation/admin-console/tabs.ts | 1 + .../fr/translation/admin-console/index.ts | 2 + .../fr/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../fr/translation/admin-console/tabs.ts | 1 + .../ko/translation/admin-console/index.ts | 2 + .../ko/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../ko/translation/admin-console/tabs.ts | 1 + .../pt-br/translation/admin-console/index.ts | 2 + .../pt-br/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../pt-br/translation/admin-console/tabs.ts | 1 + .../pt-pt/translation/admin-console/index.ts | 2 + .../pt-pt/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../pt-pt/translation/admin-console/tabs.ts | 1 + .../tr-tr/translation/admin-console/index.ts | 2 + .../tr-tr/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../tr-tr/translation/admin-console/tabs.ts | 1 + .../zh-cn/translation/admin-console/index.ts | 2 + .../zh-cn/translation/admin-console/roles.ts | 10 +++ .../translation/admin-console/tab-sections.ts | 1 + .../zh-cn/translation/admin-console/tabs.ts | 1 + 36 files changed, 215 insertions(+), 6 deletions(-) create mode 100644 packages/console/src/assets/images/role.svg create mode 100644 packages/console/src/pages/Roles/index.tsx create mode 100644 packages/phrases/src/locales/de/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/en/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/fr/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/ko/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/pt-br/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/pt-pt/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/tr-tr/translation/admin-console/roles.ts create mode 100644 packages/phrases/src/locales/zh-cn/translation/admin-console/roles.ts diff --git a/packages/console/src/App.tsx b/packages/console/src/App.tsx index caa7f1719..225cd5e40 100644 --- a/packages/console/src/App.tsx +++ b/packages/console/src/App.tsx @@ -25,6 +25,7 @@ import Connectors from '@/pages/Connectors'; import Dashboard from '@/pages/Dashboard'; import GetStarted from '@/pages/GetStarted'; import NotFound from '@/pages/NotFound'; +import Roles from '@/pages/Roles'; import Settings from '@/pages/Settings'; import SignInExperience from '@/pages/SignInExperience'; import UserDetails from '@/pages/UserDetails'; @@ -50,6 +51,7 @@ const Main = () => { }> } /> } /> + } /> } /> } /> @@ -60,6 +62,10 @@ const Main = () => { } /> } /> + + } /> + } /> + } /> } /> @@ -73,16 +79,14 @@ const Main = () => { } /> } /> - - } /> - } /> - - } /> } /> } /> - } /> + + } /> + + } /> diff --git a/packages/console/src/assets/images/role.svg b/packages/console/src/assets/images/role.svg new file mode 100644 index 000000000..fe550299d --- /dev/null +++ b/packages/console/src/assets/images/role.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/console/src/components/AppContent/components/Sidebar/hook.tsx b/packages/console/src/components/AppContent/components/Sidebar/hook.tsx index 7862050de..379bae176 100644 --- a/packages/console/src/components/AppContent/components/Sidebar/hook.tsx +++ b/packages/console/src/components/AppContent/components/Sidebar/hook.tsx @@ -2,6 +2,7 @@ import type { Optional } from '@silverhand/essentials'; import type { FC, ReactNode } from 'react'; import type { TFuncKey } from 'react-i18next'; +import Role from '@/assets/images/role.svg'; import useDocumentationUrl from '@/hooks/use-documentation-url'; import useUserPreferences from '@/hooks/use-user-preferences'; @@ -98,6 +99,15 @@ export const useSidebarMenuItems = (): { }, ], }, + { + title: 'access_control', + items: [ + { + Icon: Role, + title: 'roles', + }, + ], + }, { title: 'help_and_support', items: [ diff --git a/packages/console/src/pages/Roles/index.tsx b/packages/console/src/pages/Roles/index.tsx new file mode 100644 index 000000000..9eed75427 --- /dev/null +++ b/packages/console/src/pages/Roles/index.tsx @@ -0,0 +1,78 @@ +import type { Role } from '@logto/schemas'; +import { useTranslation } from 'react-i18next'; +import { useNavigate } from 'react-router-dom'; +import useSWR from 'swr'; + +import Plus from '@/assets/images/plus.svg'; +import Button from '@/components/Button'; +import CardTitle from '@/components/CardTitle'; +import ItemPreview from '@/components/ItemPreview'; +import Table from '@/components/Table'; +import type { RequestError } from '@/hooks/use-api'; +import * as pageStyles from '@/scss/resources.module.scss'; + +const rolesPathname = '/roles'; +const createRolePathname = `${rolesPathname}/create`; +const buildDetailsPathname = (id: string) => `${rolesPathname}/${id}`; + +const Roles = () => { + const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); + const navigate = useNavigate(); + const { data: roles, error, mutate } = useSWR(`/api/roles`); + const isLoading = !roles && !error; + + return ( +
+
+ +
+ , + }, + { + title: t('roles.role_description'), + dataIndex: 'description', + colSpan: 10, + render: ({ description }) => description, + }, + ]} + rowClickHandler={({ id }) => { + navigate(buildDetailsPathname(id)); + }} + placeholder={{ + content: ( +