mirror of
https://github.com/Unleash/unleash.git
synced 2025-02-04 00:18:01 +01:00
feat: connect sdk concepts (#8079)
This commit is contained in:
parent
48ddd255d6
commit
ba8d043f3c
@ -6,9 +6,10 @@ import {
|
|||||||
useMediaQuery,
|
useMediaQuery,
|
||||||
useTheme,
|
useTheme,
|
||||||
} from '@mui/material';
|
} from '@mui/material';
|
||||||
import { GenrateApiKeyConcepts, GenerateApiKey } from './GenerateApiKey';
|
import { GenerateApiKey } from './GenerateApiKey';
|
||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { type Sdk, SelectSdk } from './SelectSdk';
|
import { type Sdk, SelectSdk } from './SelectSdk';
|
||||||
|
import { GenrateApiKeyConcepts, SelectSdkConcepts } from './UnleashConcepts';
|
||||||
|
|
||||||
interface IConnectSDKDialogProps {
|
interface IConnectSDKDialogProps {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
@ -38,7 +39,7 @@ const StyledDialog = styled(Dialog)(({ theme }) => ({
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
const Navigation = styled('div')(({ theme }) => ({
|
const Navigation = styled('div')(({ theme }) => ({
|
||||||
marginTop: 'auto',
|
marginTop: theme.spacing(16),
|
||||||
borderTop: `1px solid ${theme.palette.divider}}`,
|
borderTop: `1px solid ${theme.palette.divider}}`,
|
||||||
display: 'flex',
|
display: 'flex',
|
||||||
justifyContent: 'flex-end',
|
justifyContent: 'flex-end',
|
||||||
@ -118,7 +119,12 @@ export const ConnectSdkDialog = ({
|
|||||||
) : null}
|
) : null}
|
||||||
</ConnectSdk>
|
</ConnectSdk>
|
||||||
|
|
||||||
{isLargeScreen ? <GenrateApiKeyConcepts /> : null}
|
{isLargeScreen && stage.name === 'select-sdk' ? (
|
||||||
|
<SelectSdkConcepts />
|
||||||
|
) : null}
|
||||||
|
{isLargeScreen && stage.name === 'generate-api-key' ? (
|
||||||
|
<GenrateApiKeyConcepts />
|
||||||
|
) : null}
|
||||||
</Box>
|
</Box>
|
||||||
</StyledDialog>
|
</StyledDialog>
|
||||||
);
|
);
|
||||||
|
@ -7,7 +7,6 @@ import {
|
|||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
styled,
|
styled,
|
||||||
type Theme,
|
|
||||||
Typography,
|
Typography,
|
||||||
useMediaQuery,
|
useMediaQuery,
|
||||||
useTheme,
|
useTheme,
|
||||||
@ -15,8 +14,6 @@ import {
|
|||||||
import { SingleSelectConfigButton } from '../common/DialogFormTemplate/ConfigButtons/SingleSelectConfigButton';
|
import { SingleSelectConfigButton } from '../common/DialogFormTemplate/ConfigButtons/SingleSelectConfigButton';
|
||||||
import EnvironmentsIcon from '@mui/icons-material/CloudCircle';
|
import EnvironmentsIcon from '@mui/icons-material/CloudCircle';
|
||||||
import { ArcherContainer, ArcherElement } from 'react-archer';
|
import { ArcherContainer, ArcherElement } from 'react-archer';
|
||||||
import { ProjectIcon } from '../common/ProjectIcon/ProjectIcon';
|
|
||||||
import CodeIcon from '@mui/icons-material/Code';
|
|
||||||
|
|
||||||
const ChooseEnvironment = ({
|
const ChooseEnvironment = ({
|
||||||
environments,
|
environments,
|
||||||
@ -100,43 +97,6 @@ const SpacedContainer = styled('div')(({ theme }) => ({
|
|||||||
gap: theme.spacing(3),
|
gap: theme.spacing(3),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const ConceptsDefinitionsWrapper = styled('div')(({ theme }) => ({
|
|
||||||
backgroundColor: theme.palette.background.sidebar,
|
|
||||||
padding: theme.spacing(6),
|
|
||||||
flex: 0,
|
|
||||||
minWidth: '400px',
|
|
||||||
}));
|
|
||||||
|
|
||||||
const ConceptDetails = styled('p')(({ theme }) => ({
|
|
||||||
color: theme.palette.primary.contrastText,
|
|
||||||
fontSize: theme.typography.caption.fontSize,
|
|
||||||
marginBottom: theme.spacing(2),
|
|
||||||
}));
|
|
||||||
|
|
||||||
const IconStyle = ({ theme }: { theme: Theme }) => ({
|
|
||||||
color: theme.palette.primary.contrastText,
|
|
||||||
fontSize: theme.typography.body2.fontSize,
|
|
||||||
marginTop: theme.spacing(0.5),
|
|
||||||
});
|
|
||||||
|
|
||||||
const StyledProjectIcon = styled(ProjectIcon)(IconStyle);
|
|
||||||
const StyledEnvironmentsIcon = styled(EnvironmentsIcon)(IconStyle);
|
|
||||||
const StyledCodeIcon = styled(CodeIcon)(IconStyle);
|
|
||||||
|
|
||||||
const ConceptItem = styled('div')(({ theme }) => ({
|
|
||||||
display: 'flex',
|
|
||||||
gap: theme.spacing(1.5),
|
|
||||||
alignItems: 'flex-start',
|
|
||||||
marginTop: theme.spacing(3),
|
|
||||||
}));
|
|
||||||
|
|
||||||
const ConceptSummary = styled('div')(({ theme }) => ({
|
|
||||||
color: theme.palette.primary.contrastText,
|
|
||||||
fontSize: theme.typography.body2.fontSize,
|
|
||||||
fontWeight: theme.typography.fontWeightBold,
|
|
||||||
marginBottom: theme.spacing(2),
|
|
||||||
}));
|
|
||||||
|
|
||||||
const TokenExplanation = ({
|
const TokenExplanation = ({
|
||||||
project,
|
project,
|
||||||
environment,
|
environment,
|
||||||
@ -219,46 +179,6 @@ const TokenExplanation = ({
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const GenrateApiKeyConcepts = () => (
|
|
||||||
<ConceptsDefinitionsWrapper>
|
|
||||||
<ConceptItem>
|
|
||||||
<StyledProjectIcon />
|
|
||||||
<Box>
|
|
||||||
<ConceptSummary>Flags live in projects</ConceptSummary>
|
|
||||||
<ConceptDetails>
|
|
||||||
Projects are containers for feature flags. When you create a
|
|
||||||
feature flag it will belong to the project you create it in.
|
|
||||||
</ConceptDetails>
|
|
||||||
</Box>
|
|
||||||
</ConceptItem>
|
|
||||||
<ConceptItem>
|
|
||||||
<StyledEnvironmentsIcon />
|
|
||||||
<Box>
|
|
||||||
<ConceptSummary>
|
|
||||||
Flags have configuration in environments
|
|
||||||
</ConceptSummary>
|
|
||||||
<ConceptDetails>
|
|
||||||
In Unleash you can have multiple environments. Each feature
|
|
||||||
flag will have different configuration in every environment.
|
|
||||||
</ConceptDetails>
|
|
||||||
</Box>
|
|
||||||
</ConceptItem>
|
|
||||||
<ConceptItem>
|
|
||||||
<StyledCodeIcon />
|
|
||||||
<Box>
|
|
||||||
<ConceptSummary>
|
|
||||||
SDKs connect to Unleash to retrieve configuration
|
|
||||||
</ConceptSummary>
|
|
||||||
<ConceptDetails>
|
|
||||||
When you connect an SDK to Unleash it will use the API key
|
|
||||||
to deduce which feature flags to retrieve and from which
|
|
||||||
environment to retrieve configuration.
|
|
||||||
</ConceptDetails>
|
|
||||||
</Box>
|
|
||||||
</ConceptItem>
|
|
||||||
</ConceptsDefinitionsWrapper>
|
|
||||||
);
|
|
||||||
|
|
||||||
interface GenerateApiKeyProps {
|
interface GenerateApiKeyProps {
|
||||||
project: string;
|
project: string;
|
||||||
environments: string[];
|
environments: string[];
|
||||||
|
99
frontend/src/component/onboarding/UnleashConcepts.tsx
Normal file
99
frontend/src/component/onboarding/UnleashConcepts.tsx
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
import { Box, styled, type Theme } from '@mui/material';
|
||||||
|
import { ProjectIcon } from '../common/ProjectIcon/ProjectIcon';
|
||||||
|
import EnvironmentsIcon from '@mui/icons-material/CloudCircle';
|
||||||
|
import CodeIcon from '@mui/icons-material/Code';
|
||||||
|
|
||||||
|
const ConceptsDefinitionsWrapper = styled('div')(({ theme }) => ({
|
||||||
|
backgroundColor: theme.palette.background.sidebar,
|
||||||
|
padding: theme.spacing(12, 6, 6, 6),
|
||||||
|
flex: 0,
|
||||||
|
minWidth: '400px',
|
||||||
|
}));
|
||||||
|
|
||||||
|
const ConceptDetails = styled('p')(({ theme }) => ({
|
||||||
|
color: theme.palette.primary.contrastText,
|
||||||
|
fontSize: theme.typography.caption.fontSize,
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
}));
|
||||||
|
|
||||||
|
const IconStyle = ({ theme }: { theme: Theme }) => ({
|
||||||
|
color: theme.palette.primary.contrastText,
|
||||||
|
fontSize: theme.typography.body2.fontSize,
|
||||||
|
marginTop: theme.spacing(0.5),
|
||||||
|
});
|
||||||
|
|
||||||
|
const StyledProjectIcon = styled(ProjectIcon)(IconStyle);
|
||||||
|
const StyledEnvironmentsIcon = styled(EnvironmentsIcon)(IconStyle);
|
||||||
|
const StyledCodeIcon = styled(CodeIcon)(IconStyle);
|
||||||
|
|
||||||
|
const ConceptItem = styled('div')(({ theme }) => ({
|
||||||
|
display: 'flex',
|
||||||
|
gap: theme.spacing(1.5),
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
marginTop: theme.spacing(3),
|
||||||
|
}));
|
||||||
|
|
||||||
|
const ConceptSummary = styled('div')(({ theme }) => ({
|
||||||
|
color: theme.palette.primary.contrastText,
|
||||||
|
fontSize: theme.typography.body2.fontSize,
|
||||||
|
fontWeight: theme.typography.fontWeightBold,
|
||||||
|
marginBottom: theme.spacing(2),
|
||||||
|
}));
|
||||||
|
|
||||||
|
export const GenrateApiKeyConcepts = () => (
|
||||||
|
<ConceptsDefinitionsWrapper>
|
||||||
|
<ConceptItem>
|
||||||
|
<StyledProjectIcon />
|
||||||
|
<Box>
|
||||||
|
<ConceptSummary>Flags live in projects</ConceptSummary>
|
||||||
|
<ConceptDetails>
|
||||||
|
Projects are containers for feature flags. When you create a
|
||||||
|
feature flag it will belong to the project you create it in.
|
||||||
|
</ConceptDetails>
|
||||||
|
</Box>
|
||||||
|
</ConceptItem>
|
||||||
|
<ConceptItem>
|
||||||
|
<StyledEnvironmentsIcon />
|
||||||
|
<Box>
|
||||||
|
<ConceptSummary>
|
||||||
|
Flags have configuration in environments
|
||||||
|
</ConceptSummary>
|
||||||
|
<ConceptDetails>
|
||||||
|
In Unleash you can have multiple environments. Each feature
|
||||||
|
flag will have different configuration in every environment.
|
||||||
|
</ConceptDetails>
|
||||||
|
</Box>
|
||||||
|
</ConceptItem>
|
||||||
|
<ConceptItem>
|
||||||
|
<StyledCodeIcon />
|
||||||
|
<Box>
|
||||||
|
<ConceptSummary>
|
||||||
|
SDKs connect to Unleash to retrieve configuration
|
||||||
|
</ConceptSummary>
|
||||||
|
<ConceptDetails>
|
||||||
|
When you connect an SDK to Unleash it will use the API key
|
||||||
|
to deduce which feature flags to retrieve and from which
|
||||||
|
environment to retrieve configuration.
|
||||||
|
</ConceptDetails>
|
||||||
|
</Box>
|
||||||
|
</ConceptItem>
|
||||||
|
</ConceptsDefinitionsWrapper>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const SelectSdkConcepts = () => (
|
||||||
|
<ConceptsDefinitionsWrapper>
|
||||||
|
<ConceptItem>
|
||||||
|
<StyledCodeIcon />
|
||||||
|
<Box>
|
||||||
|
<ConceptSummary>SDKs and Unleash</ConceptSummary>
|
||||||
|
<ConceptDetails>
|
||||||
|
SDKs serve to bind your application to Unleash. The SDK will
|
||||||
|
connect to Unleash via HTTP and retrieve feature flag
|
||||||
|
configuration that is then cached in your application.
|
||||||
|
Making sure none of your application data ever leaves your
|
||||||
|
servers.
|
||||||
|
</ConceptDetails>
|
||||||
|
</Box>
|
||||||
|
</ConceptItem>
|
||||||
|
</ConceptsDefinitionsWrapper>
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user