From 9bffdf4923a20a443f28c74aa4b130a5bbf1bb34 Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Wed, 25 Mar 2020 12:29:17 +0000 Subject: [webapp] show part of the path (full path on hover) in the select boxes for selecting groups and clients --- server/lib/grouphelper.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) (limited to 'server/lib') diff --git a/server/lib/grouphelper.js b/server/lib/grouphelper.js index 117dd79..fe94b50 100644 --- a/server/lib/grouphelper.js +++ b/server/lib/grouphelper.js @@ -36,4 +36,57 @@ async function getAllChildrenByIds (groupIds, knownGroupMap, knownClientMap) { return { subgroups, clients } } -module.exports = { getAllChildren } +async function addPathsToGroups (groups, queryParents = true) { + const allGroups = queryParents ? await db.group.findAll({ order: [['name', 'ASC']], include: ['parents'] }) : groups + const parentMap = {} + allGroups.forEach(group => { + parentMap[group.id] = group.parents + }) + const groupsWithPaths = [] + groups.forEach(group => { + let g = group.toJSON() + delete g.parents + g.paths = _buildPaths(parentMap, group) + groupsWithPaths.push(g) + }) + return groupsWithPaths +} + +async function addPathsToClients (clients) { + const allGroups = await db.group.findAll({ order: [['name', 'ASC']], include: ['parents'] }) + const parentMap = {} + allGroups.forEach(group => { + parentMap[group.id] = group.parents + }) + const clientsWithPaths = [] + clients.forEach(client => { + let c = client.toJSON() + delete c.groups + + c.paths = [] + client.groups.forEach(group => { + c.paths.push(..._buildPaths(parentMap, group)) + }) + + clientsWithPaths.push(c) + }) + return clientsWithPaths +} + +function _buildPaths (parentMap, group, knownIds = []) { + let parents = parentMap[group.id] + let paths = [] + if (parents && parents.length > 0) { + parents.forEach(parent => { + if (!knownIds.includes(parent.id)) { + paths.push(..._buildPaths(parentMap, parent, [...knownIds, group.id])) + } + }) + if (knownIds.length) paths.forEach(path => path.push(group.name)) + } else { + if (knownIds.length) paths.push([group.name]) + } + return paths +} + +module.exports = { getAllChildren, addPathsToGroups, addPathsToClients } -- cgit v1.2.3-55-g7522