Updated Liencese Page (#1170)
This commit is contained in:
25
portal-ui/public/agpl-logo.svg
Normal file
25
portal-ui/public/agpl-logo.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 14 KiB |
@@ -37,6 +37,7 @@ interface IFormSwitch {
|
|||||||
index?: number;
|
index?: number;
|
||||||
checked: boolean;
|
checked: boolean;
|
||||||
switchOnly?: boolean;
|
switchOnly?: boolean;
|
||||||
|
indicatorLabels?: string[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
@@ -179,6 +180,7 @@ const FormSwitchWrapper = ({
|
|||||||
tooltip = "",
|
tooltip = "",
|
||||||
description = "",
|
description = "",
|
||||||
classes,
|
classes,
|
||||||
|
indicatorLabels,
|
||||||
}: IFormSwitch) => {
|
}: IFormSwitch) => {
|
||||||
const switchComponent = (
|
const switchComponent = (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
@@ -188,7 +190,9 @@ const FormSwitchWrapper = ({
|
|||||||
[classes.indicatorLabelOn]: !checked,
|
[classes.indicatorLabelOn]: !checked,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
OFF
|
{indicatorLabels && indicatorLabels.length > 1
|
||||||
|
? indicatorLabels[1]
|
||||||
|
: "OFF"}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
<StyledSwitch
|
<StyledSwitch
|
||||||
@@ -209,7 +213,7 @@ const FormSwitchWrapper = ({
|
|||||||
[classes.indicatorLabelOn]: checked,
|
[classes.indicatorLabelOn]: checked,
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
ON
|
{indicatorLabels ? indicatorLabels[0] : "ON"}
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ import PageHeader from "../Common/PageHeader/PageHeader";
|
|||||||
import ActivationModal from "./ActivationModal";
|
import ActivationModal from "./ActivationModal";
|
||||||
import LicenseModal from "./LicenseModal";
|
import LicenseModal from "./LicenseModal";
|
||||||
import api from "../../../common/api";
|
import api from "../../../common/api";
|
||||||
|
import { TenantsIcon } from "../../../icons";
|
||||||
|
|
||||||
const mapState = (state: AppState) => ({
|
const mapState = (state: AppState) => ({
|
||||||
operatorMode: state.system.operatorMode,
|
operatorMode: state.system.operatorMode,
|
||||||
@@ -47,9 +48,38 @@ const connector = connect(mapState, null);
|
|||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
createStyles({
|
createStyles({
|
||||||
pageTitle: {
|
pageTitle: {
|
||||||
fontSize: 18,
|
backgroundColor: "rgb(250,250,252)",
|
||||||
|
marginTop: 40,
|
||||||
|
border: "1px solid #EAEDEE",
|
||||||
|
padding: 25,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: "bold",
|
||||||
|
"& ul": {
|
||||||
|
listStyleType: "square",
|
||||||
|
// listStyleType: "none",
|
||||||
|
"& li": {
|
||||||
|
float: "left",
|
||||||
|
fontSize: 14,
|
||||||
|
marginRight: 40,
|
||||||
|
},
|
||||||
|
"& li::before": {
|
||||||
|
color: "red",
|
||||||
|
content: "•",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
licDet: {
|
||||||
|
fontSize: 11,
|
||||||
|
color: "#5E5E5E",
|
||||||
|
},
|
||||||
|
linkMore: {
|
||||||
|
marginTop: 10,
|
||||||
marginBottom: 20,
|
marginBottom: 20,
|
||||||
},
|
},
|
||||||
|
chooseFlavorText: {
|
||||||
|
color: "#000000",
|
||||||
|
fontSize: 14,
|
||||||
|
},
|
||||||
paper: {
|
paper: {
|
||||||
padding: "20px 52px 20px 28px",
|
padding: "20px 52px 20px 28px",
|
||||||
backgroundColor: "#FFFFFF",
|
backgroundColor: "#FFFFFF",
|
||||||
@@ -59,10 +89,9 @@ const styles = (theme: Theme) =>
|
|||||||
flexWrap: "wrap",
|
flexWrap: "wrap",
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
padding: "30px 30px 0px 30px",
|
padding: "30px 30px 0px 30px",
|
||||||
background: "#032F51",
|
border: "1px solid #EAEDEE",
|
||||||
boxShadow: "0px 3px 7px #00000014",
|
|
||||||
"& h2": {
|
"& h2": {
|
||||||
color: "#FFF",
|
// color: "#FFF",
|
||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
},
|
},
|
||||||
"& a": {
|
"& a": {
|
||||||
@@ -70,14 +99,18 @@ const styles = (theme: Theme) =>
|
|||||||
flexDirection: "row",
|
flexDirection: "row",
|
||||||
},
|
},
|
||||||
"& h3": {
|
"& h3": {
|
||||||
color: "#FFFFFF",
|
// color: "#FFFFFF",
|
||||||
marginBottom: "30px",
|
marginBottom: "30px",
|
||||||
fontWeight: "bold",
|
fontWeight: "bold",
|
||||||
},
|
},
|
||||||
"& h6": {
|
"& h6": {
|
||||||
color: "#FFFFFF !important",
|
// color: "#FFFFFF !important",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
link: {
|
||||||
|
textDecoration: "underline !important",
|
||||||
|
color: theme.palette.info.main,
|
||||||
|
},
|
||||||
tableContainer: {
|
tableContainer: {
|
||||||
marginLeft: 28,
|
marginLeft: 28,
|
||||||
},
|
},
|
||||||
@@ -85,13 +118,10 @@ const styles = (theme: Theme) =>
|
|||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
paddingBottom: 12,
|
paddingBottom: 12,
|
||||||
borderRadius: "3px 3px 0 0",
|
borderRadius: "3px 3px 0 0",
|
||||||
marginLeft: 8,
|
|
||||||
maxWidth: "calc(25% - 8px)",
|
maxWidth: "calc(25% - 8px)",
|
||||||
},
|
},
|
||||||
detailsContainerBorder: {
|
detailsContainerBorder: {
|
||||||
border: "1px solid #e2e2e2",
|
borderLeft: "1px solid #e2e2e2",
|
||||||
borderBottom: 0,
|
|
||||||
borderRadius: "4px 4px 0px 0px",
|
|
||||||
},
|
},
|
||||||
detailsContainerBorderHighlighted: {
|
detailsContainerBorderHighlighted: {
|
||||||
border: "1px solid #B5B5B5",
|
border: "1px solid #B5B5B5",
|
||||||
@@ -103,6 +133,11 @@ const styles = (theme: Theme) =>
|
|||||||
marginBottom: 26,
|
marginBottom: 26,
|
||||||
paddingTop: 18,
|
paddingTop: 18,
|
||||||
},
|
},
|
||||||
|
currPlan: {
|
||||||
|
color: "white",
|
||||||
|
backgroundColor: "#4CCB92",
|
||||||
|
padding: 4,
|
||||||
|
},
|
||||||
activePlanHeader: {
|
activePlanHeader: {
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
background: "#D5DDE5",
|
background: "#D5DDE5",
|
||||||
@@ -133,33 +168,35 @@ const styles = (theme: Theme) =>
|
|||||||
detailsCapacityMin: {
|
detailsCapacityMin: {
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
},
|
},
|
||||||
|
|
||||||
itemContainer: {
|
itemContainer: {
|
||||||
height: 36,
|
height: 36,
|
||||||
|
"& .item:last-child": {
|
||||||
|
borderRight: "1px solid #e5e5e5",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
itemContainerDetail: {
|
itemContainerDetail: {
|
||||||
height: 48,
|
height: 48,
|
||||||
},
|
},
|
||||||
item: {
|
item: {
|
||||||
height: "100%",
|
height: "100%",
|
||||||
borderLeft: "1px solid #e2e2e2",
|
borderLeft: "1px solid #e5e5e5",
|
||||||
borderRight: "1px solid #e2e2e2",
|
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
fontSize: 10,
|
fontSize: 10,
|
||||||
fontWeight: 700,
|
fontWeight: 700,
|
||||||
display: "flex",
|
display: "flex",
|
||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
alignContent: "center",
|
alignContent: "center",
|
||||||
marginLeft: 8,
|
|
||||||
maxWidth: "calc(25% - 8px)",
|
maxWidth: "calc(25% - 8px)",
|
||||||
borderTop: "1px solid #e5e5e5",
|
borderTop: "1px solid #e5e5e5",
|
||||||
},
|
},
|
||||||
|
|
||||||
itemFirst: {
|
itemFirst: {
|
||||||
borderLeft: 0,
|
borderLeft: 0,
|
||||||
borderRight: 0,
|
borderRight: 0,
|
||||||
},
|
},
|
||||||
itemHighlighted: {
|
itemHighlighted: {
|
||||||
borderLeft: "1px solid #B5B5B5",
|
borderLeft: "1px solid #e5e5e5",
|
||||||
borderRight: "1px solid #B5B5B5",
|
|
||||||
},
|
},
|
||||||
field: {
|
field: {
|
||||||
textAlign: "left",
|
textAlign: "left",
|
||||||
@@ -167,9 +204,8 @@ const styles = (theme: Theme) =>
|
|||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
},
|
},
|
||||||
checkIcon: {
|
checkIcon: {
|
||||||
height: 12,
|
fontSize: 15,
|
||||||
color:
|
color: "#385973",
|
||||||
"transparent linear-gradient(90deg, #073052 0%, #081c42 100%) 0% 0% no-repeat padding-box",
|
|
||||||
},
|
},
|
||||||
buttonContainer: {
|
buttonContainer: {
|
||||||
paddingTop: 8,
|
paddingTop: 8,
|
||||||
@@ -177,17 +213,13 @@ const styles = (theme: Theme) =>
|
|||||||
height: "100%",
|
height: "100%",
|
||||||
display: "flex",
|
display: "flex",
|
||||||
justifyContent: "center",
|
justifyContent: "center",
|
||||||
borderRadius: "0 0 3px 3px",
|
borderLeft: "1px solid #e2e2e2",
|
||||||
border: "1px solid #e2e2e2",
|
|
||||||
borderTop: 0,
|
|
||||||
marginLeft: 8,
|
|
||||||
maxWidth: "calc(25% - 8px)",
|
maxWidth: "calc(25% - 8px)",
|
||||||
},
|
},
|
||||||
buttonContainerBlank: {
|
buttonContainerBlank: {
|
||||||
border: 0,
|
border: 0,
|
||||||
},
|
},
|
||||||
buttonContainerHighlighted: {
|
buttonContainerHighlighted: {
|
||||||
border: "1px solid #B5B5B5",
|
|
||||||
borderTop: 0,
|
borderTop: 0,
|
||||||
},
|
},
|
||||||
button: {
|
button: {
|
||||||
@@ -259,9 +291,14 @@ const styles = (theme: Theme) =>
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
planItemsPadding: {
|
planItemsPadding: {
|
||||||
padding: "23px 0px",
|
border: "1px solid #EAEDEE",
|
||||||
|
borderTop: 0,
|
||||||
maxWidth: 1180,
|
maxWidth: 1180,
|
||||||
},
|
},
|
||||||
|
planItemsBorder: {
|
||||||
|
height: 7,
|
||||||
|
backgroundColor: "#07193E",
|
||||||
|
},
|
||||||
subnetSubTitle: {
|
subnetSubTitle: {
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
},
|
},
|
||||||
@@ -277,13 +314,23 @@ const styles = (theme: Theme) =>
|
|||||||
clickableBlock: {
|
clickableBlock: {
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
},
|
},
|
||||||
agplFlavorText: {
|
|
||||||
color: "white",
|
|
||||||
},
|
|
||||||
chooseFlavorText: {
|
|
||||||
color: "#777777",
|
|
||||||
},
|
|
||||||
...containerForHeader(theme.spacing(4)),
|
...containerForHeader(theme.spacing(4)),
|
||||||
|
mainContainer: {
|
||||||
|
border: "1px solid #EAEDEE",
|
||||||
|
padding: 40,
|
||||||
|
margin: 40,
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
color: theme.palette.primary.main,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: "bold",
|
||||||
|
marginBottom: 20,
|
||||||
|
"& .MuiSvgIcon-root": {
|
||||||
|
fontSize: 44,
|
||||||
|
marginRight: 15,
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
interface ILicenseProps {
|
interface ILicenseProps {
|
||||||
@@ -365,269 +412,297 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
<Fragment>
|
<Fragment>
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<PageHeader label="License" />
|
<PageHeader label="License" />
|
||||||
<Grid container className={classes.container}>
|
<div className={clsx(classes.container, classes.mainContainer)}>
|
||||||
<Grid item xs={12}>
|
<Grid container>
|
||||||
<Grid container>
|
<Grid xs={12} className={classes.icon}>
|
||||||
<Grid
|
<TenantsIcon />
|
||||||
item
|
GNU Affero General Public License
|
||||||
xs={12}
|
</Grid>
|
||||||
lg={12}
|
<Grid item xs={12}>
|
||||||
className={`${classes.licenseContainer}`}
|
<Grid container>
|
||||||
>
|
<Grid
|
||||||
{licenseInfo ? (
|
item
|
||||||
<Fragment>
|
xs={12}
|
||||||
<Grid container className={classes.licenseInfo}>
|
lg={12}
|
||||||
<Grid item xs={6}>
|
className={`${classes.licenseContainer}`}
|
||||||
<Typography
|
>
|
||||||
variant="button"
|
{licenseInfo ? (
|
||||||
display="block"
|
<Fragment>
|
||||||
gutterBottom
|
<Grid container className={classes.licenseInfo}>
|
||||||
className={classes.licenseInfoTitle}
|
<Grid item xs={6}>
|
||||||
>
|
<Typography
|
||||||
License
|
variant="button"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="overline"
|
className={classes.licenseInfoTitle}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
License
|
||||||
className={classes.licenseInfoValue}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
Commercial License
|
variant="overline"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="button"
|
className={classes.licenseInfoValue}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
Commercial License
|
||||||
className={classes.licenseInfoTitle}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
Organization
|
variant="button"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="overline"
|
className={classes.licenseInfoTitle}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
Organization
|
||||||
className={classes.licenseInfoValue}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
{licenseInfo.organization}
|
variant="overline"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="button"
|
className={classes.licenseInfoValue}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
{licenseInfo.organization}
|
||||||
className={classes.licenseInfoTitle}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
Registered Capacity
|
variant="button"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="overline"
|
className={classes.licenseInfoTitle}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
Registered Capacity
|
||||||
className={classes.licenseInfoValue}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
{niceBytes(
|
variant="overline"
|
||||||
(licenseInfo.storage_capacity * 1099511627776) // 1 Terabyte = 1099511627776 Bytes
|
display="block"
|
||||||
.toString(10)
|
gutterBottom
|
||||||
)}
|
className={classes.licenseInfoValue}
|
||||||
</Typography>
|
>
|
||||||
<Typography
|
{niceBytes(
|
||||||
variant="button"
|
(licenseInfo.storage_capacity * 1099511627776) // 1 Terabyte = 1099511627776 Bytes
|
||||||
display="block"
|
.toString(10)
|
||||||
gutterBottom
|
)}
|
||||||
className={classes.licenseInfoTitle}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
Expiry Date
|
variant="button"
|
||||||
</Typography>
|
display="block"
|
||||||
<Typography
|
gutterBottom
|
||||||
variant="overline"
|
className={classes.licenseInfoTitle}
|
||||||
display="block"
|
>
|
||||||
gutterBottom
|
Expiry Date
|
||||||
className={classes.licenseInfoValue}
|
</Typography>
|
||||||
>
|
<Typography
|
||||||
<Moment format="YYYY-MM-DD">
|
variant="overline"
|
||||||
{licenseInfo.expires_at}
|
display="block"
|
||||||
</Moment>
|
gutterBottom
|
||||||
</Typography>
|
className={classes.licenseInfoValue}
|
||||||
|
>
|
||||||
|
<Moment format="YYYY-MM-DD">
|
||||||
|
{licenseInfo.expires_at}
|
||||||
|
</Moment>
|
||||||
|
</Typography>
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={6}>
|
||||||
|
<Typography
|
||||||
|
variant="button"
|
||||||
|
display="block"
|
||||||
|
gutterBottom
|
||||||
|
className={classes.licenseInfoTitle}
|
||||||
|
>
|
||||||
|
Subscription Plan
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
variant="overline"
|
||||||
|
display="block"
|
||||||
|
gutterBottom
|
||||||
|
className={classes.licenseInfoValue}
|
||||||
|
>
|
||||||
|
{licenseInfo.plan}
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
variant="button"
|
||||||
|
display="block"
|
||||||
|
gutterBottom
|
||||||
|
className={classes.licenseInfoTitle}
|
||||||
|
>
|
||||||
|
Requester
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
variant="overline"
|
||||||
|
display="block"
|
||||||
|
gutterBottom
|
||||||
|
className={classes.licenseInfoValue}
|
||||||
|
>
|
||||||
|
{licenseInfo.email}
|
||||||
|
</Typography>
|
||||||
|
</Grid>
|
||||||
|
<img
|
||||||
|
className={classes.verifiedIcon}
|
||||||
|
src={"/verified.svg"}
|
||||||
|
alt="verified"
|
||||||
|
/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={6}>
|
</Fragment>
|
||||||
<Typography
|
) : (
|
||||||
variant="button"
|
<Fragment>
|
||||||
display="block"
|
<LicenseModal
|
||||||
gutterBottom
|
open={licenseModal}
|
||||||
className={classes.licenseInfoTitle}
|
closeModal={() => setLicenseModal(false)}
|
||||||
>
|
|
||||||
Subscription Plan
|
|
||||||
</Typography>
|
|
||||||
<Typography
|
|
||||||
variant="overline"
|
|
||||||
display="block"
|
|
||||||
gutterBottom
|
|
||||||
className={classes.licenseInfoValue}
|
|
||||||
>
|
|
||||||
{licenseInfo.plan}
|
|
||||||
</Typography>
|
|
||||||
<Typography
|
|
||||||
variant="button"
|
|
||||||
display="block"
|
|
||||||
gutterBottom
|
|
||||||
className={classes.licenseInfoTitle}
|
|
||||||
>
|
|
||||||
Requester
|
|
||||||
</Typography>
|
|
||||||
<Typography
|
|
||||||
variant="overline"
|
|
||||||
display="block"
|
|
||||||
gutterBottom
|
|
||||||
className={classes.licenseInfoValue}
|
|
||||||
>
|
|
||||||
{licenseInfo.email}
|
|
||||||
</Typography>
|
|
||||||
</Grid>
|
|
||||||
<img
|
|
||||||
className={classes.verifiedIcon}
|
|
||||||
src={"/verified.svg"}
|
|
||||||
alt="verified"
|
|
||||||
/>
|
/>
|
||||||
</Grid>
|
<Grid container justifyContent={"space-between"}>
|
||||||
</Fragment>
|
<Grid item>
|
||||||
) : (
|
<img src="/agpl-logo.svg" height={40} alt="agpl" />{" "}
|
||||||
<Fragment>
|
</Grid>
|
||||||
<LicenseModal
|
<Grid item className={classes.licDet}>
|
||||||
open={licenseModal}
|
<b>Version 3.</b> 19 November 2007{" "}
|
||||||
closeModal={() => setLicenseModal(false)}
|
</Grid>
|
||||||
/>
|
</Grid>
|
||||||
<Grid container>
|
|
||||||
<img src="/agpl.svg" height={40} alt="agpl" />
|
<Grid container>
|
||||||
</Grid>
|
<Typography>
|
||||||
<Grid container>
|
|
||||||
<Typography component="h2" variant="h6">
|
|
||||||
GNU Affero General Public License
|
|
||||||
</Typography>
|
|
||||||
</Grid>
|
|
||||||
<Grid container className={classes.licenseDescription}>
|
|
||||||
<div
|
|
||||||
onClick={() => setLicenseModal(true)}
|
|
||||||
className={classes.clickableBlock}
|
|
||||||
>
|
|
||||||
<Typography component="h3">Version 3</Typography>
|
|
||||||
<Typography className={classes.agplFlavorText}>
|
|
||||||
The GNU Affero General Public License is a free,
|
The GNU Affero General Public License is a free,
|
||||||
copyleft license for software and other kinds of
|
copyleft license for software and other kinds of
|
||||||
works, specifically designed to ensure cooperation
|
works, specifically designed to ensure cooperation
|
||||||
with the Community in the case of network server
|
with the Community in the case of network server
|
||||||
software.
|
software.
|
||||||
</Typography>
|
</Typography>
|
||||||
</div>
|
|
||||||
</Grid>
|
|
||||||
</Fragment>
|
|
||||||
)}
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12} lg={12} className={`${classes.paper}`}>
|
|
||||||
{licenseInfo ? (
|
|
||||||
<Fragment>
|
|
||||||
<Typography
|
|
||||||
component="h2"
|
|
||||||
variant="h6"
|
|
||||||
className={classes.pageTitle}
|
|
||||||
>
|
|
||||||
Login to MinIO SUBNET !
|
|
||||||
</Typography>
|
|
||||||
<Typography
|
|
||||||
component="h6"
|
|
||||||
className={classes.subnetSubTitle}
|
|
||||||
>
|
|
||||||
It combines a commercial license with a support experience
|
|
||||||
unlike any other.
|
|
||||||
</Typography>
|
|
||||||
<br />
|
|
||||||
<Button
|
|
||||||
variant="contained"
|
|
||||||
color="primary"
|
|
||||||
className={classes.button}
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
href={`https://subnet.min.io/support/?ref=${
|
|
||||||
operatorMode ? "op" : "con"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
Login to SUBNET
|
|
||||||
</Button>
|
|
||||||
{operatorMode && (
|
|
||||||
<Fragment>
|
|
||||||
{" "}
|
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<Typography>
|
||||||
<button
|
The licenses for most software and other practical
|
||||||
className={classes.subnetRefreshLicenseLink}
|
works are designed to take away your freedom to share
|
||||||
onClick={(e) => {
|
and change the works. By contrast, our General Public
|
||||||
e.preventDefault();
|
Licenses are intended to guarantee your freedom to
|
||||||
refreshLicense();
|
share and change all versions of a program--to make
|
||||||
}}
|
sure it remains free software for all its users.
|
||||||
>
|
</Typography>
|
||||||
Refresh Licence
|
<div className={classes.linkMore}>
|
||||||
</button>
|
<a
|
||||||
{loadingRefreshLicense && (
|
className={clsx(classes.link)}
|
||||||
<CircularProgress
|
onClick={() => setLicenseModal(true)}
|
||||||
size={16}
|
>
|
||||||
className={classes.loadingLoginStrategy}
|
Read more
|
||||||
/>
|
</a>
|
||||||
)}
|
</div>
|
||||||
</Fragment>
|
</Grid>
|
||||||
)}
|
</Fragment>
|
||||||
</Fragment>
|
)}
|
||||||
) : (
|
</Grid>
|
||||||
<Fragment>
|
<Grid item xs={12} lg={12}>
|
||||||
<Typography
|
{licenseInfo ? (
|
||||||
component="h2"
|
<Fragment>
|
||||||
variant="h6"
|
<Typography
|
||||||
className={classes.pageTitle}
|
component="h2"
|
||||||
>
|
variant="h6"
|
||||||
Choosing between GNU AGPL v3 and Commercial License
|
className={classes.pageTitle}
|
||||||
</Typography>
|
>
|
||||||
<Typography className={classes.chooseFlavorText}>
|
Login to MinIO SUBNET !
|
||||||
If you are building proprietary applications, you may want
|
</Typography>
|
||||||
to choose the commercial license included as part of the
|
<Typography
|
||||||
Standard and Enterprise subscription plans. Applications
|
component="h6"
|
||||||
must otherwise comply with all the GNU AGPLv3 License &
|
className={classes.subnetSubTitle}
|
||||||
Trademark obligations. Follow the links below to learn
|
>
|
||||||
more about the compliance policy.
|
It combines a commercial license with a support
|
||||||
</Typography>
|
experience unlike any other.
|
||||||
<br />
|
</Typography>
|
||||||
<ul>
|
<br />
|
||||||
<li>
|
<Button
|
||||||
<a
|
variant="contained"
|
||||||
href={`https://min.io/compliance?ref=${
|
color="primary"
|
||||||
operatorMode ? "op" : "con"
|
className={classes.button}
|
||||||
}`}
|
target="_blank"
|
||||||
className={classes.openSourcePolicy}
|
rel="noopener noreferrer"
|
||||||
target="_blank"
|
href={`https://subnet.min.io/support/?ref=${
|
||||||
rel="nofollow noopener noreferrer"
|
operatorMode ? "op" : "con"
|
||||||
>
|
}`}
|
||||||
Learn more about GNU AGPL v3
|
>
|
||||||
</a>
|
Login to SUBNET
|
||||||
</li>
|
</Button>
|
||||||
<li>
|
{operatorMode && (
|
||||||
<a
|
<Fragment>
|
||||||
href={`https://min.io/logo?ref=${
|
{" "}
|
||||||
operatorMode ? "op" : "con"
|
<br />
|
||||||
}`}
|
<br />
|
||||||
className={classes.openSourcePolicy}
|
<button
|
||||||
target="_blank"
|
className={classes.subnetRefreshLicenseLink}
|
||||||
rel="nofollow noopener noreferrer"
|
onClick={(e) => {
|
||||||
>
|
e.preventDefault();
|
||||||
MinIO Trademark Compliance
|
refreshLicense();
|
||||||
</a>
|
}}
|
||||||
</li>
|
>
|
||||||
</ul>
|
Refresh Licence
|
||||||
</Fragment>
|
</button>
|
||||||
)}
|
{loadingRefreshLicense && (
|
||||||
|
<CircularProgress
|
||||||
|
size={16}
|
||||||
|
className={classes.loadingLoginStrategy}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</Fragment>
|
||||||
|
)}
|
||||||
|
</Fragment>
|
||||||
|
) : (
|
||||||
|
<div className={classes.pageTitle}>
|
||||||
|
<Typography component="h2" variant="h6">
|
||||||
|
Choosing between GNU AGPL v3 and Commercial License
|
||||||
|
</Typography>
|
||||||
|
<br />
|
||||||
|
<Typography className={classes.chooseFlavorText}>
|
||||||
|
If you are building proprietary applications, you may
|
||||||
|
want to choose the commercial license included as part
|
||||||
|
of the Standard and Enterprise subscription plans.
|
||||||
|
Applications must otherwise comply with all the GNU
|
||||||
|
AGPLv3 License & Trademark obligations. Follow the links
|
||||||
|
below to learn more about the compliance policy.
|
||||||
|
</Typography>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href={`https://min.io/compliance?ref=${
|
||||||
|
operatorMode ? "op" : "con"
|
||||||
|
}`}
|
||||||
|
className={classes.openSourcePolicy}
|
||||||
|
target="_blank"
|
||||||
|
rel="nofollow noopener noreferrer"
|
||||||
|
>
|
||||||
|
Learn more about GNU AGPL v3
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href={`https://min.io/logo?ref=${
|
||||||
|
operatorMode ? "op" : "con"
|
||||||
|
}`}
|
||||||
|
className={classes.openSourcePolicy}
|
||||||
|
target="_blank"
|
||||||
|
rel="nofollow noopener noreferrer"
|
||||||
|
>
|
||||||
|
MinIO Trademark Compliance
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div style={{ clear: "both" }} />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
<Grid item xs={12}>
|
||||||
<Grid item xs={12} className={clsx(classes.planItemsPadding)}>
|
<br />
|
||||||
<Paper
|
</Grid>
|
||||||
className={classes.paper}
|
<Grid item xs={12}>
|
||||||
style={{ borderRadius: "0px 0px 3px 3px" }}
|
<b>Pricing</b>
|
||||||
>
|
</Grid>
|
||||||
|
<Grid item xs={12}>
|
||||||
|
The MinIO Subscription Network provides exclusive benefits across
|
||||||
|
licensing, operations and support. See the pricing table below for
|
||||||
|
more information.
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<br />
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={12}>
|
||||||
|
<div className={classes.planItemsBorder} />
|
||||||
|
</Grid>
|
||||||
|
<Grid item xs={12} className={clsx(classes.planItemsPadding)}>
|
||||||
<Grid container>
|
<Grid container>
|
||||||
{operatorMode ? (
|
{operatorMode ? (
|
||||||
<ActivationModal
|
<ActivationModal
|
||||||
@@ -652,30 +727,25 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
xs={3}
|
xs={3}
|
||||||
className={clsx(
|
className={clsx(
|
||||||
classes.detailsContainer,
|
classes.detailsContainer,
|
||||||
classes.detailsContainerBorder,
|
classes.detailsContainerBorder
|
||||||
{
|
|
||||||
[classes.detailsContainerBorderHighlighted]:
|
|
||||||
details.title !== "Community",
|
|
||||||
},
|
|
||||||
currentPlan ? classes.currentPlanBG : ""
|
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<Grid
|
<Grid
|
||||||
item
|
item
|
||||||
xs={12}
|
xs={12}
|
||||||
className={
|
className={classes.planHeader}
|
||||||
currentPlan
|
></Grid>
|
||||||
? classes.activePlanHeader
|
|
||||||
: classes.planHeader
|
|
||||||
}
|
|
||||||
>
|
|
||||||
{currentPlan ? "Current Plan" : "\u00A0"}
|
|
||||||
</Grid>
|
|
||||||
<Grid item xs={12} className={classes.detailsTitle}>
|
<Grid item xs={12} className={classes.detailsTitle}>
|
||||||
{details.title}
|
{details.title}
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} className={classes.detailsPrice}>
|
<Grid item xs={12} className={classes.detailsPrice}>
|
||||||
{details.price}
|
{currentPlan ? (
|
||||||
|
<span className={classes.currPlan}>
|
||||||
|
CURRENT PLAN
|
||||||
|
</span>
|
||||||
|
) : (
|
||||||
|
details.price
|
||||||
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid
|
||||||
item
|
item
|
||||||
@@ -715,10 +785,7 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
container
|
container
|
||||||
item
|
item
|
||||||
xs={3}
|
xs={3}
|
||||||
className={clsx(
|
className={clsx(classes.item)}
|
||||||
classes.item,
|
|
||||||
currentPlanID === 0 ? classes.currentPlanBG : ""
|
|
||||||
)}
|
|
||||||
>
|
>
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
{item.community === "N/A" ? (
|
{item.community === "N/A" ? (
|
||||||
@@ -726,7 +793,19 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
) : item.community === "Yes" ? (
|
) : item.community === "Yes" ? (
|
||||||
<CheckCircleIcon className={classes.checkIcon} />
|
<CheckCircleIcon className={classes.checkIcon} />
|
||||||
) : (
|
) : (
|
||||||
item.community
|
<Fragment>
|
||||||
|
{item.communityLink !== undefined &&
|
||||||
|
item.communityLink ? (
|
||||||
|
<a
|
||||||
|
className={classes.link}
|
||||||
|
onClick={() => setLicenseModal(true)}
|
||||||
|
>
|
||||||
|
{item.community}
|
||||||
|
</a>
|
||||||
|
) : (
|
||||||
|
item.community
|
||||||
|
)}
|
||||||
|
</Fragment>
|
||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
{item.communityDetail !== undefined && (
|
{item.communityDetail !== undefined && (
|
||||||
@@ -754,6 +833,11 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
item.standard
|
item.standard
|
||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
|
{item.standardDetail !== undefined && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
{item.standardDetail}
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid
|
<Grid
|
||||||
container
|
container
|
||||||
@@ -774,6 +858,11 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
item.enterprise
|
item.enterprise
|
||||||
)}
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
|
{item.enterpriseDetail !== undefined && (
|
||||||
|
<Grid item xs={12}>
|
||||||
|
{item.enterpriseDetail}
|
||||||
|
</Grid>
|
||||||
|
)}
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
);
|
);
|
||||||
@@ -795,27 +884,20 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
item
|
item
|
||||||
xs={3}
|
xs={3}
|
||||||
style={{ textAlign: "center" }}
|
style={{ textAlign: "center" }}
|
||||||
className={clsx(
|
className={clsx(classes.buttonContainer, {
|
||||||
classes.buttonContainer,
|
[classes.buttonContainerHighlighted]:
|
||||||
currentPlanID === index
|
button.text === "Subscribe",
|
||||||
? classes.currentPlanBG
|
})}
|
||||||
: "",
|
|
||||||
{
|
|
||||||
[classes.buttonContainerHighlighted]:
|
|
||||||
button.text === "Subscribe",
|
|
||||||
}
|
|
||||||
)}
|
|
||||||
>
|
>
|
||||||
<Grid item xs={12}>
|
<Grid item xs={12}>
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant={
|
||||||
|
button.text === "Join Slack"
|
||||||
|
? "outlined"
|
||||||
|
: "contained"
|
||||||
|
}
|
||||||
color="primary"
|
color="primary"
|
||||||
className={clsx(
|
className={clsx(classes.button)}
|
||||||
classes.button,
|
|
||||||
currentPlanID === index
|
|
||||||
? classes.currentPlanButton
|
|
||||||
: ""
|
|
||||||
)}
|
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
href="#"
|
href="#"
|
||||||
@@ -864,9 +946,9 @@ const License = ({ classes, operatorMode }: ILicenseProps) => {
|
|||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Paper>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</div>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
</Fragment>
|
</Fragment>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,21 +18,21 @@ export const planDetails = [
|
|||||||
{
|
{
|
||||||
id: 0,
|
id: 0,
|
||||||
title: "Community",
|
title: "Community",
|
||||||
price: "Open Source",
|
price: "FREE",
|
||||||
capacityMin: "",
|
capacityMax: "Open Source",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
title: "Standard",
|
title: "Standard",
|
||||||
price: "$10/TB/month",
|
price: "$10 per TB",
|
||||||
capacityMax: "Up to 10PB. No additional charges for capacity over 10PB",
|
capacityMax: "(Minimum of 100TB)",
|
||||||
capacityMin: "",
|
capacityMin: "",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 2,
|
id: 2,
|
||||||
title: "Enterprise",
|
title: "Enterprise",
|
||||||
price: "$20/TB/month",
|
price: "$20 per TB",
|
||||||
capacityMax: "Up to 5PB. No additional charges for capacity over 5PB",
|
capacityMax: "(Minimum of 100TB)",
|
||||||
capacityMin: "",
|
capacityMin: "",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@@ -42,6 +42,7 @@ export const planItems = [
|
|||||||
id: 0,
|
id: 0,
|
||||||
field: "License",
|
field: "License",
|
||||||
community: "GNU AGPL v3",
|
community: "GNU AGPL v3",
|
||||||
|
communityLink: true,
|
||||||
communityDetail: "",
|
communityDetail: "",
|
||||||
standard: "Commercial License",
|
standard: "Commercial License",
|
||||||
standardDetail: "",
|
standardDetail: "",
|
||||||
@@ -51,7 +52,7 @@ export const planItems = [
|
|||||||
{
|
{
|
||||||
id: 1,
|
id: 1,
|
||||||
field: "Software Release",
|
field: "Software Release",
|
||||||
community: "Update to latest",
|
community: "Upstream",
|
||||||
standard: "1 Year Long Term Support",
|
standard: "1 Year Long Term Support",
|
||||||
enterprise: "5 Years Long Term Support",
|
enterprise: "5 Years Long Term Support",
|
||||||
},
|
},
|
||||||
@@ -59,7 +60,7 @@ export const planItems = [
|
|||||||
id: 2,
|
id: 2,
|
||||||
field: "SLA",
|
field: "SLA",
|
||||||
community: "No SLA",
|
community: "No SLA",
|
||||||
standard: "<24 hours",
|
standard: "<48 Hours (Local Business Hours)",
|
||||||
enterprise: "<1 hour",
|
enterprise: "<1 hour",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -67,17 +68,17 @@ export const planItems = [
|
|||||||
field: "Support",
|
field: "Support",
|
||||||
community: "Community:",
|
community: "Community:",
|
||||||
communityDetail: "Public Slack Channel + Github Issues",
|
communityDetail: "Public Slack Channel + Github Issues",
|
||||||
standard: "24x7 L4 direct engineering",
|
standard: "L4 Direct Engineering",
|
||||||
standardDetail: "Support via SUBNET",
|
standardDetail: " support via SUBNET",
|
||||||
enterprise: "24x7 L4 direct engineering",
|
enterprise: "L4 Direct Engineering",
|
||||||
enterpriseDetail: "Support via SUBNET",
|
enterpriseDetail: "support via SUBNET",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 4,
|
id: 4,
|
||||||
field: "Security Updates & Critical Bugs",
|
field: "Security Updates & Critical Bugs",
|
||||||
community: "Self Update",
|
community: "Self Update",
|
||||||
standard: "Guided Update",
|
standard: "Continuous Scan and Alert",
|
||||||
enterprise: "Guided Update",
|
enterprise: "Continuous Scan and Alert",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 5,
|
id: 5,
|
||||||
@@ -86,6 +87,13 @@ export const planItems = [
|
|||||||
standard: "1 per year",
|
standard: "1 per year",
|
||||||
enterprise: "Unlimited",
|
enterprise: "Unlimited",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: 6,
|
||||||
|
field: "Health Diagnostics",
|
||||||
|
community: "N/A",
|
||||||
|
standard: "24/7/365",
|
||||||
|
enterprise: "24/7/365",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: 6,
|
id: 6,
|
||||||
field: "Annual Architecture Review",
|
field: "Annual Architecture Review",
|
||||||
|
|||||||
Reference in New Issue
Block a user