Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
1 lines (1 sloc) 39.2 KB
[{"id":"69b7d74a.c4d048","type":"tab","label":"First_Flow","disabled":false,"info":""},{"id":"82337adc.2fdb38","type":"http request","z":"69b7d74a.c4d048","name":"","method":"POST","ret":"obj","url":"{{{topic}}}","tls":"","x":454.9837951660156,"y":46.26766395568848,"wires":[["494c4d6e.96eff4"]]},{"id":"840a5091.c42a7","type":"inject","z":"69b7d74a.c4d048","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":true,"x":119.52381134033203,"y":46.543291091918945,"wires":[["6831d7a2.1e1dd8","75290c01.87e1b4"]]},{"id":"494c4d6e.96eff4","type":"function","z":"69b7d74a.c4d048","name":"cookie","func":"var cookies = msg.responseCookies;\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": \"connect.sid=\" + cookies[\"connect.sid\"][\"value\"]\n};\n\nflow.set(\"cookie\",msg.headers[\"Cookie\"]);\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":599.7615928649902,"y":45.79739284515381,"wires":[["f8b921e8.d4aa7","e9bdb44f.2b1498","ae6653ac.9fbf6"]]},{"id":"2d2906b.39db3fa","type":"debug","z":"69b7d74a.c4d048","name":"A","active":true,"console":"false","complete":"payload","x":1186.5030059814453,"y":235.62692499160767,"wires":[]},{"id":"799a0480.085cec","type":"debug","z":"69b7d74a.c4d048","name":"B","active":true,"console":"false","complete":"payload","x":1185.8148708343506,"y":276.73811960220337,"wires":[]},{"id":"75290c01.87e1b4","type":"function","z":"69b7d74a.c4d048","name":"header","func":"msg.payload = {\n \"username\": global.get(\"username\"), // delete your credentials if you want to share your flow!\n \"password\": global.get(\"password\") // delete your credentials if you want to share your flow!\n};\n\nmsg.topic = \"https://api1.www.3drepo.io/api/login\";\n\nmsg.headers = {\n 'content-type':'application/json'\n};\n\nreturn msg;","outputs":1,"noerr":0,"x":303.610595703125,"y":46.294429779052734,"wires":[["82337adc.2fdb38"]]},{"id":"f8b921e8.d4aa7","type":"function","z":"69b7d74a.c4d048","name":"API call","func":"filter = flow.get(\"filter\")\ncookie = flow.get(\"cookie\");\nvar calls = [];\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nfor(var prop in filter){\n calls.push(\"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/revision/\" + flow.get(\"revision\") + \"/meta/findObjsWith/\" + prop + \".json\");\n}\n\nmsg.payload = calls;\n\nreturn msg;","outputs":"1","noerr":0,"x":743.4024543762207,"y":46.07339286804199,"wires":[["a9679184.8fdca"]]},{"id":"a9679184.8fdca","type":"split","z":"69b7d74a.c4d048","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":880.8118362426758,"y":45.95047187805176,"wires":[["5cd3815e.de603"]]},{"id":"5cd3815e.de603","type":"http request","z":"69b7d74a.c4d048","name":"","method":"GET","ret":"obj","url":"{{{payload}}}","tls":"","x":1033.3640441894531,"y":45.69371795654297,"wires":[["da56712e.cb214"]]},{"id":"da56712e.cb214","type":"join","z":"69b7d74a.c4d048","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":"false","timeout":"","count":"","x":1178.181734085083,"y":46.29886054992676,"wires":[["448cb712.59bc78"]]},{"id":"33dc088e.15db88","type":"function","z":"69b7d74a.c4d048","name":"meta","func":"var meta = {};\n\nfor(var i=0; i<msg.payload.length; i++){\n meta[i] = [];\n if(msg.payload[i].data != undefined){\n for(var j=0; j<msg.payload[i].data.length; j++){\n var obj = msg.payload[i].data[j];\n meta[i].push(obj.metadata.value);\n }\n }\n var set = new Set(meta[i]);\n meta[i] = Array.from(set);\n}\n\nflow.set(\"meta\",meta);\nmsg.payload = meta;\n\nreturn msg;","outputs":1,"noerr":0,"x":778.164379119873,"y":279.18847036361694,"wires":[[]]},{"id":"9194a8b3.ba00d8","type":"function","z":"69b7d74a.c4d048","name":"count by meta","func":"var meta = flow.get(\"meta\");\nvar counter = {};\n\nfor(var l=0; l<msg.payload.length; l++){\n if(msg.payload[l] != undefined && msg.payload[l].data != undefined){\n for(var i=0; i<msg.payload.length; i++){\n counter[i] = {};\n for(var j=0; j<meta[i].length; j++){\n counter[i][meta[i][j]] = {};\n counter[i][meta[i][j]] = 0;\n }\n \n for(var j=0; j<msg.payload[i].data.length; j++){\n var obj = msg.payload[i].data[j];\n for(var k=0; k<meta[i].length; k++){\n if(obj.metadata.value == meta[i][k]){\n counter[i][meta[i][k]] += 1;\n }\n }\n }\n }\n }\n}\n\nmsg.payload = counter; \n\nflow.set(\"stats\",counter);\n\nreturn msg;","outputs":1,"noerr":0,"x":810.3865547180176,"y":325.85518503189087,"wires":[["c03bd6ca.4da378","2d2906b.39db3fa"]]},{"id":"62aa3c35.c3cc64","type":"function","z":"69b7d74a.c4d048","name":"filters","func":"filter = flow.get(\"filter\");\n\nvar parentIDs = [];\nvar metaIDs = [];\nvar i = -1;\n\nfor(var prop in filter){\n i += 1;\n parentIDs[i] = [];\n metaIDs[i] = [];\n for(var j=0; j<filter[prop].length; j++){\n if(msg.payload[i] != undefined && msg.payload[i].data != undefined){\n for(var k=0; k<msg.payload[i].data.length; k++){\n var obj = msg.payload[i].data[k];\n if(obj != undefined){\n if(filter[prop][0] == true && obj.metadata.value.search(filter[prop][j]) > -1){\n metaIDs[i].push(obj._id);\n for(var l=0; l<obj.parents.length; l++){\n parentIDs[i].push(obj.parents[l]);\n }\n }else{\n if(obj.metadata.value == filter[prop][j]){\n metaIDs[i].push(obj._id);\n for(var l=0; l<obj.parents.length; l++){\n parentIDs[i].push(obj.parents[l]);\n }\n }\n }\n }\n }\n }\n }\n}\n\nmsg.payload = [parentIDs, metaIDs];\n\nreturn msg;","outputs":1,"noerr":0,"x":780.4484558105469,"y":230.55424737930298,"wires":[["ba03e32b.6a59"]]},{"id":"448cb712.59bc78","type":"function","z":"69b7d74a.c4d048","name":"if fed","func":"var o = [];\n\nfor (var i=0; i < msg.payload.length; i++) {\n if (msg.payload[i] != undefined) {\n if (msg.payload[i].subModels != undefined) {\n var obj = {};\n var temp = [];\n for (var j = 0; j < msg.payload[i].subModels.length; j++) {\n for (var k = 0; k < msg.payload[i].subModels[j].data.length; k++) {\n // merge data arrays as per API calls \n temp.push(msg.payload[i].subModels[j].data[k])\n }\n }\n obj.data = temp;\n o.push(obj);\n } else {\n return msg;\n }\n }\n}\n\nmsg.payload = o;\n\nreturn msg","outputs":1,"noerr":0,"x":560.2442760467529,"y":268.8594994544983,"wires":[["33dc088e.15db88","62aa3c35.c3cc64","9194a8b3.ba00d8","14a29049.aa0f8"]]},{"id":"ba03e32b.6a59","type":"function","z":"69b7d74a.c4d048","name":"set operations","func":"operation = flow.get(\"operation\");\n\nif(operation == \"union\"){\n var unionMesh = new Set([].concat(...msg.payload[0]));\n unionMesh = Array.from(unionMesh);\n resultMesh = unionMesh;\n var unionMeta = new Set([].concat(...msg.payload[1]));\n unionMeta = Array.from(unionMeta);\n resultMeta = unionMeta;\n}\nif(operation == \"intersection\"){\n var resultMesh = msg.payload[0].shift().filter(function(v) {\n return msg.payload[0].every(function(a) {\n return a.indexOf(v) !== -1;\n });\n });\n var resultMeta = msg.payload[1].shift().filter(function(v) {\n return msg.payload[1].every(function(a) {\n return a.indexOf(v) !== -1;\n });\n });\n}\nif(operation == \"difference\"){\n allMeshes = flow.get(\"allMeshes\");\n var unionMesh = new Set([].concat(...msg.payload[0]));\n unionMesh = Array.from(unionMesh);\n var unionMeta = new Set([].concat(...msg.payload[1]));\n unionMeta = Array.from(unionMeta);\n // var intersectionMesh = msg.payload[0].shift().filter(function(v) {\n // return msg.payload[0].every(function(a) {\n // return a.indexOf(v) !== -1;\n // });\n // });\n // node.send({payload:union})\n var differenceMesh = []\n for(var i=0; i<allMeshes.length; i++){\n if(unionMesh.includes(allMeshes[i]) == false){\n differenceMesh.push(allMeshes[i]);\n }\n }\n resultMesh = differenceMesh;\n \n // var differenceMeta = []; // new API for all meta objects coming soon \n resultMeta = resultMesh;\n}\n\nmsg.payload = resultMeta.length + \" results\";\n\nflow.set(\"filteredMesh\", resultMesh);\nflow.set(\"filteredMeta\", resultMeta);\n\nreturn msg;","outputs":1,"noerr":0,"x":956.8390293121338,"y":224.32168245315552,"wires":[["2d2906b.39db3fa"]]},{"id":"e3a6741e.a0c368","type":"http response","z":"69b7d74a.c4d048","name":"","statusCode":"","headers":{},"x":1216.1254386901855,"y":567.0334329605103,"wires":[]},{"id":"dba8c96d.bde8b8","type":"http request","z":"69b7d74a.c4d048","name":"","method":"POST","ret":"obj","url":"{{{topic}}}","tls":"","x":583.6844253540039,"y":564.0662794113159,"wires":[["586756d1.e22c68","cda87d00.0914c"]]},{"id":"56404ab7.22acf4","type":"function","z":"69b7d74a.c4d048","name":"group API call","func":"var cookie = flow.get(\"cookie\");\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nmsg.topic = \"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/groups\";\nnode.send({payload:msg.topic})\nvar group = {};\ngroup.name = \"filtered\";\ngroup.color = [255,0,0];\ngroup.objects = msg.payload;\n\nmsg.payload = group;\n\nreturn msg;","outputs":1,"noerr":0,"x":1185.7204704284668,"y":434.9241580963135,"wires":[["dba8c96d.bde8b8"]]},{"id":"6831d7a2.1e1dd8","type":"function","z":"69b7d74a.c4d048","name":"INPUTS","func":"// *** required fields:\nteamspace = \"***\"; // make sure you have permissions to acces this teamspace\nmodelID = \"***\"; // copy from Sample_Federation's URL \nrevision = \"master/head\";\n\nissueName = \"Green bricks\"; // name appears in issue tracker\ncreateIssue = true;\noperation = \"intersection\" // specify set operations: union, intersection or difference\n\nfilter = {\n \"IFC%20Type\":[false, \"IfcBuildingElementProxy\"], // use %20 for empty space\n \"RGB\":[false, \"#00451A\"],\n \"Category\":[false, \"SYSTEM: BRICKS\"],\n // \"Floor\":[false, \"GF Ground value\",\"RF Roof\"],\n // \"BrickName\":[true, \"1X3\",\"2X3\"], // \"true\" for string search\n // \"ColourType\":[\"Transparent\"]\n}\n\n// ignore the rest\nflow.set(\"teamspace\", teamspace);\nflow.set(\"modelID\", modelID);\nflow.set(\"revision\", revision);\nflow.set(\"filter\",filter);\nflow.set(\"issueName\", issueName);\nflow.set(\"createIssue\", createIssue);\nflow.set(\"operation\", operation)\n\nreturn msg;","outputs":1,"noerr":0,"x":111.51799583435059,"y":278.5077500343323,"wires":[[]]},{"id":"46057473.6ebdbc","type":"function","z":"69b7d74a.c4d048","name":"ID map call","func":"cookie = flow.get(\"cookie\");\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nmsg.payload = \"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/revision/\" + flow.get(\"revision\") + \"/idmap.json\";\n\nreturn msg;\n","outputs":1,"noerr":0,"x":640.9114074707031,"y":429.1138277053833,"wires":[["a70d3590.db5228"]]},{"id":"a70d3590.db5228","type":"http request","z":"69b7d74a.c4d048","name":"","method":"GET","ret":"obj","url":"{{{payload}}}","tls":"","x":823.4070281982422,"y":432.5339870452881,"wires":[["7a2e342f.0766bc"]]},{"id":"7a2e342f.0766bc","type":"function","z":"69b7d74a.c4d048","name":"shared IDs","func":"function getKeyByValue(object, value) {\n return Object.keys(object).find(key => object[key] === value);\n}\nfunction createObject(account, ID, modelID, sharedID){\n var o = {};\n o.account = account;\n o.id = ID;\n o.model = modelID;\n o.shared_id = sharedID;\n return o\n}\n \nvar objects = [];\nfiltered = flow.get(\"filteredMesh\");\n// node.send({payload:filtered})\n \nif (msg.payload != undefined) {\n if (msg.payload.subModels != undefined){\n for(var i=0; i<filtered.length; i++){\n for (var j=0; j<msg.payload.subModels.length; j++){\n var key = getKeyByValue(msg.payload.subModels[j].idMap, filtered[i]);\n if(key != undefined){\n objects.push(createObject(msg.payload.subModels[j].account, key, msg.payload.subModels[j].model, filtered[i]));\n break\n }\n }\n }\n }else{\n for(var i=0; i<filtered.length; i++){\n var key = getKeyByValue(msg.payload.idMap, filtered[i]);\n objects.push(createObject(flow.get(\"teamspace\"), key, flow.get(\"modelID\"), filtered[i]));\n }\n }\n}\n\nmsg.payload = objects;\n\nreturn msg;","outputs":1,"noerr":0,"x":996.980842590332,"y":436.1573734283447,"wires":[["56404ab7.22acf4"]]},{"id":"586756d1.e22c68","type":"function","z":"69b7d74a.c4d048","name":"create issue API call","func":"var issue = {};\nvar viewpoint = {};\nfilter = flow.get(\"filter\");\nstats = flow.get(\"stats\");\nvar f = [];\nfor(var prop in filter){\n f.push(filter[prop].slice(1)); \n}\nissue.name = flow.get(\"issueName\");\nissue.desc = flow.get(\"filteredMeta\").length + \" results for \" + flow.get(\"operation\") + \" of: \" + f;\nissue.account = flow.get(\"username\");\nissue.assigned_roles = [];\nissue.creator_role = \"Client\";\nissue.group_id = msg.payload._id;\nissue.model = flow.get(\"modelID\");\nissue.objectId = null;\nissue.pickedNorm = null;\nissue.pickedPos = null;\nissue.priority = \"none\";\nissue.rev_id = null;\nissue.scale = 1;\nissue.status = \"open\";\nissue.topic_type = \"for_information\";\n\nissue.comments = flow.get(\"comments\");\n\n// viewpoint.aspect_ratio = 1.1499189138412476;\n// viewpoint.clippingPlanes = [];\n// viewpoint.far = 37788.875;\n// viewpoint.fov = 1.0471975803375244;\n// viewpoint.look_at = [9599.10546875,76.478515625,-6112.9375];\n// viewpoint.near = 75.57775115966797;\n// viewpoint.position = [26698.98046875,18214.173828125,-25682.21875];\n// viewpoint.right = [-0.7530198097229004,0,-0.6579978466033936];\nviewpoint.screenshot = \"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\";\n// viewpoint.up = [-0.37658801674842834,0.8200274705886841,0.4309714138507843];\n// viewpoint.view_dir = [-0.5395762920379639,-0.5723240971565247,0.6174969673156738];\n\nissue.viewpoint = viewpoint;\n\nvar cookie = flow.get(\"cookie\");\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nmsg.topic = \"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/issues.json\";\n\nmsg.payload = issue;\n\nreturn msg;\n","outputs":1,"noerr":0,"x":799.5445747375488,"y":564.6735725402832,"wires":[["d612e5fa.248ca8"]]},{"id":"d612e5fa.248ca8","type":"http request","z":"69b7d74a.c4d048","name":"","method":"POST","ret":"obj","url":"{{{topic}}}","tls":"","x":1049.183120727539,"y":567.0378036499023,"wires":[["e3a6741e.a0c368"]]},{"id":"f41e00f9.b167","type":"ui_chart","z":"69b7d74a.c4d048","name":"","group":"a48111f1.9661b","order":1,"width":0,"height":0,"label":"","chartType":"horizontalBar","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":true,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"x":1185.794973373413,"y":326.46439599990845,"wires":[[],[]]},{"id":"c03bd6ca.4da378","type":"function","z":"69b7d74a.c4d048","name":"format","func":"filter = flow.get(\"filter\");\nvar series = [];\nvar data = [];\nvar labels = [];\nvar m = {};\n\nfor(var prop in filter){\n series.push(prop)\n}\n\nfor(var i=0; i<Object.keys(msg.payload).length; i++){\n for(var prop in msg.payload[i]){\n labels.push(prop);\n data.push(msg.payload[i][prop]);\n }\n}\n\nm.labels = labels;\nm.series = [\"Count\"];\nm.data = [data];\n\nmsg.payload = [m];\n\nreturn msg;","outputs":"1","noerr":0,"x":1008.2926273345947,"y":328.3003087043762,"wires":[["f41e00f9.b167"]]},{"id":"f3b4e7f.017d518","type":"switch","z":"69b7d74a.c4d048","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"No new issue created","vt":"str"},{"t":"eq","v":"payload","vt":"msg"}],"checkall":"false","outputs":2,"x":466.2049026489258,"y":420.8634967803955,"wires":[["2d2906b.39db3fa"],["46057473.6ebdbc"]]},{"id":"14a29049.aa0f8","type":"function","z":"69b7d74a.c4d048","name":"create issue","func":"createIssue = flow.get(\"createIssue\");\n\nif(createIssue === true){ \n return msg;\n}else{\n msg.payload = \"No new issue created\"\n return msg;\n}","outputs":1,"noerr":0,"x":292.09986305236816,"y":423.06463861465454,"wires":[["f3b4e7f.017d518"]]},{"id":"f19e3f4.083efc","type":"ui_text_input","z":"69b7d74a.c4d048","name":"","label":"Username","group":"a3a2993c.d55868","order":1,"width":0,"height":0,"passthru":false,"mode":"text","delay":300,"topic":"","x":1018.7069931030273,"y":732.0548076629639,"wires":[["a5ad3735.77a668"]]},{"id":"2f6b61e8.1a7a2e","type":"ui_text_input","z":"69b7d74a.c4d048","name":"","label":"Password","group":"a3a2993c.d55868","order":2,"width":0,"height":0,"passthru":false,"mode":"password","delay":300,"topic":"","x":1009.9569511413574,"y":779.5592079162598,"wires":[["53408dbe.405744"]]},{"id":"a5ad3735.77a668","type":"function","z":"69b7d74a.c4d048","name":"username","func":"global.set(\"username\",msg.payload);","outputs":1,"noerr":0,"x":1172.4569854736328,"y":730.5313587188721,"wires":[[]]},{"id":"53408dbe.405744","type":"function","z":"69b7d74a.c4d048","name":"password","func":"global.set(\"password\",msg.payload);\n","outputs":1,"noerr":0,"x":1172.4613075256348,"y":776.7727508544922,"wires":[[]]},{"id":"f1bd2cfb.b515e","type":"ui_text","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","order":5,"width":0,"height":0,"name":"","label":"teamspace: ","format":"{{msg.payload}}","layout":"row-left","x":803.7069034576416,"y":759.0969705581665,"wires":[]},{"id":"fd5688f1.159d58","type":"function","z":"69b7d74a.c4d048","name":"","func":"msg.payload = flow.get(\"teamspace\");\n\nreturn msg;","outputs":1,"noerr":0,"x":653.7133846282959,"y":757.3326425552368,"wires":[["f1bd2cfb.b515e"]]},{"id":"e9bdb44f.2b1498","type":"function","z":"69b7d74a.c4d048","name":"","func":"\nreturn msg;","outputs":1,"noerr":0,"x":154.95474243164062,"y":771.0805435180664,"wires":[["fd5688f1.159d58","1e8abd6e.284853","ec76c368.a68d8"]]},{"id":"40644fae.42033","type":"ui_text","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","order":6,"width":0,"height":0,"name":"","label":"revision: ","format":"{{msg.payload}}","layout":"row-left","x":791.141767501831,"y":806.3712186813354,"wires":[]},{"id":"1e8abd6e.284853","type":"function","z":"69b7d74a.c4d048","name":"","func":"msg.payload = flow.get(\"revision\");\n\nreturn msg;","outputs":1,"noerr":0,"x":651.1482486724854,"y":804.6068906784058,"wires":[["40644fae.42033"]]},{"id":"ec76c368.a68d8","type":"function","z":"69b7d74a.c4d048","name":"model settings","func":"cookie = flow.get(\"cookie\");\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nmsg.payload = \"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \".json\";\n\nreturn msg;","outputs":1,"noerr":0,"x":317.4634494781494,"y":708.5848107337952,"wires":[["2efe513a.ba90be"]]},{"id":"2efe513a.ba90be","type":"http request","z":"69b7d74a.c4d048","name":"","method":"GET","ret":"obj","url":"{{{payload}}}","tls":"","x":503.70913887023926,"y":709.7762174606323,"wires":[["cb5f9494.4dbf98"]]},{"id":"cb5f9494.4dbf98","type":"function","z":"69b7d74a.c4d048","name":"","func":"if(msg.payload.name != undefined){\n msg.payload = msg.payload.name;\n}else{\n msg.payload = \"NOT AUTHORISED\";\n}\n\nreturn msg;","outputs":1,"noerr":0,"x":653.7069759368896,"y":708.5826377868652,"wires":[["7696d1b2.dbf17"]]},{"id":"7696d1b2.dbf17","type":"ui_text","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","order":4,"width":0,"height":0,"name":"","label":"name: ","format":"{{msg.payload}}","layout":"row-left","x":804.8917598724365,"y":705.121208190918,"wires":[]},{"id":"c6b80ba5.f49ef8","type":"ui_template","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","name":"Results","order":8,"width":"0","height":"0","format":"<style>\n td {\n height: 20px;\n }\n a:link {\n color: white;\n background-color: #0094ce;\n text-decoration: none;\n padding: 5px;\n border-radius: 2px;\n box-shadow: 2px 2px 3px #d1d1d1;\n }\n a:visited {\n color: white;\n background-color: #0094ce;\n text-decoration: none;\n }\n a:hover {\n color: white;\n background-color: #1bbfff;\n text-decoration: none;\n }\n</style>\n\n<table style=\"width:100%\">\n <caption><b></b></caption>\n <tr ng-repeat=\"x in msg.payload\">\n <td width=\"100%\"><a href=\"{{x.link}}\" target=\"_blank\"><b>{{x.name}}</b></a></td>\n </tr>\n</table>","storeOutMessages":true,"fwdInMessages":true,"templateScope":"local","x":1008.6417541503906,"y":632.6212120056152,"wires":[[]]},{"id":"cda87d00.0914c","type":"function","z":"69b7d74a.c4d048","name":"issue link","func":"o = {};\n\no.name = \"See results in 3D Repo\";\no.link = \"https://www.3drepo.io/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/issues/\" + msg.payload._id;\n\nmsg.payload = [o];\n\nreturn msg;","outputs":1,"noerr":0,"x":847.4612808227539,"y":634.695915222168,"wires":[["c6b80ba5.f49ef8"]]},{"id":"b94aa487.0d53b8","type":"ui_text","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","order":3,"width":"5","height":"2","name":"","label":"","format":"{{msg.payload}}","layout":"row-spread","x":1018.7049903869629,"y":824.0948028564453,"wires":[]},{"id":"a5c83cf1.b21ab","type":"ui_text","z":"69b7d74a.c4d048","group":"a3a2993c.d55868","order":7,"width":"5","height":"2","name":"","label":"","format":"{{msg.payload}}","layout":"row-spread","x":793.6417579650879,"y":848.8712120056152,"wires":[]},{"id":"f0c3cc03.847bb","type":"function","z":"69b7d74a.c4d048","name":"meshes call","func":"cookie = flow.get(\"cookie\");\n\nmsg.headers = {\n \"content-type\":\"application/json\",\n \"Cookie\": cookie\n};\n\nmsg.payload = \"https://api1.www.3drepo.io/api/\" + flow.get(\"teamspace\") + \"/\" + flow.get(\"modelID\") + \"/revision/\" + flow.get(\"revision\") + \"/meshes.json\";\n\nreturn msg;","outputs":1,"noerr":0,"x":831.6774749755859,"y":119.58554744720459,"wires":[["c78b6cfe.884cb"]]},{"id":"c78b6cfe.884cb","type":"http request","z":"69b7d74a.c4d048","name":"","method":"GET","ret":"obj","url":"{{{payload}}}","tls":"","x":1014.1730575561523,"y":117.02696132659912,"wires":[["8631d848.d29a68"]]},{"id":"ae6653ac.9fbf6","type":"function","z":"69b7d74a.c4d048","name":"if difference","func":"operation = flow.get(\"operation\");\n\nif(operation == \"difference\"){\n return msg;\n}else{\n return;\n}","outputs":1,"noerr":0,"x":655.4274978637695,"y":118.33552169799805,"wires":[["f0c3cc03.847bb"]]},{"id":"8631d848.d29a68","type":"function","z":"69b7d74a.c4d048","name":"all meshes","func":"teamspace = flow.get(\"teamspace\");\n\nallMeshes = [];\n\nif (msg.payload.subModels != undefined) {\n for (var i = 0; i < msg.payload.subModels.length; i++) {\n for (var j = 0; j < msg.payload.subModels[i].meshes.length; j++) {\n allMeshes.push(msg.payload.subModels[i].meshes[j].shared_id)\n }\n }\n}else{\n for(var i in msg.payload.meshes){\n allMeshes.push(msg.payload.meshes[i].shared_id)\n }\n}\n\nvar allMeshes = new Set([].concat(...allMeshes));\nallMeshes = Array.from(allMeshes);\n\nflow.set(\"allMeshes\", allMeshes);","outputs":1,"noerr":0,"x":1187.5759201049805,"y":117.7669448852539,"wires":[[]]},{"id":"a48111f1.9661b","type":"ui_group","z":"","name":"","tab":"eea91618.05e5c8","order":3,"disp":true,"width":"18"},{"id":"a3a2993c.d55868","type":"ui_group","z":"","name":"","tab":"eea91618.05e5c8","order":1,"disp":true,"width":"5"},{"id":"eea91618.05e5c8","type":"ui_tab","z":"","name":"BIM Forensics","icon":"dashboard","order":3}]