@churchapps/apphelper 0.3.40 → 0.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ReportOutput.d.ts","sourceRoot":"","sources":["../../../src/components/reporting/ReportOutput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgC,eAAe,EAAyB,MAAM,qBAAqB,CAAC;AAW3G,UAAU,KAAK;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE;AAE5D,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,4CAmJxC,CAAA"}
1
+ {"version":3,"file":"ReportOutput.d.ts","sourceRoot":"","sources":["../../../src/components/reporting/ReportOutput.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAgC,eAAe,EAAyB,MAAM,qBAAqB,CAAC;AAW3G,UAAU,KAAK;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE;AAE5D,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,4CAuJxC,CAAA"}
@@ -93,10 +93,13 @@ const ReportOutput = (props) => {
93
93
  };
94
94
  result.push(obj);
95
95
  }
96
- //set custom headers
97
- const maxKeysObj = result?.reduce((a, b) => Object.keys(a).length > Object.keys(b).length ? a : b, []);
98
- const objKeys = Object.keys(maxKeysObj);
99
- objKeys.forEach(key => headers.push({ label: key, key: key }));
96
+ // Collect all unique keys across all objects
97
+ const allKeys = new Set();
98
+ result.forEach(obj => {
99
+ Object.keys(obj).forEach(key => allKeys.add(key));
100
+ });
101
+ // Create headers for all unique keys
102
+ allKeys.forEach(key => headers.push({ label: key, key: key }));
100
103
  setCustomHeaders(headers);
101
104
  setDetailedPersonSummary(result);
