diff --git a/web/packages/teleport/src/DeviceTrust/EmptyList.tsx b/web/packages/teleport/src/DeviceTrust/EmptyList.tsx
index 294220e61eb75..b34d193e6de22 100644
--- a/web/packages/teleport/src/DeviceTrust/EmptyList.tsx
+++ b/web/packages/teleport/src/DeviceTrust/EmptyList.tsx
@@ -22,12 +22,12 @@ import styled from 'styled-components';
import {
Box,
+ ButtonPrimary,
ButtonSecondary,
Flex,
H1,
H2,
H3,
- MenuItem,
P1,
P2,
ResourceIcon,
@@ -46,7 +46,6 @@ import {
FeatureContainer,
FeatureSlider,
} from 'shared/components/EmptyState/EmptyState';
-import { MenuButton } from 'shared/components/MenuAction';
import { pluralize } from 'shared/utils/text';
import {
@@ -199,26 +198,14 @@ export const EmptyList = ({
>
{isEnterprise ? (
<>
-
-
-
-
+ Get Started with an MDM
+
{
+test('getDeployServiceIamConfigureScriptPath formatting', () => {
const params: UrlDeployServiceIamConfigureScriptParams = {
integrationName: 'int-name',
region: 'us-east-1',
@@ -40,7 +41,7 @@ test('getDeployServiceIamConfigureScriptPath formatting', async () => {
);
});
-test('getAwsOidcConfigureIdpScriptUrl formatting, without s3 fields', async () => {
+test('getAwsOidcConfigureIdpScriptUrl formatting, without s3 fields', () => {
const params: UrlAwsOidcConfigureIdp = {
integrationName: 'int-name',
roleName: 'role-arn',
@@ -54,7 +55,7 @@ test('getAwsOidcConfigureIdpScriptUrl formatting, without s3 fields', async () =
);
});
-test('getAwsIamConfigureScriptAppAccessUrl formatting', async () => {
+test('getAwsIamConfigureScriptAppAccessUrl formatting', () => {
const params: Omit = {
iamRoleName: 'role-arn',
accountID: '123456789012',
@@ -66,3 +67,15 @@ test('getAwsIamConfigureScriptAppAccessUrl formatting', async () => {
`${base}${expected}`
);
});
+
+test('getIntegrationsEnroll appends tags', () => {
+ const tags: IntegrationTag[] = ['devicetrust', 'idp'];
+ const url = new URL(
+ 'https://example.com' + cfg.getIntegrationsEnrollRoute({ tags })
+ );
+ expect(url.searchParams.getAll('tags')).toEqual(tags);
+});
+
+test('getIntegrationsEnroll without extra params', () => {
+ expect(cfg.getIntegrationsEnrollRoute()).toEqual('/web/integrations/new');
+});
diff --git a/web/packages/teleport/src/config.ts b/web/packages/teleport/src/config.ts
index 2b58ebf08a11f..3937504eb7df9 100644
--- a/web/packages/teleport/src/config.ts
+++ b/web/packages/teleport/src/config.ts
@@ -45,6 +45,7 @@ import type { YamlSupportedResourceKind } from 'teleport/services/yaml/types';
import { defaultEntitlements } from './entitlement';
import generateResourcePath from './generateResourcePath';
+import { IntegrationTag } from './Integrations/Enroll/Shared';
import type { MfaChallengeResponse } from './services/mfa';
import { KindAuthConnectors } from './services/resources';
@@ -683,6 +684,29 @@ const cfg = {
return generatePath(cfg.routes.audit, { clusterId });
},
+ /**
+ * getIntegrationsEnrollRoute returns a path to the page which lists all integrations.
+ */
+ getIntegrationsEnrollRoute({
+ tags = [],
+ searchFilter = '',
+ }: {
+ tags?: IntegrationTag[];
+ searchFilter?: string;
+ } = {}) {
+ const searchParams = new URLSearchParams();
+ tags.forEach(tag => {
+ searchParams.append('tags', tag);
+ });
+ if (searchFilter) {
+ searchParams.set('search', searchFilter);
+ }
+ const queryString = searchParams.toString();
+ const path = generatePath(cfg.routes.integrationEnroll);
+
+ return queryString ? `${path}?${queryString}` : path;
+ },
+
/**
* Generates a route for an Integration's enrolment page
*