Skip to content
Snippets Groups Projects
rules.tsx 1.7 KiB
Newer Older
GyDi's avatar
GyDi committed
import { useState } from "react";
GyDi's avatar
GyDi committed
import {
  Box,
  Button,
  Grid,
  Slide,
  Snackbar,
  TextField,
  Typography,
} from "@mui/material";
import { importProfile } from "../services/command";
GyDi's avatar
GyDi committed

const RulesPage = () => {
GyDi's avatar
GyDi committed
  const [url, setUrl] = useState("");
GyDi's avatar
GyDi committed
  const [message, setMessage] = useState("");
  const [disabled, setDisabled] = useState(false);
GyDi's avatar
GyDi committed

GyDi's avatar
GyDi committed
  const onClick = () => {
GyDi's avatar
GyDi committed
    if (!url) return;
GyDi's avatar
GyDi committed
    setUrl("");
    setDisabled(true);
    importProfile(url)
      .then(() => setMessage("Successfully import profile."))
      .catch(() => setMessage("Failed to import profile."))
      .finally(() => setDisabled(false));
GyDi's avatar
GyDi committed
  };

GyDi's avatar
GyDi committed
  return (
    <Box sx={{ width: 0.9, maxWidth: "850px", mx: "auto", mb: 2 }}>
      <Typography variant="h4" component="h1" sx={{ py: 2 }}>
        Rules
      </Typography>
GyDi's avatar
GyDi committed

      <Grid
        container
        spacing={2}
        justifyContent="space-between"
        alignItems="center"
      >
        <Grid item xs={9}>
          <TextField
            label="Profile Url"
GyDi's avatar
GyDi committed
            size="medium"
GyDi's avatar
GyDi committed
            fullWidth
            value={url}
            onChange={(e) => setUrl(e.target.value)}
          />
        </Grid>
        <Grid item>
GyDi's avatar
GyDi committed
          <Button
            disabled={disabled}
            size="large"
            variant="contained"
            onClick={onClick}
          >
            Import
GyDi's avatar
GyDi committed
          </Button>
        </Grid>
      </Grid>
GyDi's avatar
GyDi committed

      <Snackbar
        open={!!message}
        anchorOrigin={{ vertical: "top", horizontal: "right" }}
        autoHideDuration={3000}
        onClose={() => setMessage("")}
        message={message}
        TransitionComponent={(p) => <Slide {...p} direction="left" />}
      />
GyDi's avatar
GyDi committed
    </Box>
  );
};

export default RulesPage;