102
105
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ReportOutput.js","sourceRoot":"","sources":["../../../src/components/reporting/ReportOutput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReportOutput.js","sourceRoot":"","sources":["../../../src/components/reporting/ReportOutput.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,+CAAsC;AACtC,iDAA2G;AAC3G,2BAAqD;AACrD,2CAAiD;AACjD,mDAAiD;AACjD,+CAA4C;AAC5C,+CAA4C;AAC5C,6CAA0C;AAC1C,4CAA6D;AAC7D,iEAA8D;AAKvD,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,EAAE;IAC5C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACpF,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAQ,IAAI,CAAC,CAAC;IACtF,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAqB,IAAI,CAAC,CAAC;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,eAAK,CAAC,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAA,cAAM,EAAiB,IAAI,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAA,iCAAe,GAAE,CAAC;IAEpC,MAAM,WAAW,GAAG,IAAA,gCAAe,EAAC;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO;KACjC,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,IAAW,EAAE,EAAE;QAC5C,IAAI,MAAM,GAAU,EAAE,CAAC;QACvB,IAAI,OAAO,GAAqC,EAAE,CAAC;QACnD,MAAM,SAAS,GAAG,qBAAW,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACvD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,mBAAS,CAAC,GAAG,CAAC,kBAAkB,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC;YAC9F,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;YAC7D,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1B,MAAM,MAAM,GAAoB,qBAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC7E,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG;oBACX,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;oBAC5B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;oBAC1B,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK;oBAChC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9G,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI;oBAC7B,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK;oBAC/B,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG;oBAC3B,aAAa,EAAE,CAAC,CAAC,WAAW;oBAC5B,GAAG,KAAK;iBACR,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAG,qBAAW,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACjE,IAAI,aAAa,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,GAAG,GAAG;gBACX,SAAS,EAAE,WAAW;gBACtB,aAAa,EAAE,aAAa,CAAC,WAAW;gBACxC,GAAG,KAAK;aACR,CAAA;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,6CAA6C;QAC7C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,qCAAqC;QACrC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAE/D,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC1B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,GAAG,EAAE;QACtB,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACnC,IAAI,CAAC,CAAC,KAAK;oBAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;YACH,IAAI,GAAG,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;YACtD,IAAI,WAAW;gBAAE,GAAG,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEpD,mBAAS,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,IAA2B,EAAE,EAAE;gBACvE,IAAI,SAAS,EAAE,EAAE,CAAC;oBACjB,eAAe,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC;YACF,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,iCAAiC,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9E,mBAAS,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAElF,IAAI,KAAK,CAAC,OAAO,KAAK,iBAAiB,EAAE,CAAC;gBACzC,IAAI,GAAG,GAAG,sCAAsC,CAAC;gBACjD,IAAI,WAAW;oBAAE,GAAG,IAAI,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpD,mBAAS,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,IAA2B,EAAE,EAAE;oBACvE,eAAe,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAA;YACH,CAAC;QACF,CAAC;IACF,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,EAAE;QACrC,MAAM,WAAW,GAAG,CAAC,KAA0C,EAAE,EAAE;YAClE,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAClC,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,GAAG,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAA;QACD,OAAO,CAAC,6DACP,uBAAC,iBAAM,IAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAE,gBAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,OAAO,EAAE,WAAW,YAAY,uBAAC,eAAI,2BAAgB,IAA1B,GAAG,CAAgC,EACrI,wBAAC,eAAI,IAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,aACxD,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI,uBAAC,mBAAQ,IAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,YAAE,uBAAC,cAAU,IAAC,IAAI,EAAE,KAAK,CAAC,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,gBAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,KAAK,iBAAiB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,GAAI,GAAW,EACvY,CAAC,KAAK,CAAC,OAAO,KAAK,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,uBAAC,mBAAQ,IAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,YAAE,uBAAC,cAAU,IAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAC,+BAA+B,EAAC,IAAI,EAAE,gBAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAC,QAAQ,EAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,GAAI,GAAW,EAC7U,CAAC,KAAK,CAAC,OAAO,KAAK,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,uBAAC,mBAAQ,IAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,YAAE,wBAAC,iBAAM,IAAC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA,CAAC,CAAC,aAAE,uBAAC,eAAI,IAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,4BAAoB,EAAC,gBAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,IAAU,GAAW,IAC3T,IACL,CAAC,CAAA;IACL,CAAC,CAAA;IAED,eAAK,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC3B,MAAM,MAAM,GAAkB,EAAE,CAAC;QAEjC,IAAI,YAAY,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,mCAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kBAAkB,EAAyB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAC,OAAO,YAAC,uBAAC,eAAI,wBAAa,IAAzE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAiE,CAAC,CAAC;QACzJ,CAAC;QACD,IAAI,YAAY,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,qBAAqB,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO;gBAAE,MAAM,CAAC,IAAI,CAAC,uBAAC,yBAAW,IAAoB,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,IAAnD,CAAC,CAAC,UAAU,CAA2C,CAAC,CAAA;YACpH,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM;gBAAE,MAAM,CAAC,IAAI,CAAC,uBAAC,uBAAU,IAAoB,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,IAAnD,CAAC,CAAC,UAAU,CAA2C,CAAC,CAAA;iBAC7G,IAAI,CAAC,CAAC,UAAU,KAAK,UAAU;gBAAE,MAAM,CAAC,IAAI,CAAC,uBAAC,yBAAW,IAAoB,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,IAAnD,CAAC,CAAC,UAAU,CAA2C,CAAC,CAAA;QAC7H,CAAC,CAAC,CAAA;QAEF,OAAO,MAAM,CAAC;IACf,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,GAAG,EAAE;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,uBAAC,cAAU,IAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAC,YAAY,EAAC,UAAU,EAAC,WAAW,EAAC,UAAU,EAAE,gBAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,YAAE,wCAAI,gBAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,GAAK,GAAa,CAAC,CAAC;aAErO,IAAI,CAAC,YAAY;YAAE,OAAO,uBAAC,WAAO,KAAG,CAAA;aACrC,CAAC;YACL,OAAO,CAAC,uBAAC,cAAU,IAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAC,YAAY,EAAC,UAAU,EAAC,WAAW,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,YAC7I,UAAU,EAAE,GACD,CAAC,CAAC;QAChB,CAAC;IACF,CAAC,CAAA;IAED,OAAO,CACN,2DACE,UAAU,EAAE,GACX,CACH,CAAC;AACH,CAAC,CAAA;AAvJY,QAAA,YAAY,gBAuJxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@churchapps/apphelper",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "Library of helper functions for React and NextJS ChurchApps",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,150 +15,154 @@ import { Link } from "react-router-dom";
15
15
  interface Props { keyName: string, report: ReportInterface }
16
16
 
