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
|
||||
}
|
||||
|
||||
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,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 (
|
||||
|
||||
Reference in New Issue
Block a user