diff --git a/components/collections/collection.vue b/components/collections/collection.vue
index dd292aa2..332d8d8f 100644
--- a/components/collections/collection.vue
+++ b/components/collections/collection.vue
@@ -30,6 +30,7 @@
v-bind:folderIndex = "index"
v-bind:collection-index = "collectionIndex"
v-on:edit-folder = "editFolder(collectionIndex, folder, index)"
+ v-on:edit-request = "$emit('edit-request', $event)"
/>
@@ -40,10 +41,11 @@
@@ -65,7 +67,7 @@
diff --git a/components/collections/folder.vue b/components/collections/folder.vue
index b6ea4d2e..4bacf983 100644
--- a/components/collections/folder.vue
+++ b/components/collections/folder.vue
@@ -23,10 +23,11 @@
-
-
@@ -55,9 +56,9 @@ import request from './request';
export default {
props: {
- folder: Object,
- collectionIndex: Number,
- folderIndex: Number,
+ folder : Object,
+ collectionIndex : Number,
+ folderIndex : Number,
},
components: {
request,
diff --git a/components/collections/index.vue b/components/collections/index.vue
index 2320c91a..2e44eba6 100644
--- a/components/collections/index.vue
+++ b/components/collections/index.vue
@@ -1,3 +1,8 @@
+
+
+
+
@@ -80,6 +95,7 @@
import collection from './collection'
import editCollection from "./editCollection";
import editFolder from "./editFolder";
+ import editRequest from "./editRequest";
import importExportCollections from "./importExportCollections";
export default {
@@ -89,6 +105,7 @@
collection,
editCollection,
editFolder,
+ editRequest,
importExportCollections,
},
data() {
@@ -98,10 +115,13 @@
showModalImportExport : false,
showModalAddFolder : false,
showModalEditFolder : false,
+ showModalEditRequest : false,
editingCollection : undefined,
editingCollectionIndex : undefined,
editingFolder : undefined,
editingFolderIndex : undefined,
+ editingRequest : undefined,
+ editingRequestIndex : undefined,
}
},
computed: {
@@ -134,6 +154,12 @@
if (!shouldDisplay)
this.resetSelectedData()
},
+ displayModalEditRequest(shouldDisplay) {
+ this.showModalEditRequest = shouldDisplay
+
+ if (!shouldDisplay)
+ this.resetSelectedData()
+ },
editCollection(collection, collectionIndex) {
this.$data.editingCollection = collection
this.$data.editingCollectionIndex = collectionIndex
@@ -152,11 +178,22 @@
this.$data.editingFolderIndex = folderIndex
this.displayModalEditFolder(true)
},
+ editRequest(payload) {
+ const { request, collectionIndex, folderIndex, requestIndex } = payload
+ this.$data.editingCollectionIndex = collectionIndex
+ this.$data.editingFolderIndex = folderIndex
+ this.$data.editingRequest = request
+ this.$data.editingRequestIndex = requestIndex
+ this.displayModalEditRequest(true)
+
+ },
resetSelectedData() {
this.$data.editingCollection = undefined
this.$data.editingCollectionIndex = undefined
this.$data.editingFolder = undefined
this.$data.editingFolderIndex = undefined
+ this.$data.editingRequest = undefined
+ this.$data.editingRequestIndex = undefined
},
},
}
diff --git a/components/collections/request.vue b/components/collections/request.vue
index 18f09b0a..7cb150f5 100644
--- a/components/collections/request.vue
+++ b/components/collections/request.vue
@@ -7,10 +7,10 @@
-
@@ -33,25 +33,21 @@
diff --git a/components/collections/saveRequestAs.vue b/components/collections/saveRequestAs.vue
new file mode 100644
index 00000000..de90f8b5
--- /dev/null
+++ b/components/collections/saveRequestAs.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+ -
+
+
Save Request As
+
+
+ close
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/index.vue b/pages/index.vue
index 22206f5d..2e3eca26 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -1,10 +1,10 @@
-
+ >
@@ -364,7 +364,7 @@
import toggle from "../components/toggle";
import modal from "../components/modal";
import collections from '../components/collections';
- import saveRequest from '../components/collections/saveRequest';
+ import saveRequestAs from '../components/collections/saveRequestAs';
import parseCurlCommand from '../assets/js/curlparser.js';
import hljs from 'highlight.js';
import 'highlight.js/styles/dracula.css';
@@ -428,7 +428,7 @@
history,
autocomplete,
collections,
- saveRequest,
+ saveRequestAs,
},
data() {
return {
diff --git a/store/postwoman.js b/store/postwoman.js
index 572a1686..b8ecb239 100644
--- a/store/postwoman.js
+++ b/store/postwoman.js
@@ -1,3 +1,5 @@
+import Vue from 'vue'
+
export const SETTINGS_KEYS = [
/**
* The CSS class that should be applied to the root element.
@@ -42,14 +44,14 @@ export const SETTINGS_KEYS = [
];
export const state = () => ({
- settings: {},
- collections: [{
- name: 'My First Collection',
- folders: [],
- requests: [],
+ settings : {},
+ collections : [{
+ name : 'My First Collection',
+ folders : [],
+ requests : [],
}],
- selectedRequest: {},
- editingRequest: {},
+ selectedRequest : {},
+ editingRequest : {},
});
export const mutations = {
@@ -112,8 +114,7 @@ export const mutations = {
editFolder (state, payload) {
const { collectionIndex, folder, folderIndex } = payload;
- state.collections[collectionIndex].folders[folderIndex] = folder;
- state.collections[collectionIndex].folders = [...state.collections[collectionIndex].folders] // mark updated
+ Vue.set(state.collections[collectionIndex].folders, folderIndex, folder)
},
removeFolder (state, payload) {
@@ -133,6 +134,67 @@ export const mutations = {
state.collections[request.collection].folders[request.folder].requests.push(request);
},
+ editRequest (state, payload) {
+ const {
+ requestOld,
+ requestOldCollectionIndex,
+ requestOldFolderIndex,
+ requestOldIndex,
+ requestNew,
+ requestNewCollectionIndex,
+ requestNewFolderIndex,
+ } = payload
+
+ const changedCollection = requestOldCollectionIndex !== requestNewCollectionIndex
+ const changedFolder = requestOldFolderIndex !== requestNewFolderIndex
+ const changedPlace = changedCollection || changedFolder
+
+ // set new request
+ if (requestNewFolderIndex !== undefined)
+ Vue.set(state.collections[requestNewCollectionIndex].folders[requestNewFolderIndex].requests, requestOldIndex, requestNew)
+ else
+ Vue.set(state.collections[requestNewCollectionIndex].requests, requestOldIndex, requestNew)
+
+ // remove old request
+ if (changedPlace) {
+ if (requestOldFolderIndex !== undefined)
+ state.collections[requestOldCollectionIndex].folders[requestOldFolderIndex].requests.splice(requestOldIndex, 1)
+ else
+ state.collections[requestOldCollectionIndex].requests.splice(requestOldIndex, 1)
+ }
+ },
+
+ saveRequestAs (state, payload) {
+ const {
+ request,
+ collectionIndex,
+ folderIndex,
+ requestIndex,
+ } = payload
+
+ const specifiedCollection = collectionIndex !== undefined
+ const specifiedFolder = folderIndex !== undefined
+ const specifiedRequest = requestIndex !== undefined
+
+ if (specifiedCollection && specifiedFolder && specifiedRequest)
+ Vue.set(state.collections[collectionIndex].folders[folderIndex].requests, requestIndex, request)
+ else if (specifiedCollection && specifiedFolder && !specifiedRequest) {
+ const requests = state.collections[collectionIndex].folders[folderIndex].requests
+ const lastRequestIndex = requests.length - 1;
+ Vue.set(requests, lastRequestIndex + 1, request)
+ }
+ else if (specifiedCollection && !specifiedFolder && specifiedRequest) {
+ const requests = state.collections[collectionIndex].requests
+ Vue.set(requests,requestIndex, request)
+ }
+ else if (specifiedCollection && !specifiedFolder && !specifiedRequest) {
+ const requests = state.collections[collectionIndex].requests
+ const lastRequestIndex = requests.length - 1;
+ Vue.set(requests, lastRequestIndex + 1, request)
+ }
+
+ },
+
saveRequest (state, payload) {
const { request } = payload;
@@ -153,11 +215,11 @@ export const mutations = {
// Request that is directly attached to collection
if (request.folder === -1) {
- state.collections[request.collection].requests[request.requestIndex] = request;
+ Vue.set(state.collections[request.collection].requests, request.requestIndex, request)
return
}
- state.collections[request.collection].folders[request.folder].requests[request.requestIndex] = request;
+ Vue.set(state.collections[request.collection].folders[request.folder].requests, request.requestIndex, request)
},
removeRequest (state, payload) {
@@ -176,8 +238,4 @@ export const mutations = {
state.selectedRequest = Object.assign({}, payload.request);
},
- editRequest (state, payload) {
- state.editingRequest = Object.assign({}, payload.request);
- },
-
};