refactor: better tab dirty check
Mark the tab (saved request under a collection) as not dirty if the request contents are reset to the value since previous save.
This commit is contained in:
@@ -267,16 +267,11 @@ const saveRequestAs = async () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const { providerID, requestID, workspaceID } = requestHandle.value.data
|
|
||||||
|
|
||||||
RESTTabs.currentActiveTab.value.document = {
|
RESTTabs.currentActiveTab.value.document = {
|
||||||
request: updatedRequest,
|
request: updatedRequest,
|
||||||
isDirty: false,
|
isDirty: false,
|
||||||
saveContext: {
|
saveContext: {
|
||||||
originLocation: "workspace-user-collection",
|
originLocation: "workspace-user-collection",
|
||||||
workspaceID,
|
|
||||||
providerID,
|
|
||||||
requestID,
|
|
||||||
requestHandle,
|
requestHandle,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -313,16 +308,12 @@ const saveRequestAs = async () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const { providerID, requestID, workspaceID } = requestHandle.value.data
|
|
||||||
|
|
||||||
RESTTabs.currentActiveTab.value.document = {
|
RESTTabs.currentActiveTab.value.document = {
|
||||||
request: updatedRequest,
|
request: updatedRequest,
|
||||||
isDirty: false,
|
isDirty: false,
|
||||||
saveContext: {
|
saveContext: {
|
||||||
originLocation: "workspace-user-collection",
|
originLocation: "workspace-user-collection",
|
||||||
workspaceID,
|
requestHandle,
|
||||||
providerID,
|
|
||||||
requestID,
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -525,24 +525,7 @@ const saveRequest = async () => {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const { requestID } = saveContext
|
const requestHandle = ref(saveContext.requestHandle)
|
||||||
|
|
||||||
const requestHandleResult = await newWorkspaceService.getRequestHandle(
|
|
||||||
newWorkspaceService.activeWorkspaceHandle.value,
|
|
||||||
requestID
|
|
||||||
)
|
|
||||||
|
|
||||||
if (E.isLeft(requestHandleResult)) {
|
|
||||||
// INVALID_COLLECTION_HANDLE | INVALID_REQUEST_ID | REQUEST_NOT_FOUND
|
|
||||||
showSaveRequestModal.value = true
|
|
||||||
|
|
||||||
if (!tab.value.document.isDirty) {
|
|
||||||
tab.value.document.isDirty = true
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const requestHandle = requestHandleResult.right
|
|
||||||
|
|
||||||
if (!requestHandle.value) {
|
if (!requestHandle.value) {
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -17,10 +17,11 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { watch } from "vue"
|
import { watch } from "vue"
|
||||||
import { useVModel } from "@vueuse/core"
|
import { useVModel } from "@vueuse/core"
|
||||||
import { cloneDeep } from "lodash-es"
|
import { cloneDeep, isEqual } from "lodash-es"
|
||||||
import { isEqualHoppRESTRequest } from "@hoppscotch/data"
|
|
||||||
import { HoppTab } from "~/services/tab"
|
import { HoppTab } from "~/services/tab"
|
||||||
import { HoppRESTDocument } from "~/helpers/rest/document"
|
import { HoppRESTDocument } from "~/helpers/rest/document"
|
||||||
|
import { WorkspaceRequest } from "~/services/new-workspace/workspace"
|
||||||
|
import { HandleRef } from "~/services/new-workspace/handle"
|
||||||
|
|
||||||
// TODO: Move Response and Request execution code to over here
|
// TODO: Move Response and Request execution code to over here
|
||||||
|
|
||||||
@@ -32,15 +33,43 @@ const emit = defineEmits<{
|
|||||||
|
|
||||||
const tab = useVModel(props, "modelValue", emit)
|
const tab = useVModel(props, "modelValue", emit)
|
||||||
|
|
||||||
// TODO: Come up with a better dirty check
|
|
||||||
let oldRequest = cloneDeep(tab.value.document.request)
|
let oldRequest = cloneDeep(tab.value.document.request)
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => tab.value.document.request,
|
() => tab.value.document.request,
|
||||||
(updatedValue) => {
|
(updatedValue) => {
|
||||||
|
// Request from the collection tree
|
||||||
if (
|
if (
|
||||||
!tab.value.document.isDirty &&
|
tab.value.document.saveContext?.originLocation ===
|
||||||
!isEqualHoppRESTRequest(oldRequest, updatedValue)
|
"workspace-user-collection"
|
||||||
) {
|
) {
|
||||||
|
const requestHandle = tab.value.document.saveContext.requestHandle as
|
||||||
|
| HandleRef<WorkspaceRequest>["value"]
|
||||||
|
| undefined
|
||||||
|
|
||||||
|
if (!requestHandle || requestHandle.type === "invalid") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!tab.value.document.isDirty &&
|
||||||
|
!isEqual(oldRequest, requestHandle?.data.request)
|
||||||
|
) {
|
||||||
|
tab.value.document.isDirty = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
tab.value.document.isDirty &&
|
||||||
|
isEqual(oldRequest, requestHandle?.data.request)
|
||||||
|
) {
|
||||||
|
tab.value.document.isDirty = false
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unsaved request
|
||||||
|
if (!tab.value.document.isDirty && !isEqual(oldRequest, updatedValue)) {
|
||||||
tab.value.document.isDirty = true
|
tab.value.document.isDirty = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ export class RESTTabService extends TabService<HoppRESTDocument> {
|
|||||||
for (const tab of this.tabMap.values()) {
|
for (const tab of this.tabMap.values()) {
|
||||||
if (tab.document.isDirty) {
|
if (tab.document.isDirty) {
|
||||||
count++
|
count++
|
||||||
return
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
|
|||||||
Reference in New Issue
Block a user