diff --git a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx index 608c62103b543..c065b07a3cf41 100644 --- a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx +++ b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.stories.tsx @@ -4,6 +4,7 @@ import { MockGroup2, MockGroupSyncSettings, MockGroupSyncSettings2, + MockLegacyMappingGroupSyncSettings, MockOrganization, MockRoleSyncSettings, } from "testHelpers/entities"; @@ -74,3 +75,14 @@ export const MissingGroups: Story = { error: undefined, }, }; + +export const WithLegacyMapping: Story = { + args: { + groupSyncSettings: MockLegacyMappingGroupSyncSettings, + roleSyncSettings: MockRoleSyncSettings, + groups: [MockGroup, MockGroup2], + groupsMap, + organization: MockOrganization, + error: undefined, + }, +}; diff --git a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.tsx b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.tsx index 9d7f4ef0cd515..aa02f5433931c 100644 --- a/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.tsx +++ b/site/src/pages/ManagementSettingsPage/IdpSyncPage/IdpSyncPageView.tsx @@ -1,6 +1,7 @@ import type { Interpolation, Theme } from "@emotion/react"; import LaunchOutlined from "@mui/icons-material/LaunchOutlined"; import Button from "@mui/material/Button"; +import Link from "@mui/material/Link"; import Skeleton from "@mui/material/Skeleton"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; @@ -17,6 +18,13 @@ import type { import { ErrorAlert } from "components/Alert/ErrorAlert"; import { ChooseOne, Cond } from "components/Conditionals/ChooseOne"; import { EmptyState } from "components/EmptyState/EmptyState"; +import { + HelpTooltip, + HelpTooltipContent, + HelpTooltipText, + HelpTooltipTitle, + HelpTooltipTrigger, +} from "components/HelpTooltip/HelpTooltip"; import { Loader } from "components/Loader/Loader"; import { Stack } from "components/Stack/Stack"; import { StatusIndicator } from "components/StatusIndicator/StatusIndicator"; @@ -60,6 +68,9 @@ export const IdpSyncPageView: FC = ({ const groupMappingCount = groupSyncSettings?.mapping ? Object.entries(groupSyncSettings.mapping).length : 0; + const legacyGroupMappingCount = groupSyncSettings?.legacy_group_name_mapping + ? Object.entries(groupSyncSettings.legacy_group_name_mapping).length + : 0; const roleMappingCount = roleSyncSettings?.mapping ? Object.entries(roleSyncSettings.mapping).length : 0; @@ -88,14 +99,14 @@ export const IdpSyncPageView: FC = ({ {tab === "groups" ? ( <>
- + = ({ } /> = ({ /> - + {groupSyncSettings?.mapping && Object.entries(groupSyncSettings.mapping) .sort() @@ -141,13 +149,32 @@ export const IdpSyncPageView: FC = ({ /> ))} + {groupSyncSettings?.legacy_group_name_mapping && ( +
+ + + {Object.entries(groupSyncSettings.legacy_group_name_mapping) + .sort() + .map(([idpGroup, groupId]) => ( + + ))} + +
+ )}
) : ( <>
@@ -165,10 +192,7 @@ export const IdpSyncPageView: FC = ({ type="roles" /> - + {roleSyncSettings?.mapping && Object.entries(roleSyncSettings.mapping) .sort() @@ -268,7 +292,7 @@ const IdpMappingTable: FC = ({ - Idp {type} + IdP {type} Coder {type} @@ -359,12 +383,43 @@ const TableLoader = () => { ); }; +const LegacyGroupSyncHeader: FC = () => { + return ( +

+ + Legacy Group Sync Settings + + + + Legacy Group Sync Settings + + These settings were configured using environment variables, and + only apply to the default organization. It is now recommended to + configure IdP sync via the CLI, which enables sync to be + configured for any organization, and for those settings to be + persisted without manually setting environment variables.{" "} + + Learn more… + + + + + +

+ ); +}; + const styles = { - fieldText: (theme) => ({ + fieldText: { fontFamily: MONOSPACE_FONT_FAMILY, whiteSpace: "nowrap", paddingBottom: ".02rem", - }), + }, fieldLabel: (theme) => ({ color: theme.palette.text.secondary, }), diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index ff4ba95f5f5ee..be2a1ccdda196 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -2618,6 +2618,15 @@ export const MockGroupSyncSettings: TypesGen.GroupSyncSettings = { auto_create_missing_groups: false, }; +export const MockLegacyMappingGroupSyncSettings: TypesGen.GroupSyncSettings = { + ...MockGroupSyncSettings, + mapping: {}, + legacy_group_name_mapping: { + "idp-group-1": "fbd2116a-8961-4954-87ae-e4575bd29ce0", + "idp-group-2": "13de3eb4-9b4f-49e7-b0f8-0c3728a0d2e2", + }, +}; + export const MockGroupSyncSettings2: TypesGen.GroupSyncSettings = { field: "group-test", mapping: {