feat: tab service added (#3367)
This commit is contained in:
66
packages/hoppscotch-common/src/services/tab/graphql.ts
Normal file
66
packages/hoppscotch-common/src/services/tab/graphql.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { isEqual } from "lodash-es"
|
||||
import { getDefaultGQLRequest } from "~/helpers/graphql/default"
|
||||
import { HoppGQLDocument, HoppGQLSaveContext } from "~/helpers/graphql/document"
|
||||
import { TabService } from "./tab"
|
||||
import { computed } from "vue"
|
||||
|
||||
export class GQLTabService extends TabService<HoppGQLDocument> {
|
||||
public static readonly ID = "GQL_TAB_SERVICE"
|
||||
|
||||
constructor() {
|
||||
super()
|
||||
|
||||
this.tabMap.set("test", {
|
||||
id: "test",
|
||||
document: {
|
||||
request: getDefaultGQLRequest(),
|
||||
isDirty: false,
|
||||
optionTabPreference: "query",
|
||||
},
|
||||
})
|
||||
|
||||
this.watchCurrentTabID()
|
||||
}
|
||||
|
||||
// override persistableTabState to remove response from the document
|
||||
public override persistableTabState = computed(() => ({
|
||||
lastActiveTabID: this.currentTabID.value,
|
||||
orderedDocs: this.tabOrdering.value.map((tabID) => {
|
||||
const tab = this.tabMap.get(tabID)! // tab ordering is guaranteed to have value for this key
|
||||
return {
|
||||
tabID: tab.id,
|
||||
doc: {
|
||||
...tab.document,
|
||||
response: null,
|
||||
},
|
||||
}
|
||||
}),
|
||||
}))
|
||||
|
||||
public getTabRefWithSaveContext(ctx: HoppGQLSaveContext) {
|
||||
for (const tab of this.tabMap.values()) {
|
||||
// For `team-collection` request id can be considered unique
|
||||
if (ctx?.originLocation === "team-collection") {
|
||||
if (
|
||||
tab.document.saveContext?.originLocation === "team-collection" &&
|
||||
tab.document.saveContext.requestID === ctx.requestID
|
||||
) {
|
||||
return this.getTabRef(tab.id)
|
||||
}
|
||||
} else if (isEqual(ctx, tab.document.saveContext))
|
||||
return this.getTabRef(tab.id)
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
public getDirtyTabsCount() {
|
||||
let count = 0
|
||||
|
||||
for (const tab of this.tabMap.values()) {
|
||||
if (tab.document.isDirty) count++
|
||||
}
|
||||
|
||||
return count
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user