From 00e2a6fd96cb73e2e9ffade033acdcfea0f38ba2 Mon Sep 17 00:00:00 2001 From: Steven Date: Mon, 12 Aug 2024 21:17:27 +0800 Subject: [PATCH] chore: update license service --- frontend/web/src/components/FeatureBadge.tsx | 11 +- .../src/components/setting/MemberSection.tsx | 18 +-- .../web/src/components/setting/SSOSection.tsx | 19 ++- .../components/setting/WorkspaceSection.tsx | 3 +- frontend/web/src/helpers/feature.ts | 51 ++++++++ proto/api/v1/subscription_service.proto | 5 + proto/gen/api/v1/README.md | 3 + proto/gen/api/v1/subscription_service.pb.go | 120 +++++++++++------- proto/gen/apidocs.swagger.yaml | 10 ++ server/route/api/v1/auth_service.go | 32 +++-- server/route/api/v1/workspace_service.go | 18 ++- server/service/license/feature_matrix.go | 62 +++++++-- server/service/license/license.go | 52 +++++--- 13 files changed, 297 insertions(+), 107 deletions(-) create mode 100644 frontend/web/src/helpers/feature.ts diff --git a/frontend/web/src/components/FeatureBadge.tsx b/frontend/web/src/components/FeatureBadge.tsx index 3074be9..351f868 100644 --- a/frontend/web/src/components/FeatureBadge.tsx +++ b/frontend/web/src/components/FeatureBadge.tsx @@ -1,11 +1,20 @@ import { Tooltip } from "@mui/joy"; +import { FeatureType, checkFeatureAvailable } from "@/helpers/feature"; +import { useWorkspaceStore } from "@/stores"; import Icon from "./Icon"; interface Props { + feature: FeatureType; className?: string; } -const FeatureBadge = ({ className }: Props) => { +const FeatureBadge = ({ feature, className }: Props) => { + const workspaceStore = useWorkspaceStore(); + const isFeatureEnabled = checkFeatureAvailable(feature, workspaceStore.profile.plan); + + if (isFeatureEnabled) { + return null; + } return ( diff --git a/frontend/web/src/components/setting/MemberSection.tsx b/frontend/web/src/components/setting/MemberSection.tsx index 97ae67a..b08c3d2 100644 --- a/frontend/web/src/components/setting/MemberSection.tsx +++ b/frontend/web/src/components/setting/MemberSection.tsx @@ -67,20 +67,20 @@ const MemberSection = () => {
-
+
- - - - @@ -88,10 +88,10 @@ const MemberSection = () => { {userList.map((user) => ( - - - - + + +
+ {t("user.nickname")} + {t("user.email")} + {t("user.role")} + {t("common.edit")}
{user.nickname}{user.email}{convertRoleFromPb(user.role)} + {user.nickname}{user.email}{convertRoleFromPb(user.role)} { const workspaceStore = useWorkspaceStore(); const [identityProviderList, setIdentityProviderList] = useState([]); const [editState, setEditState] = useState({ open: false, identityProvider: undefined }); + const isSSOFeatureEnabled = checkFeatureAvailable(FeatureType.SSO, workspaceStore.profile.plan); useEffect(() => { fetchIdentityProviderList(); @@ -53,10 +56,12 @@ const SSOSection = () => {
SSO +