Changed menu design for mcs (#158)
Co-authored-by: Benjamin Perez <benjamin@bexsoft.net>
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
|||||||
// This file is part of MinIO Console Server
|
// This file is part of MinIO Console Server
|
||||||
// Copyright (c) 2019 MinIO, Inc.
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -14,22 +14,18 @@
|
|||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {SvgIcon} from "@material-ui/core";
|
import { SvgIcon } from "@material-ui/core";
|
||||||
class BucketsIcon extends React.Component {
|
class BucketsIcon extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
return (<SvgIcon>
|
return (
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
<SvgIcon>
|
||||||
<title>ic_h_buckets</title>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
<g id="Layer_2" data-name="Layer 2">
|
<path d="M8.392,10H1.608L0,0H10Z" />
|
||||||
<g id="Layer_1-2" data-name="Layer 1">
|
</svg>
|
||||||
<polygon className="cls-1" points="13.428 16 2.572 16 0 0 16 0 13.428 16"/>
|
</SvgIcon>
|
||||||
</g>
|
);
|
||||||
</g>
|
}
|
||||||
</svg>
|
|
||||||
</SvgIcon>)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default BucketsIcon;
|
export default BucketsIcon;
|
||||||
|
|||||||
123
portal-ui/src/icons/ClustersIcon.tsx
Normal file
123
portal-ui/src/icons/ClustersIcon.tsx
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class ClustersIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 9">
|
||||||
|
<g transform="translate(79 438.479)">
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect x="-77.9" y="-434.5" width="7.8" height="1" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect
|
||||||
|
x="-77.9"
|
||||||
|
y="-434.5"
|
||||||
|
transform="matrix(0.4999 -0.8661 0.8661 0.4999 338.8698 -281.1237)"
|
||||||
|
width="7.8"
|
||||||
|
height="1"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<rect
|
||||||
|
x="-74.5"
|
||||||
|
y="-437.9"
|
||||||
|
transform="matrix(0.866 -0.5001 0.5001 0.866 207.1129 -95.1668)"
|
||||||
|
width="1"
|
||||||
|
height="7.8"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-71.8-430.1h-4.5l-2.2-3.9l2.2-3.9h4.5l2.2,3.9L-71.8-430.1z M-75.7-431.1h3.3l1.7-2.9l-1.7-2.9h-3.3
|
||||||
|
l-1.7,2.9L-75.7-431.1z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-72.3-434c0,0.9-0.7,1.7-1.7,1.7c-0.9,0-1.7-0.7-1.7-1.7c0-0.9,0.7-1.7,1.7-1.7
|
||||||
|
C-73.1-435.7-72.3-434.9-72.3-434z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-76.8-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1
|
||||||
|
c0,0,0,0,0,0C-77.3-435.1-76.8-434.6-76.8-434C-76.8-434-76.8-434-76.8-434z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-69-434c0,0.6-0.5,1.1-1.1,1.1c0,0,0,0,0,0c-0.6,0-1.1-0.5-1.1-1.1c0,0,0,0,0,0c0-0.6,0.5-1.1,1.1-1.1
|
||||||
|
c0,0,0,0,0,0C-69.5-435.1-69-434.6-69-434C-69-434-69-434-69-434z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-75.4-431.6c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5
|
||||||
|
C-76.6-431.7-75.9-431.9-75.4-431.6C-75.4-431.6-75.4-431.6-75.4-431.6z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-71.5-438.3c0.5,0.3,0.7,1,0.4,1.5c-0.3,0.5-1,0.7-1.5,0.4c0,0,0,0,0,0c-0.5-0.3-0.7-1-0.4-1.5
|
||||||
|
C-72.7-438.5-72-438.6-71.5-438.3C-71.5-438.3-71.5-438.3-71.5-438.3z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-72.6-431.6c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4
|
||||||
|
c0,0,0,0,0,0C-73.3-430.6-73.1-431.3-72.6-431.6z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path
|
||||||
|
d="M-76.5-438.3c0.5-0.3,1.2-0.1,1.5,0.4c0,0,0,0,0,0c0.3,0.5,0.1,1.2-0.4,1.5c-0.5,0.3-1.2,0.1-1.5-0.4
|
||||||
|
c0,0,0,0,0,0C-77.2-437.3-77-438-76.5-438.3z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ClustersIcon;
|
||||||
42
portal-ui/src/icons/ConfigurationsListIcon.tsx
Normal file
42
portal-ui/src/icons/ConfigurationsListIcon.tsx
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class ConfigurationsListIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
|
<rect width="1.433" height="1" />
|
||||||
|
<rect width="7.828" height="1" transform="translate(2.172)" />
|
||||||
|
<rect width="1.433" height="1" transform="translate(0 6)" />
|
||||||
|
<rect width="1.433" height="1" transform="translate(0 3)" />
|
||||||
|
<rect width="1.433" height="1" transform="translate(0 9)" />
|
||||||
|
<rect width="1.368" height="0.569" transform="translate(6.316 9)" />
|
||||||
|
<path d="M5.566,9.569v-.31l-.238-.138-.269.155-.65.375L4.034,9V9H2.172v1H5.566Z" />
|
||||||
|
<path d="M9.966,9l-.375.65-.65-.375-.269-.155-.238.138V10H10V9H9.967Z" />
|
||||||
|
<path d="M3.625,6.793l.269-.155V6.362l-.269-.155L3.266,6H2.172V7H3.266Z" />
|
||||||
|
<path d="M8.434,3.431v.31l.238.138.269-.155.649-.375L9.966,4V4H10V3H8.434Z" />
|
||||||
|
<path d="M4.034,4l.375-.65.65.375.269.155.238-.138V3H2.172V4H4.033Z" />
|
||||||
|
<path d="M9.356,5.929,10,5.558,9.316,4.373l-.644.372-.988-.571V3.431H6.316v.743l-.988.571-.644-.372L4,5.558l.644.371V7.071L4,7.442l.684,1.185.644-.372.988.571v.743H7.684V8.826l.988-.571.644.372L10,7.442l-.644-.371ZM7,7.278A.778.778,0,1,1,7.778,6.5.779.779,0,0,1,7,7.278Z" />
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ConfigurationsListIcon;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
// This file is part of MinIO Console Server
|
// This file is part of MinIO Console Server
|
||||||
// Copyright (c) 2019 MinIO, Inc.
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -20,15 +20,24 @@ class DashboardIcon extends React.Component {
|
|||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<SvgIcon>
|
<SvgIcon>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
<title>ic_h_dashboard</title>
|
<g transform="translate(249 720)">
|
||||||
<g id="Layer_2" data-name="Layer 2">
|
<rect
|
||||||
<g id="Layer_1-2" data-name="Layer 1">
|
width="6"
|
||||||
<rect className="cls-1" x="9" width="7" height="7" />
|
height="5"
|
||||||
<rect className="cls-1" width="7" height="7" />
|
transform="translate(-244 -720) rotate(90)"
|
||||||
<rect className="cls-1" x="9" y="9" width="7" height="7" />
|
/>
|
||||||
<rect className="cls-1" y="9" width="7" height="7" />
|
<rect width="4" height="4" transform="translate(-243 -720)" />
|
||||||
</g>
|
<rect
|
||||||
|
width="5"
|
||||||
|
height="4"
|
||||||
|
transform="translate(-239 -715) rotate(90)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="5"
|
||||||
|
height="3"
|
||||||
|
transform="translate(-244 -710) rotate(180)"
|
||||||
|
/>
|
||||||
</g>
|
</g>
|
||||||
</svg>
|
</svg>
|
||||||
</SvgIcon>
|
</SvgIcon>
|
||||||
|
|||||||
41
portal-ui/src/icons/GroupsIcon.tsx
Normal file
41
portal-ui/src/icons/GroupsIcon.tsx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class GroupsIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 9.787">
|
||||||
|
<g transform="translate(177 719.787)">
|
||||||
|
<g transform="translate(-105 -720)">
|
||||||
|
<path d="M-65,5a3,3,0,0,0-1.131.224A3.981,3.981,0,0,1-65,8v2h3V8A3,3,0,0,0-65,5Z" />
|
||||||
|
<path d="M-72,10h6V8a3,3,0,0,0-3-3,3,3,0,0,0-3,3Z" />
|
||||||
|
<path
|
||||||
|
className="a"
|
||||||
|
d="M-65,.213a1.993,1.993,0,0,0-1.384.561A2.967,2.967,0,0,1-66,2.213a2.964,2.964,0,0,1-.384,1.439A1.989,1.989,0,0,0-65,4.213a2,2,0,0,0,2-2A2,2,0,0,0-65,.213Z"
|
||||||
|
/>
|
||||||
|
<circle cx="2" cy="2" r="2" transform="translate(-71 0.213)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default GroupsIcon;
|
||||||
34
portal-ui/src/icons/IAMPoliciesIcon.tsx
Normal file
34
portal-ui/src/icons/IAMPoliciesIcon.tsx
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class BucketsIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.75 10">
|
||||||
|
<path
|
||||||
|
d="M-44.625,10l-4.353-2.419L-53.375,10V0h8.75Z"
|
||||||
|
transform="translate(53.375)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default BucketsIcon;
|
||||||
34
portal-ui/src/icons/LambdaNotificationsIcon.tsx
Normal file
34
portal-ui/src/icons/LambdaNotificationsIcon.tsx
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class LambdaNotificationsIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
|
<path
|
||||||
|
d="M0,0v10l2.8-2.2H10V0H0z M6.6,6L5.6,6.4l-0.8-2l-1.5,2L2.5,5.9l1.9-2.6L4.1,2.4H3.2v-1h1.5l1.4,3.7l0.9-0.4
|
||||||
|
l0.4,0.9L6.6,6z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LambdaNotificationsIcon;
|
||||||
35
portal-ui/src/icons/MirroringIcon.tsx
Normal file
35
portal-ui/src/icons/MirroringIcon.tsx
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class MirroringIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
|
<g transform="translate(61 439)">
|
||||||
|
<rect width="1.5" height="10" transform="translate(-56.75 -439)" />
|
||||||
|
<path d="M6.5,10V0h.572L10,10Z" transform="translate(-61 -439)" />
|
||||||
|
<path d="M3.5,10V0H2.928L0,10Z" transform="translate(-61 -439)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MirroringIcon;
|
||||||
41
portal-ui/src/icons/ServiceAccountsIcon.tsx
Normal file
41
portal-ui/src/icons/ServiceAccountsIcon.tsx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class ServiceAccountsIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 9.5">
|
||||||
|
<g transform="translate(231 719.516)">
|
||||||
|
<path
|
||||||
|
d="M-125.5,7.984a4.5,4.5,0,0,1,4.5-4.5,4.5,4.5,0,0,1,4.5,4.5Z"
|
||||||
|
transform="translate(-105 -720)"
|
||||||
|
/>
|
||||||
|
<rect width="10" height="1" transform="translate(-231 -711.016)" />
|
||||||
|
<path
|
||||||
|
d="M-119.5.484h-3v1h1v1h1v-1h1Z"
|
||||||
|
transform="translate(-105 -720)"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ServiceAccountsIcon;
|
||||||
62
portal-ui/src/icons/TraceIcon.tsx
Normal file
62
portal-ui/src/icons/TraceIcon.tsx
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class TraceIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 9.998 10">
|
||||||
|
<g transform="translate(140.999 720)">
|
||||||
|
<g transform="translate(-105 -720)">
|
||||||
|
<rect
|
||||||
|
width="1.114"
|
||||||
|
height="1.667"
|
||||||
|
transform="translate(-27.116 8.333)"
|
||||||
|
/>
|
||||||
|
<path d="M-28.184,10H-29.3V8.154l2.182-3.037V3.147H-26V5.476l-2.182,3.037Z" />
|
||||||
|
<rect
|
||||||
|
width="1.114"
|
||||||
|
height="2.963"
|
||||||
|
transform="translate(-31.531)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="1.114"
|
||||||
|
height="2.132"
|
||||||
|
transform="translate(-27.115 0)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="1.114"
|
||||||
|
height="5.389"
|
||||||
|
transform="translate(-29.298)"
|
||||||
|
/>
|
||||||
|
<path d="M-30.417,10h-1.114V5.722l-2.233-3V0h1.114V2.353l2.233,3Z" />
|
||||||
|
<path d="M-32.65,10h-1.114V6.185l-2.234-3V0h1.114V2.815l2.234,3Z" />
|
||||||
|
<rect
|
||||||
|
width="1.114"
|
||||||
|
height="4.463"
|
||||||
|
transform="translate(-35.999 5.537)"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default TraceIcon;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
// This file is part of MinIO Console Server
|
// This file is part of MinIO Console Server
|
||||||
// Copyright (c) 2019 MinIO, Inc.
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -14,27 +14,32 @@
|
|||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {SvgIcon} from "@material-ui/core";
|
import { SvgIcon } from "@material-ui/core";
|
||||||
class UsersIcon extends React.Component {
|
class UsersIcon extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
return (<SvgIcon>
|
return (
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 14.874">
|
<SvgIcon>
|
||||||
<title>ic_users</title>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6.131 10">
|
||||||
<g id="Layer_2" data-name="Layer 2">
|
<g transform="translate(193 719.787)">
|
||||||
<g id="Layer_1-2" data-name="Layer 1">
|
<g transform="translate(-193 -719.787)">
|
||||||
<path className="cls-1"
|
<path
|
||||||
d="M3.5,6.875h0a3.5,3.5,0,0,1,3.5,3.5v4.5a0,0,0,0,1,0,0H0a0,0,0,0,1,0,0v-4.5A3.5,3.5,0,0,1,3.5,6.875Z"/>
|
d="M3,0h.131a3,3,0,0,1,3,3V5a0,0,0,0,1,0,0H0A0,0,0,0,1,0,5V3A3,3,0,0,1,3,0Z"
|
||||||
<path className="cls-1"
|
transform="translate(0 5)"
|
||||||
d="M12.5,6.875h0a3.5,3.5,0,0,1,3.5,3.5v4.5a0,0,0,0,1,0,0H9a0,0,0,0,1,0,0v-4.5A3.5,3.5,0,0,1,12.5,6.875Z"/>
|
/>
|
||||||
<circle className="cls-1" cx="3.498" cy="2.859" r="2.859"/>
|
<ellipse
|
||||||
<circle className="cls-1" cx="12.502" cy="2.859" r="2.859"/>
|
cx="2.065"
|
||||||
</g>
|
cy="2"
|
||||||
</g>
|
rx="2.065"
|
||||||
</svg>
|
ry="2"
|
||||||
</SvgIcon>)
|
transform="translate(1 0)"
|
||||||
}
|
/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default UsersIcon;
|
export default UsersIcon;
|
||||||
|
|||||||
39
portal-ui/src/icons/WarpIcon.tsx
Normal file
39
portal-ui/src/icons/WarpIcon.tsx
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class WarpIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
|
<g transform="translate(43 439)">
|
||||||
|
<path d="M27.5,10" transform="translate(-61 -439)" />
|
||||||
|
<rect width="1.5" height="2" transform="translate(-43 -431)" />
|
||||||
|
<rect width="1.5" height="6" transform="translate(-38.75 -435)" />
|
||||||
|
<rect width="1.5" height="8" transform="translate(-36.625 -437)" />
|
||||||
|
<rect width="1.5" height="4" transform="translate(-40.875 -433)" />
|
||||||
|
<rect width="1.5" height="10" transform="translate(-34.5 -439)" />
|
||||||
|
<path d="M18.5,10" transform="translate(-61 -439)" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default WarpIcon;
|
||||||
59
portal-ui/src/icons/WatchIcon.tsx
Normal file
59
portal-ui/src/icons/WatchIcon.tsx
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { SvgIcon } from "@material-ui/core";
|
||||||
|
class WatchIcon extends React.Component {
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<SvgIcon>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10">
|
||||||
|
<g transform="translate(213 720)">
|
||||||
|
<g transform="translate(-105 -720)">
|
||||||
|
<rect width="1.5" height="4" transform="translate(-108)" />
|
||||||
|
<rect width="1.5" height="4" transform="translate(-108 6)" />
|
||||||
|
<rect width="1.5" height="4" transform="translate(-99.5 6)" />
|
||||||
|
<rect width="1.5" height="4" transform="translate(-99.5)" />
|
||||||
|
<rect
|
||||||
|
width="1.5"
|
||||||
|
height="4"
|
||||||
|
transform="translate(-98) rotate(90)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="1.5"
|
||||||
|
height="4"
|
||||||
|
transform="translate(-104) rotate(90)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="1.5"
|
||||||
|
height="4"
|
||||||
|
transform="translate(-104 8.5) rotate(90)"
|
||||||
|
/>
|
||||||
|
<rect
|
||||||
|
width="1.5"
|
||||||
|
height="4"
|
||||||
|
transform="translate(-98 8.5) rotate(90)"
|
||||||
|
/>
|
||||||
|
<circle cx="2" cy="2" r="2" transform="translate(-105 3)" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default WatchIcon;
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
// This file is part of MinIO Console Server
|
// This file is part of MinIO Console Server
|
||||||
// Copyright (c) 2019 MinIO, Inc.
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
@@ -14,10 +14,20 @@
|
|||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
export { default as PermissionIcon } from './PermissionIcon';
|
export { default as PermissionIcon } from "./PermissionIcon";
|
||||||
export { default as CreateIcon } from './CreateIcon';
|
export { default as CreateIcon } from "./CreateIcon";
|
||||||
export { default as DeleteIcon } from './DeleteIcon';
|
export { default as DeleteIcon } from "./DeleteIcon";
|
||||||
export { default as ServiceAccountIcon } from './ServiceAccountIcon';
|
export { default as ServiceAccountIcon } from "./ServiceAccountIcon";
|
||||||
export { default as DashboardIcon } from './DashboardIcon';
|
export { default as DashboardIcon } from "./DashboardIcon";
|
||||||
export { default as BucketsIcon } from './BucketsIcon';
|
export { default as BucketsIcon } from "./BucketsIcon";
|
||||||
export { default as UsersIcon } from './UsersIcon';
|
export { default as UsersIcon } from "./UsersIcon";
|
||||||
|
export { default as ServiceAccountsIcon } from "./ServiceAccountsIcon";
|
||||||
|
export { default as GroupsIcon } from "./GroupsIcon";
|
||||||
|
export { default as IAMPoliciesIcon } from "./IAMPoliciesIcon";
|
||||||
|
export { default as TraceIcon } from "./TraceIcon";
|
||||||
|
export { default as LambdaNotificationsIcon } from "./LambdaNotificationsIcon";
|
||||||
|
export { default as ConfigurationsListIcon } from "./ConfigurationsListIcon";
|
||||||
|
export { default as ClustersIcon } from "./ClustersIcon";
|
||||||
|
export { default as MirroringIcon } from "./MirroringIcon";
|
||||||
|
export { default as WarpIcon } from "./WarpIcon";
|
||||||
|
export { default as WatchIcon } from "./WatchIcon";
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ import Buckets from "./Buckets/Buckets";
|
|||||||
import Policies from "./Policies/Policies";
|
import Policies from "./Policies/Policies";
|
||||||
import Permissions from "./Permissions/Permissions";
|
import Permissions from "./Permissions/Permissions";
|
||||||
import Dashboard from "./Dashboard/Dashboard";
|
import Dashboard from "./Dashboard/Dashboard";
|
||||||
import Menu from "./Menu";
|
import Menu from "./Menu/Menu";
|
||||||
import api from "../../common/api";
|
import api from "../../common/api";
|
||||||
import storage from "local-storage-fallback";
|
import storage from "local-storage-fallback";
|
||||||
import NotFoundPage from "../NotFoundPage";
|
import NotFoundPage from "../NotFoundPage";
|
||||||
|
|||||||
@@ -1,319 +0,0 @@
|
|||||||
// This file is part of MinIO Console Server
|
|
||||||
// Copyright (c) 2019 MinIO, Inc.
|
|
||||||
//
|
|
||||||
// This program is free software: you can redistribute it and/or modify
|
|
||||||
// it under the terms of the GNU Affero General Public License as published by
|
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
|
||||||
// (at your option) any later version.
|
|
||||||
//
|
|
||||||
// This program is distributed in the hope that it will be useful,
|
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
// GNU Affero General Public License for more details.
|
|
||||||
//
|
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import React from "react";
|
|
||||||
import ListItem from "@material-ui/core/ListItem";
|
|
||||||
import ListItemIcon from "@material-ui/core/ListItemIcon";
|
|
||||||
import RoomServiceIcon from "@material-ui/icons/RoomService";
|
|
||||||
import WebAssetIcon from "@material-ui/icons/WebAsset";
|
|
||||||
import HealingIcon from "@material-ui/icons/Healing";
|
|
||||||
import CenterFocusWeakIcon from "@material-ui/icons/CenterFocusWeak";
|
|
||||||
import StorageIcon from "@material-ui/icons/Storage";
|
|
||||||
import ListItemText from "@material-ui/core/ListItemText";
|
|
||||||
import { NavLink } from "react-router-dom";
|
|
||||||
import { Divider, Typography, withStyles } from "@material-ui/core";
|
|
||||||
import { ExitToApp } from "@material-ui/icons";
|
|
||||||
import { AppState } from "../../store";
|
|
||||||
import { connect } from "react-redux";
|
|
||||||
import { userLoggedIn } from "../../actions";
|
|
||||||
import List from "@material-ui/core/List";
|
|
||||||
import storage from "local-storage-fallback";
|
|
||||||
import history from "../../history";
|
|
||||||
import logo from "../../icons/minio_console_logo.svg";
|
|
||||||
import {
|
|
||||||
BucketsIcon,
|
|
||||||
DashboardIcon,
|
|
||||||
PermissionIcon,
|
|
||||||
UsersIcon,
|
|
||||||
} from "../../icons";
|
|
||||||
import { createStyles, Theme } from "@material-ui/core/styles";
|
|
||||||
import PersonIcon from "@material-ui/icons/Person";
|
|
||||||
import api from "../../common/api";
|
|
||||||
import NotificationsIcon from "@material-ui/icons/Notifications";
|
|
||||||
import ListAltIcon from "@material-ui/icons/ListAlt";
|
|
||||||
import LoopIcon from "@material-ui/icons/Loop";
|
|
||||||
|
|
||||||
const styles = (theme: Theme) =>
|
|
||||||
createStyles({
|
|
||||||
logo: {
|
|
||||||
paddingTop: "42px",
|
|
||||||
marginBottom: "20px",
|
|
||||||
textAlign: "center",
|
|
||||||
"& img": {
|
|
||||||
width: "120px",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
menuList: {
|
|
||||||
"& .active": {
|
|
||||||
borderTopLeftRadius: "3px",
|
|
||||||
borderBottomLeftRadius: "3px",
|
|
||||||
color: "white",
|
|
||||||
background:
|
|
||||||
"transparent linear-gradient(90deg, #362585 0%, #362585 7%, #281B6F 39%, #1F1661 100%) 0% 0% no-repeat padding-box",
|
|
||||||
"& .MuiSvgIcon-root": {
|
|
||||||
color: "white",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"& .MuiListItem-root": {
|
|
||||||
marginTop: "16px",
|
|
||||||
},
|
|
||||||
paddingLeft: "30px",
|
|
||||||
"& .MuiSvgIcon-root": {
|
|
||||||
fontSize: "18px",
|
|
||||||
color: "#393939",
|
|
||||||
},
|
|
||||||
"& .MuiListItemIcon-root": {
|
|
||||||
minWidth: "40px",
|
|
||||||
},
|
|
||||||
"& .MuiTypography-root": {
|
|
||||||
fontSize: "14px",
|
|
||||||
},
|
|
||||||
"& .MuiListItem-gutters": {
|
|
||||||
paddingRight: "0px",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const mapState = (state: AppState) => ({
|
|
||||||
open: state.system.loggedIn,
|
|
||||||
});
|
|
||||||
|
|
||||||
const connector = connect(mapState, { userLoggedIn });
|
|
||||||
|
|
||||||
interface MenuProps {
|
|
||||||
classes: any;
|
|
||||||
userLoggedIn: typeof userLoggedIn;
|
|
||||||
pages: string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
class Menu extends React.Component<MenuProps> {
|
|
||||||
logout() {
|
|
||||||
const deleteSession = () => {
|
|
||||||
storage.removeItem("token");
|
|
||||||
this.props.userLoggedIn(false);
|
|
||||||
history.push("/");
|
|
||||||
};
|
|
||||||
api
|
|
||||||
.invoke("POST", `/api/v1/logout`)
|
|
||||||
.then(() => {
|
|
||||||
deleteSession();
|
|
||||||
})
|
|
||||||
.catch((err: any) => {
|
|
||||||
console.log(err);
|
|
||||||
deleteSession();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
render() {
|
|
||||||
const { classes, pages } = this.props;
|
|
||||||
const allowedPages = pages.reduce((result: any, item: any, index: any) => {
|
|
||||||
result[item] = true;
|
|
||||||
return result;
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
const menu = [
|
|
||||||
{
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/dashboard",
|
|
||||||
name: "Dashboard",
|
|
||||||
icon: <DashboardIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/buckets",
|
|
||||||
name: "Buckets",
|
|
||||||
icon: <BucketsIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/service-accounts",
|
|
||||||
name: "Service Accounts",
|
|
||||||
icon: <RoomServiceIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "divider",
|
|
||||||
key: "divider-1",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "title",
|
|
||||||
name: "Admin",
|
|
||||||
component: Typography,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Admin",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/users",
|
|
||||||
name: "Users",
|
|
||||||
icon: <PersonIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Admin",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/groups",
|
|
||||||
name: "Groups",
|
|
||||||
icon: <UsersIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Admin",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/policies",
|
|
||||||
name: "IAM Policies",
|
|
||||||
icon: <PermissionIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "title",
|
|
||||||
name: "Tools",
|
|
||||||
component: Typography,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Tools",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/logs",
|
|
||||||
name: "Console Logs",
|
|
||||||
icon: <WebAssetIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Tools",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/watch",
|
|
||||||
name: "Watch",
|
|
||||||
icon: <CenterFocusWeakIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Tools",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/trace",
|
|
||||||
name: "Trace",
|
|
||||||
icon: <LoopIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Tools",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/heal",
|
|
||||||
name: "Heal",
|
|
||||||
icon: <HealingIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "title",
|
|
||||||
name: "Configuration",
|
|
||||||
component: Typography,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Configuration",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/notification-endpoints",
|
|
||||||
name: "Lambda Notifications",
|
|
||||||
icon: <NotificationsIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Configuration",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/configurations-list",
|
|
||||||
name: "Configurations List",
|
|
||||||
icon: <ListAltIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "title",
|
|
||||||
name: "Operator",
|
|
||||||
component: Typography,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
group: "Operator",
|
|
||||||
type: "item",
|
|
||||||
component: NavLink,
|
|
||||||
to: "/tenants",
|
|
||||||
name: "Tenants",
|
|
||||||
icon: <StorageIcon />,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: "divider",
|
|
||||||
key: "divider-2",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const allowedItems = menu.filter(
|
|
||||||
(item: any) =>
|
|
||||||
allowedPages[item.to] || item.forceDisplay || item.type !== "item"
|
|
||||||
);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<React.Fragment>
|
|
||||||
<div className={classes.logo}>
|
|
||||||
<img src={logo} alt="logo" />
|
|
||||||
</div>
|
|
||||||
<List className={classes.menuList}>
|
|
||||||
{allowedItems.map((page: any) => {
|
|
||||||
switch (page.type) {
|
|
||||||
case "divider": {
|
|
||||||
return <Divider key={page.key} />;
|
|
||||||
}
|
|
||||||
case "item": {
|
|
||||||
return (
|
|
||||||
<ListItem
|
|
||||||
key={page.to}
|
|
||||||
button
|
|
||||||
component={page.component}
|
|
||||||
to={page.to}
|
|
||||||
>
|
|
||||||
{page.icon && <ListItemIcon>{page.icon}</ListItemIcon>}
|
|
||||||
{page.name && <ListItemText primary={page.name} />}
|
|
||||||
</ListItem>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
case "title": {
|
|
||||||
return (
|
|
||||||
(allowedItems || []).filter(
|
|
||||||
(item: any) => item.group === page.name
|
|
||||||
).length > 0 && (
|
|
||||||
<ListItem key={page.name} component={page.component}>
|
|
||||||
{page.name}
|
|
||||||
</ListItem>
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
})}
|
|
||||||
<ListItem
|
|
||||||
button
|
|
||||||
onClick={() => {
|
|
||||||
this.logout();
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<ListItemIcon>
|
|
||||||
<ExitToApp />
|
|
||||||
</ListItemIcon>
|
|
||||||
<ListItemText primary="Logout" />
|
|
||||||
</ListItem>
|
|
||||||
</List>
|
|
||||||
</React.Fragment>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default connector(withStyles(styles)(Menu));
|
|
||||||
424
portal-ui/src/screens/Console/Menu/Menu.tsx
Normal file
424
portal-ui/src/screens/Console/Menu/Menu.tsx
Normal file
@@ -0,0 +1,424 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import { connect } from "react-redux";
|
||||||
|
import { NavLink } from "react-router-dom";
|
||||||
|
import ListItem from "@material-ui/core/ListItem";
|
||||||
|
import ListItemIcon from "@material-ui/core/ListItemIcon";
|
||||||
|
import WebAssetIcon from "@material-ui/icons/WebAsset";
|
||||||
|
import HealingIcon from "@material-ui/icons/Healing";
|
||||||
|
import Collapse from "@material-ui/core/Collapse";
|
||||||
|
import ListItemText from "@material-ui/core/ListItemText";
|
||||||
|
import List from "@material-ui/core/List";
|
||||||
|
import { Divider, Typography, withStyles } from "@material-ui/core";
|
||||||
|
import { ExitToApp } from "@material-ui/icons";
|
||||||
|
import storage from "local-storage-fallback";
|
||||||
|
import { createStyles, Theme } from "@material-ui/core/styles";
|
||||||
|
import history from "../../../history";
|
||||||
|
import logo from "../../../icons/minio_console_logo.svg";
|
||||||
|
import { AppState } from "../../../store";
|
||||||
|
import { userLoggedIn } from "../../../actions";
|
||||||
|
import api from "../../../common/api";
|
||||||
|
import WatchIcon from "../../../icons/WatchIcon";
|
||||||
|
import { menuGroups } from "./utils";
|
||||||
|
import { IMenuProps } from "./types";
|
||||||
|
import {
|
||||||
|
BucketsIcon,
|
||||||
|
ClustersIcon,
|
||||||
|
ConfigurationsListIcon,
|
||||||
|
DashboardIcon,
|
||||||
|
GroupsIcon,
|
||||||
|
IAMPoliciesIcon,
|
||||||
|
LambdaNotificationsIcon,
|
||||||
|
MirroringIcon,
|
||||||
|
ServiceAccountsIcon,
|
||||||
|
TraceIcon,
|
||||||
|
UsersIcon,
|
||||||
|
WarpIcon,
|
||||||
|
} from "../../../icons";
|
||||||
|
|
||||||
|
const styles = (theme: Theme) =>
|
||||||
|
createStyles({
|
||||||
|
logo: {
|
||||||
|
paddingTop: "42px",
|
||||||
|
marginBottom: "20px",
|
||||||
|
textAlign: "center",
|
||||||
|
"& img": {
|
||||||
|
width: "120px",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
menuList: {
|
||||||
|
"& .active": {
|
||||||
|
borderTopLeftRadius: "3px",
|
||||||
|
borderBottomLeftRadius: "3px",
|
||||||
|
color: "#fff",
|
||||||
|
background:
|
||||||
|
"transparent linear-gradient(90deg, #362585 0%, #362585 7%, #281B6F 39%, #1F1661 100%) 0% 0% no-repeat padding-box;",
|
||||||
|
boxShadow: "4px 4px 4px #A5A5A512",
|
||||||
|
fontWeight: 700,
|
||||||
|
"& .MuiSvgIcon-root": {
|
||||||
|
color: "white",
|
||||||
|
},
|
||||||
|
"& .MuiTypography-root": {
|
||||||
|
color: "#fff",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
paddingLeft: "30px",
|
||||||
|
"& .MuiSvgIcon-root": {
|
||||||
|
fontSize: 16,
|
||||||
|
color: "#362585",
|
||||||
|
maxWidth: 14,
|
||||||
|
},
|
||||||
|
"& .MuiListItemIcon-root": {
|
||||||
|
minWidth: "25px",
|
||||||
|
},
|
||||||
|
"& .MuiTypography-root": {
|
||||||
|
fontSize: "12px",
|
||||||
|
color: "#2e2e2e",
|
||||||
|
},
|
||||||
|
"& .MuiListItem-gutters": {
|
||||||
|
paddingRight: 0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
extraMargin: {
|
||||||
|
"&.MuiListItem-gutters": {
|
||||||
|
marginLeft: 5,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
groupTitle: {
|
||||||
|
color: "#220c7c",
|
||||||
|
fontSize: 10,
|
||||||
|
textTransform: "uppercase",
|
||||||
|
fontWeight: 700,
|
||||||
|
marginBottom: 3,
|
||||||
|
cursor: "pointer",
|
||||||
|
userSelect: "none",
|
||||||
|
},
|
||||||
|
subTitleMenu: {
|
||||||
|
fontWeight: 700,
|
||||||
|
marginLeft: 10,
|
||||||
|
"&.MuiTypography-root": {
|
||||||
|
fontSize: 13,
|
||||||
|
color: "#220c7c",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
selectorArrow: {
|
||||||
|
marginLeft: 3,
|
||||||
|
marginTop: 1,
|
||||||
|
display: "inline-block",
|
||||||
|
width: 0,
|
||||||
|
height: 0,
|
||||||
|
borderStyle: "solid",
|
||||||
|
borderWidth: "3px 2.5px 0 2.5px",
|
||||||
|
borderColor: "#220C7C transparent transparent transparent",
|
||||||
|
transform: "rotateZ(0deg)",
|
||||||
|
transitionDuration: "0.2s",
|
||||||
|
},
|
||||||
|
selectorArrowOpen: {
|
||||||
|
transform: "rotateZ(180deg)",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const mapState = (state: AppState) => ({
|
||||||
|
open: state.system.loggedIn,
|
||||||
|
});
|
||||||
|
|
||||||
|
const connector = connect(mapState, { userLoggedIn });
|
||||||
|
|
||||||
|
// Menu State builder for groups
|
||||||
|
const menuStateBuilder = () => {
|
||||||
|
let elements: any = [];
|
||||||
|
menuGroups.forEach((menuItem) => {
|
||||||
|
if (menuItem.collapsible) {
|
||||||
|
elements[menuItem.group] = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return elements;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Menu = ({ userLoggedIn, classes, pages }: IMenuProps) => {
|
||||||
|
const [menuOpen, setMenuOpen] = useState<any>(menuStateBuilder());
|
||||||
|
|
||||||
|
const logout = () => {
|
||||||
|
const deleteSession = () => {
|
||||||
|
storage.removeItem("token");
|
||||||
|
userLoggedIn(false);
|
||||||
|
history.push("/");
|
||||||
|
};
|
||||||
|
api
|
||||||
|
.invoke("POST", `/api/v1/logout`)
|
||||||
|
.then(() => {
|
||||||
|
deleteSession();
|
||||||
|
})
|
||||||
|
.catch((err: any) => {
|
||||||
|
console.log(err);
|
||||||
|
deleteSession();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const menuItems = [
|
||||||
|
{
|
||||||
|
group: "common",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/dashboard",
|
||||||
|
name: "Dashboard",
|
||||||
|
icon: <DashboardIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "User",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/buckets",
|
||||||
|
name: "Buckets",
|
||||||
|
icon: <BucketsIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "User",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/service-accounts",
|
||||||
|
name: "Service Accounts",
|
||||||
|
icon: <ServiceAccountsIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/users",
|
||||||
|
name: "Users",
|
||||||
|
icon: <UsersIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/groups",
|
||||||
|
name: "Groups",
|
||||||
|
icon: <GroupsIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/policies",
|
||||||
|
name: "IAM Policies",
|
||||||
|
icon: <IAMPoliciesIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Tools",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/logs",
|
||||||
|
name: "Console Logs",
|
||||||
|
icon: <WebAssetIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Tools",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/watch",
|
||||||
|
name: "Watch",
|
||||||
|
icon: <WatchIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Tools",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/trace",
|
||||||
|
name: "Trace",
|
||||||
|
icon: <TraceIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Tools",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/heal",
|
||||||
|
name: "Heal",
|
||||||
|
icon: <HealingIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "title",
|
||||||
|
name: "Configurations",
|
||||||
|
component: Typography,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/notification-endpoints",
|
||||||
|
name: "Lambda Notifications",
|
||||||
|
icon: <LambdaNotificationsIcon />,
|
||||||
|
extraMargin: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Admin",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/configurations-list",
|
||||||
|
name: "Configurations List",
|
||||||
|
icon: <ConfigurationsListIcon />,
|
||||||
|
extraMargin: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Operator",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/tenants",
|
||||||
|
name: "Tenants",
|
||||||
|
icon: <ClustersIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Operator",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/mirroring",
|
||||||
|
name: "Mirroring",
|
||||||
|
icon: <MirroringIcon />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
group: "Operator",
|
||||||
|
type: "item",
|
||||||
|
component: NavLink,
|
||||||
|
to: "/warp",
|
||||||
|
name: "Warp",
|
||||||
|
icon: <WarpIcon />,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const allowedPages = pages.reduce((result: any, item: any, index: any) => {
|
||||||
|
result[item] = true;
|
||||||
|
return result;
|
||||||
|
}, {});
|
||||||
|
|
||||||
|
const allowedItems = menuItems.filter(
|
||||||
|
(item: any) =>
|
||||||
|
allowedPages[item.to] || item.forceDisplay || item.type !== "item"
|
||||||
|
);
|
||||||
|
|
||||||
|
const setMenuCollapse = (menuClicked: string) => {
|
||||||
|
let newMenu: any = { ...menuOpen };
|
||||||
|
|
||||||
|
newMenu[menuClicked] = !newMenu[menuClicked];
|
||||||
|
|
||||||
|
setMenuOpen(newMenu);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
<div className={classes.logo}>
|
||||||
|
<img src={logo} alt="logo" />
|
||||||
|
</div>
|
||||||
|
<List className={classes.menuList}>
|
||||||
|
{menuGroups.map((groupMember) => {
|
||||||
|
const filterByGroup = (allowedItems || []).filter(
|
||||||
|
(item: any) => item.group === groupMember.group
|
||||||
|
);
|
||||||
|
|
||||||
|
const countableElements = filterByGroup.filter(
|
||||||
|
(menuItem: any) => menuItem.type !== "title"
|
||||||
|
);
|
||||||
|
|
||||||
|
if (countableElements.length == 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
{groupMember.label !== "" && (
|
||||||
|
<ListItem
|
||||||
|
className={classes.groupTitle}
|
||||||
|
onClick={() => {
|
||||||
|
if (groupMember.collapsible) {
|
||||||
|
setMenuCollapse(groupMember.group);
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{groupMember.label}
|
||||||
|
{groupMember.collapsible && (
|
||||||
|
<span
|
||||||
|
className={`${classes.selectorArrow} ${
|
||||||
|
menuOpen[groupMember.group]
|
||||||
|
? classes.selectorArrowOpen
|
||||||
|
: ""
|
||||||
|
}`}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</ListItem>
|
||||||
|
)}
|
||||||
|
<Collapse
|
||||||
|
in={
|
||||||
|
groupMember.collapsible ? menuOpen[groupMember.group] : true
|
||||||
|
}
|
||||||
|
timeout="auto"
|
||||||
|
unmountOnExit
|
||||||
|
key={`menuGroup-${groupMember.group}`}
|
||||||
|
>
|
||||||
|
{filterByGroup.map((page: any) => {
|
||||||
|
switch (page.type) {
|
||||||
|
case "item": {
|
||||||
|
return (
|
||||||
|
<ListItem
|
||||||
|
key={page.to}
|
||||||
|
button
|
||||||
|
component={page.component}
|
||||||
|
to={page.to}
|
||||||
|
className={
|
||||||
|
page.extraMargin ? classes.extraMargin : null
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{page.icon && (
|
||||||
|
<ListItemIcon>{page.icon}</ListItemIcon>
|
||||||
|
)}
|
||||||
|
{page.name && <ListItemText primary={page.name} />}
|
||||||
|
</ListItem>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
case "title": {
|
||||||
|
return (
|
||||||
|
<ListItem
|
||||||
|
key={page.name}
|
||||||
|
component={page.component}
|
||||||
|
className={classes.subTitleMenu}
|
||||||
|
>
|
||||||
|
{page.name}
|
||||||
|
</ListItem>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
})}
|
||||||
|
<Divider />
|
||||||
|
</Collapse>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
|
||||||
|
<ListItem button onClick={logout}>
|
||||||
|
<ListItemIcon>
|
||||||
|
<ExitToApp />
|
||||||
|
</ListItemIcon>
|
||||||
|
<ListItemText primary="Logout" />
|
||||||
|
</ListItem>
|
||||||
|
</List>
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default connector(withStyles(styles)(Menu));
|
||||||
23
portal-ui/src/screens/Console/Menu/types.ts
Normal file
23
portal-ui/src/screens/Console/Menu/types.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import { userLoggedIn } from "../../../actions";
|
||||||
|
|
||||||
|
export interface IMenuProps {
|
||||||
|
classes: any;
|
||||||
|
userLoggedIn: typeof userLoggedIn;
|
||||||
|
pages: string[];
|
||||||
|
}
|
||||||
23
portal-ui/src/screens/Console/Menu/utils.ts
Normal file
23
portal-ui/src/screens/Console/Menu/utils.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
// This file is part of MinIO Console Server
|
||||||
|
// Copyright (c) 2020 MinIO, Inc.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU Affero General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
export const menuGroups = [
|
||||||
|
{ label: "", group: "common", collapsible: false },
|
||||||
|
{ label: "User", group: "User", collapsible: true },
|
||||||
|
{ label: "Admin", group: "Admin", collapsible: true },
|
||||||
|
{ label: "Tools", group: "Tools", collapsible: true },
|
||||||
|
{ label: "Operator", group: "Operator", collapsible: true },
|
||||||
|
];
|
||||||
Reference in New Issue
Block a user