1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-05-17 01:17:29 +02:00
unleash.unleash/frontend/src/component/admin/license/License.tsx
Ivar Conradi Østhus 38df2e1831
fix: add instanceName to license display (#6065)
## About the changes
- Shows the instanceName from the license
- add new feature flag `enableLicenseChecker` used to enforce a valid
license.
2024-01-30 11:05:27 +01:00

162 lines
6.3 KiB
TypeScript

import { PageContent } from 'component/common/PageContent/PageContent';
import { PageHeader } from 'component/common/PageHeader/PageHeader';
import { Box, Button, Grid, TextField, styled } from '@mui/material';
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import {
useLicense,
useLicenseCheck,
} from 'hooks/api/getters/useLicense/useLicense';
import { formatDateYMD } from 'utils/formatDate';
import { useLocationSettings } from 'hooks/useLocationSettings';
import { useState } from 'react';
import useToast from 'hooks/useToast';
import { formatUnknownError } from 'utils/formatUnknownError';
import useLicenseKeyApi from 'hooks/api/actions/useLicenseAPI/useLicenseApi';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
const StyledBox = styled(Box)(({ theme }) => ({
display: 'grid',
gap: theme.spacing(4),
}));
const StyledDataCollectionPropertyRow = styled('div')(() => ({
display: 'table-row',
}));
const StyledPropertyName = styled('p')(({ theme }) => ({
display: 'table-cell',
fontWeight: theme.fontWeight.bold,
paddingTop: theme.spacing(2),
}));
const StyledPropertyDetails = styled('p')(({ theme }) => ({
display: 'table-cell',
paddingTop: theme.spacing(2),
paddingLeft: theme.spacing(4),
}));
export const License = () => {
const { setToastData, setToastApiError } = useToast();
const { license, error, refetchLicense } = useLicense();
const { reCheckLicense } = useLicenseCheck();
const { loading } = useUiConfig();
const { locationSettings } = useLocationSettings();
const [token, setToken] = useState('');
const { updateLicenseKey } = useLicenseKeyApi();
const updateToken = (event: React.ChangeEvent<HTMLInputElement>) => {
setToken(event.target.value.trim());
};
if (loading || !license) {
return null;
}
const onSubmit = async (event: React.SyntheticEvent) => {
event.preventDefault();
try {
await updateLicenseKey(token);
setToastData({
title: 'License key updated',
type: 'success',
});
refetchLicense();
reCheckLicense();
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
}
};
return (
<PageContent header={<PageHeader title='Unleash Enterprise License' />}>
<StyledBox>
<ConditionallyRender
condition={!!license.token}
show={
<div>
<StyledDataCollectionPropertyRow>
<StyledPropertyName>
Customer
</StyledPropertyName>
<StyledPropertyDetails>
{license.customer}
</StyledPropertyDetails>
</StyledDataCollectionPropertyRow>
<StyledDataCollectionPropertyRow>
<StyledPropertyName>
Instance Name
</StyledPropertyName>
<StyledPropertyDetails>
{license.instanceName}
</StyledPropertyDetails>
</StyledDataCollectionPropertyRow>
<StyledDataCollectionPropertyRow>
<StyledPropertyName>Plan</StyledPropertyName>
<StyledPropertyDetails>
{license.plan}
</StyledPropertyDetails>
</StyledDataCollectionPropertyRow>
<StyledDataCollectionPropertyRow>
<StyledPropertyName>Seats</StyledPropertyName>
<StyledPropertyDetails>
{license.seats}
</StyledPropertyDetails>
</StyledDataCollectionPropertyRow>
<StyledDataCollectionPropertyRow>
<StyledPropertyName>
Expire at
</StyledPropertyName>
<StyledPropertyDetails>
{formatDateYMD(
license.expireAt,
locationSettings.locale,
)}
</StyledPropertyDetails>
</StyledDataCollectionPropertyRow>
</div>
}
elseShow={
<p>
You do not have a registered Unleash Enterprise
License.
</p>
}
/>
<form onSubmit={onSubmit}>
<TextField
onChange={updateToken}
label='New license key'
name='licenseKey'
value={token}
style={{ width: '100%' }}
variant='outlined'
size='small'
multiline
rows={6}
required
/>
<Grid container spacing={3} marginTop={2}>
<Grid item md={5}>
<Button
variant='contained'
color='primary'
type='submit'
disabled={loading}
>
Update license key
</Button>{' '}
<p>
<small style={{ color: 'red' }}>
{error?.message}
</small>
</p>
</Grid>
</Grid>
</form>
</StyledBox>
</PageContent>
);
};