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:
jamesgeorge007
2024-05-01 18:37:32 +05:30
parent 9e8112a4e5
commit 0abdc63f0e
4 changed files with 37 additions and 34 deletions

View File

@@ -267,16 +267,11 @@ const saveRequestAs = async () => {
return
}
const { providerID, requestID, workspaceID } = requestHandle.value.data
RESTTabs.currentActiveTab.value.document = {
request: updatedRequest,
isDirty: false,
saveContext: {
originLocation: "workspace-user-collection",
workspaceID,
providerID,
requestID,
requestHandle,
},
}
@@ -313,16 +308,12 @@ const saveRequestAs = async () => {
return
}
const { providerID, requestID, workspaceID } = requestHandle.value.data
RESTTabs.currentActiveTab.value.document = {
request: updatedRequest,
isDirty: false,
saveContext: {
originLocation: "workspace-user-collection",
workspaceID,
providerID,
requestID,
requestHandle,
},
}

View File

@@ -525,24 +525,7 @@ const saveRequest = async () => {
return
}
const { requestID } = saveContext
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
const requestHandle = ref(saveContext.requestHandle)
if (!requestHandle.value) {
return

View File

@@ -17,10 +17,11 @@
<script setup lang="ts">
import { watch } from "vue"
import { useVModel } from "@vueuse/core"
import { cloneDeep } from "lodash-es"
import { isEqualHoppRESTRequest } from "@hoppscotch/data"
import { cloneDeep, isEqual } from "lodash-es"
import { HoppTab } from "~/services/tab"
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
@@ -32,15 +33,43 @@ const emit = defineEmits<{
const tab = useVModel(props, "modelValue", emit)
// TODO: Come up with a better dirty check
let oldRequest = cloneDeep(tab.value.document.request)
watch(
() => tab.value.document.request,
(updatedValue) => {
// Request from the collection tree
if (
!tab.value.document.isDirty &&
!isEqualHoppRESTRequest(oldRequest, updatedValue)
tab.value.document.saveContext?.originLocation ===
"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
}

View File

@@ -88,7 +88,7 @@ export class RESTTabService extends TabService<HoppRESTDocument> {
for (const tab of this.tabMap.values()) {
if (tab.document.isDirty) {
count++
return
continue
}
if (