hide add idp button when no mode set

This commit is contained in:
miloschwartz
2026-04-20 17:06:56 -07:00
parent 78ff835ac9
commit 47be3dbdf9
3 changed files with 18 additions and 9 deletions

View File

@@ -8,23 +8,25 @@ import { useEnvContext } from "@app/hooks/useEnvContext";
import { usePaidStatus } from "@app/hooks/usePaidStatus"; import { usePaidStatus } from "@app/hooks/usePaidStatus";
import { tierMatrix } from "@server/lib/billing/tierMatrix"; import { tierMatrix } from "@server/lib/billing/tierMatrix";
import { build } from "@server/build"; import { build } from "@server/build";
import type { Env } from "@app/lib/types/env";
export function isIdpGlobalModeBannerVisible(env: Env): boolean {
if (build === "saas") {
return false;
}
return env.app.identityProviderMode === undefined;
}
export function IdpGlobalModeBanner() { export function IdpGlobalModeBanner() {
const t = useTranslations(); const t = useTranslations();
const { env } = useEnvContext(); const { env } = useEnvContext();
const { isPaidUser, hasEnterpriseLicense } = usePaidStatus(); const { isPaidUser, hasEnterpriseLicense } = usePaidStatus();
const identityProviderModeUndefined =
env.app.identityProviderMode === undefined;
const paidUserForOrgOidc = isPaidUser(tierMatrix.orgOidc); const paidUserForOrgOidc = isPaidUser(tierMatrix.orgOidc);
const enterpriseUnlicensed = const enterpriseUnlicensed =
build === "enterprise" && !hasEnterpriseLicense; build === "enterprise" && !hasEnterpriseLicense;
if (build === "saas") { if (!isIdpGlobalModeBannerVisible(env)) {
return null;
}
if (!identityProviderModeUndefined) {
return null; return null;
} }

View File

@@ -12,13 +12,15 @@ interface DataTableProps<TData, TValue> {
data: TData[]; data: TData[];
onAdd?: () => void; onAdd?: () => void;
addActions?: DataTableAddAction[]; addActions?: DataTableAddAction[];
addButtonDisabled?: boolean;
} }
export function IdpDataTable<TData, TValue>({ export function IdpDataTable<TData, TValue>({
columns, columns,
data, data,
onAdd, onAdd,
addActions addActions,
addButtonDisabled
}: DataTableProps<TData, TValue>) { }: DataTableProps<TData, TValue>) {
const t = useTranslations(); const t = useTranslations();
@@ -33,6 +35,7 @@ export function IdpDataTable<TData, TValue>({
addButtonText={t("idpAdd")} addButtonText={t("idpAdd")}
onAdd={onAdd} onAdd={onAdd}
addActions={addActions} addActions={addActions}
addButtonDisabled={addButtonDisabled}
enableColumnVisibility={true} enableColumnVisibility={true}
stickyRightColumn="actions" stickyRightColumn="actions"
/> />

View File

@@ -52,6 +52,7 @@ import type { ListUserAdminOrgIdpsResponse } from "@server/routers/orgIdp/types"
import { cn } from "@app/lib/cn"; import { cn } from "@app/lib/cn";
import { usePaidStatus } from "@app/hooks/usePaidStatus"; import { usePaidStatus } from "@app/hooks/usePaidStatus";
import { tierMatrix } from "@server/lib/billing/tierMatrix"; import { tierMatrix } from "@server/lib/billing/tierMatrix";
import { isIdpGlobalModeBannerVisible } from "@app/components/IdpGlobalModeBanner";
export type IdpRow = { export type IdpRow = {
idpId: number; idpId: number;
@@ -85,13 +86,15 @@ export default function IdpTable({ idps, orgId }: Props) {
const [importSubmitting, setImportSubmitting] = useState(false); const [importSubmitting, setImportSubmitting] = useState(false);
const [debouncedImportSearch] = useDebounce(importSearchQuery, 150); const [debouncedImportSearch] = useDebounce(importSearchQuery, 150);
const api = createApiClient(useEnvContext()); const envContext = useEnvContext();
const api = createApiClient(envContext);
const { user } = useUserContext(); const { user } = useUserContext();
const { isPaidUser } = usePaidStatus(); const { isPaidUser } = usePaidStatus();
const router = useRouter(); const router = useRouter();
const t = useTranslations(); const t = useTranslations();
const canImportOrgOidcIdp = isPaidUser(tierMatrix.orgOidc); const canImportOrgOidcIdp = isPaidUser(tierMatrix.orgOidc);
const addIdpDisabled = isIdpGlobalModeBannerVisible(envContext.env);
const { data: adminIdpsRaw = [] } = useQuery({ const { data: adminIdpsRaw = [] } = useQuery({
queryKey: ["admin-org-idps", user.userId], queryKey: ["admin-org-idps", user.userId],
@@ -427,6 +430,7 @@ export default function IdpTable({ idps, orgId }: Props) {
<IdpDataTable <IdpDataTable
columns={columns} columns={columns}
data={idps} data={idps}
addButtonDisabled={addIdpDisabled}
addActions={[ addActions={[
{ {
label: t("idpAddActionCreateNew"), label: t("idpAddActionCreateNew"),