diff --git a/frontend/src/component/integrations/IntegrationForm/IntegrationDelete/IntegrationDelete.tsx b/frontend/src/component/integrations/IntegrationForm/IntegrationDelete/IntegrationDelete.tsx index 873004202e..22ddff6d5d 100644 --- a/frontend/src/component/integrations/IntegrationForm/IntegrationDelete/IntegrationDelete.tsx +++ b/frontend/src/component/integrations/IntegrationForm/IntegrationDelete/IntegrationDelete.tsx @@ -69,7 +69,7 @@ export const IntegrationDelete: VFC = ({ id }) => { onClose={() => setIsOpen(false)} title="Confirm deletion" > -
Are you sure you want to delete this Addon?
+
Are you sure you want to delete this Integration?
); diff --git a/frontend/src/component/integrations/IntegrationForm/IntegrationForm.tsx b/frontend/src/component/integrations/IntegrationForm/IntegrationForm.tsx index 7066ecf492..4c0863ce04 100644 --- a/frontend/src/component/integrations/IntegrationForm/IntegrationForm.tsx +++ b/frontend/src/component/integrations/IntegrationForm/IntegrationForm.tsx @@ -224,7 +224,7 @@ export const IntegrationForm: VFC = ({ navigate(integrationsRework ? '/integrations' : '/addons'); setToastData({ type: 'success', - title: 'Addon updated successfully', + title: 'Integration updated successfully', }); } else { await createAddon(formValues as Omit); @@ -232,7 +232,7 @@ export const IntegrationForm: VFC = ({ setToastData({ type: 'success', confetti: true, - title: 'Addon created successfully', + title: 'Integration created successfully', }); } } catch (error) { @@ -248,6 +248,7 @@ export const IntegrationForm: VFC = ({ const { name, + displayName, description, documentationUrl = 'https://unleash.github.io/docs/addons', installation, @@ -264,7 +265,9 @@ export const IntegrationForm: VFC = ({ } description={description || ''} documentationLink={documentationUrl} - documentationLinkLabel="Addon documentation" + documentationLinkLabel={`${ + displayName || capitalizeFirst(`${name} `) + } documentation`} formatApiCode={formatApiCode} footer={ diff --git a/frontend/src/component/integrations/IntegrationForm/IntegrationInstall/IntegrationInstall.tsx b/frontend/src/component/integrations/IntegrationForm/IntegrationInstall/IntegrationInstall.tsx index 3e945af42e..3912a85b46 100644 --- a/frontend/src/component/integrations/IntegrationForm/IntegrationInstall/IntegrationInstall.tsx +++ b/frontend/src/component/integrations/IntegrationForm/IntegrationInstall/IntegrationInstall.tsx @@ -17,7 +17,7 @@ const StyledBox = styled(Box)(({ theme }) => ({ export const IntegrationInstall = ({ url, title = 'Install addon', - helpText = 'Click this button to install this addon.', + helpText = 'Click this button to install this integration.', }: IAddonInstallProps) => { return ( diff --git a/frontend/src/component/integrations/IntegrationList/AvailableIntegrations/AvailableIntegrations.tsx b/frontend/src/component/integrations/IntegrationList/AvailableIntegrations/AvailableIntegrations.tsx index d95ac45546..29bae1c51e 100644 --- a/frontend/src/component/integrations/IntegrationList/AvailableIntegrations/AvailableIntegrations.tsx +++ b/frontend/src/component/integrations/IntegrationList/AvailableIntegrations/AvailableIntegrations.tsx @@ -18,7 +18,7 @@ interface IAvailableIntegrationsProps { const StyledContainer = styled('div')(({ theme }) => ({ display: 'flex', flexDirection: 'column', - gap: theme.spacing(12), + gap: theme.spacing(8), })); const StyledSection = styled('section')(({ theme }) => ({ @@ -27,6 +27,18 @@ const StyledSection = styled('section')(({ theme }) => ({ gap: theme.spacing(2), })); +const StyledSdksSection = styled('section')(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing(4), +})); + +const StyledSdksGroup = styled('div')(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing(2), +})); + /** * @deprecated * // TODO: refactor @@ -59,23 +71,31 @@ export const AvailableIntegrations: VFC = ({ - {providers?.map( - ({ - name, - displayName, - description, - deprecated, - }) => ( - + {providers + ?.sort( + (a, b) => + a.displayName?.localeCompare( + b.displayName + ) || 0 ) - )} + .map( + ({ + name, + displayName, + description, + deprecated, + }) => ( + + ) + )} + {/* TODO: sort providers from backend with custom providers */} {customProviders?.map( ({ name, displayName, description }) => ( = ({ title={displayName || name} description={description} link={`/integrations/view/${name}`} - configureActionText={'View integration'} + configureActionText="Learn more" /> ) )} @@ -139,99 +159,116 @@ export const AvailableIntegrations: VFC = ({ - ({ marginTop: theme.spacing(2) })}> - - Server-side SDKs - - - Server-side clients run on your server and - communicate directly with your Unleash instance. - - - - {serverSdks?.map( - ({ - name, - displayName, - description, - documentationUrl, - }) => ( - - ) - )} - - ({ marginTop: theme.spacing(2) })}> - - Client-side SDKs - - - Client-side SDKs can connect to the{' '} - - Unleash Edge - {' '} - or to the{' '} - - Unleash front-end API - - , but not to the regular Unleash client API. - - - - {clientSdks?.map( - ({ - name, - displayName, - description, - documentationUrl, - }) => ( - - ) - )} - - - - -
- - Community SDKs - - - + + + + Server-side SDKs + + - Here's some of the fantastic work - {' '} - our community has build to make Unleash work in - even more contexts. - -
-
+ Server-side clients run on your server and + communicate directly with your Unleash + instance. + +
+ + {serverSdks?.map( + ({ + name, + displayName, + description, + documentationUrl, + }) => ( + + ) + )} + + + + + + Client-side SDKs + + + Client-side SDKs can connect to the{' '} + + Unleash Edge + {' '} + or to the{' '} + + Unleash front-end API + + , but not to the regular Unleash client API. + + + + {clientSdks?.map( + ({ + name, + displayName, + description, + documentationUrl, + }) => ( + + ) + )} + + + + +
+ + Community SDKs + + + + Here's some of the fantastic work + {' '} + our community has build to make Unleash + work in even more contexts. + +
+
+
+ diff --git a/frontend/src/component/integrations/IntegrationList/IntegrationCard/IntegrationCard.tsx b/frontend/src/component/integrations/IntegrationList/IntegrationCard/IntegrationCard.tsx index db157e8c58..1c2e7c3af8 100644 --- a/frontend/src/component/integrations/IntegrationList/IntegrationCard/IntegrationCard.tsx +++ b/frontend/src/component/integrations/IntegrationList/IntegrationCard/IntegrationCard.tsx @@ -67,6 +67,7 @@ const StyledAction = styled(Typography)(({ theme }) => ({ alignItems: 'center', color: theme.palette.primary.main, fontWeight: theme.typography.fontWeightBold, + fontSize: theme.typography.body2.fontSize, marginTop: 'auto', paddingTop: theme.spacing(1), gap: theme.spacing(0.5), @@ -81,7 +82,7 @@ export const IntegrationCard: VFC = ({ title, description, isEnabled, - configureActionText = 'Configure', + configureActionText = 'Open', link, addon, deprecated, diff --git a/frontend/src/component/integrations/ViewIntegration/EdgeIntegration/EdgeIntegration.tsx b/frontend/src/component/integrations/ViewIntegration/EdgeIntegration/EdgeIntegration.tsx index c335032e30..567ab5febe 100644 --- a/frontend/src/component/integrations/ViewIntegration/EdgeIntegration/EdgeIntegration.tsx +++ b/frontend/src/component/integrations/ViewIntegration/EdgeIntegration/EdgeIntegration.tsx @@ -35,6 +35,9 @@ const StyledDescriptionHeader = styled(Typography)(({ theme }) => ({ const StyledLink = styled('a')({ textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, }); const StyledFigure = styled('figure')(({ theme }) => ({ diff --git a/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraImageContainer.tsx b/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraImageContainer.tsx index 09969ce011..4cbe9f7eca 100644 --- a/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraImageContainer.tsx +++ b/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraImageContainer.tsx @@ -6,6 +6,7 @@ import { FC } from 'react'; export const StyledFigure = styled('figure')(({ theme }) => ({ display: 'flex', gap: theme.spacing(2), + margin: theme.spacing(2, 0), flexDirection: 'column', })); diff --git a/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraIntegration.tsx b/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraIntegration.tsx index 5a6a985cc3..2015f5ee3d 100644 --- a/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraIntegration.tsx +++ b/frontend/src/component/integrations/ViewIntegration/JiraIntegration/JiraIntegration.tsx @@ -1,6 +1,6 @@ import FormTemplate from 'component/common/FormTemplate/FormTemplate'; import { Divider, styled } from '@mui/material'; - +import LaunchIcon from '@mui/icons-material/Launch'; import cr from './assets/cr.png'; import connect from './assets/connect.png'; import manage from './assets/manage.png'; @@ -20,10 +20,14 @@ const StyledGrayContainer = styled('div')(({ theme }) => ({ display: 'flex', flexDirection: 'column', gap: theme.spacing(1), + marginBottom: theme.spacing(2), })); const StyledLink = styled('a')({ textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, }); export const JIRA_INFO = { @@ -57,7 +61,14 @@ export const JiraIntegration = () => { rel="noopener noreferrer" href="https://marketplace.atlassian.com/apps/1231447/unleash-enterprise-for-jira" > - View plugin on Atlassian marketplace + View plugin on Atlassian marketplace{' '} + diff --git a/src/lib/addons/index.ts b/src/lib/addons/index.ts index 5d9dac21d3..8643e4c4ce 100644 --- a/src/lib/addons/index.ts +++ b/src/lib/addons/index.ts @@ -22,7 +22,7 @@ export const getAddons: (args: { if (slackAppAddonEnabled) { slackAddon.definition.deprecated = - 'This addon is deprecated. Please try the new Slack App addon instead.'; + 'This addon is deprecated. Please try the new Slack App integration instead.'; } const addons: Addon[] = [ diff --git a/src/lib/addons/slack-app-definition.ts b/src/lib/addons/slack-app-definition.ts index afd43c9da5..d61fe3fc38 100644 --- a/src/lib/addons/slack-app-definition.ts +++ b/src/lib/addons/slack-app-definition.ts @@ -39,7 +39,7 @@ const slackAppDefinition: IAddonDefinition = { url: 'https://unleash-slack-app.vercel.app/install', title: 'Slack App installation', helpText: - 'After installing the Unleash Slack app in your Slack workspace, paste the access token into the appropriate field below in order to configure this addon.', + 'After installing the Unleash Slack app in your Slack workspace, paste the access token into the appropriate field below in order to configure this integration.', }, parameters: [ {