-
@@ -80,6 +52,7 @@ export default {
show: Boolean,
collectionIndex: Number,
folderIndex: Number,
+ folderName: String,
request: Object,
requestIndex: Number,
},
@@ -87,27 +60,9 @@ export default {
return {
requestUpdateData: {
name: undefined,
- collectionIndex: undefined,
- folderIndex: undefined,
},
}
},
- watch: {
- "requestUpdateData.collectionIndex": function resetFolderIndex() {
- // if user choosen some folder, than selected other collection, which doesn't have any folders
- // than `requestUpdateData.folderIndex` won't be reseted
- this.$data.requestUpdateData.folderIndex = undefined
- },
- },
- computed: {
- folders() {
- const userSelectedAnyCollection = this.$data.requestUpdateData.collectionIndex !== undefined
- if (!userSelectedAnyCollection) return []
-
- return this.$store.state.postwoman.collections[this.$data.requestUpdateData.collectionIndex]
- .folders
- },
- },
methods: {
syncCollections() {
if (fb.currentUser !== null) {
@@ -117,26 +72,17 @@ export default {
}
},
saveRequest() {
- const userSelectedAnyCollection = this.$data.requestUpdateData.collectionIndex !== undefined
-
const requestUpdated = {
...this.$props.request,
name: this.$data.requestUpdateData.name || this.$props.request.name,
- collection: userSelectedAnyCollection
- ? this.$data.requestUpdateData.collectionIndex
- : this.$props.collectionIndex,
- folder: this.$data.requestUpdateData.folderIndex,
}
- // pass data separately to don't depend on request's collection, folder fields
- // probably, they should be deprecated because they don't describe request itself
this.$store.commit("postwoman/editRequest", {
- requestOldCollectionIndex: this.$props.collectionIndex,
- requestOldFolderIndex: this.$props.folderIndex,
- requestOldIndex: this.$props.requestIndex,
+ requestCollectionIndex: this.$props.collectionIndex,
+ requestFolderName: this.$props.folderName,
+ requestFolderIndex: this.$props.folderIndex,
requestNew: requestUpdated,
- requestNewCollectionIndex: requestUpdated.collection,
- requestNewFolderIndex: requestUpdated.folder,
+ requestIndex: this.$props.requestIndex,
})
this.hideModal()
diff --git a/components/collections/folder.vue b/components/collections/folder.vue
index 6b07a1e76..12b07d9e2 100644
--- a/components/collections/folder.vue
+++ b/components/collections/folder.vue
@@ -1,6 +1,14 @@
-
+
arrow_right
@@ -15,7 +23,17 @@
-
+
+ create_new_folder
+ {{ $t("new_folder") }}
+
+
+
+
edit
{{ $t("edit") }}
@@ -41,20 +59,24 @@
:request="request"
:collection-index="collectionIndex"
:folder-index="folderIndex"
+ :folder-name="folder.name"
:request-index="index"
:doc="doc"
- @edit-request="
- $emit('edit-request', {
- request,
- collectionIndex,
- folderIndex,
- requestIndex: index,
- })
- "
+ @edit-request="$emit('edit-request', $event)"
/>
-
-
+
+
@@ -67,16 +89,18 @@ import deleteIcon from "~/static/icons/delete-24px.svg?inline"
export default {
components: { deleteIcon },
+ name: "folder",
props: {
folder: Object,
- collectionIndex: Number,
folderIndex: Number,
+ collectionIndex: Number,
doc: Boolean,
isFiltered: Boolean,
},
data() {
return {
showChildren: false,
+ dragging: false,
}
},
methods: {
@@ -90,22 +114,35 @@ export default {
toggleShowChildren() {
this.showChildren = !this.showChildren
},
- selectRequest(request) {
- this.$store.commit("postwoman/selectRequest", { request })
- },
removeFolder() {
if (!confirm(this.$t("are_you_sure_remove_folder"))) return
this.$store.commit("postwoman/removeFolder", {
- collectionIndex: this.collectionIndex,
- folderIndex: this.folderIndex,
+ collectionIndex: this.$props.collectionIndex,
+ folderName: this.$props.folder.name,
+ folderIndex: this.$props.folderIndex,
})
this.syncCollections()
this.$toast.error(this.$t("deleted"), {
icon: "delete",
})
},
- editFolder() {
- this.$emit("edit-folder")
+ dropEvent({ dataTransfer }) {
+ this.dragging = !this.dragging
+ const oldCollectionIndex = dataTransfer.getData("oldCollectionIndex")
+ const oldFolderIndex = dataTransfer.getData("oldFolderIndex")
+ const oldFolderName = dataTransfer.getData("oldFolderName")
+ const requestIndex = dataTransfer.getData("requestIndex")
+
+ this.$store.commit("postwoman/moveRequest", {
+ oldCollectionIndex,
+ newCollectionIndex: this.$props.collectionIndex,
+ newFolderIndex: this.$props.folderIndex,
+ newFolderName: this.$props.folder.name,
+ oldFolderIndex,
+ oldFolderName,
+ requestIndex,
+ })
+ this.syncCollections()
},
},
}
diff --git a/components/collections/import-export-collections.vue b/components/collections/import-export-collections.vue
index dbba1f8f2..20d583c90 100644
--- a/components/collections/import-export-collections.vue
+++ b/components/collections/import-export-collections.vue
@@ -108,8 +108,8 @@ export default {
},
replaceWithJSON() {
let reader = new FileReader()
- reader.onload = (event) => {
- let content = event.target.result
+ reader.onload = ({ target }) => {
+ let content = target.result
let collections = JSON.parse(content)
if (collections[0]) {
let [name, folders, requests] = Object.keys(collections[0])
@@ -117,7 +117,7 @@ export default {
// Do nothing
}
} else if (collections.info && collections.info.schema.includes("v2.1.0")) {
- collections = this.parsePostmanCollection(collections)
+ collections = [this.parsePostmanCollection(collections)]
} else {
return this.failedImport()
}
@@ -130,8 +130,8 @@ export default {
},
importFromJSON() {
let reader = new FileReader()
- reader.onload = (event) => {
- let content = event.target.result
+ reader.onload = ({ target }) => {
+ let content = target.result
let collections = JSON.parse(content)
if (collections[0]) {
let [name, folders, requests] = Object.keys(collections[0])
@@ -141,8 +141,7 @@ export default {
} else if (collections.info && collections.info.schema.includes("v2.1.0")) {
//replace the variables, postman uses {{var}}, Hoppscotch uses <>
collections = JSON.parse(content.replaceAll(/{{([a-z]+)}}/gi, "<<$1>>"))
- collections.item = this.flattenPostmanFolders(collections)
- collections = this.parsePostmanCollection(collections)
+ collections = [this.parsePostmanCollection(collections)]
} else {
return this.failedImport()
}
@@ -192,36 +191,30 @@ export default {
icon: "error",
})
},
- parsePostmanCollection(collection, folders = true) {
- let postwomanCollection = folders
- ? [
- {
- name: "",
- folders: [],
- requests: [],
- },
- ]
- : {
- name: "",
- requests: [],
- }
- if (folders) {
- //pick up collection name even when all children are folders
- postwomanCollection[0].name = collection.info ? collection.info.name : ""
+ parsePostmanCollection({ info, name, item }) {
+ let postwomanCollection = {
+ name: "",
+ folders: [],
+ requests: [],
}
- for (let collectionItem of collection.item) {
- if (collectionItem.request) {
- if (postwomanCollection[0]) {
- postwomanCollection[0].name = collection.info ? collection.info.name : ""
- postwomanCollection[0].requests.push(this.parsePostmanRequest(collectionItem))
+
+ postwomanCollection.name = info ? info.name : name
+
+ if (item && item.length > 0) {
+ for (let collectionItem of item) {
+ if (collectionItem.request) {
+ if (postwomanCollection.hasOwnProperty("folders")) {
+ postwomanCollection.name = info ? info.name : name
+ postwomanCollection.requests.push(this.parsePostmanRequest(collectionItem))
+ } else {
+ postwomanCollection.name = name ? name : ""
+ postwomanCollection.requests.push(this.parsePostmanRequest(collectionItem))
+ }
+ } else if (this.hasFolder(collectionItem)) {
+ postwomanCollection.folders.push(this.parsePostmanCollection(collectionItem))
} else {
- postwomanCollection.name = collection.name ? collection.name : ""
postwomanCollection.requests.push(this.parsePostmanRequest(collectionItem))
}
- } else if (collectionItem.item) {
- if (collectionItem.item[0]) {
- postwomanCollection[0].folders.push(this.parsePostmanCollection(collectionItem, false))
- }
}
}
return postwomanCollection
@@ -300,46 +293,8 @@ export default {
}
return pwRequest
},
- flattenPostmanFolders(collection) {
- let items = []
-
- for (let collectionItem of collection.item) {
- if (this.hasFolder(collectionItem)) {
- let newFolderItems = []
- for (let folderItem of collectionItem.item) {
- if (this.isSubFolder(folderItem)) {
- newFolderItems = newFolderItems.concat(this.flattenPostmanItem(folderItem))
- } else {
- newFolderItems.push(folderItem)
- }
- }
- collectionItem.item = newFolderItems
- }
- items.push(collectionItem)
- }
- return items
- },
hasFolder(item) {
- return Object.prototype.hasOwnProperty.call(item, "item")
- },
- isSubFolder(item) {
- return (
- Object.prototype.hasOwnProperty.call(item, "_postman_isSubFolder") &&
- item._postman_isSubFolder
- )
- },
- flattenPostmanItem(subFolder, subFolderGlue = " -- ") {
- delete subFolder._postman_isSubFolder
- let flattenedItems = []
- for (let subFolderItem of subFolder.item) {
- subFolderItem.name = subFolder.name + subFolderGlue + subFolderItem.name
- if (this.isSubFolder(subFolderItem)) {
- flattenedItems = flattenedItems.concat(this.flattenPostmanItem(subFolderItem))
- } else {
- flattenedItems.push(subFolderItem)
- }
- }
- return flattenedItems
+ return item.hasOwnProperty("item")
},
},
}
diff --git a/components/collections/index.vue b/components/collections/index.vue
index aca710adc..b7b583358 100644
--- a/components/collections/index.vue
+++ b/components/collections/index.vue
@@ -14,30 +14,29 @@ TODO:
-
+
-
+
edit
{{ $t("edit") }}
@@ -42,9 +61,15 @@ export default {
request: Object,
collectionIndex: Number,
folderIndex: Number,
+ folderName: String,
requestIndex: Number,
doc: Boolean,
},
+ data() {
+ return {
+ dragging: false,
+ }
+ },
methods: {
syncCollections() {
if (fb.currentUser !== null) {
@@ -56,12 +81,19 @@ export default {
selectRequest() {
this.$store.commit("postwoman/selectRequest", { request: this.request })
},
+ dragStart({ dataTransfer }) {
+ this.dragging = !this.dragging
+ dataTransfer.setData("oldCollectionIndex", this.$props.collectionIndex)
+ dataTransfer.setData("oldFolderIndex", this.$props.folderIndex)
+ dataTransfer.setData("oldFolderName", this.$props.folderName)
+ dataTransfer.setData("requestIndex", this.$props.requestIndex)
+ },
removeRequest() {
if (!confirm(this.$t("are_you_sure_remove_request"))) return
this.$store.commit("postwoman/removeRequest", {
- collectionIndex: this.collectionIndex,
- folderIndex: this.folderIndex,
- requestIndex: this.requestIndex,
+ collectionIndex: this.$props.collectionIndex,
+ folderName: this.$props.folderName,
+ requestIndex: this.$props.requestIndex,
})
this.$toast.error(this.$t("deleted"), {
icon: "delete",
diff --git a/components/collections/save-request-as.vue b/components/collections/save-request-as.vue
index 0d6f27d0f..c61d61f9c 100644
--- a/components/collections/save-request-as.vue
+++ b/components/collections/save-request-as.vue
@@ -40,15 +40,13 @@
-
-
-
-
+
+