diff --git a/packages/hoppscotch-app/components/environments/Details.vue b/packages/hoppscotch-app/components/environments/Details.vue
index e28e5ab13..33c7a6c10 100644
--- a/packages/hoppscotch-app/components/environments/Details.vue
+++ b/packages/hoppscotch-app/components/environments/Details.vue
@@ -50,18 +50,18 @@
()
+const idTicker = ref(0)
+
const name = ref(null)
-const vars = ref([{ key: "", value: "" }])
+const vars = ref([
+ { id: idTicker.value++, env: { key: "", value: "" } },
+])
const clearIcon = refAutoReset<"trash-2" | "check">("trash-2", 1000)
@@ -187,15 +202,15 @@ const workingEnv = computed(() => {
const envList = useReadonlyStream(environments$, []) || props.envVars()
const evnExpandError = computed(() => {
- for (const variable of vars.value) {
- const result = parseTemplateStringE(variable.value.toString(), vars.value)
+ const variables = pipe(
+ vars.value,
+ A.map((e) => e.env)
+ )
- if (E.isLeft(result)) {
- console.error("error", result.left)
- return true
- }
- }
- return false
+ return pipe(
+ variables,
+ A.exists(({ value }) => E.isLeft(parseTemplateStringE(value, variables)))
+ )
})
const liveEnvs = computed(() => {
@@ -218,21 +233,38 @@ watch(
(show) => {
if (show) {
name.value = workingEnv.value?.name ?? null
- vars.value = clone(workingEnv.value?.variables ?? [])
+ vars.value = pipe(
+ workingEnv.value?.variables ?? [],
+ A.map((e) => ({
+ id: idTicker.value++,
+ env: clone(e),
+ }))
+ )
}
}
)
const clearContent = () => {
- vars.value = []
+ vars.value = [
+ {
+ id: idTicker.value++,
+ env: {
+ key: "",
+ value: "",
+ },
+ },
+ ]
clearIcon.value = "check"
toast.success(`${t("state.cleared")}`)
}
const addEnvironmentVariable = () => {
vars.value.push({
- key: "",
- value: "",
+ id: idTicker.value++,
+ env: {
+ key: "",
+ value: "",
+ },
})
}
@@ -246,9 +278,19 @@ const saveEnvironment = () => {
return
}
+ const filterdVariables = pipe(
+ vars.value,
+ A.filterMap(
+ flow(
+ O.fromPredicate((e) => e.env.key !== ""),
+ O.map((e) => e.env)
+ )
+ )
+ )
+
const environmentUpdated: Environment = {
name: name.value,
- variables: vars.value,
+ variables: filterdVariables,
}
if (props.action === "new") {