17
17
  export const ReportOutput = (props: Props) => {
18
- const [reportResult, setReportResult] = React.useState<ReportResultInterface>(null);
19
- const [detailedPersonSummary, setDetailedPersonSummary] = React.useState<any[]>(null);
20
- const [customHeaders, setCustomHeaders] = React.useState([]);
21
- const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
22
- const [downloadData, setDownloadData] = React.useState<ReportResultInterface>(null);
23
- const open = Boolean(anchorEl);
24
- const contentRef = useRef<HTMLDivElement>(null);
25
- const isMounted = useMountedState();
26
-
27
- const handlePrint = useReactToPrint({
28
- content: () => contentRef.current
29
- })
30
-
31
- const populatePeople = async (data: any[]) => {
32
- let result: any[] = [];
33
- let headers: {label: string, key: string}[] = [];
34
- const peopleIds = ArrayHelper.getIds(data, "personId");
35
- if (peopleIds.length > 0) {
36
- const people = await ApiHelper.get("/people/ids?ids=" + peopleIds.join(","), "MembershipApi");
37
- const filteredData = data.filter((d) => d.personId !== null);
38
- filteredData.forEach((d) => {
39
- const person: PersonInterface = ArrayHelper.getOne(people, "id", d.personId);
40
- const funds = Object.assign({}, ...d.funds);
41
- const obj = {
42
- firstName: person.name.first,
43
- lastName: person.name.last,
44
- email: person.contactInfo?.email,
45
- address: person.contactInfo.address1 + (person.contactInfo.address2 ? `, ${person.contactInfo.address2}` : ""),
46
- city: person.contactInfo.city,
47
- state: person.contactInfo.state,
48
- zip: person.contactInfo.zip,
49
- totalDonation: d.totalAmount,
50
- ...funds
51
- };
52
- result.push(obj);
53
- });
54
- }
55
-
56
- //for anonymous donations
57
- const anonDonations = ArrayHelper.getOne(data, "personId", null);
58
- if (anonDonations) {
59
- const funds = Object.assign({}, ...anonDonations.funds);
60
- const obj = {
61
- firstName: "Anonymous",
62
- totalDonation: anonDonations.totalAmount,
63
- ...funds
64
- }
65
- result.push(obj);
66
- }
67
-
68
- //set custom headers
69
- const maxKeysObj = result?.reduce((a, b) => Object.keys(a).length > Object.keys(b).length ? a : b, []);
70
- const objKeys = Object.keys(maxKeysObj);
71
- objKeys.forEach(key => headers.push({ label: key, key: key }));
72
-
73
- setCustomHeaders(headers);
74
- setDetailedPersonSummary(result);
75
- }
76
-
77
- const runReport = () => {
78
- if (props.report) {
79
- const queryParams: string[] = [];
80
- props.report.parameters.forEach(p => {
81
- if (p.value) queryParams.push(p.keyName + "=" + p.value);
82
- });
83
- let url = "/reports/" + props.report.keyName + "/run";
84
- if (queryParams) url += "?" + queryParams.join("&");
85
-
86
- ApiHelper.get(url, "ReportingApi").then((data: ReportResultInterface) => {
87
- if(isMounted()) {
88
- setReportResult(data);
89
- }
90
- });
91
-
92
- const donationUrl = "/donations/summary?type=person&" + queryParams.join("&");
93
- ApiHelper.get(donationUrl, "GivingApi").then((data) => { populatePeople(data); });
94
-
95
- if (props.keyName === "groupAttendance") {
96
- let url = "/reports/groupAttendanceDownload/run";
97
- if (queryParams) url += "?" + queryParams.join("&");
98
- ApiHelper.get(url, "ReportingApi").then((data: ReportResultInterface) => {
99
- setDownloadData(data);
100
- })
101
- }
102
- }
103
- }
104
-
105
- const getExportMenu = (key: number) => {
106
- const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
107
- setAnchorEl(event.currentTarget);
108
- }
109
-
110
- const handleClose = () => {
111
- setAnchorEl(null);
112
- }
113
- return (<>
114
- <Button size="small" title={Locale.label("reporting.downloadOptions")} onClick={handleClick} key={key}><Icon>download</Icon></Button>
115
- <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>
116
- {reportResult?.table?.length > 0 && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><ExportLink data={props.keyName === "groupAttendance" ? downloadData?.table : reportResult.table} filename={props.report.displayName.replace(" ", "_") + ".csv"} text={Locale.label("reporting.summary")} icon={props.keyName === "attendanceTrend" ? "calendar_month" : "volunteer_activism"} /></MenuItem>}
117
- {(props.keyName ==="donationSummary" && detailedPersonSummary?.length > 0) && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><ExportLink data={detailedPersonSummary} filename="Detailed_Donation_Summary.csv" text={Locale.label("reporting.detailed")} icon="person" customHeaders={customHeaders} spaceAfter={true} /></MenuItem>}
118
- {(props.keyName ==="donationSummary" && detailedPersonSummary?.length > 0) && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><Button onClick={() => { window.open("/downloads/DonationTemplate.docx") }}><Icon sx={{ marginRight: 1 }}>description</Icon>{Locale.label("reporting.sampleTemplate")}</Button></MenuItem>}
119
- </Menu>
120
- </>)
121
- }
122
-
123
- React.useEffect(runReport, [props.report, isMounted]);
124
-
125
- const getEditContent = () => {
126
- const result: JSX.Element[] = [];
127
-
128
- if (reportResult) {
129
- result.push(<button type="button" className="no-default-style" key={result.length - 2} onClick={handlePrint} title="print"><Icon>print</Icon></button>);
130
- }
131
- if (reportResult?.table.length > 0 || detailedPersonSummary?.length > 0) {
132
- result.push(getExportMenu(result.length - 1))
133
- }
134
- return result;
135
- }
136
-
137
- const getOutputs = () => {
138
- const result: JSX.Element[] = [];
139
- reportResult.outputs.forEach(o => {
140
- if (o.outputType === "table") result.push(<TableReport key={o.outputType} reportResult={reportResult} output={o} />)
141
- if (o.outputType === "tree") result.push(<TreeReport key={o.outputType} reportResult={reportResult} output={o} />)
142
- else if (o.outputType === "barChart") result.push(<ChartReport key={o.outputType} reportResult={reportResult} output={o} />)
143
- })
144
-
145
- return result;
146
- }
147
-
148
- const getResults = () => {
149
- if (!props.report) return (<DisplayBox ref={contentRef} id="reportsBox" headerIcon="summarize" headerText={Locale.label("reporting.runReport")} editContent={getEditContent()}><p>{Locale.label("reporting.useFilter")}</p></DisplayBox>);
150
-
151
- else if (!reportResult) return <Loading />
152
- else {
153
- return (<DisplayBox ref={contentRef} id="reportsBox" headerIcon="summarize" headerText={props.report.displayName} editContent={getEditContent()}>
154
- {getOutputs()}
155
- </DisplayBox>);
156
- }
157
- }
158
-
159
- return (
160
- <>
161
- {getResults()}
162
- </>
163
- );
18
+ const [reportResult, setReportResult] = React.useState<ReportResultInterface>(null);
19
+ const [detailedPersonSummary, setDetailedPersonSummary] = React.useState<any[]>(null);
20
+ const [customHeaders, setCustomHeaders] = React.useState([]);
21
+ const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
22
+ const [downloadData, setDownloadData] = React.useState<ReportResultInterface>(null);
23
+ const open = Boolean(anchorEl);
24
+ const contentRef = useRef<HTMLDivElement>(null);
25
+ const isMounted = useMountedState();
26
+
27
+ const handlePrint = useReactToPrint({
28
+ content: () => contentRef.current
29
+ })
30
+
31
+ const populatePeople = async (data: any[]) => {
32
+ let result: any[] = [];
33
+ let headers: { label: string, key: string }[] = [];
34
+ const peopleIds = ArrayHelper.getIds(data, "personId");
35
+ if (peopleIds.length > 0) {
36
+ const people = await ApiHelper.get("/people/ids?ids=" + peopleIds.join(","), "MembershipApi");
37
+ const filteredData = data.filter((d) => d.personId !== null);
38
+ filteredData.forEach((d) => {
39
+ const person: PersonInterface = ArrayHelper.getOne(people, "id", d.personId);
40
+ const funds = Object.assign({}, ...d.funds);
41
+ const obj = {
42
+ firstName: person.name.first,
43
+ lastName: person.name.last,
44
+ email: person.contactInfo?.email,
45
+ address: person.contactInfo.address1 + (person.contactInfo.address2 ? `, ${person.contactInfo.address2}` : ""),
46
+ city: person.contactInfo.city,
47
+ state: person.contactInfo.state,
48
+ zip: person.contactInfo.zip,
49
+ totalDonation: d.totalAmount,
50
+ ...funds
51
+ };
52
+ result.push(obj);
53
+ });
54
+ }
55
+
56
+ //for anonymous donations
57
+ const anonDonations = ArrayHelper.getOne(data, "personId", null);
58
+ if (anonDonations) {
59
+ const funds = Object.assign({}, ...anonDonations.funds);
60
+ const obj = {
61
+ firstName: "Anonymous",
62
+ totalDonation: anonDonations.totalAmount,
63
+ ...funds
64
+ }
65
+ result.push(obj);
66
+ }
67
+
68
+ // Collect all unique keys across all objects
69
+ const allKeys = new Set<string>();
70
+ result.forEach(obj => {
71
+ Object.keys(obj).forEach(key => allKeys.add(key));
72
+ });
73
+
74
+ // Create headers for all unique keys
75
+ allKeys.forEach(key => headers.push({ label: key, key: key }));
76
+
77
+ setCustomHeaders(headers);
78
+ setDetailedPersonSummary(result);
79
+ }
80
+
81
+ const runReport = () => {
82
+ if (props.report) {
83
+ const queryParams: string[] = [];
84
+ props.report.parameters.forEach(p => {
85
+ if (p.value) queryParams.push(p.keyName + "=" + p.value);
86
+ });
87
+ let url = "/reports/" + props.report.keyName + "/run";
88
+ if (queryParams) url += "?" + queryParams.join("&");
89
+
90
+ ApiHelper.get(url, "ReportingApi").then((data: ReportResultInterface) => {
91
+ if (isMounted()) {
92
+ setReportResult(data);
93
+ }
94
+ });
95
+
96
+ const donationUrl = "/donations/summary?type=person&" + queryParams.join("&");
97
+ ApiHelper.get(donationUrl, "GivingApi").then((data) => { populatePeople(data); });
98
+
99
+ if (props.keyName === "groupAttendance") {
100
+ let url = "/reports/groupAttendanceDownload/run";
101
+ if (queryParams) url += "?" + queryParams.join("&");
102
+ ApiHelper.get(url, "ReportingApi").then((data: ReportResultInterface) => {
103
+ setDownloadData(data);
104
+ })
105
+ }
106
+ }
107
+ }
108
+
109
+ const getExportMenu = (key: number) => {
110
+ const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
111
+ setAnchorEl(event.currentTarget);
112
+ }
113
+
114
+ const handleClose = () => {
115
+ setAnchorEl(null);
116
+ }
117
+ return (<>
118
+ <Button size="small" title={Locale.label("reporting.downloadOptions")} onClick={handleClick} key={key}><Icon>download</Icon></Button>
119
+ <Menu anchorEl={anchorEl} open={open} onClose={handleClose}>
120
+ {reportResult?.table?.length > 0 && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><ExportLink data={props.keyName === "groupAttendance" ? downloadData?.table : reportResult.table} filename={props.report.displayName.replace(" ", "_") + ".csv"} text={Locale.label("reporting.summary")} icon={props.keyName === "attendanceTrend" ? "calendar_month" : "volunteer_activism"} /></MenuItem>}
121
+ {(props.keyName === "donationSummary" && detailedPersonSummary?.length > 0) && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><ExportLink data={detailedPersonSummary} filename="Detailed_Donation_Summary.csv" text={Locale.label("reporting.detailed")} icon="person" customHeaders={customHeaders} spaceAfter={true} /></MenuItem>}
122
+ {(props.keyName === "donationSummary" && detailedPersonSummary?.length > 0) && <MenuItem sx={{ padding: "5px" }} onClick={handleClose}><Button onClick={() => { window.open("/downloads/DonationTemplate.docx") }}><Icon sx={{ marginRight: 1 }}>description</Icon>{Locale.label("reporting.sampleTemplate")}</Button></MenuItem>}
123
+ </Menu>
124
+ </>)
125
+ }
126
+
127
+ React.useEffect(runReport, [props.report, isMounted]);
128
+
129
+ const getEditContent = () => {
130
+ const result: JSX.Element[] = [];
131
+
132
+ if (reportResult) {
133
+ result.push(<button type="button" className="no-default-style" key={result.length - 2} onClick={handlePrint} title="print"><Icon>print</Icon></button>);
134
+ }
135
+ if (reportResult?.table.length > 0 || detailedPersonSummary?.length > 0) {
136
+ result.push(getExportMenu(result.length - 1))
137
+ }
138
+ return result;
139
+ }
140
+
141
+ const getOutputs = () => {
142
+ const result: JSX.Element[] = [];
143
+ reportResult.outputs.forEach(o => {
144
+ if (o.outputType === "table") result.push(<TableReport key={o.outputType} reportResult={reportResult} output={o} />)
145
+ if (o.outputType === "tree") result.push(<TreeReport key={o.outputType} reportResult={reportResult} output={o} />)
146
+ else if (o.outputType === "barChart") result.push(<ChartReport key={o.outputType} reportResult={reportResult} output={o} />)
147
+ })
148
+
149
+ return result;
150
+ }
151
+
152
+ const getResults = () => {
153
+ if (!props.report) return (<DisplayBox ref={contentRef} id="reportsBox" headerIcon="summarize" headerText={Locale.label("reporting.runReport")} editContent={getEditContent()}><p>{Locale.label("reporting.useFilter")}</p></DisplayBox>);
154
+
155
+ else if (!reportResult) return <Loading />
156
+ else {
157
+ return (<DisplayBox ref={contentRef} id="reportsBox" headerIcon="summarize" headerText={props.report.displayName} editContent={getEditContent()}>
158
+ {getOutputs()}
159
+ </DisplayBox>);
160
+ }
161
+ }
162
+
163
+ return (
164
+ <>
165
+ {getResults()}
166
+ </>
167
+ );
164
168
  }