chore: add warning prompt for same response name (#4699)

Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
Nivedin 2025-01-29 14:30:01 +05:30 committed by GitHub
parent fa1159da53
commit 2b9a334881
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 57 additions and 7 deletions

View file

@ -736,6 +736,7 @@
"preview_html": "Preview HTML",
"raw": "Raw",
"renamed": "Response renamed",
"same_name_inspector_warning": "Response name already exists for this request, if saved it will overwrite the existing response",
"size": "Size",
"status": "Status",
"time": "Time",

View file

@ -9,7 +9,8 @@
/>
</div>
<HttpSaveResponseName
v-model="responseName"
v-model:response-name="responseName"
:has-same-name-response="hasSameNameResponse"
:show="showSaveResponseName"
@submit="onSaveAsExample"
@hide-modal="showSaveResponseName = false"
@ -56,10 +57,18 @@ const hasResponse = computed(
const responseName = ref("")
const showSaveResponseName = ref(false)
const hasSameNameResponse = computed(() => {
return responseName.value
? responseName.value in doc.value.request.responses
: false
})
const loading = computed(() => doc.value.response?.type === "loading")
const saveAsExample = () => {
showSaveResponseName.value = true
responseName.value = doc.value.request.name
}
const onSaveAsExample = () => {
@ -124,8 +133,10 @@ const onSaveAsExample = () => {
editRESTRequest(saveCtx.folderPath, saveCtx.requestIndex, req)
toast.success(`${t("response.saved")}`)
responseName.value = ""
} catch (e) {
console.error(e)
responseName.value = ""
}
} else {
runMutation(UpdateRequestDocument, {
@ -137,10 +148,12 @@ const onSaveAsExample = () => {
})().then((result) => {
if (E.isLeft(result)) {
toast.error(`${t("profile.no_permission")}`)
responseName.value = ""
} else {
doc.value.isDirty = false
toast.success(`${t("request.saved")}`)
responseName.value = ""
}
})
}

View file

@ -12,9 +12,14 @@
class="flex-grow"
placeholder=" "
:label="t('action.label')"
input-styles="floating-input"
input-styles="floating-input !border-0"
styles="border border-divider rounded"
@submit="editRequest"
/>
>
<template #button>
<AppInspection :inspection-results="hasSameNameInspectionResult" />
</template>
</HoppSmartInput>
</div>
</template>
<template #footer>
@ -40,6 +45,9 @@
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { useVModel } from "@vueuse/core"
import { computed, ComputedRef, markRaw } from "vue"
import { InspectorResult } from "~/services/inspection"
import IconAlertTriangle from "~icons/lucide/alert-triangle"
const toast = useToast()
const t = useI18n()
@ -48,22 +56,50 @@ const props = withDefaults(
defineProps<{
show: boolean
loadingState?: boolean
modelValue?: string
responseName?: string
hasSameNameResponse?: boolean
}>(),
{
show: false,
loadingState: false,
modelValue: "",
responseName: "",
hasSameNameResponse: false,
}
)
const emit = defineEmits<{
(e: "submit", name: string): void
(e: "hide-modal"): void
(e: "update:modelValue", value: string): void
(e: "update:responseName", value: string): void
}>()
const editingName = useVModel(props, "modelValue")
const editingName = useVModel(props, "responseName")
const hasSameNameInspectionResult: ComputedRef<InspectorResult[]> = computed(
() => {
if (!props.hasSameNameResponse) return []
return [
{
id: "same-name-response",
severity: 2,
icon: markRaw(IconAlertTriangle),
isApplicable: true,
text: {
type: "text",
text: t("response.same_name_inspector_warning"),
},
doc: {
text: t("action.learn_more"),
link: "https://docs.hoppscotch.io/documentation/getting-started/rest/response-handling#save-a-response-as-an-example",
},
locations: {
type: "url",
},
},
]
}
)
const editRequest = () => {
if (editingName.value.trim() === "") {