Use partitioned query for all docs (#1195)

diff --git a/app/addons/documents/base.js b/app/addons/documents/base.js
index 3b8a659..6294b00 100644
--- a/app/addons/documents/base.js
+++ b/app/addons/documents/base.js
@@ -69,6 +69,9 @@
   },
   apiurl: function (databaseName, partitionKey, query) {
     return Helpers.getApiUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
+  },
+  server: function (databaseName, partitionKey, query) {
+    return Helpers.getServerUrl('/' + databaseName + '/_partition/' + partitionKey + '/_all_docs' + getQueryParam(query));
   }
 });
 
diff --git a/app/addons/documents/components/actions.js b/app/addons/documents/components/actions.js
index 6da915e..d9b266f 100644
--- a/app/addons/documents/components/actions.js
+++ b/app/addons/documents/components/actions.js
@@ -15,15 +15,16 @@
 
 export default {
   fetchAllDocsWithKey: (database, partitionKey) => {
-    const keyPrefix = partitionKey ? `${partitionKey}:` : "";
     return (id, callback) => {
       const query = '?' + app.utils.queryParams({
-        startkey: JSON.stringify(keyPrefix + id),
-        endkey: JSON.stringify(keyPrefix + id + "\u9999"),
+        startkey: JSON.stringify(id),
+        endkey: JSON.stringify(id + "\u9999"),
         limit: 30
       });
 
-      const url = FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
+      const url = partitionKey ?
+        FauxtonAPI.urls('partitioned_allDocs', 'server', database.safeID(), encodeURIComponent(partitionKey), query) :
+        FauxtonAPI.urls('allDocs', 'server', database.safeID(), query);
       get(url).then(res => {
         let options = [];
         if (!res.error) {
diff --git a/app/addons/documents/index-results/api.js b/app/addons/documents/index-results/api.js
index 7bf6370..b8bcd8f 100644
--- a/app/addons/documents/index-results/api.js
+++ b/app/addons/documents/index-results/api.js
@@ -19,10 +19,6 @@
 export const queryAllDocs = (fetchUrl, partitionKey, params) => {
   // Exclude params 'group', 'reduce' and 'group_level' if present since they not allowed for '_all_docs'
   Object.assign(params, {reduce: undefined, group: undefined, group_level: undefined});
-  if (partitionKey) {
-    // partition filter overrides any 'between keys' values set
-    Object.assign(params, {inclusive_end: false, start_key: `"${partitionKey}:"`, end_key: `"${partitionKey}:\ufff0"`});
-  }
   const query = app.utils.queryString(params);
   const url = `${fetchUrl}${fetchUrl.includes('?') ? '&' : '?'}${query}`;
   return get(url).then(json => {
diff --git a/app/addons/documents/routes-documents.js b/app/addons/documents/routes-documents.js
index a6d9345..3e9f914 100644
--- a/app/addons/documents/routes-documents.js
+++ b/app/addons/documents/routes-documents.js
@@ -103,7 +103,9 @@
     const params = this.createParams(options);
     const docParams = params.docParams;
 
-    const url = FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
+    const url = partitionKey ?
+      FauxtonAPI.urls('partitioned_allDocs', 'server', encodeURIComponent(databaseName), encodeURIComponent(partitionKey)) :
+      FauxtonAPI.urls('allDocsSanitized', 'server', databaseName);
 
     // this is used for the header and sidebar
     this.database.buildAllDocs(docParams);