From 3b4b0bad22025a370eae03ef3037ed7f05b25e4c Mon Sep 17 00:00:00 2001
From: DarkSky <25152247+darkskygit@users.noreply.github.com>
Date: Tue, 27 Jan 2026 04:44:21 +0800
Subject: [PATCH] feat: improve admin panel styles (#14318)
---
.../src/core/workspaces/resolvers/admin.ts | 12 ++++-
packages/frontend/admin/src/app.tsx | 8 +++-
.../src/modules/nav/collapsible-item.tsx | 9 +++-
.../frontend/admin/src/modules/nav/nav.tsx | 14 +++---
.../admin/src/modules/nav/settings-item.tsx | 44 +++++++++++--------
.../admin/src/modules/settings/config.ts | 8 +++-
6 files changed, 67 insertions(+), 28 deletions(-)
diff --git a/packages/backend/server/src/core/workspaces/resolvers/admin.ts b/packages/backend/server/src/core/workspaces/resolvers/admin.ts
index d6ae1ed0f..338e6d322 100644
--- a/packages/backend/server/src/core/workspaces/resolvers/admin.ts
+++ b/packages/backend/server/src/core/workspaces/resolvers/admin.ts
@@ -1,4 +1,4 @@
-import { Injectable } from '@nestjs/common';
+import { Injectable, NotFoundException } from '@nestjs/common';
import {
Args,
Field,
@@ -189,6 +189,12 @@ class AdminUpdateWorkspaceInput extends PartialType(
export class AdminWorkspaceResolver {
constructor(private readonly models: Models) {}
+ private assertCloudOnly() {
+ if (env.selfhosted) {
+ throw new NotFoundException();
+ }
+ }
+
@Query(() => [AdminWorkspace], {
description: 'List workspaces for admin',
})
@@ -196,6 +202,7 @@ export class AdminWorkspaceResolver {
@Args('filter', { type: () => ListWorkspaceInput })
filter: ListWorkspaceInput
) {
+ this.assertCloudOnly();
const { rows } = await this.models.workspace.adminListWorkspaces({
first: filter.first,
skip: filter.skip,
@@ -219,6 +226,7 @@ export class AdminWorkspaceResolver {
@Args('filter', { type: () => ListWorkspaceInput })
filter: ListWorkspaceInput
) {
+ this.assertCloudOnly();
const total = await this.models.workspace.adminCountWorkspaces({
keyword: filter.keyword,
features: filter.features,
@@ -238,6 +246,7 @@ export class AdminWorkspaceResolver {
nullable: true,
})
async adminWorkspace(@Args('id') id: string) {
+ this.assertCloudOnly();
const { rows } = await this.models.workspace.adminListWorkspaces({
first: 1,
skip: 0,
@@ -318,6 +327,7 @@ export class AdminWorkspaceResolver {
@Args('input', { type: () => AdminUpdateWorkspaceInput })
input: AdminUpdateWorkspaceInput
) {
+ this.assertCloudOnly();
const { id, features, ...updates } = input;
if (Object.keys(updates).length) {
diff --git a/packages/frontend/admin/src/app.tsx b/packages/frontend/admin/src/app.tsx
index 3089dfa35..5e7831ab4 100644
--- a/packages/frontend/admin/src/app.tsx
+++ b/packages/frontend/admin/src/app.tsx
@@ -99,7 +99,13 @@ export const App = () => {