import { Button, FormControl, TextField } from "@material-ui/core";
import React, { useEffect, useState } from "react";
import { Redirect } from "react-router";
import { useParams } from "react-router-dom";
import { ENVS } from "../../../utils/key-envs";
import { ManifestsProvider, useManifestsContext } from "../../Contexts/ManifestsContext";
import { useStatusContext } from "../../Contexts/StatusContext";
import { useUserContext } from "../../Contexts/UserContext";
import { DropDownList } from "../../Controls/DropDownList";
import { RoleWrap } from "../../Controls/RoleWrap";
import { Permissions } from "../../../utils/roles";
import useStyles from "../../useStyles";
const manifestTypes = [
{ value: "standard", label: "Standard" },
{ value: "forced", label: "Forced" },
];
const activeStates = [
{value: true, label: "Active" },
{value: false, label: "Archived" },
];
const booleanStates = [
{value: true, label: "True" },
{value: false, label: "False" },
];
const emptyManifest = {
name: "",
version: "",
};
const MainForm = () => {
const { manifest_id } = useParams();
const classes = useStyles();
const [manifest, setManifest] = useState(null);
const [redirect, setRedirect] = useState(null);
const { getManifest, busy, migrateManifest, updateManifest } = useManifestsContext();
const {
token: {
idToken: { jwtToken: token },
},
groups,
providers,
} = useUserContext();
const { setMessage, setTitle, setSitePath } = useStatusContext();
const [name, setName] = useState("");
const [type, setType] = useState("");
const [active, setActive] = useState(true); // So !active = archived
const [rollback, setRollback] = useState(true);
const [env, setEnv] = useState("current");
const changeName = (e) => {
setName(e.target.value);
}
const changeType = (e) => {
setType(e.target.value);
};
const changeActive = (e) => {
setActive(e.target.value === 'true')
}
const changeRollback = (e) => {
setRollback(e.target.value === 'true')
}
const changeEnv = (e) => {
setEnv(e.target.value)
}
const onSubmit = async (e) => {
e.preventDefault();
try {
const result = await updateManifest(manifest_id, { name, type, active, rollback, env }, token);
if (!result || result.error) return;
setMessage(`Updated manifest ${manifest_id}`);
setRedirect(`/package-status/${manifest_id}`);
} catch (e) {
setMessage(`Failed to update manifest ${manifest_id}`);
}
}
const manifestMigrate = async (e) => {
e.preventDefault();
try{
const result = await migrateManifest(manifest_id, token)
if (!result || result.error) return;
setMessage(`Manifest Migrated ${manifest_id}`)
} catch(e) {
setMessage(`Failed to update manifest ${manifest_id}`)
}
}
useEffect(() => {
(async () => {
try {
const result = await getManifest(manifest_id, token);
if (result.error) {
throw new Error(`Get manifest error. ${result.message}`);
} else {
setManifest(result);
setName(result.name);
setType(result.type);
setActive(result.active);
setRollback(result.rollback);
setEnv(result.env ?? "current");
}
} catch (e) {
setMessage(e.message);
}
})();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [token]);
useEffect(() => {
const curManifest = manifest ? manifest : emptyManifest;
setTitle("Update Package");
setSitePath([
{
label: "Deployments",
link: "/packages",
},
{
label: `Update Package ${curManifest.name} ${curManifest.version}`,
},
]);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [manifest]);
if (redirect && redirect.length > 0) {
return