feat: tab service added (#3367)

This commit is contained in:
Anwarul Islam
2023-10-11 18:51:07 +06:00
committed by GitHub
parent 51510566bc
commit ba31cdabea
60 changed files with 1112 additions and 841 deletions

View File

@@ -37,7 +37,8 @@
import { ref, watch } from "vue"
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { currentActiveTab } from "~/helpers/rest/tab"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
const toast = useToast()
const t = useI18n()
@@ -60,11 +61,12 @@ const emit = defineEmits<{
const editingName = ref("")
const tabs = useService(RESTTabService)
watch(
() => props.show,
(show) => {
if (show) {
editingName.value = currentActiveTab.value.document.request.name
editingName.value = tabs.currentActiveTab.value.document.request.name
}
}
)

View File

@@ -327,7 +327,8 @@ import { useColorMode } from "@composables/theming"
import { pipe } from "fp-ts/function"
import * as O from "fp-ts/Option"
import { Picked } from "~/helpers/types/HoppPicked.js"
import { currentActiveTab } from "~/helpers/rest/tab"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
export type Collection = {
type: "collections"
@@ -535,7 +536,8 @@ const isSelected = ({
}
}
const active = computed(() => currentActiveTab.value.document.saveContext)
const tabs = useService(RESTTabService)
const active = computed(() => tabs.currentActiveTab.value.document.saveContext)
const isActiveRequest = (folderPath: string, requestIndex: number) => {
return pipe(

View File

@@ -82,12 +82,16 @@ import {
import { GQLError } from "~/helpers/backend/GQLClient"
import { computedWithControl } from "@vueuse/core"
import { platform } from "~/platform"
import { currentActiveTab as activeRESTTab } from "~/helpers/rest/tab"
import { currentActiveTab as activeGQLTab } from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
import { GQLTabService } from "~/services/tab/graphql"
const t = useI18n()
const toast = useToast()
const RESTTabs = useService(RESTTabService)
const GQLTabs = useService(GQLTabService)
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type CollectionType =
@@ -123,13 +127,13 @@ const emit = defineEmits<{
}>()
const gqlRequestName = computedWithControl(
() => activeGQLTab.value,
() => activeGQLTab.value.document.request.name
() => GQLTabs.currentActiveTab.value,
() => GQLTabs.currentActiveTab.value.document.request.name
)
const restRequestName = computedWithControl(
() => activeRESTTab.value,
() => activeRESTTab.value.document.request.name
() => RESTTabs.currentActiveTab.value,
() => RESTTabs.currentActiveTab.value.document.request.name
)
const reqName = computed(() => {
@@ -145,12 +149,14 @@ const reqName = computed(() => {
const requestName = ref(reqName.value)
watch(
() => [activeRESTTab.value, activeGQLTab.value],
() => [RESTTabs.currentActiveTab.value, GQLTabs.currentActiveTab.value],
() => {
if (props.mode === "rest") {
requestName.value = activeRESTTab.value?.document.request.name ?? ""
requestName.value =
RESTTabs.currentActiveTab.value?.document.request.name ?? ""
} else {
requestName.value = activeGQLTab.value?.document.request.name ?? ""
requestName.value =
GQLTabs.currentActiveTab.value?.document.request.name ?? ""
}
}
)
@@ -210,8 +216,8 @@ const saveRequestAs = async () => {
const requestUpdated =
props.mode === "rest"
? cloneDeep(activeRESTTab.value.document.request)
: cloneDeep(activeGQLTab.value.document.request)
? cloneDeep(RESTTabs.currentActiveTab.value.document.request)
: cloneDeep(GQLTabs.currentActiveTab.value.document.request)
requestUpdated.name = requestName.value
@@ -224,7 +230,7 @@ const saveRequestAs = async () => {
requestUpdated
)
activeRESTTab.value.document = {
RESTTabs.currentActiveTab.value.document = {
request: requestUpdated,
isDirty: false,
saveContext: {
@@ -251,7 +257,7 @@ const saveRequestAs = async () => {
requestUpdated
)
activeRESTTab.value.document = {
RESTTabs.currentActiveTab.value.document = {
request: requestUpdated,
isDirty: false,
saveContext: {
@@ -279,7 +285,7 @@ const saveRequestAs = async () => {
requestUpdated
)
activeRESTTab.value.document = {
RESTTabs.currentActiveTab.value.document = {
request: requestUpdated,
isDirty: false,
saveContext: {
@@ -439,7 +445,7 @@ const updateTeamCollectionOrFolder = (
(result) => {
const { createRequestInCollection } = result
activeRESTTab.value.document = {
RESTTabs.currentActiveTab.value.document = {
request: requestUpdated,
isDirty: false,
saveContext: {
@@ -460,7 +466,7 @@ const updateTeamCollectionOrFolder = (
const requestSaved = () => {
toast.success(`${t("request.added")}`)
nextTick(() => {
activeRESTTab.value.document.isDirty = false
RESTTabs.currentActiveTab.value.document.isDirty = false
})
hideModal()
}

View File

@@ -357,10 +357,12 @@ import { HoppRESTRequest } from "@hoppscotch/data"
import { pipe } from "fp-ts/function"
import * as O from "fp-ts/Option"
import { Picked } from "~/helpers/types/HoppPicked.js"
import { currentActiveTab } from "~/helpers/rest/tab"
import { RESTTabService } from "~/services/tab/rest"
import { useService } from "dioc/vue"
const t = useI18n()
const colorMode = useColorMode()
const tabs = useService(RESTTabService)
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
@@ -558,7 +560,7 @@ const isSelected = ({
}
}
const active = computed(() => currentActiveTab.value.document.saveContext)
const active = computed(() => tabs.currentActiveTab.value.document.saveContext)
const isActiveRequest = (requestID: string) => {
return pipe(

View File

@@ -36,11 +36,14 @@
import { ref, watch } from "vue"
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { currentActiveTab } from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
const toast = useToast()
const t = useI18n()
const tabs = useService(GQLTabService)
const props = defineProps<{
show: boolean
folderPath?: string
@@ -63,7 +66,7 @@ watch(
() => props.show,
(show) => {
if (show) {
editingName.value = currentActiveTab.value?.document.request.name
editingName.value = tabs.currentActiveTab.value?.document.request.name
}
}
)

View File

@@ -220,7 +220,8 @@ import {
moveGraphqlRequest,
} from "~/newstore/collections"
import { Picked } from "~/helpers/types/HoppPicked"
import { getTabsRefTo } from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
const props = defineProps({
picked: { type: Object, default: null },
@@ -235,6 +236,8 @@ const colorMode = useColorMode()
const toast = useToast()
const t = useI18n()
const tabs = useService(GQLTabService)
// TODO: improve types plz
const emit = defineEmits<{
(e: "select", i: Picked | null): void
@@ -295,7 +298,7 @@ const removeCollection = () => {
emit("select", null)
}
const possibleTabs = getTabsRefTo((tab) => {
const possibleTabs = tabs.getTabsRefTo((tab) => {
const ctx = tab.document.saveContext
if (!ctx) return false

View File

@@ -203,12 +203,15 @@ import { useI18n } from "@composables/i18n"
import { useColorMode } from "@composables/theming"
import { removeGraphqlFolder, moveGraphqlRequest } from "~/newstore/collections"
import { computed, ref } from "vue"
import { getTabsRefTo } from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
const toast = useToast()
const t = useI18n()
const colorMode = useColorMode()
const tabs = useService(GQLTabService)
const props = defineProps({
picked: { type: Object, default: null },
// Whether the request is in a selectable mode (activates 'select' event)
@@ -277,7 +280,7 @@ const removeFolder = () => {
emit("select", { picked: null })
}
const possibleTabs = getTabsRefTo((tab) => {
const possibleTabs = tabs.getTabsRefTo((tab) => {
const ctx = tab.document.saveContext
if (!ctx) return false

View File

@@ -137,12 +137,8 @@ import { useToast } from "@composables/toast"
import { HoppGQLRequest, makeGQLRequest } from "@hoppscotch/data"
import { cloneDeep } from "lodash-es"
import { removeGraphqlRequest } from "~/newstore/collections"
import {
createNewTab,
getTabRefWithSaveContext,
currentTabID,
currentActiveTab,
} from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
// Template refs
const tippyActions = ref<any | null>(null)
@@ -154,6 +150,8 @@ const deleteAction = ref<any | null>(null)
const t = useI18n()
const toast = useToast()
const tabs = useService(GQLTabService)
const props = defineProps({
// Whether the object is selected (show the tick mark)
picked: { type: Object, default: null },
@@ -165,7 +163,7 @@ const props = defineProps({
})
const isActive = computed(() => {
const saveCtx = currentActiveTab.value?.document.saveContext
const saveCtx = tabs.currentActiveTab.value?.document.saveContext
if (!saveCtx) return false
@@ -201,7 +199,7 @@ const selectRequest = () => {
if (props.saveRequest) {
pick()
} else {
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
folderPath: props.folderPath,
requestIndex: props.requestIndex,
@@ -209,11 +207,11 @@ const selectRequest = () => {
// Switch to that request if that request is open
if (possibleTab) {
currentTabID.value = possibleTab.value.id
tabs.setActiveTab(possibleTab.value.id)
return
}
createNewTab({
tabs.createNewTab({
saveContext: {
originLocation: "user-collection",
folderPath: props.folderPath,
@@ -253,7 +251,7 @@ const removeRequest = () => {
}
// Detach the request from any of the tabs
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
folderPath: props.folderPath,
requestIndex: props.requestIndex,

View File

@@ -145,7 +145,8 @@ import { useI18n } from "@composables/i18n"
import { useReadonlyStream } from "@composables/stream"
import { useColorMode } from "@composables/theming"
import { platform } from "~/platform"
import { createNewTab, currentActiveTab } from "~/helpers/graphql/tab"
import { useService } from "dioc/vue"
import { GQLTabService } from "~/services/tab/graphql"
export default defineComponent({
props: {
@@ -158,11 +159,13 @@ export default defineComponent({
const collections = useReadonlyStream(graphqlCollections$, [], "deep")
const colorMode = useColorMode()
const t = useI18n()
const tabs = useService(GQLTabService)
return {
collections,
colorMode,
t,
tabs,
IconPlus,
IconHelpCircle,
IconArchive,
@@ -267,13 +270,13 @@ export default defineComponent({
},
onAddRequest({ name, path, index }) {
const newRequest = {
...currentActiveTab.value.document.request,
...this.tabs.currentActiveTab.value.document.request,
name,
}
saveGraphqlRequestAs(path, newRequest)
createNewTab({
this.tabs.createNewTab({
saveContext: {
originLocation: "user-collection",
folderPath: path,

View File

@@ -219,12 +219,6 @@ import {
import * as E from "fp-ts/Either"
import { platform } from "~/platform"
import { createCollectionGists } from "~/helpers/gist"
import {
createNewTab,
currentActiveTab,
currentTabID,
getTabRefWithSaveContext,
} from "~/helpers/rest/tab"
import {
getRequestsByPath,
resolveSaveContextOnRequestReorder,
@@ -239,9 +233,11 @@ import { currentReorderingStatus$ } from "~/newstore/reordering"
import { defineActionHandler } from "~/helpers/actions"
import { WorkspaceService } from "~/services/workspace.service"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
const t = useI18n()
const toast = useToast()
const tabs = useService(RESTTabService)
const props = defineProps({
saveRequest: {
@@ -654,7 +650,7 @@ const addRequest = (payload: {
const onAddRequest = (requestName: string) => {
const newRequest = {
...cloneDeep(currentActiveTab.value.document.request),
...cloneDeep(tabs.currentActiveTab.value.document.request),
name: requestName,
}
@@ -663,7 +659,7 @@ const onAddRequest = (requestName: string) => {
if (!path) return
const insertionIndex = saveRESTRequestAs(path, newRequest)
createNewTab({
tabs.createNewTab({
request: newRequest,
isDirty: false,
saveContext: {
@@ -712,7 +708,7 @@ const onAddRequest = (requestName: string) => {
(result) => {
const { createRequestInCollection } = result
createNewTab({
tabs.createNewTab({
request: newRequest,
isDirty: false,
saveContext: {
@@ -935,7 +931,7 @@ const updateEditingRequest = (newName: string) => {
if (folderPath === null || requestIndex === null) return
const possibleActiveTab = getTabRefWithSaveContext({
const possibleActiveTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
requestIndex,
folderPath,
@@ -979,7 +975,7 @@ const updateEditingRequest = (newName: string) => {
)
)()
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "team-collection",
requestID,
})
@@ -1215,7 +1211,7 @@ const onRemoveRequest = () => {
emit("select", null)
}
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
folderPath,
requestIndex,
@@ -1275,7 +1271,7 @@ const onRemoveRequest = () => {
)()
// If there is a tab attached to this request, dissociate its state and mark it dirty
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "team-collection",
requestID,
})
@@ -1308,14 +1304,14 @@ const selectRequest = (selectedRequest: {
let possibleTab = null
if (collectionsType.value.type === "team-collections") {
possibleTab = getTabRefWithSaveContext({
possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "team-collection",
requestID: requestIndex,
})
if (possibleTab) {
currentTabID.value = possibleTab.value.id
tabs.setActiveTab(possibleTab.value.id)
} else {
createNewTab({
tabs.createNewTab({
request: cloneDeep(request),
isDirty: false,
saveContext: {
@@ -1325,16 +1321,16 @@ const selectRequest = (selectedRequest: {
})
}
} else {
possibleTab = getTabRefWithSaveContext({
possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
requestIndex: parseInt(requestIndex),
folderPath: folderPath!,
})
if (possibleTab) {
currentTabID.value = possibleTab.value.id
tabs.setActiveTab(possibleTab.value.id)
} else {
// If not, open the request in a new tab
createNewTab({
tabs.createNewTab({
request: cloneDeep(request),
isDirty: false,
saveContext: {
@@ -1377,7 +1373,7 @@ const dropRequest = (payload: {
destinationCollectionIndex
)
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "user-collection",
folderPath,
requestIndex: pathToLastIndex(requestIndex),
@@ -1426,7 +1422,7 @@ const dropRequest = (payload: {
1
)
const possibleTab = getTabRefWithSaveContext({
const possibleTab = tabs.getTabRefWithSaveContext({
originLocation: "team-collection",
requestID: requestIndex,
})