CEC-4044 update manifest form (#312)

* CEC-4044 update manifest form

* Show env input if there are options
This commit is contained in:
John Wu
2023-04-10 10:59:01 -07:00
committed by GitHub
parent c83f4dde01
commit cfb1b7d74e
10 changed files with 182 additions and 4 deletions

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=https://gw.cec-euprd.fiskerinc.com/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://superset.cec-euprd.fiskerinc.com REACT_APP_SUPERSET_URL=https://superset.cec-euprd.fiskerinc.com
REACT_APP_ECCKEY_ENV=

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=https://gw.cec-prd.fiskerinc.com/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://superset.cec-prd.fiskerinc.com REACT_APP_SUPERSET_URL=https://superset.cec-prd.fiskerinc.com
REACT_APP_ECCKEY_ENV=

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com
REACT_APP_ECCKEY_ENV=stage,prod

View File

@@ -8,4 +8,4 @@ REACT_APP_OTA_SERVICE_URL=http://localhost/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com
REACT_APP_ECCKEY_ENV=dev,stage,prod

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=https://gw.cloud.fiskerinc.com/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://superset.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://superset.cloud.fiskerinc.com
REACT_APP_ECCKEY_ENV=stage

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com
REACT_APP_ECCKEY_ENV=prod

View File

@@ -8,3 +8,4 @@ REACT_APP_OTA_SERVICE_URL=http://localhost/ota_update
REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll REACT_APP_SECURITY_DLL_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_32.dll
REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll REACT_APP_SECURITY_DLL_64_URL=https://assets.fiskerdps.com/cloud-supplier/fisker_security_64.dll
REACT_APP_SUPERSET_URL=https://dev-superset.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://dev-superset.cloud.fiskerinc.com
REACT_APP_ECCKEY_ENV=dev,stage,prod

View File

@@ -218,6 +218,122 @@ exports[`Manifest Details Component Render 1`] = `
</fieldset> </fieldset>
</div> </div>
</div> </div>
<div
class="MuiFormControl-root MuiFormControl-marginNormal"
>
<label
class="MuiFormLabel-root MuiInputLabel-root makeStyles-whiteBackground-0 MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-outlined"
data-shrink="false"
>
Rollback
</label>
<div
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-formControl"
>
<select
aria-invalid="false"
class="MuiSelect-root MuiSelect-select MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input"
>
<option
value="true"
>
True
</option>
<option
value="false"
>
False
</option>
</select>
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiSelect-icon MuiSelect-iconOutlined"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M7 10l5 5 5-5z"
/>
</svg>
<fieldset
aria-hidden="true"
class="PrivateNotchedOutline-root-0 MuiOutlinedInput-notchedOutline"
style="padding-left: 8px;"
>
<legend
class="PrivateNotchedOutline-legend-0"
style="width: 0.01px;"
>
<span>
</span>
</legend>
</fieldset>
</div>
</div>
<div
class="MuiFormControl-root MuiFormControl-marginNormal"
>
<label
class="MuiFormLabel-root MuiInputLabel-root makeStyles-whiteBackground-0 MuiInputLabel-formControl MuiInputLabel-animated MuiInputLabel-shrink MuiInputLabel-outlined MuiFormLabel-filled"
data-shrink="true"
>
ECC Keys
</label>
<div
class="MuiInputBase-root MuiOutlinedInput-root MuiInputBase-formControl"
>
<select
aria-invalid="false"
class="MuiSelect-root MuiSelect-select MuiSelect-outlined MuiInputBase-input MuiOutlinedInput-input"
>
<option
value="current"
>
local
</option>
<option
value="dev"
>
dev
</option>
<option
value="stage"
>
stage
</option>
<option
value="prod"
>
prod
</option>
</select>
<svg
aria-hidden="true"
class="MuiSvgIcon-root MuiSelect-icon MuiSelect-iconOutlined"
focusable="false"
viewBox="0 0 24 24"
>
<path
d="M7 10l5 5 5-5z"
/>
</svg>
<fieldset
aria-hidden="true"
class="PrivateNotchedOutline-root-0 MuiOutlinedInput-notchedOutline"
style="padding-left: 8px;"
>
<legend
class="PrivateNotchedOutline-legend-0"
style="width: 0.01px;"
>
<span>
</span>
</legend>
</fieldset>
</div>
</div>
<button <button
aria-label="send command" aria-label="send command"
class="MuiButtonBase-root MuiButton-root MuiButton-contained makeStyles-submit-0 MuiButton-containedPrimary MuiButton-fullWidth" class="MuiButtonBase-root MuiButton-root MuiButton-contained makeStyles-submit-0 MuiButton-containedPrimary MuiButton-fullWidth"

View File

@@ -2,6 +2,7 @@ import { Button, FormControl, TextField } from "@material-ui/core";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
import { Redirect } from "react-router"; import { Redirect } from "react-router";
import { useParams } from "react-router-dom"; import { useParams } from "react-router-dom";
import { ENVS } from "../../../utils/key-envs";
import { ManifestsProvider, useManifestsContext } from "../../Contexts/ManifestsContext"; import { ManifestsProvider, useManifestsContext } from "../../Contexts/ManifestsContext";
import { useStatusContext } from "../../Contexts/StatusContext"; import { useStatusContext } from "../../Contexts/StatusContext";
import { useUserContext } from "../../Contexts/UserContext"; import { useUserContext } from "../../Contexts/UserContext";
@@ -18,6 +19,11 @@ const activeStates = [
{value: false, label: "Archived" }, {value: false, label: "Archived" },
]; ];
const booleanStates = [
{value: true, label: "True" },
{value: false, label: "False" },
];
const emptyManifest = { const emptyManifest = {
name: "", name: "",
version: "", version: "",
@@ -43,7 +49,8 @@ const MainForm = () => {
const [name, setName] = useState(""); const [name, setName] = useState("");
const [type, setType] = useState(""); const [type, setType] = useState("");
const [active, setActive] = useState(true); // So !active = archived const [active, setActive] = useState(true); // So !active = archived
const [rollback, setRollback] = useState(true);
const [env, setEnv] = useState("current");
const changeName = (e) => { const changeName = (e) => {
setName(e.target.value); setName(e.target.value);
@@ -57,10 +64,18 @@ const MainForm = () => {
setActive(e.target.value === 'true') setActive(e.target.value === 'true')
} }
const changeRollback = (e) => {
setRollback(e.target.value === 'true')
}
const changeEnv = (e) => {
setEnv(e.target.value)
}
const onSubmit = async (e) => { const onSubmit = async (e) => {
e.preventDefault(); e.preventDefault();
try { try {
const result = await updateManifest(manifest_id, { name, type, active }, token); const result = await updateManifest(manifest_id, { name, type, active, rollback, env }, token);
if (!result || result.error) return; if (!result || result.error) return;
setMessage(`Updated manifest ${manifest_id}`); setMessage(`Updated manifest ${manifest_id}`);
@@ -81,7 +96,9 @@ const MainForm = () => {
setManifest(result); setManifest(result);
setName(result.name); setName(result.name);
setType(result.type); setType(result.type);
setActive(result.active) setActive(result.active);
setRollback(result.rollback);
setEnv(result.env ?? "current");
} }
} catch (e) { } catch (e) {
setMessage(e.message); setMessage(e.message);
@@ -146,6 +163,10 @@ const MainForm = () => {
/> />
<DropDownList label="Type" data={manifestTypes} classes={classes} onChange={changeType} value={type} /> <DropDownList label="Type" data={manifestTypes} classes={classes} onChange={changeType} value={type} />
<DropDownList label="Active" data={activeStates} classes={classes} onChange={changeActive} value={active}/> <DropDownList label="Active" data={activeStates} classes={classes} onChange={changeActive} value={active}/>
<DropDownList label="Rollback" data={booleanStates} classes={classes} onChange={changeRollback} value={rollback}/>
{
ENVS.length > 1 && <DropDownList label="ECC Keys" data={ENVS} classes={classes} onChange={changeEnv} value={env}/>
}
<Button <Button
type="submit" type="submit"
aria-label="send command" aria-label="send command"

35
src/utils/key-envs.js Normal file
View File

@@ -0,0 +1,35 @@
const KEY_ENVS = process.env.REACT_APP_ECCKEY_ENV;
const ENV = process.env.REACT_APP_ENV;
export const CURRENT_ENV = "current";
const GetEnvName = (value) => {
if (value === "cec-prd" || value === "cec-euprd") return "prd";
return value;
}
const MakeList = () => {
const result = [];
const list = KEY_ENVS.split(",");
list.forEach((env) => {
if (env.length > 0) result.push({
value: env,
label: env,
})
})
result.unshift({
value: CURRENT_ENV,
label: GetEnvName(ENV),
});
return result;
}
export const GetEnvValue = (value) => {
if (value === ENV) return CURRENT_ENV;
return value;
}
export const ENVS = MakeList();