From 9569b43dabe16ff35b33dfce6df0a0a9dfbec209 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 14 Jul 2022 16:48:54 +0800 Subject: [PATCH] refactor: response structure of Extension list API see halo-dev/halo#2244 --- package.json | 1 + .../src/components/pagination/Pagination.vue | 114 ++++++++++-------- pnpm-lock.yaml | 13 ++ src/main.ts | 13 +- .../contents/attachments/AttachmentList.vue | 2 +- src/modules/contents/pages/PageList.vue | 2 +- src/modules/contents/posts/PostList.vue | 2 +- .../dashboard/widgets/RecentLoginWidget.vue | 2 +- src/modules/system/plugins/PluginDetail.vue | 6 + src/modules/system/plugins/PluginList.vue | 4 +- src/modules/system/roles/RoleDetail.vue | 4 +- src/modules/system/roles/RoleList.vue | 2 +- .../roles/components/RoleCreationModal.vue | 2 +- .../system/users/PersonalAccessTokens.vue | 4 +- src/modules/system/users/UserList.vue | 45 ++++--- .../users/components/UserCreationModal.vue | 16 ++- 16 files changed, 142 insertions(+), 90 deletions(-) diff --git a/package.json b/package.json index 940ffb45..7e4e7c74 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@halo-dev/admin-shared": "workspace:*", "@halo-dev/api-client": "^0.0.0", "@halo-dev/components": "workspace:*", + "@vueuse/components": "^8.9.2", "@vueuse/core": "^8.9.2", "axios": "^0.27.2", "filepond": "^4.30.4", diff --git a/packages/components/src/components/pagination/Pagination.vue b/packages/components/src/components/pagination/Pagination.vue index be3a6de0..6a6f6c7d 100644 --- a/packages/components/src/components/pagination/Pagination.vue +++ b/packages/components/src/components/pagination/Pagination.vue @@ -1,7 +1,7 @@ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9e55062a..47be1f95 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,6 +30,7 @@ importers: '@vue/eslint-config-typescript': ^11.0.0 '@vue/test-utils': ^2.0.2 '@vue/tsconfig': ^0.1.3 + '@vueuse/components': ^8.9.2 '@vueuse/core': ^8.9.2 autoprefixer: ^10.4.7 axios: ^0.27.2 @@ -79,6 +80,7 @@ importers: '@halo-dev/admin-shared': link:packages/shared '@halo-dev/api-client': 0.0.0 '@halo-dev/components': link:packages/components + '@vueuse/components': 8.9.2_vue@3.2.37 '@vueuse/core': 8.9.2_vue@3.2.37 axios: 0.27.2 filepond: 4.30.4 @@ -2874,6 +2876,17 @@ packages: '@types/node': 17.0.45 dev: true + /@vueuse/components/8.9.2_vue@3.2.37: + resolution: {integrity: sha512-7K39dgpSdMJgotCGCaa3W7q/9AEZ2jitG+mBWH0TK+HSqLeYd5syHQKKK61raWP/qImu/mrwcsqeKtbFunU1FA==} + dependencies: + '@vueuse/core': 8.9.2_vue@3.2.37 + '@vueuse/shared': 8.9.2_vue@3.2.37 + vue-demi: 0.12.1_vue@3.2.37 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@vueuse/core/8.9.2_vue@3.2.37: resolution: {integrity: sha512-dE3/JgwqIHmmtmRBdZAnq87rZCSFbYVps2t3gWy9Jv/+Qp6sHSSKuPFtwguJVZ2OnaGnB/AMRmx4CuFRxFin3A==} peerDependencies: diff --git a/src/main.ts b/src/main.ts index 829c8bc3..f8a0ae68 100644 --- a/src/main.ts +++ b/src/main.ts @@ -97,11 +97,11 @@ function loadStyle(href: string) { } async function loadPluginModules() { - const response = + const { data } = await apiClient.extension.plugin.listpluginHaloRunV1alpha1Plugin(); // Get all started plugins - const plugins = response.data.filter( + const plugins = data.items.filter( (plugin) => plugin.status?.phase === "STARTED" && plugin.spec.enabled ); @@ -138,8 +138,13 @@ async function loadPluginModules() { } async function loadCurrentUser() { - const response = await apiClient.user.getCurrentUserDetail(); - app.provide("currentUser", response.data); + const { data: user } = await apiClient.user.getCurrentUserDetail(); + app.provide("currentUser", user); + + const { data: permissions } = await apiClient.user.getPermissions( + "ac7cdce1-acf2-4e27-a422-c16d6f47cfa2" + ); + app.provide("permissions", permissions); } (async function () { diff --git a/src/modules/contents/attachments/AttachmentList.vue b/src/modules/contents/attachments/AttachmentList.vue index 828655fb..6b41340f 100644 --- a/src/modules/contents/attachments/AttachmentList.vue +++ b/src/modules/contents/attachments/AttachmentList.vue @@ -82,7 +82,7 @@ const attachments = Array.from(new Array(50), (_, index) => index).map( const handleFetchUsers = async () => { try { const { data } = await apiClient.extension.user.listv1alpha1User(); - users.value = data; + users.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/contents/pages/PageList.vue b/src/modules/contents/pages/PageList.vue index 3b82e56d..fb88772b 100644 --- a/src/modules/contents/pages/PageList.vue +++ b/src/modules/contents/pages/PageList.vue @@ -53,7 +53,7 @@ useExtensionPointsState("PAGES", pagesPublicState); const handleFetchUsers = async () => { try { const { data } = await apiClient.extension.user.listv1alpha1User(); - users.value = data; + users.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/contents/posts/PostList.vue b/src/modules/contents/posts/PostList.vue index 26b1d1b0..1c74bde0 100644 --- a/src/modules/contents/posts/PostList.vue +++ b/src/modules/contents/posts/PostList.vue @@ -44,7 +44,7 @@ const checkedCount = computed(() => { const handleFetchUsers = async () => { try { const { data } = await apiClient.extension.user.listv1alpha1User(); - users.value = data; + users.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/dashboard/widgets/RecentLoginWidget.vue b/src/modules/dashboard/widgets/RecentLoginWidget.vue index e3cdc072..02cd5702 100644 --- a/src/modules/dashboard/widgets/RecentLoginWidget.vue +++ b/src/modules/dashboard/widgets/RecentLoginWidget.vue @@ -9,7 +9,7 @@ const users = ref([]); const handleFetchUsers = async () => { try { const { data } = await apiClient.extension.user.listv1alpha1User(); - users.value = data; + users.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/system/plugins/PluginDetail.vue b/src/modules/system/plugins/PluginDetail.vue index 7217742b..e7dce4b8 100644 --- a/src/modules/system/plugins/PluginDetail.vue +++ b/src/modules/system/plugins/PluginDetail.vue @@ -63,6 +63,9 @@ const handleFetchPlugin = async () => { }; const handleFetchSettings = async () => { + if (!plugin.value.spec.settingName) { + return; + } try { const response = await apiClient.extension.setting.getv1alpha1Setting( plugin.value.spec.settingName as string @@ -92,6 +95,9 @@ const handleFetchSettings = async () => { }; const handleFetchConfigMap = async () => { + if (!plugin.value.spec.configMapName) { + return; + } try { const response = await apiClient.extension.configMap.getv1alpha1ConfigMap( plugin.value.spec.configMapName as string diff --git a/src/modules/system/plugins/PluginList.vue b/src/modules/system/plugins/PluginList.vue index b0e8fb0d..afb29898 100644 --- a/src/modules/system/plugins/PluginList.vue +++ b/src/modules/system/plugins/PluginList.vue @@ -37,9 +37,9 @@ const isStarted = (plugin: Plugin) => { const handleFetchPlugins = async () => { try { - const response = + const {data} = await apiClient.extension.plugin.listpluginHaloRunV1alpha1Plugin(); - plugins.value = response.data; + plugins.value = data.items; } catch (e) { console.error("Fail to fetch plugins", e); } diff --git a/src/modules/system/roles/RoleDetail.vue b/src/modules/system/roles/RoleDetail.vue index a5a8a6e9..47f2c884 100644 --- a/src/modules/system/roles/RoleDetail.vue +++ b/src/modules/system/roles/RoleDetail.vue @@ -91,7 +91,7 @@ const handleFetchRole = async () => { const handleFetchRoles = async () => { try { const { data } = await apiClient.extension.role.listv1alpha1Role(); - roles.value = data; + roles.value = data.items; } catch (e) { console.error(e); } @@ -100,7 +100,7 @@ const handleFetchRoles = async () => { const handleFetchUsers = async () => { try { const { data } = await apiClient.extension.user.listv1alpha1User(); - users.value = data; + users.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/system/roles/RoleList.vue b/src/modules/system/roles/RoleList.vue index 4340af71..74ef214b 100644 --- a/src/modules/system/roles/RoleList.vue +++ b/src/modules/system/roles/RoleList.vue @@ -32,7 +32,7 @@ const router = useRouter(); const handleFetchRoles = async () => { try { const { data } = await apiClient.extension.role.listv1alpha1Role(); - roles.value = data; + roles.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/system/roles/components/RoleCreationModal.vue b/src/modules/system/roles/components/RoleCreationModal.vue index 42c5b792..f9012a49 100644 --- a/src/modules/system/roles/components/RoleCreationModal.vue +++ b/src/modules/system/roles/components/RoleCreationModal.vue @@ -72,7 +72,7 @@ const roleTemplateGroups = computed(() => { const handleFetchRoles = async () => { try { const { data } = await apiClient.extension.role.listv1alpha1Role(); - roles.value = data; + roles.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/system/users/PersonalAccessTokens.vue b/src/modules/system/users/PersonalAccessTokens.vue index c1814542..354657c0 100644 --- a/src/modules/system/users/PersonalAccessTokens.vue +++ b/src/modules/system/users/PersonalAccessTokens.vue @@ -20,9 +20,9 @@ const personalAccessTokens = ref([]); const handleFetchPersonalAccessTokens = async () => { try { - const response = + const { data } = await apiClient.extension.personalAccessToken.listv1alpha1PersonalAccessToken(); - personalAccessTokens.value = response.data; + personalAccessTokens.value = data.items; } catch (e) { console.error(e); } diff --git a/src/modules/system/users/UserList.vue b/src/modules/system/users/UserList.vue index aef17dba..1cad9325 100644 --- a/src/modules/system/users/UserList.vue +++ b/src/modules/system/users/UserList.vue @@ -16,30 +16,46 @@ import UserCreationModal from "./components/UserCreationModal.vue"; import { onMounted, ref } from "vue"; import { apiClient } from "@halo-dev/admin-shared"; import type { User } from "@halo-dev/api-client"; +import type { UserList } from "@halo-dev/api-client"; const checkAll = ref(false); const creationModal = ref(false); -const users = ref([]); -const selectedUser = ref(null); -const pagination = ref<{ - page: number; - size: number; - total: number; -}>({ +const users = ref({ page: 1, - size: 10, - total: 100, + size: 5, + total: 0, + items: [], + first: true, + last: false, + hasNext: false, + hasPrevious: false, }); +const selectedUser = ref(null); const handleFetchUsers = async () => { try { - const { data } = await apiClient.extension.user.listv1alpha1User(); + const { data } = await apiClient.extension.user.listv1alpha1User( + users.value.page, + users.value.size + ); users.value = data; } catch (e) { console.error(e); } }; +const handlePaginationChange = async ({ + page, + size, +}: { + page: number; + size: number; +}) => { + users.value.page = page; + users.value.size = size; + await handleFetchUsers(); +}; + const handleOpenCreateModal = (user: User) => { selectedUser.value = user; creationModal.value = true; @@ -206,7 +222,7 @@ onMounted(() => {
    -
  • +
  • diff --git a/src/modules/system/users/components/UserCreationModal.vue b/src/modules/system/users/components/UserCreationModal.vue index 1511a6a4..1f74d854 100644 --- a/src/modules/system/users/components/UserCreationModal.vue +++ b/src/modules/system/users/components/UserCreationModal.vue @@ -71,7 +71,7 @@ watch(props, (newVal) => { const handleFetchRoles = async () => { try { const { data } = await apiClient.extension.role.listv1alpha1Role(); - roles.value = data; + roles.value = data.items; } catch (e) { console.error(e); } @@ -102,14 +102,12 @@ const handleCreateUser = async () => { user = response.data; } - // if (selectedRole.value) { - // await apiClient.user.( - // `/apis/api.halo.run/v1alpha1/users/${user.metadata.name}/permissions`, - // { - // roles: [selectedRole.value], - // } - // ); - // } + if (selectedRole.value) { + await apiClient.user.grantPermission(user.metadata.name, { + // @ts-ignore + roles: [selectedRole.value], + }); + } handleVisibleChange(false); } catch (e) {