|
@@ -1,9 +1,17 @@
|
|
|
import React from "react";
|
|
import React from "react";
|
|
|
-import { KeyValueArrayField, KeyValueArrayFieldState } from "../types";
|
|
|
|
|
|
|
+import {
|
|
|
|
|
+ GetFinalVariablesFunction,
|
|
|
|
|
+ InputField,
|
|
|
|
|
+ KeyValueArrayField,
|
|
|
|
|
+ KeyValueArrayFieldState,
|
|
|
|
|
+} from "../types";
|
|
|
import sliders from "../../../assets/sliders.svg";
|
|
import sliders from "../../../assets/sliders.svg";
|
|
|
import upload from "../../../assets/upload.svg";
|
|
import upload from "../../../assets/upload.svg";
|
|
|
import styled from "styled-components";
|
|
import styled from "styled-components";
|
|
|
import useFormField from "../hooks/useFormField";
|
|
import useFormField from "../hooks/useFormField";
|
|
|
|
|
+import Modal from "../../../main/home/modals/Modal";
|
|
|
|
|
+import LoadEnvGroupModal from "../../../main/home/modals/LoadEnvGroupModal";
|
|
|
|
|
+import EnvEditorModal from "../../../main/home/modals/EnvEditorModal";
|
|
|
|
|
|
|
|
interface Props extends KeyValueArrayField {
|
|
interface Props extends KeyValueArrayField {
|
|
|
id: string;
|
|
id: string;
|
|
@@ -21,10 +29,136 @@ const KeyValueArray: React.FC<Props> = (props) => {
|
|
|
}
|
|
}
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- console.log(state);
|
|
|
|
|
-
|
|
|
|
|
if (state == undefined) return <></>;
|
|
if (state == undefined) return <></>;
|
|
|
|
|
|
|
|
|
|
+ const parseEnv = (src: any, options: any) => {
|
|
|
|
|
+ const debug = Boolean(options && options.debug);
|
|
|
|
|
+ const obj = {} as Record<string, string>;
|
|
|
|
|
+ const NEWLINE = "\n";
|
|
|
|
|
+ const RE_INI_KEY_VAL = /^\s*([\w.-]+)\s*=\s*(.*)?\s*$/;
|
|
|
|
|
+ const RE_NEWLINES = /\\n/g;
|
|
|
|
|
+ const NEWLINES_MATCH = /\n|\r|\r\n/;
|
|
|
|
|
+
|
|
|
|
|
+ // convert Buffers before splitting into lines and processing
|
|
|
|
|
+ src
|
|
|
|
|
+ .toString()
|
|
|
|
|
+ .split(NEWLINES_MATCH)
|
|
|
|
|
+ .forEach(function (line: any, idx: any) {
|
|
|
|
|
+ // matching "KEY' and 'VAL' in 'KEY=VAL'
|
|
|
|
|
+ const keyValueArr = line.match(RE_INI_KEY_VAL);
|
|
|
|
|
+ // matched?
|
|
|
|
|
+ if (keyValueArr != null) {
|
|
|
|
|
+ const key = keyValueArr[1];
|
|
|
|
|
+ // default undefined or missing values to empty string
|
|
|
|
|
+ let val = keyValueArr[2] || "";
|
|
|
|
|
+ const end = val.length - 1;
|
|
|
|
|
+ const isDoubleQuoted = val[0] === '"' && val[end] === '"';
|
|
|
|
|
+ const isSingleQuoted = val[0] === "'" && val[end] === "'";
|
|
|
|
|
+
|
|
|
|
|
+ // if single or double quoted, remove quotes
|
|
|
|
|
+ if (isSingleQuoted || isDoubleQuoted) {
|
|
|
|
|
+ val = val.substring(1, end);
|
|
|
|
|
+
|
|
|
|
|
+ // if double quoted, expand newlines
|
|
|
|
|
+ if (isDoubleQuoted) {
|
|
|
|
|
+ val = val.replace(RE_NEWLINES, NEWLINE);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // remove surrounding whitespace
|
|
|
|
|
+ val = val.trim();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ obj[key] = val;
|
|
|
|
|
+ } else if (debug) {
|
|
|
|
|
+ console.log(
|
|
|
|
|
+ `did not match key and value when parsing line ${idx + 1}: ${line}`
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ return obj;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const readFile = (env: string) => {
|
|
|
|
|
+ let envObj = parseEnv(env, null);
|
|
|
|
|
+ let push = true;
|
|
|
|
|
+
|
|
|
|
|
+ for (let key in envObj) {
|
|
|
|
|
+ for (var i = 0; i < state.values.length; i++) {
|
|
|
|
|
+ let existingKey = state.values[i]["key"];
|
|
|
|
|
+ if (key === existingKey) {
|
|
|
|
|
+ state.values[i]["value"] = envObj[key];
|
|
|
|
|
+ push = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (push) {
|
|
|
|
|
+ setState((prev) => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ values: [...prev.values, { key, value: envObj[key] }],
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const renderEditorModal = () => {
|
|
|
|
|
+ if (state.showEditorModal) {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <Modal
|
|
|
|
|
+ onRequestClose={() =>
|
|
|
|
|
+ setState(() => {
|
|
|
|
|
+ return { showEditorModal: false };
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ width="60%"
|
|
|
|
|
+ height="80%"
|
|
|
|
|
+ >
|
|
|
|
|
+ <EnvEditorModal
|
|
|
|
|
+ closeModal={() =>
|
|
|
|
|
+ setState(() => {
|
|
|
|
|
+ return { showEditorModal: false };
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ setEnvVariables={(envFile: string) => readFile(envFile)}
|
|
|
|
|
+ />
|
|
|
|
|
+ </Modal>
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const renderEnvModal = () => {
|
|
|
|
|
+ if (state.showEnvModal) {
|
|
|
|
|
+ return (
|
|
|
|
|
+ <Modal
|
|
|
|
|
+ onRequestClose={() =>
|
|
|
|
|
+ setState(() => {
|
|
|
|
|
+ return { showEnvModal: false };
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ width="765px"
|
|
|
|
|
+ height="542px"
|
|
|
|
|
+ >
|
|
|
|
|
+ <LoadEnvGroupModal
|
|
|
|
|
+ existingValues={variables}
|
|
|
|
|
+ namespace={variables.namespace}
|
|
|
|
|
+ clusterId={variables.clusterId}
|
|
|
|
|
+ closeModal={() =>
|
|
|
|
|
+ setState(() => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ showEnvModal: false,
|
|
|
|
|
+ };
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ setValues={(values) => {
|
|
|
|
|
+ alert("not implemented yet");
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ </Modal>
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
const renderDeleteButton = (i: number) => {
|
|
const renderDeleteButton = (i: number) => {
|
|
|
if (!props.isReadOnly) {
|
|
if (!props.isReadOnly) {
|
|
|
return (
|
|
return (
|
|
@@ -178,12 +312,20 @@ const KeyValueArray: React.FC<Props> = (props) => {
|
|
|
</InputWrapper>
|
|
</InputWrapper>
|
|
|
)}
|
|
)}
|
|
|
</StyledInputArray>
|
|
</StyledInputArray>
|
|
|
- {/*{renderEnvModal()}*/}
|
|
|
|
|
- {/*{renderEditorModal()}*/}
|
|
|
|
|
|
|
+ {renderEnvModal()}
|
|
|
|
|
+ {renderEditorModal()}
|
|
|
</>
|
|
</>
|
|
|
);
|
|
);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+export const getFinalVariablesForKeyValueArray: GetFinalVariablesFunction = (
|
|
|
|
|
+ vars,
|
|
|
|
|
+ props: KeyValueArrayField,
|
|
|
|
|
+ state: KeyValueArrayFieldState
|
|
|
|
|
+) => {
|
|
|
|
|
+ return {};
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
export default KeyValueArray;
|
|
export default KeyValueArray;
|
|
|
|
|
|
|
|
const Spacer = styled.div`
|
|
const Spacer = styled.div`
|