feat(common): create new requests without siphoning data from the previous one (#4909)

Co-authored-by: jamesgeorge007 <25279263+jamesgeorge007@users.noreply.github.com>
This commit is contained in:
Anwarul Islam 2025-03-27 13:19:42 +06:00 committed by GitHub
parent bedb0ffdb6
commit 24fbe3e01a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 9 additions and 224 deletions

View file

@ -15,23 +15,6 @@
input-styles="floating-input"
@submit="addRequest"
/>
<HoppButtonSecondary
v-if="canDoRequestNameGeneration"
v-tippy="{ theme: 'tooltip' }"
:icon="IconSparkle"
:disabled="isGenerateRequestNamePending"
class="rounded-md"
:class="{
'animate-pulse': isGenerateRequestNamePending,
}"
:title="t('ai_experiments.generate_request_name')"
@click="
async () => {
await generateRequestName(props.requestContext)
submittedFeedback = false
}
"
/>
</div>
</template>
<template #footer>
@ -50,64 +33,15 @@
@click="hideModal"
/>
</div>
<div
v-if="lastTraceID && !submittedFeedback"
class="flex items-center gap-2"
>
<p>{{ t("ai_experiments.feedback_cta_request_name") }}</p>
<template v-if="!isSubmitFeedbackPending">
<HoppButtonSecondary
:icon="IconThumbsUp"
outline
@click="
async () => {
if (lastTraceID) {
await submitFeedback('positive', lastTraceID)
submittedFeedback = true
}
}
"
/>
<HoppButtonSecondary
:icon="IconThumbsDown"
outline
@click="
async () => {
if (lastTraceID) {
await submitFeedback('negative', lastTraceID)
submittedFeedback = true
}
}
"
/>
</template>
<template v-else>
<HoppSmartSpinner />
</template>
</div>
<div v-if="submittedFeedback">
<p>{{ t("ai_experiments.feedback_thank_you") }}</p>
</div>
</div>
</template>
</HoppSmartModal>
</template>
<script setup lang="ts">
import { ref, watch } from "vue"
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
import {
useRequestNameGeneration,
useSubmitFeedback,
} from "~/composables/ai-experiments"
import { HoppRESTRequest } from "@hoppscotch/data"
import IconSparkle from "~icons/lucide/sparkles"
import IconThumbsUp from "~icons/lucide/thumbs-up"
import IconThumbsDown from "~icons/lucide/thumbs-down"
import { ref } from "vue"
const toast = useToast()
const t = useI18n()
@ -116,12 +50,10 @@ const props = withDefaults(
defineProps<{
show: boolean
loadingState: boolean
requestContext: HoppRESTRequest | null
}>(),
{
show: false,
loadingState: false,
requestContext: null,
}
)
@ -132,37 +64,6 @@ const emit = defineEmits<{
const editingName = ref("")
const {
generateRequestName,
isGenerateRequestNamePending,
canDoRequestNameGeneration,
lastTraceID,
} = useRequestNameGeneration(editingName)
watch(
() => props.show,
(newVal) => {
if (!newVal) {
submittedFeedback.value = false
lastTraceID.value = null
}
}
)
const submittedFeedback = ref(false)
const { submitFeedback, isSubmitFeedbackPending } = useSubmitFeedback()
const tabs = useService(RESTTabService)
watch(
() => props.show,
(show) => {
if (show) {
if (tabs.currentActiveTab.value.document.type === "request")
editingName.value = tabs.currentActiveTab.value.document.request.name
}
}
)
const addRequest = () => {
if (props.loadingState) {
return

View file

@ -15,23 +15,6 @@
input-styles="floating-input"
@submit="addRequest"
/>
<HoppButtonSecondary
v-if="canDoRequestNameGeneration"
v-tippy="{ theme: 'tooltip' }"
:icon="IconSparkle"
:disabled="isGenerateRequestNamePending"
class="rounded-md"
:class="{
'animate-pulse': isGenerateRequestNamePending,
}"
:title="t('ai_experiments.generate_request_name')"
@click="
async () => {
await generateRequestName(props.requestContext)
submittedFeedback = false
}
"
/>
</div>
</template>
<template #footer>
@ -49,45 +32,6 @@
@click="hideModal"
/>
</div>
<div
v-if="lastTraceID && !submittedFeedback"
class="flex items-center gap-2"
>
<p>{{ t("ai_experiments.feedback_cta_request_name") }}</p>
<template v-if="!isSubmitFeedbackPending">
<HoppButtonSecondary
:icon="IconThumbsUp"
outline
@click="
async () => {
if (lastTraceID) {
await submitFeedback('positive', lastTraceID)
submittedFeedback = true
}
}
"
/>
<HoppButtonSecondary
:icon="IconThumbsDown"
outline
@click="
async () => {
if (lastTraceID) {
await submitFeedback('negative', lastTraceID)
submittedFeedback = true
}
}
"
/>
</template>
<template v-else>
<HoppSmartSpinner />
</template>
</div>
<div v-if="submittedFeedback">
<p>{{ t("ai_experiments.feedback_thank_you") }}</p>
</div>
</div>
</template>
</HoppSmartModal>
@ -96,28 +40,14 @@
<script setup lang="ts">
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { HoppGQLRequest } from "@hoppscotch/data"
import { useService } from "dioc/vue"
import { ref, watch } from "vue"
import {
useRequestNameGeneration,
useSubmitFeedback,
} from "~/composables/ai-experiments"
import { GQLTabService } from "~/services/tab/graphql"
import IconSparkle from "~icons/lucide/sparkles"
import IconThumbsDown from "~icons/lucide/thumbs-down"
import IconThumbsUp from "~icons/lucide/thumbs-up"
import { ref } from "vue"
const toast = useToast()
const t = useI18n()
const tabs = useService(GQLTabService)
const props = defineProps<{
show: boolean
folderPath?: string
requestContext: HoppGQLRequest | null
}>()
const emit = defineEmits<{
@ -133,35 +63,6 @@ const emit = defineEmits<{
const editingName = ref("")
const {
generateRequestName,
isGenerateRequestNamePending,
canDoRequestNameGeneration,
lastTraceID,
} = useRequestNameGeneration(editingName)
watch(
() => props.show,
(newVal) => {
if (!newVal) {
submittedFeedback.value = false
lastTraceID.value = null
}
}
)
const submittedFeedback = ref(false)
const { submitFeedback, isSubmitFeedbackPending } = useSubmitFeedback()
watch(
() => props.show,
(show) => {
if (show) {
editingName.value = tabs.currentActiveTab.value?.document.request.name
}
}
)
const addRequest = () => {
if (!editingName.value) {
toast.error(`${t("error.empty_req_name")}`)

View file

@ -116,7 +116,6 @@
<CollectionsGraphqlAddRequest
:show="showModalAddRequest"
:folder-path="editingFolderPath"
:request-context="requestContext"
@add-request="onAddRequest($event)"
@hide-modal="displayModalAddRequest(false)"
/>
@ -182,7 +181,11 @@ import { platform } from "~/platform"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
import { computed } from "vue"
import { HoppCollection, HoppGQLRequest } from "@hoppscotch/data"
import {
getDefaultGQLRequest,
HoppCollection,
HoppGQLRequest,
} from "@hoppscotch/data"
import { Picked } from "~/helpers/types/HoppPicked"
import { HoppInheritedProperty } from "~/helpers/types/HoppInheritedProperties"
import { updateInheritedPropertiesForAffectedRequests } from "~/helpers/collection/collection"
@ -330,10 +333,6 @@ const filteredCollections = computed(() => {
return filteredCollections
})
const requestContext = computed(() => {
return tabs.currentActiveTab.value.document.request
})
const displayModalAdd = (shouldDisplay: boolean) => {
showModalAdd.value = shouldDisplay
}
@ -397,7 +396,7 @@ const duplicateCollection = ({
const onAddRequest = ({ name, path }: { name: string; path: string }) => {
const newRequest = {
...tabs.currentActiveTab.value.document.request,
...getDefaultGQLRequest(),
name,
}

View file

@ -137,7 +137,6 @@
<CollectionsAddRequest
:show="showModalAddRequest"
:loading-state="modalLoadingState"
:request-context="requestContext"
@add-request="onAddRequest"
@hide-modal="displayModalAddRequest(false)"
/>
@ -824,24 +823,9 @@ const addRequest = (payload: {
displayModalAddRequest(true)
}
const requestContext = computed(() => {
return tabs.currentActiveTab.value.document.type === "request"
? tabs.currentActiveTab.value.document.request
: null
})
const onAddRequest = (requestName: string) => {
const request =
tabs.currentActiveTab.value.document.type === "request"
? tabs.currentActiveTab.value.document.request
: getDefaultRESTRequest()
if (!request) return
const newRequest = {
...(tabs.currentActiveTab.value.document.type === "request"
? cloneDeep(tabs.currentActiveTab.value.document.request)
: getDefaultRESTRequest()),
...getDefaultRESTRequest(),
name: requestName,
}