mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat: licensed seats sidebar (#8834)
Currently mock data, next step is to create chart and connect to backend. 
This commit is contained in:
		
							parent
							
								
									5d553d0c7b
								
							
						
					
					
						commit
						172e34d3e9
					
				| @ -1,5 +1,7 @@ | ||||
| import { Box, Button, styled, Typography } from '@mui/material'; | ||||
| import { HelpIcon } from 'component/common/HelpIcon/HelpIcon'; | ||||
| import { useState } from 'react'; | ||||
| import { LicensedUsersSidebar } from './LicensedUsersSidebar'; | ||||
| 
 | ||||
| const StyledContainer = styled(Box)(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
| @ -33,6 +35,7 @@ const InvisibleParagraph = styled('p')({ | ||||
| }); | ||||
| 
 | ||||
| export const LicensedUsersBox = () => { | ||||
|     const [licensedUsersChartOpen, setLicensedUsersChartOpen] = useState(false); | ||||
|     return ( | ||||
|         <StyledContainer> | ||||
|             <StyledColumn> | ||||
| @ -60,9 +63,18 @@ export const LicensedUsersBox = () => { | ||||
|                         </Box> | ||||
|                     } | ||||
|                 /> | ||||
|                 <StyledButton onClick={() => {}}> | ||||
| 
 | ||||
|                 <StyledButton | ||||
|                     onClick={() => { | ||||
|                         setLicensedUsersChartOpen(true); | ||||
|                     }} | ||||
|                 > | ||||
|                     View graph over time | ||||
|                 </StyledButton> | ||||
|                 <LicensedUsersSidebar | ||||
|                     open={licensedUsersChartOpen} | ||||
|                     close={() => setLicensedUsersChartOpen(false)} | ||||
|                 /> | ||||
|             </RightColumn> | ||||
|         </StyledContainer> | ||||
|     ); | ||||
|  | ||||
| @ -0,0 +1,122 @@ | ||||
| import { Alert, Button, styled, Typography } from '@mui/material'; | ||||
| import { DynamicSidebarModal } from 'component/common/SidebarModal/SidebarModal'; | ||||
| import type React from 'react'; | ||||
| const ModalContentContainer = styled('section')(({ theme }) => ({ | ||||
|     minHeight: '100vh', | ||||
|     maxWidth: 700, | ||||
|     width: '95vw', | ||||
|     backgroundColor: theme.palette.background.default, | ||||
|     display: 'flex', | ||||
|     flexFlow: 'column', | ||||
|     gap: theme.spacing(4), | ||||
|     paddingInline: theme.spacing(4), | ||||
|     paddingBlock: theme.spacing(3.75), | ||||
| })); | ||||
| 
 | ||||
| const WidgetContainer = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     flexDirection: 'column', | ||||
|     gap: theme.spacing(9), | ||||
| })); | ||||
| 
 | ||||
| const HeaderRow = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     alignItems: 'center', | ||||
|     gap: theme.spacing(1.5), | ||||
| })); | ||||
| 
 | ||||
| const ModalHeader = styled('h3')(({ theme }) => ({ | ||||
|     fontSize: theme.typography.h2.fontSize, | ||||
|     margin: 0, | ||||
|     fontWeight: theme.typography.h4.fontWeight, | ||||
| })); | ||||
| 
 | ||||
| const RowHeader = styled('h4')(({ theme }) => ({ | ||||
|     margin: 0, | ||||
|     fontWeight: theme.typography.h4.fontWeight, | ||||
|     fontSize: theme.spacing(1.75), | ||||
| })); | ||||
| 
 | ||||
| const Row = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     flexDirection: 'column', | ||||
|     gap: theme.spacing(2), | ||||
| })); | ||||
| 
 | ||||
| const CloseRow = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     justifyContent: 'flex-end', | ||||
|     marginBlockStart: 'auto', | ||||
|     gap: theme.spacing(4), | ||||
| })); | ||||
| 
 | ||||
| const InfoRow = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     gap: theme.spacing(2), | ||||
|     width: '100%', | ||||
| })); | ||||
| 
 | ||||
| const LicenceBox = styled('div')(({ theme }) => ({ | ||||
|     display: 'flex', | ||||
|     flexDirection: 'column', | ||||
|     width: '100%', | ||||
|     background: theme.palette.background.elevation1, | ||||
|     padding: theme.spacing(3, 2, 3, 2), | ||||
|     borderRadius: theme.shape.borderRadiusLarge, | ||||
| })); | ||||
| 
 | ||||
| type LicensedUsersSidebarProps = { | ||||
|     open: boolean; | ||||
|     close: () => void; | ||||
| }; | ||||
| 
 | ||||
| export const LicensedUsersSidebar = ({ | ||||
|     open, | ||||
|     close, | ||||
| }: LicensedUsersSidebarProps) => { | ||||
|     return ( | ||||
|         <DynamicSidebarModal | ||||
|             open={open} | ||||
|             onClose={close} | ||||
|             label='Project status' | ||||
|             onClick={(e: React.SyntheticEvent) => { | ||||
|                 if (e.target instanceof HTMLAnchorElement) { | ||||
|                     close(); | ||||
|                 } | ||||
|             }} | ||||
|         > | ||||
|             <ModalContentContainer> | ||||
|                 <HeaderRow> | ||||
|                     <ModalHeader>Licensed seats</ModalHeader> | ||||
|                 </HeaderRow> | ||||
|                 <WidgetContainer> | ||||
|                     <Row> | ||||
|                         <RowHeader>Last 30 days</RowHeader> | ||||
|                         <InfoRow> | ||||
|                             <LicenceBox> | ||||
|                                 <Typography fontWeight='bold'>11/25</Typography> | ||||
|                                 <Typography variant='body2'> | ||||
|                                     Used seats last 30 days | ||||
|                                 </Typography> | ||||
|                             </LicenceBox> | ||||
|                             <Alert severity='info'> | ||||
|                                 A licensed seat is a unique user that had access | ||||
|                                 to your Unleash instance within the last 30 | ||||
|                                 days, and thereby occupied a seat. | ||||
|                             </Alert> | ||||
|                         </InfoRow> | ||||
|                     </Row> | ||||
|                     <Row> | ||||
|                         <RowHeader>Last year</RowHeader> | ||||
|                         <div>this will be great grid</div> | ||||
|                     </Row> | ||||
|                 </WidgetContainer> | ||||
|                 <CloseRow> | ||||
|                     <Button variant='outlined' onClick={close}> | ||||
|                         Close | ||||
|                     </Button> | ||||
|                 </CloseRow> | ||||
|             </ModalContentContainer> | ||||
|         </DynamicSidebarModal> | ||||
|     ); | ||||
| }; | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user