mirror of
https://github.com/OpenMaxIO/openmaxio-object-browser
synced 2026-07-01 07:41:18 -07:00
Updated console to use React 17 (#469)
This commit is contained in:
File diff suppressed because one or more lines are too long
17878
portal-ui/package-lock.json
generated
17878
portal-ui/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -12,7 +12,7 @@
|
|||||||
"@types/jest": "24.0.23",
|
"@types/jest": "24.0.23",
|
||||||
"@types/lodash": "^4.14.149",
|
"@types/lodash": "^4.14.149",
|
||||||
"@types/node": "12.12.8",
|
"@types/node": "12.12.8",
|
||||||
"@types/react": "16.9.11",
|
"@types/react": "17.0.0",
|
||||||
"@types/react-copy-to-clipboard": "^4.3.0",
|
"@types/react-copy-to-clipboard": "^4.3.0",
|
||||||
"@types/react-dom": "16.9.4",
|
"@types/react-dom": "16.9.4",
|
||||||
"@types/react-redux": "^7.1.5",
|
"@types/react-redux": "^7.1.5",
|
||||||
@@ -30,14 +30,14 @@
|
|||||||
"local-storage-fallback": "^4.1.1",
|
"local-storage-fallback": "^4.1.1",
|
||||||
"lodash": "^4.17.19",
|
"lodash": "^4.17.19",
|
||||||
"moment": "^2.24.0",
|
"moment": "^2.24.0",
|
||||||
"react": "^16.13.1",
|
"react": "17.0.0",
|
||||||
"react-app-rewire-hot-loader": "^2.0.1",
|
"react-app-rewire-hot-loader": "^2.0.1",
|
||||||
"react-app-rewired": "^2.1.6",
|
"react-app-rewired": "^2.1.6",
|
||||||
"react-async-hook": "^3.6.1",
|
"react-async-hook": "^3.6.1",
|
||||||
"react-chartjs-2": "^2.9.0",
|
"react-chartjs-2": "^2.9.0",
|
||||||
"react-codemirror2": "^7.1.0",
|
"react-codemirror2": "^7.1.0",
|
||||||
"react-copy-to-clipboard": "^5.0.2",
|
"react-copy-to-clipboard": "^5.0.2",
|
||||||
"react-dom": "^16.12.0",
|
"react-dom": "17.0.0",
|
||||||
"react-hot-loader": "^4.13.0",
|
"react-hot-loader": "^4.13.0",
|
||||||
"react-moment": "^0.9.7",
|
"react-moment": "^0.9.7",
|
||||||
"react-redux": "^7.1.3",
|
"react-redux": "^7.1.3",
|
||||||
@@ -50,7 +50,6 @@
|
|||||||
"redux-thunk": "^2.3.0",
|
"redux-thunk": "^2.3.0",
|
||||||
"superagent": "^5.1.0",
|
"superagent": "^5.1.0",
|
||||||
"typeface-roboto": "^0.0.75",
|
"typeface-roboto": "^0.0.75",
|
||||||
"typescript": "3.6.4",
|
|
||||||
"use-debounce": "^5.0.1",
|
"use-debounce": "^5.0.1",
|
||||||
"websocket": "^1.0.31"
|
"websocket": "^1.0.31"
|
||||||
},
|
},
|
||||||
@@ -77,6 +76,7 @@
|
|||||||
},
|
},
|
||||||
"proxy": "http://localhost:9090/",
|
"proxy": "http://localhost:9090/",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^1.19.1"
|
"prettier": "^1.19.1",
|
||||||
|
"typescript": "^4.1.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
import React from 'react'
|
import React from "react";
|
||||||
import Typography from "@material-ui/core/Typography";
|
import Typography from "@material-ui/core/Typography";
|
||||||
import Link from "@material-ui/core/Link";
|
import Link from "@material-ui/core/Link";
|
||||||
|
|
||||||
export default function Copyright() {
|
export default function Copyright() {
|
||||||
return (
|
return (
|
||||||
<Typography variant="body2" color="textSecondary" align="center">
|
<Typography variant="body2" color="textSecondary" align="center">
|
||||||
{'Copyright © '}
|
{"Copyright © "}
|
||||||
<Link color="inherit" href="https://material-ui.com/">
|
<Link color="inherit" href="https://material-ui.com/">
|
||||||
MinIO
|
MinIO
|
||||||
</Link>{' '}
|
</Link>{" "}
|
||||||
{new Date().getFullYear()}
|
{new Date().getFullYear()}
|
||||||
{'.'}
|
{"."}
|
||||||
</Typography>
|
</Typography>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import {
|
|||||||
createStyles,
|
createStyles,
|
||||||
makeStyles,
|
makeStyles,
|
||||||
Theme,
|
Theme,
|
||||||
useTheme
|
useTheme,
|
||||||
} from "@material-ui/core/styles";
|
} from "@material-ui/core/styles";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { IconButton } from "@material-ui/core";
|
import { IconButton } from "@material-ui/core";
|
||||||
@@ -31,8 +31,8 @@ const useStyles1 = makeStyles((theme: Theme) =>
|
|||||||
createStyles({
|
createStyles({
|
||||||
root: {
|
root: {
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
marginLeft: theme.spacing(2.5)
|
marginLeft: theme.spacing(2.5),
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from "prop-types";
|
||||||
import Typography from '@material-ui/core/Typography';
|
import Typography from "@material-ui/core/Typography";
|
||||||
|
|
||||||
export default function Title(props: React.Props<any>) {
|
export default function Title(props: React.Props<any>) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -15,20 +15,25 @@
|
|||||||
// 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 PermissionIcon extends React.Component {
|
class PermissionIcon extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
return (<SvgIcon>
|
return (
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 16">
|
<SvgIcon>
|
||||||
<title>ic_permissions</title>
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 16">
|
||||||
<g id="Layer_2" data-name="Layer 2">
|
<title>ic_permissions</title>
|
||||||
<g id="Layer_1-2" data-name="Layer 1">
|
<g id="Layer_2" data-name="Layer 2">
|
||||||
<polygon className="cls-1" points="14 16 7.035 12.13 0 16 0 0 14 0 14 16"/>
|
<g id="Layer_1-2" data-name="Layer 1">
|
||||||
</g>
|
<polygon
|
||||||
</g>
|
className="cls-1"
|
||||||
</svg>
|
points="14 16 7.035 12.13 0 16 0 0 14 0 14 16"
|
||||||
</SvgIcon>)
|
/>
|
||||||
}
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</SvgIcon>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default PermissionIcon;
|
export default PermissionIcon;
|
||||||
|
|||||||
@@ -15,113 +15,33 @@
|
|||||||
// 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 {
|
import { createStyles, Theme } from "@material-ui/core/styles";
|
||||||
createStyles,
|
|
||||||
StyledProps,
|
|
||||||
Theme,
|
|
||||||
withStyles,
|
|
||||||
} from "@material-ui/core/styles";
|
|
||||||
|
|
||||||
import history from "../../../history";
|
import history from "../../../history";
|
||||||
import {
|
import { Route, Router, Switch, withRouter } from "react-router-dom";
|
||||||
Route,
|
|
||||||
RouteComponentProps,
|
|
||||||
Router,
|
|
||||||
Switch,
|
|
||||||
withRouter,
|
|
||||||
} from "react-router-dom";
|
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { AppState } from "../../../store";
|
import { AppState } from "../../../store";
|
||||||
import { setMenuOpen } from "../../../actions";
|
import { setMenuOpen } from "../../../actions";
|
||||||
import { ThemedComponentProps } from "@material-ui/core/styles/withTheme";
|
|
||||||
import NotFoundPage from "../../NotFoundPage";
|
import NotFoundPage from "../../NotFoundPage";
|
||||||
import ListBuckets from "./ListBuckets/ListBuckets";
|
import ListBuckets from "./ListBuckets/ListBuckets";
|
||||||
import ViewBucket from "./ViewBucket/ViewBucket";
|
import ViewBucket from "./ViewBucket/ViewBucket";
|
||||||
|
|
||||||
const styles = (theme: Theme) =>
|
|
||||||
createStyles({
|
|
||||||
root: {
|
|
||||||
display: "flex",
|
|
||||||
},
|
|
||||||
toolbar: {
|
|
||||||
background: theme.palette.background.default,
|
|
||||||
color: "black",
|
|
||||||
paddingRight: 24, // keep right padding when drawer closed
|
|
||||||
},
|
|
||||||
toolbarIcon: {
|
|
||||||
display: "flex",
|
|
||||||
alignItems: "center",
|
|
||||||
justifyContent: "flex-end",
|
|
||||||
padding: "0 8px",
|
|
||||||
...theme.mixins.toolbar,
|
|
||||||
},
|
|
||||||
appBar: {
|
|
||||||
zIndex: theme.zIndex.drawer + 1,
|
|
||||||
transition: theme.transitions.create(["width", "margin"], {
|
|
||||||
easing: theme.transitions.easing.sharp,
|
|
||||||
duration: theme.transitions.duration.leavingScreen,
|
|
||||||
}),
|
|
||||||
},
|
|
||||||
|
|
||||||
menuButton: {
|
|
||||||
marginRight: 36,
|
|
||||||
},
|
|
||||||
menuButtonHidden: {
|
|
||||||
display: "none",
|
|
||||||
},
|
|
||||||
title: {
|
|
||||||
flexGrow: 1,
|
|
||||||
},
|
|
||||||
appBarSpacer: {
|
|
||||||
height: "5px",
|
|
||||||
},
|
|
||||||
content: {
|
|
||||||
flexGrow: 1,
|
|
||||||
height: "100vh",
|
|
||||||
overflow: "auto",
|
|
||||||
},
|
|
||||||
container: {
|
|
||||||
paddingTop: theme.spacing(4),
|
|
||||||
paddingBottom: theme.spacing(4),
|
|
||||||
},
|
|
||||||
paper: {
|
|
||||||
padding: theme.spacing(2),
|
|
||||||
display: "flex",
|
|
||||||
overflow: "auto",
|
|
||||||
flexDirection: "column",
|
|
||||||
},
|
|
||||||
fixedHeight: {
|
|
||||||
minHeight: 240,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
const mapState = (state: AppState) => ({
|
const mapState = (state: AppState) => ({
|
||||||
open: state.system.sidebarOpen,
|
open: state.system.sidebarOpen,
|
||||||
});
|
});
|
||||||
|
|
||||||
const connector = connect(mapState, { setMenuOpen });
|
const connector = connect(mapState, { setMenuOpen });
|
||||||
|
|
||||||
interface BucketsProps {
|
const Buckets = () => {
|
||||||
open: boolean;
|
return (
|
||||||
title: string;
|
<Router history={history}>
|
||||||
classes: any;
|
<Switch>
|
||||||
setMenuOpen: typeof setMenuOpen;
|
<Route path="/buckets/:bucketName" component={ViewBucket} />
|
||||||
}
|
<Route path="/" component={ListBuckets} />
|
||||||
|
<Route component={NotFoundPage} />
|
||||||
|
</Switch>
|
||||||
|
</Router>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
class Buckets extends React.Component<
|
export default withRouter(connector(Buckets));
|
||||||
BucketsProps & RouteComponentProps & StyledProps & ThemedComponentProps
|
|
||||||
> {
|
|
||||||
render() {
|
|
||||||
return (
|
|
||||||
<Router history={history}>
|
|
||||||
<Switch>
|
|
||||||
<Route path="/buckets/:bucketName" component={ViewBucket} />
|
|
||||||
<Route path="/" component={ListBuckets} />
|
|
||||||
<Route component={NotFoundPage} />
|
|
||||||
</Switch>
|
|
||||||
</Router>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default withRouter(connector(withStyles(styles)(Buckets)));
|
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ const ListObjects = ({
|
|||||||
xhr.open("POST", uploadUrl, true);
|
xhr.open("POST", uploadUrl, true);
|
||||||
|
|
||||||
xhr.withCredentials = false;
|
xhr.withCredentials = false;
|
||||||
xhr.onload = function(event) {
|
xhr.onload = function (event) {
|
||||||
// TODO: handle status
|
// TODO: handle status
|
||||||
if (xhr.status === 401 || xhr.status === 403) {
|
if (xhr.status === 401 || xhr.status === 403) {
|
||||||
showSnackBarMessage("An error occurred while uploading the file.");
|
showSnackBarMessage("An error occurred while uploading the file.");
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogContentText,
|
DialogContentText,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
Grid,
|
|
||||||
LinearProgress,
|
LinearProgress,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
|
import { createStyles, Theme, withStyles } from "@material-ui/core/styles";
|
||||||
@@ -19,7 +18,7 @@ interface IDeleteTagModal {
|
|||||||
currentTags: any;
|
currentTags: any;
|
||||||
bucketName: string;
|
bucketName: string;
|
||||||
versionId: string | null;
|
versionId: string | null;
|
||||||
selectedTag: [string, string];
|
selectedTag: string[];
|
||||||
onCloseAndUpdate: (refresh: boolean) => void;
|
onCloseAndUpdate: (refresh: boolean) => void;
|
||||||
selectedObject: string;
|
selectedObject: string;
|
||||||
classes: any;
|
classes: any;
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ const ObjectDetails = ({
|
|||||||
const [retentionModalOpen, setRetentionModalOpen] = useState<boolean>(false);
|
const [retentionModalOpen, setRetentionModalOpen] = useState<boolean>(false);
|
||||||
const [tagModalOpen, setTagModalOpen] = useState<boolean>(false);
|
const [tagModalOpen, setTagModalOpen] = useState<boolean>(false);
|
||||||
const [deleteTagModalOpen, setDeleteTagModalOpen] = useState<boolean>(false);
|
const [deleteTagModalOpen, setDeleteTagModalOpen] = useState<boolean>(false);
|
||||||
const [selectedTag, setSelectedTag] = useState<[string, string]>(["", ""]);
|
const [selectedTag, setSelectedTag] = useState<string[]>(["", ""]);
|
||||||
const [legalholdOpen, setLegalholdOpen] = useState<boolean>(false);
|
const [legalholdOpen, setLegalholdOpen] = useState<boolean>(false);
|
||||||
const [actualInfo, setActualInfo] = useState<IFileInfo>(emptyFile);
|
const [actualInfo, setActualInfo] = useState<IFileInfo>(emptyFile);
|
||||||
const [versions, setVersions] = useState<IFileInfo[]>([]);
|
const [versions, setVersions] = useState<IFileInfo[]>([]);
|
||||||
@@ -447,25 +447,26 @@ const ObjectDetails = ({
|
|||||||
</Grid>
|
</Grid>
|
||||||
<Grid item xs={12} className={classes.tagsContainer}>
|
<Grid item xs={12} className={classes.tagsContainer}>
|
||||||
<div className={classes.tagText}>Tags:</div>
|
<div className={classes.tagText}>Tags:</div>
|
||||||
{tagKeys.map((tagKey, index) => {
|
{tagKeys &&
|
||||||
const tag = get(actualInfo, `tags.${tagKey}`, "");
|
tagKeys.map((tagKey, index) => {
|
||||||
if (tag !== "") {
|
const tag = get(actualInfo, `tags.${tagKey}`, "");
|
||||||
return (
|
if (tag !== "") {
|
||||||
<Chip
|
return (
|
||||||
key={`chip-${index}`}
|
<Chip
|
||||||
className={classes.tag}
|
key={`chip-${index}`}
|
||||||
size="small"
|
className={classes.tag}
|
||||||
label={`${tagKey} : ${tag}`}
|
size="small"
|
||||||
color="primary"
|
label={`${tagKey} : ${tag}`}
|
||||||
deleteIcon={<CloseIcon />}
|
color="primary"
|
||||||
onDelete={() => {
|
deleteIcon={<CloseIcon />}
|
||||||
deleteTag(tagKey, tag);
|
onDelete={() => {
|
||||||
}}
|
deleteTag(tagKey, tag);
|
||||||
/>
|
}}
|
||||||
);
|
/>
|
||||||
}
|
);
|
||||||
return null;
|
}
|
||||||
})}
|
return null;
|
||||||
|
})}
|
||||||
<Chip
|
<Chip
|
||||||
className={classes.tag}
|
className={classes.tag}
|
||||||
icon={<AddIcon />}
|
icon={<AddIcon />}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ export const download = (
|
|||||||
xhr.open("GET", path, true);
|
xhr.open("GET", path, true);
|
||||||
xhr.responseType = "blob";
|
xhr.responseType = "blob";
|
||||||
|
|
||||||
xhr.onload = function(e) {
|
xhr.onload = function (e) {
|
||||||
if (this.status === 200) {
|
if (this.status === 200) {
|
||||||
const blob = new Blob([this.response], {
|
const blob = new Blob([this.response], {
|
||||||
type: "octet/stream",
|
type: "octet/stream",
|
||||||
|
|||||||
@@ -38,11 +38,7 @@ export const years = Array.from(
|
|||||||
(_, numYear) => numYear + currentYear
|
(_, numYear) => numYear + currentYear
|
||||||
);
|
);
|
||||||
|
|
||||||
export const validDate = (
|
export const validDate = (year: string, month: string, day: string): any[] => {
|
||||||
year: string,
|
|
||||||
month: string,
|
|
||||||
day: string
|
|
||||||
): [boolean, string] => {
|
|
||||||
const currentDate = Date.parse(`${year}-${month}-${day}`);
|
const currentDate = Date.parse(`${year}-${month}-${day}`);
|
||||||
|
|
||||||
if (isNaN(currentDate)) {
|
if (isNaN(currentDate)) {
|
||||||
|
|||||||
@@ -350,4 +350,4 @@ const connector = connect(mapState, {
|
|||||||
serverIsLoading,
|
serverIsLoading,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connector(withStyles(styles)(Console));
|
export default withStyles(styles)(connector(Console));
|
||||||
|
|||||||
@@ -1,22 +1,29 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import {useTheme} from '@material-ui/core/styles';
|
import { useTheme } from "@material-ui/core/styles";
|
||||||
import {LineChart, Line, XAxis, YAxis, Label, ResponsiveContainer} from 'recharts';
|
import {
|
||||||
|
LineChart,
|
||||||
|
Line,
|
||||||
|
XAxis,
|
||||||
|
YAxis,
|
||||||
|
Label,
|
||||||
|
ResponsiveContainer,
|
||||||
|
} from "recharts";
|
||||||
import Title from "../../../common/Title";
|
import Title from "../../../common/Title";
|
||||||
|
|
||||||
// Generate Sales Data
|
// Generate Sales Data
|
||||||
function createData(time: string, amount: number) {
|
function createData(time: string, amount: number) {
|
||||||
return {time, amount};
|
return { time, amount };
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = [
|
const data = [
|
||||||
createData('00:00', 0),
|
createData("00:00", 0),
|
||||||
createData('03:00', 300),
|
createData("03:00", 300),
|
||||||
createData('06:00', 600),
|
createData("06:00", 600),
|
||||||
createData('09:00', 800),
|
createData("09:00", 800),
|
||||||
createData('12:00', 1500),
|
createData("12:00", 1500),
|
||||||
createData('15:00', 2000),
|
createData("15:00", 2000),
|
||||||
createData('18:00', 2400),
|
createData("18:00", 2400),
|
||||||
createData('21:00', 2400),
|
createData("21:00", 2400),
|
||||||
];
|
];
|
||||||
|
|
||||||
export default function Chart() {
|
export default function Chart() {
|
||||||
@@ -35,17 +42,22 @@ export default function Chart() {
|
|||||||
left: 24,
|
left: 24,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<XAxis dataKey="time" stroke={theme.palette.text.secondary}/>
|
<XAxis dataKey="time" stroke={theme.palette.text.secondary} />
|
||||||
<YAxis stroke={theme.palette.text.secondary}>
|
<YAxis stroke={theme.palette.text.secondary}>
|
||||||
<Label
|
<Label
|
||||||
angle={270}
|
angle={270}
|
||||||
position="left"
|
position="left"
|
||||||
style={{textAnchor: 'middle', fill: theme.palette.text.primary}}
|
style={{ textAnchor: "middle", fill: theme.palette.text.primary }}
|
||||||
>
|
>
|
||||||
Sales ($)
|
Sales ($)
|
||||||
</Label>
|
</Label>
|
||||||
</YAxis>
|
</YAxis>
|
||||||
<Line type="monotone" dataKey="amount" stroke={theme.palette.primary.main} dot={false}/>
|
<Line
|
||||||
|
type="monotone"
|
||||||
|
dataKey="amount"
|
||||||
|
stroke={theme.palette.primary.main}
|
||||||
|
dot={false}
|
||||||
|
/>
|
||||||
</LineChart>
|
</LineChart>
|
||||||
</ResponsiveContainer>
|
</ResponsiveContainer>
|
||||||
</React.Fragment>
|
</React.Fragment>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from "react";
|
||||||
import Link from '@material-ui/core/Link';
|
import Link from "@material-ui/core/Link";
|
||||||
import {makeStyles} from '@material-ui/core/styles';
|
import { makeStyles } from "@material-ui/core/styles";
|
||||||
import Typography from '@material-ui/core/Typography';
|
import Typography from "@material-ui/core/Typography";
|
||||||
import Title from "../../../common/Title";
|
import Title from "../../../common/Title";
|
||||||
|
|
||||||
function preventDefault(event: React.MouseEvent) {
|
function preventDefault(event: React.MouseEvent) {
|
||||||
|
|||||||
@@ -60,17 +60,17 @@ const rows = [
|
|||||||
"Long Branch, NJ",
|
"Long Branch, NJ",
|
||||||
"VISA ⠀•••• 5919",
|
"VISA ⠀•••• 5919",
|
||||||
212.79
|
212.79
|
||||||
)
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
function preventDefault(event: React.MouseEvent) {
|
function preventDefault(event: React.MouseEvent) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
const useStyles = makeStyles(theme => ({
|
const useStyles = makeStyles((theme) => ({
|
||||||
seeMore: {
|
seeMore: {
|
||||||
marginTop: theme.spacing(3)
|
marginTop: theme.spacing(3),
|
||||||
}
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export default function Orders() {
|
export default function Orders() {
|
||||||
@@ -89,7 +89,7 @@ export default function Orders() {
|
|||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{rows.map(row => (
|
{rows.map((row) => (
|
||||||
<TableRow key={row.id}>
|
<TableRow key={row.id}>
|
||||||
<TableCell>{row.date}</TableCell>
|
<TableCell>{row.date}</TableCell>
|
||||||
<TableCell>{row.name}</TableCell>
|
<TableCell>{row.name}</TableCell>
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogContentText,
|
DialogContentText,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
LinearProgress
|
LinearProgress,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import api from "../../../common/api";
|
import api from "../../../common/api";
|
||||||
import Typography from "@material-ui/core/Typography";
|
import Typography from "@material-ui/core/Typography";
|
||||||
@@ -39,15 +39,15 @@ interface IDeleteGroup {
|
|||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
createStyles({
|
createStyles({
|
||||||
errorBlock: {
|
errorBlock: {
|
||||||
color: "red"
|
color: "red",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const DeleteGroup = ({
|
const DeleteGroup = ({
|
||||||
selectedGroup,
|
selectedGroup,
|
||||||
deleteOpen,
|
deleteOpen,
|
||||||
closeDeleteModalAndRefresh,
|
closeDeleteModalAndRefresh,
|
||||||
classes
|
classes,
|
||||||
}: IDeleteGroup) => {
|
}: IDeleteGroup) => {
|
||||||
const [isDeleting, setDeleteLoading] = useState<boolean>(false);
|
const [isDeleting, setDeleteLoading] = useState<boolean>(false);
|
||||||
const [deleteError, setError] = useState<string>("");
|
const [deleteError, setError] = useState<string>("");
|
||||||
@@ -67,7 +67,7 @@ const DeleteGroup = ({
|
|||||||
|
|
||||||
closeDeleteModalAndRefresh(true);
|
closeDeleteModalAndRefresh(true);
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch((err) => {
|
||||||
setDeleteLoading(false);
|
setDeleteLoading(false);
|
||||||
setError(err);
|
setError(err);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogContentText,
|
DialogContentText,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
LinearProgress
|
LinearProgress,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import api from "../../../common/api";
|
import api from "../../../common/api";
|
||||||
import { Permission, PermissionList } from "./types";
|
import { Permission, PermissionList } from "./types";
|
||||||
@@ -32,8 +32,8 @@ import Typography from "@material-ui/core/Typography";
|
|||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
createStyles({
|
createStyles({
|
||||||
errorBlock: {
|
errorBlock: {
|
||||||
color: "red"
|
color: "red",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
interface IDeletePermissionProps {
|
interface IDeletePermissionProps {
|
||||||
@@ -54,7 +54,7 @@ class DeletePermission extends React.Component<
|
|||||||
> {
|
> {
|
||||||
state: IDeletePermissionState = {
|
state: IDeletePermissionState = {
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: ""
|
deleteError: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
removeRecord() {
|
removeRecord() {
|
||||||
@@ -69,23 +69,23 @@ class DeletePermission extends React.Component<
|
|||||||
this.setState({ deleteLoading: true }, () => {
|
this.setState({ deleteLoading: true }, () => {
|
||||||
api
|
api
|
||||||
.invoke("DELETE", `/api/v1/permissions/${selectedPermission.id}`, {
|
.invoke("DELETE", `/api/v1/permissions/${selectedPermission.id}`, {
|
||||||
id: selectedPermission.id
|
id: selectedPermission.id,
|
||||||
})
|
})
|
||||||
.then((res: PermissionList) => {
|
.then((res: PermissionList) => {
|
||||||
this.setState(
|
this.setState(
|
||||||
{
|
{
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: ""
|
deleteError: "",
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
this.props.closeDeleteModalAndRefresh(true);
|
this.props.closeDeleteModalAndRefresh(true);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch((err) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: err
|
deleteError: err,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -114,7 +114,8 @@ class DeletePermission extends React.Component<
|
|||||||
<DialogContent>
|
<DialogContent>
|
||||||
{deleteLoading && <LinearProgress />}
|
{deleteLoading && <LinearProgress />}
|
||||||
<DialogContentText id="alert-dialog-description">
|
<DialogContentText id="alert-dialog-description">
|
||||||
Are you sure you want to delete permission{" "}<b>{selectedPermission.name}</b>?
|
Are you sure you want to delete permission{" "}
|
||||||
|
<b>{selectedPermission.name}</b>?
|
||||||
{deleteError !== "" && (
|
{deleteError !== "" && (
|
||||||
<React.Fragment>
|
<React.Fragment>
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import {
|
|||||||
IconButton,
|
IconButton,
|
||||||
LinearProgress,
|
LinearProgress,
|
||||||
TableFooter,
|
TableFooter,
|
||||||
TablePagination
|
TablePagination,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import Typography from "@material-ui/core/Typography";
|
import Typography from "@material-ui/core/Typography";
|
||||||
import DeleteIcon from "@material-ui/icons/Delete";
|
import DeleteIcon from "@material-ui/icons/Delete";
|
||||||
@@ -48,49 +48,49 @@ import PlayArrowRoundedIcon from "@material-ui/icons/PlayArrowRounded";
|
|||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
createStyles({
|
createStyles({
|
||||||
seeMore: {
|
seeMore: {
|
||||||
marginTop: theme.spacing(3)
|
marginTop: theme.spacing(3),
|
||||||
},
|
},
|
||||||
paper: {
|
paper: {
|
||||||
display: "flex",
|
display: "flex",
|
||||||
overflow: "auto",
|
overflow: "auto",
|
||||||
flexDirection: "column"
|
flexDirection: "column",
|
||||||
},
|
},
|
||||||
addSideBar: {
|
addSideBar: {
|
||||||
width: "320px",
|
width: "320px",
|
||||||
padding: "20px"
|
padding: "20px",
|
||||||
},
|
},
|
||||||
errorBlock: {
|
errorBlock: {
|
||||||
color: "red"
|
color: "red",
|
||||||
},
|
},
|
||||||
tableToolbar: {
|
tableToolbar: {
|
||||||
paddingLeft: theme.spacing(2),
|
paddingLeft: theme.spacing(2),
|
||||||
paddingRight: theme.spacing(0)
|
paddingRight: theme.spacing(0),
|
||||||
},
|
},
|
||||||
wrapCell: {
|
wrapCell: {
|
||||||
maxWidth: "200px",
|
maxWidth: "200px",
|
||||||
whiteSpace: "normal",
|
whiteSpace: "normal",
|
||||||
wordWrap: "break-word"
|
wordWrap: "break-word",
|
||||||
},
|
},
|
||||||
minTableHeader: {
|
minTableHeader: {
|
||||||
color: "#393939",
|
color: "#393939",
|
||||||
"& tr": {
|
"& tr": {
|
||||||
"& th": {
|
"& th": {
|
||||||
fontWeight: "bold"
|
fontWeight: "bold",
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
actionsTray: {
|
actionsTray: {
|
||||||
textAlign: "right",
|
textAlign: "right",
|
||||||
"& button": {
|
"& button": {
|
||||||
marginLeft: 10
|
marginLeft: 10,
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
searchField: {
|
searchField: {
|
||||||
background: "#FFFFFF",
|
background: "#FFFFFF",
|
||||||
padding: 12,
|
padding: 12,
|
||||||
borderRadius: 5,
|
borderRadius: 5,
|
||||||
boxShadow: "0px 3px 6px #00000012"
|
boxShadow: "0px 3px 6px #00000012",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
interface IPermissionsProps {
|
interface IPermissionsProps {
|
||||||
@@ -124,7 +124,7 @@ class Permissions extends React.Component<
|
|||||||
page: 0,
|
page: 0,
|
||||||
rowsPerPage: 10,
|
rowsPerPage: 10,
|
||||||
deleteOpen: false,
|
deleteOpen: false,
|
||||||
selectedPermission: null
|
selectedPermission: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
fetchRecords() {
|
fetchRecords() {
|
||||||
@@ -141,7 +141,7 @@ class Permissions extends React.Component<
|
|||||||
loading: false,
|
loading: false,
|
||||||
records: res.permissions,
|
records: res.permissions,
|
||||||
totalRecords: res.total,
|
totalRecords: res.total,
|
||||||
error: ""
|
error: "",
|
||||||
});
|
});
|
||||||
// if we get 0 results, and page > 0 , go down 1 page
|
// if we get 0 results, and page > 0 , go down 1 page
|
||||||
if (
|
if (
|
||||||
@@ -156,7 +156,7 @@ class Permissions extends React.Component<
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch((err) => {
|
||||||
this.setState({ loading: false, error: err });
|
this.setState({ loading: false, error: err });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -190,7 +190,7 @@ class Permissions extends React.Component<
|
|||||||
page,
|
page,
|
||||||
rowsPerPage,
|
rowsPerPage,
|
||||||
deleteOpen,
|
deleteOpen,
|
||||||
selectedPermission
|
selectedPermission,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const handleChangePage = (event: unknown, newPage: number) => {
|
const handleChangePage = (event: unknown, newPage: number) => {
|
||||||
@@ -211,14 +211,14 @@ class Permissions extends React.Component<
|
|||||||
const confirmDeletePermission = (selectedPermission: Permission) => {
|
const confirmDeletePermission = (selectedPermission: Permission) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
deleteOpen: true,
|
deleteOpen: true,
|
||||||
selectedPermission: selectedPermission
|
selectedPermission: selectedPermission,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const editPermission = (selectedPermission: Permission) => {
|
const editPermission = (selectedPermission: Permission) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
addScreenOpen: true,
|
addScreenOpen: true,
|
||||||
selectedPermission: selectedPermission
|
selectedPermission: selectedPermission,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -266,7 +266,7 @@ class Permissions extends React.Component<
|
|||||||
<InputAdornment position="start">
|
<InputAdornment position="start">
|
||||||
<SearchIcon />
|
<SearchIcon />
|
||||||
</InputAdornment>
|
</InputAdornment>
|
||||||
)
|
),
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<Button
|
<Button
|
||||||
@@ -276,7 +276,7 @@ class Permissions extends React.Component<
|
|||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
addScreenOpen: true,
|
addScreenOpen: true,
|
||||||
selectedPermission: null
|
selectedPermission: null,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -288,7 +288,7 @@ class Permissions extends React.Component<
|
|||||||
startIcon={<PlayArrowRoundedIcon />}
|
startIcon={<PlayArrowRoundedIcon />}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.setState({
|
this.setState({
|
||||||
addScreenOpen: true
|
addScreenOpen: true,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -315,7 +315,7 @@ class Permissions extends React.Component<
|
|||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHead>
|
</TableHead>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{records.map(row => (
|
{records.map((row) => (
|
||||||
<TableRow key={row.name}>
|
<TableRow key={row.name}>
|
||||||
<TableCell padding="checkbox">
|
<TableCell padding="checkbox">
|
||||||
<Checkbox
|
<Checkbox
|
||||||
@@ -332,7 +332,7 @@ class Permissions extends React.Component<
|
|||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell>{row.effect}</TableCell>
|
<TableCell>{row.effect}</TableCell>
|
||||||
<TableCell className={classes.wrapCell}>
|
<TableCell className={classes.wrapCell}>
|
||||||
{row.resources.map(r => r.bucket_name).join(", ")}
|
{row.resources.map((r) => r.bucket_name).join(", ")}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
{actionLabel(row.actions[0].type)}
|
{actionLabel(row.actions[0].type)}
|
||||||
@@ -368,7 +368,7 @@ class Permissions extends React.Component<
|
|||||||
page={page}
|
page={page}
|
||||||
SelectProps={{
|
SelectProps={{
|
||||||
inputProps: { "aria-label": "rows per page" },
|
inputProps: { "aria-label": "rows per page" },
|
||||||
native: true
|
native: true,
|
||||||
}}
|
}}
|
||||||
onChangePage={handleChangePage}
|
onChangePage={handleChangePage}
|
||||||
onChangeRowsPerPage={handleChangeRowsPerPage}
|
onChangeRowsPerPage={handleChangeRowsPerPage}
|
||||||
|
|||||||
@@ -15,16 +15,16 @@
|
|||||||
// 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 interface Permission {
|
export interface Permission {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
slug: string;
|
slug: string;
|
||||||
description: string;
|
description: string;
|
||||||
effect: string;
|
effect: string;
|
||||||
resources: any[];
|
resources: any[];
|
||||||
actions: any[];
|
actions: any[];
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PermissionList {
|
export interface PermissionList {
|
||||||
permissions: Permission[];
|
permissions: Permission[];
|
||||||
total:number;
|
total: number;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import {
|
|||||||
DialogContent,
|
DialogContent,
|
||||||
DialogContentText,
|
DialogContentText,
|
||||||
DialogTitle,
|
DialogTitle,
|
||||||
LinearProgress
|
LinearProgress,
|
||||||
} from "@material-ui/core";
|
} from "@material-ui/core";
|
||||||
import api from "../../../common/api";
|
import api from "../../../common/api";
|
||||||
import { User, UsersList } from "./types";
|
import { User, UsersList } from "./types";
|
||||||
@@ -32,8 +32,8 @@ import Typography from "@material-ui/core/Typography";
|
|||||||
const styles = (theme: Theme) =>
|
const styles = (theme: Theme) =>
|
||||||
createStyles({
|
createStyles({
|
||||||
errorBlock: {
|
errorBlock: {
|
||||||
color: "red"
|
color: "red",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
interface IDeleteUserProps {
|
interface IDeleteUserProps {
|
||||||
@@ -51,7 +51,7 @@ interface IDeleteUserState {
|
|||||||
class DeleteUser extends React.Component<IDeleteUserProps, IDeleteUserState> {
|
class DeleteUser extends React.Component<IDeleteUserProps, IDeleteUserState> {
|
||||||
state: IDeleteUserState = {
|
state: IDeleteUserState = {
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: ""
|
deleteError: "",
|
||||||
};
|
};
|
||||||
|
|
||||||
removeRecord() {
|
removeRecord() {
|
||||||
@@ -66,23 +66,23 @@ class DeleteUser extends React.Component<IDeleteUserProps, IDeleteUserState> {
|
|||||||
this.setState({ deleteLoading: true }, () => {
|
this.setState({ deleteLoading: true }, () => {
|
||||||
api
|
api
|
||||||
.invoke("DELETE", `/api/v1/users/${selectedUser.accessKey}`, {
|
.invoke("DELETE", `/api/v1/users/${selectedUser.accessKey}`, {
|
||||||
id: selectedUser.id
|
id: selectedUser.id,
|
||||||
})
|
})
|
||||||
.then((res: UsersList) => {
|
.then((res: UsersList) => {
|
||||||
this.setState(
|
this.setState(
|
||||||
{
|
{
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: ""
|
deleteError: "",
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
this.props.closeDeleteModalAndRefresh(true);
|
this.props.closeDeleteModalAndRefresh(true);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch((err) => {
|
||||||
this.setState({
|
this.setState({
|
||||||
deleteLoading: false,
|
deleteLoading: false,
|
||||||
deleteError: err
|
deleteError: err,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
6
portal-ui/tsconfig.dev.json
Normal file
6
portal-ui/tsconfig.dev.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "react-jsxdev"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es5",
|
"target": "es2015",
|
||||||
"lib": [
|
"lib": [
|
||||||
"dom",
|
"dom",
|
||||||
"dom.iterable",
|
"dom.iterable",
|
||||||
@@ -17,10 +17,10 @@
|
|||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
"jsx": "react",
|
"jsx": "react-jsx",
|
||||||
"downlevelIteration": true
|
"downlevelIteration": true
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
"src"
|
"src"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user