salix/modules/zone/back/methods/zone/getLeaves.js

70 lines
1.8 KiB
JavaScript
Raw Normal View History

2019-01-21 10:45:53 +00:00
module.exports = Self => {
Self.remoteMethod('getLeaves', {
2019-09-19 13:51:39 +00:00
description: 'Returns the nodes for a zone',
accepts: [
{
2019-09-19 15:49:46 +00:00
arg: 'id',
type: 'number',
2019-10-08 05:22:38 +00:00
description: 'The zone id',
2019-09-19 15:49:46 +00:00
http: {source: 'path'},
required: true
},
{
2019-10-08 05:22:38 +00:00
arg: 'parentId',
type: 'number',
2019-09-19 13:51:39 +00:00
description: 'Get the children of the specified father',
},
{
2019-09-19 13:51:39 +00:00
arg: 'search',
type: 'string',
2019-09-19 13:51:39 +00:00
description: 'Filter nodes whose name starts with',
}
],
2019-01-21 10:45:53 +00:00
returns: {
type: ['object'],
2019-01-21 10:45:53 +00:00
root: true
},
http: {
2019-09-19 15:49:46 +00:00
path: `/:id/getLeaves`,
2019-01-21 10:45:53 +00:00
verb: 'GET'
}
});
Self.getLeaves = async(id, parentId = null, search, options) => {
const myOptions = {};
if (typeof options == 'object')
Object.assign(myOptions, options);
const [res] = await Self.rawSql(
2019-09-19 15:30:16 +00:00
`CALL zone_getLeaves(?, ?, ?)`,
[id, parentId, search],
myOptions
2019-09-19 13:51:39 +00:00
);
const map = new Map();
2019-09-19 13:51:39 +00:00
for (let node of res) {
if (!map.has(node.parentFk))
map.set(node.parentFk, []);
map.get(node.parentFk).push(node);
2019-02-18 07:37:26 +00:00
}
2019-01-21 10:45:53 +00:00
2019-09-19 13:51:39 +00:00
function setLeaves(nodes) {
if (!nodes) return;
for (let node of nodes) {
node.childs = map.get(node.id);
setLeaves(node.childs);
}
2019-02-18 07:37:26 +00:00
}
const leaves = map.get(parentId);
2022-10-10 08:33:08 +00:00
const maxNodes = 250;
if (res.length <= maxNodes)
setLeaves(leaves);
2019-01-21 10:45:53 +00:00
2019-09-19 15:30:16 +00:00
return leaves || [];
2019-01-21 10:45:53 +00:00
};
};