Accomodate new contacts in flow chart

This commit is contained in:
Rich Lott / Artful Robot 2025-03-31 13:51:11 +01:00
parent 216d9a46ee
commit d5ee875aef
3 changed files with 11 additions and 10 deletions

View file

@ -306,7 +306,7 @@ class GetFlows extends \Civi\Api4\Generic\AbstractAction {
// Don't use exchange array so as not to gazump non-array data(?)
foreach ($data as $row) {
$result[] = [
'from_category_id' => (int) (($row['from_category_id']) ?: $defaultCategoryId),
'from_category_id' => (int) (($row['from_category_id'])), // ?: $defaultCategoryId,
'to_category_id' => (int) $row['to_category_id'],
'contact_count' => (int) $row['contact_count'],
];

View file

@ -61,14 +61,14 @@
</g>
<!-- to-side labels -->
<g transform="translate({{$ctrl.sankey.iconWidth + $ctrl.sankey.snakeWidth}})">
<rect ng-repeat="toAna in $ctrl.sankey.analysisArray"
<rect ng-repeat="toAna in $ctrl.sankey.analysisArray.slice(0, -1)"
x=0
y="{{toAna.y}}"
width=16
height="{{toAna.toCatHeight}}"
fill="{{toAna.cat.color}}"
></rect>
<foreignobject ng-repeat="toAna in $ctrl.sankey.analysisArray"
<foreignobject ng-repeat="toAna in $ctrl.sankey.analysisArray.slice(0, -1)"
x="20" y="{{toAna.y}}" width="{{$ctrl.sankey.labelWidth}}" height="{{toAna.thisCatHeight}}">
<span class=sankey-label style="display:block;color:{{toAna.cat.color}}">
<i class="crm-i {{toAna.cat.icon}}" title="{{toAna.cat.label}}"></i>
@ -91,9 +91,8 @@
x=0 y="{{toAna.y}}" width="{{$ctrl.sankey.iconWidth}}"
height="{{toAna.thisCatHeight}}">
<span class=sankey-label
title="{{toAna.previous}}"
style="display:block;text-align:center;color:{{toAna.cat.color}}"
><i class="crm-i {{toAna.cat.icon}}" title="{{toAna.cat.label}}"></i>
><i class="crm-i {{toAna.cat.icon}}" title="{{toAna.cat.label}} {{toAna.previous.toLocaleString()}}"></i>
</span>
</foreignobject>
</g>

View file

@ -16,6 +16,7 @@
let flowsData = ctrl.changesOnly
? allFlowsData.filter(({from_category_id, to_category_id}) => from_category_id != to_category_id)
: allFlowsData;
console.log("flowsData", flowsData, ctrl.catDefs);
ctrl.loading = false;
const width = Math.max(600, document.querySelector('.contact-cats-sankey').clientWidth),
@ -61,11 +62,11 @@
let totalContacts = 0;
flowsData.forEach(row => {
const {from_category_id, to_category_id, contact_count} = row;
if (!from_category_id) {
// from nowhere: ignore for now.
console.log("Skipping", row);
return;
}
// if (!from_category_id) {
// // from nowhere: ignore for now.
// console.log("Skipping", row);
// return;
// }
analysis[to_category_id].now += contact_count;
if (!catDefsIndexed[from_category_id]) {
console.log("from_category_id", from_category_id, "not found in defs", catDefsIndexed);
@ -192,6 +193,7 @@
})
);
}
ctrl.catDefs.push({ id: 0, label: ts('New'), color: '#6cf66c', icon: 'fa-add', presentation_order: ctrl.catDefs.length, search_type:'new'});
ctrl.loading = false;
ctrl.catDefs.forEach(cat => {catDefsIndexed[cat.id] = cat;});