From bc5a1039f0c10fdeed8db9d5fca8ed1f4a035cb7 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Tue, 24 Oct 2023 15:44:00 +0800 Subject: [PATCH] refactor(core,console): fixing to-dos --- .../components/ItemPreview/index.module.scss | 4 ++ .../Members/AddMembersToOrganization.tsx | 15 +++-- .../OrganizationDetails/Members/index.tsx | 28 ++++++++- .../OrganizationDetails/index.module.scss | 5 ++ .../src/pages/OrganizationDetails/index.tsx | 2 +- .../core/src/database/find-all-entities.ts | 4 +- packages/core/src/database/utils.ts | 14 ++++- packages/core/src/queries/organizations.ts | 59 ++++++++++++------- .../core/src/routes/organization/index.ts | 14 ++++- .../core/src/routes/organization/utils.ts | 2 +- packages/core/src/utils/RelationQueries.ts | 35 ++++++----- .../src/tests/api/organization-role.test.ts | 6 +- .../src/tests/api/organization-scope.test.ts | 4 +- .../phrases/src/locales/de/errors/entity.ts | 2 +- .../phrases/src/locales/en/errors/entity.ts | 2 +- .../phrases/src/locales/es/errors/entity.ts | 2 +- .../phrases/src/locales/fr/errors/entity.ts | 2 +- .../phrases/src/locales/it/errors/entity.ts | 2 +- .../phrases/src/locales/ja/errors/entity.ts | 2 +- .../phrases/src/locales/ko/errors/entity.ts | 2 +- .../src/locales/pl-pl/errors/entity.ts | 2 +- .../src/locales/pt-br/errors/entity.ts | 2 +- .../src/locales/pt-pt/errors/entity.ts | 2 +- .../phrases/src/locales/ru/errors/entity.ts | 2 +- .../src/locales/tr-tr/errors/entity.ts | 2 +- .../src/locales/zh-cn/errors/entity.ts | 2 +- .../src/locales/zh-hk/errors/entity.ts | 2 +- .../src/locales/zh-tw/errors/entity.ts | 2 +- packages/shared/src/database/types.ts | 5 +- 29 files changed, 153 insertions(+), 74 deletions(-) diff --git a/packages/console/src/components/ItemPreview/index.module.scss b/packages/console/src/components/ItemPreview/index.module.scss index d9493e114..3a09bf4d6 100644 --- a/packages/console/src/components/ItemPreview/index.module.scss +++ b/packages/console/src/components/ItemPreview/index.module.scss @@ -5,6 +5,10 @@ align-items: center; white-space: nowrap; + > svg { + flex-shrink: 0; + } + > div:not(:first-child) { margin-left: _.unit(3); } diff --git a/packages/console/src/pages/OrganizationDetails/Members/AddMembersToOrganization.tsx b/packages/console/src/pages/OrganizationDetails/Members/AddMembersToOrganization.tsx index b3b7f471c..7bae2e09f 100644 --- a/packages/console/src/pages/OrganizationDetails/Members/AddMembersToOrganization.tsx +++ b/packages/console/src/pages/OrganizationDetails/Members/AddMembersToOrganization.tsx @@ -47,12 +47,15 @@ function AddMembersToOrganization({ organization, isOpen, onClose }: Props) { userIds: data.users.map(({ id }) => id), }, }); - await api.post(`api/organizations/${organization.id}/users/roles`, { - json: { - userIds: data.users.map(({ id }) => id), - roleIds: data.scopes.map(({ value }) => value), - }, - }); + + if (data.scopes.length > 0) { + await api.post(`api/organizations/${organization.id}/users/roles`, { + json: { + userIds: data.users.map(({ id }) => id), + roleIds: data.scopes.map(({ value }) => value), + }, + }); + } onClose(); } finally { setIsLoading(false); diff --git a/packages/console/src/pages/OrganizationDetails/Members/index.tsx b/packages/console/src/pages/OrganizationDetails/Members/index.tsx index 398fa9ef2..86d6555c5 100644 --- a/packages/console/src/pages/OrganizationDetails/Members/index.tsx +++ b/packages/console/src/pages/OrganizationDetails/Members/index.tsx @@ -7,6 +7,7 @@ import Plus from '@/assets/icons/plus.svg'; import ActionsButton from '@/components/ActionsButton'; import DateTime from '@/components/DateTime'; import UserPreview from '@/components/ItemPreview/UserPreview'; +import { defaultPageSize } from '@/consts'; import Button from '@/ds-components/Button'; import DangerousRaw from '@/ds-components/DangerousRaw'; import Search from '@/ds-components/Search'; @@ -20,6 +21,8 @@ import AddMembersToOrganization from './AddMembersToOrganization'; import EditOrganizationRolesModal from './EditOrganizationRolesModal'; import * as styles from './index.module.scss'; +const pageSize = defaultPageSize; + type Props = { organization: Organization; }; @@ -27,8 +30,17 @@ type Props = { function Members({ organization }: Props) { const api = useApi(); const [keyword, setKeyword] = useState(''); - const { data, error, mutate } = useSWR( - buildUrl(`api/organizations/${organization.id}/users`, { q: keyword }) + const [page, setPage] = useState(1); + const { + data: response, + error, + mutate, + } = useSWR<[UserWithOrganizationRoles[], number], RequestError>( + buildUrl(`api/organizations/${organization.id}/users`, { + q: keyword, + page: String(page), + page_size: String(pageSize), + }) ); const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' }); const tAction = useActionTranslation(); @@ -39,13 +51,21 @@ function Members({ organization }: Props) { return null; // TODO: error handling } - if (!data) { + if (!response) { return null; // TODO: loading } + const [data, totalCount] = response; + return ( <> { setKeyword(value); + setPage(1); }} onClearSearch={() => { setKeyword(''); + setPage(1); }} />