mirror of
https://github.com/frappe/books.git
synced 2024-11-08 23:00:56 +00:00
frappe.call
This commit is contained in:
parent
a91489cfbc
commit
fa049a37a1
@ -66,13 +66,7 @@ module.exports = class ReportPage extends Page {
|
||||
const filterValues = this.getFilterValues();
|
||||
if (filterValues === false) return;
|
||||
|
||||
let response = await fetch(this.url + '?' + frappe.getQueryString(filterValues), {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
Accept: 'application/json'
|
||||
}
|
||||
})
|
||||
const data = await response.json();
|
||||
let data = await frappe.call({method: this.method, args: filterValues});
|
||||
this.datatable.refresh(data);
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,8 @@ module.exports = {
|
||||
frappe.registerModels(require('../models'), 'client');
|
||||
|
||||
frappe.fetch = window.fetch.bind();
|
||||
|
||||
this.setCall();
|
||||
frappe.db = await new HTTPClient({server: server});
|
||||
this.socket = io.connect('http://localhost:8000'); // eslint-disable-line
|
||||
frappe.db.bindSocketClient(this.socket);
|
||||
@ -24,6 +26,29 @@ module.exports = {
|
||||
|
||||
frappe.desk = new Desk(columns);
|
||||
await frappe.login();
|
||||
},
|
||||
|
||||
setCall() {
|
||||
frappe.call = async ({method, type='get', args}) => {
|
||||
let url = `/api/method/${method}`;
|
||||
let request = {};
|
||||
|
||||
if (args) {
|
||||
if (type.toLowerCase()==='get') {
|
||||
url += '?' + frappe.getQueryString(args);
|
||||
} else {
|
||||
// POST / PUT / DELETE
|
||||
request.body = JSON.stringify(args);
|
||||
}
|
||||
}
|
||||
|
||||
request.headers = { 'Accept': 'application/json' };
|
||||
request.method = type.toUpperCase();
|
||||
|
||||
let response = await fetch(url, request);
|
||||
|
||||
return await response.json();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
27
index.js
27
index.js
@ -20,6 +20,7 @@ module.exports = {
|
||||
this.forms = {};
|
||||
this.views = {};
|
||||
this.flags = {};
|
||||
this.methods = {};
|
||||
// temp params while calling routes
|
||||
this.params = {};
|
||||
},
|
||||
@ -46,6 +47,32 @@ module.exports = {
|
||||
this.views[view][name] = module;
|
||||
},
|
||||
|
||||
registerMethod({method, type, handler}) {
|
||||
type = type.toLowerCase();
|
||||
this.methods[method] = handler;
|
||||
if (this.app) {
|
||||
// add to router if client-server
|
||||
this.app[type](`/api/method/${method}`, this.asyncHandler(async function(request, response) {
|
||||
let args = {};
|
||||
if (type==='get') {
|
||||
args = request.query;
|
||||
} else {
|
||||
args = request.body;
|
||||
}
|
||||
const data = await handler(args);
|
||||
response.json(data);
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
call({method, type, args}) {
|
||||
if (this.methods[method]) {
|
||||
return this.methods[method](args);
|
||||
} else {
|
||||
throw `${method} not found`;
|
||||
}
|
||||
},
|
||||
|
||||
addToCache(doc) {
|
||||
if (!this.docs) return;
|
||||
|
||||
|
@ -48,10 +48,13 @@ module.exports = {
|
||||
|
||||
getQueryString(params) {
|
||||
if (!params) return '';
|
||||
return Object.keys(params)
|
||||
.map(k => params[k] != null ? encodeURIComponent(k) + '=' + encodeURIComponent(params[k]) : null)
|
||||
.filter(v => v)
|
||||
.join('&');
|
||||
let parts = [];
|
||||
for (let key in params) {
|
||||
if (key!=null && params[key]!=null) {
|
||||
parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]))
|
||||
}
|
||||
}
|
||||
return parts.join('&');
|
||||
},
|
||||
|
||||
asyncHandler(fn) {
|
||||
|
Loading…
Reference in New Issue
Block a user