@mj-biz-apps/common-ng 5.63.0 → 5.64.0
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.
- package/dist/lib/data/__tests__/directory-dashboard-days.test.js +61 -9
- package/dist/lib/data/__tests__/directory-dashboard-days.test.js.map +1 -1
- package/dist/lib/data/directory-queries.d.ts +4 -0
- package/dist/lib/data/directory-queries.d.ts.map +1 -1
- package/dist/lib/data/directory-queries.js +41 -13
- package/dist/lib/data/directory-queries.js.map +1 -1
- package/dist/lib/pages/common-dashboard.page.d.ts +15 -3
- package/dist/lib/pages/common-dashboard.page.d.ts.map +1 -1
- package/dist/lib/pages/common-dashboard.page.js +378 -313
- package/dist/lib/pages/common-dashboard.page.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The directory dashboard's "people added" bars are business days (golive #168): the query
|
|
3
|
-
* __mj_CreatedAt by fnBusinessDayOf against fnBusinessToday(), and the labels name the same
|
|
4
|
-
* the business zone. Bucketing or labelling by UTC put Thursday evening in Chicago under "Fri".
|
|
2
|
+
* The directory dashboard's "people added" bars are business days (golive #168): the per-day query
|
|
3
|
+
* buckets __mj_CreatedAt by fnBusinessDayOf against fnBusinessToday(), and the labels name the same
|
|
4
|
+
* days by the business zone. Bucketing or labelling by UTC put Thursday evening in Chicago under "Fri".
|
|
5
|
+
*
|
|
6
|
+
* The bars come from their own query, apart from the summary, because fnBusinessDayOf cannot be
|
|
7
|
+
* inlined and makes any statement that calls it single-threaded.
|
|
5
8
|
*/
|
|
6
9
|
import { readFileSync } from 'node:fs';
|
|
7
10
|
import { fileURLToPath } from 'node:url';
|
|
@@ -15,14 +18,25 @@ vi.mock('@memberjunction/core', async (importOriginal) => {
|
|
|
15
18
|
} };
|
|
16
19
|
});
|
|
17
20
|
import { LoadDirectoryDashboardSummary } from '../directory-queries';
|
|
18
|
-
const
|
|
21
|
+
const SQL_DIR = '../../../../../../metadata/queries/SQL/';
|
|
22
|
+
const SUMMARY_SQL = fileURLToPath(new URL(`${SQL_DIR}directory-dashboard-summary.sql`, import.meta.url));
|
|
23
|
+
const PER_DAY_SQL = fileURLToPath(new URL(`${SQL_DIR}directory-people-per-day.sql`, import.meta.url));
|
|
24
|
+
const SUMMARY_QUERY = 'Common: Directory Dashboard Summary';
|
|
25
|
+
const PER_DAY_QUERY = 'Common: Directory People Per Day';
|
|
26
|
+
/** RunQuery answers by query name, so a test can fail one query and not the other. */
|
|
27
|
+
function answer(byName) {
|
|
28
|
+
runQuery.mockImplementation(async (params) => byName[params.QueryName]());
|
|
29
|
+
}
|
|
19
30
|
describe('LoadDirectoryDashboardSummary day labels', () => {
|
|
20
31
|
beforeEach(() => {
|
|
21
32
|
vi.useFakeTimers();
|
|
22
33
|
// Thursday 8:30 PM in Chicago is already Friday in UTC.
|
|
23
34
|
vi.setSystemTime(new Date('2026-10-02T01:30:00.000Z'));
|
|
24
35
|
vi.spyOn(BusinessTimeZoneEngine.Instance, 'Resolve').mockReturnValue('America/Chicago');
|
|
25
|
-
|
|
36
|
+
answer({
|
|
37
|
+
[SUMMARY_QUERY]: () => ({ Success: true, Results: [{ ActivePeople: 10, TotalPeople: 12 }] }),
|
|
38
|
+
[PER_DAY_QUERY]: () => ({ Success: true, Results: [{ PeopleAddedD0: 4, PeopleAddedD1: 1 }] }),
|
|
39
|
+
});
|
|
26
40
|
});
|
|
27
41
|
afterEach(() => {
|
|
28
42
|
vi.useRealTimers();
|
|
@@ -38,17 +52,55 @@ describe('LoadDirectoryDashboardSummary day labels', () => {
|
|
|
38
52
|
expect(summary.PeoplePerDay.map((bar) => bar.Label)).toEqual(['Fri', 'Sat', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu']);
|
|
39
53
|
});
|
|
40
54
|
});
|
|
41
|
-
describe('
|
|
42
|
-
|
|
55
|
+
describe('LoadDirectoryDashboardSummary failures', () => {
|
|
56
|
+
afterEach(() => {
|
|
57
|
+
vi.restoreAllMocks();
|
|
58
|
+
});
|
|
59
|
+
it('returns the counts without bars when only the per-day query fails', async () => {
|
|
60
|
+
answer({
|
|
61
|
+
[SUMMARY_QUERY]: () => ({ Success: true, Results: [{ ActivePeople: 10 }] }),
|
|
62
|
+
[PER_DAY_QUERY]: () => ({ Success: false, ErrorMessage: 'timeout' }),
|
|
63
|
+
});
|
|
64
|
+
const summary = await LoadDirectoryDashboardSummary();
|
|
65
|
+
expect(summary.ActivePeopleCount).toBe(10);
|
|
66
|
+
expect(summary.PeoplePerDay).toEqual([]);
|
|
67
|
+
});
|
|
68
|
+
it('returns null, rather than throwing, when the summary query throws', async () => {
|
|
69
|
+
answer({
|
|
70
|
+
[SUMMARY_QUERY]: () => {
|
|
71
|
+
throw new Error('network down');
|
|
72
|
+
},
|
|
73
|
+
[PER_DAY_QUERY]: () => ({ Success: true, Results: [{ PeopleAddedD0: 1 }] }),
|
|
74
|
+
});
|
|
75
|
+
await expect(LoadDirectoryDashboardSummary()).resolves.toBeNull();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
const stripComments = (path) => readFileSync(path, 'utf8').replace(/^\s*--.*$/gm, '');
|
|
79
|
+
describe('the directory people-per-day query', () => {
|
|
80
|
+
const sql = stripComments(PER_DAY_SQL);
|
|
43
81
|
it('buckets people by business day, against the business today', () => {
|
|
44
|
-
expect(sql).toContain('
|
|
82
|
+
expect(sql).toContain('FROM [__mj_BizAppsCommon].[fnBusinessToday]() AS bt');
|
|
83
|
+
expect(sql).toContain('SELECT [__mj_BizAppsCommon].[fnBusinessDayOf](x.__mj_CreatedAt) AS CreatedDay');
|
|
45
84
|
for (let ago = 0; ago <= 6; ago++) {
|
|
46
85
|
const day = ago === 0 ? 'bt.Today' : `DATEADD(DAY, -${ago}, bt.Today)`;
|
|
47
|
-
expect(sql).toContain(`WHEN
|
|
86
|
+
expect(sql).toContain(`WHEN d.CreatedDay = ${day} THEN 1 ELSE 0 END), 0) AS PeopleAddedD${ago}`);
|
|
48
87
|
}
|
|
49
88
|
});
|
|
89
|
+
it('calls fnBusinessDayOf only for rows from the last eight days', () => {
|
|
90
|
+
expect(sql).toContain('WHERE x.__mj_CreatedAt >= DATEADD(DAY, -8, SYSDATETIMEOFFSET())');
|
|
91
|
+
});
|
|
50
92
|
it('reads no UTC day and writes no AT TIME ZONE, which MJ\'s SQL parser cannot read', () => {
|
|
51
93
|
expect(sql).not.toMatch(/SYSUTCDATETIME|GETUTCDATE|AT TIME ZONE/i);
|
|
52
94
|
});
|
|
53
95
|
});
|
|
96
|
+
describe('the directory dashboard summary query', () => {
|
|
97
|
+
const sql = stripComments(SUMMARY_SQL);
|
|
98
|
+
it('calls no scalar business-day function, which would make the whole statement single-threaded', () => {
|
|
99
|
+
expect(sql).not.toContain('fnBusinessDayOf');
|
|
100
|
+
});
|
|
101
|
+
it('counts people without an organization without reading vwPeople.CurrentOrganizationID', () => {
|
|
102
|
+
expect(sql).not.toContain('CurrentOrganizationID');
|
|
103
|
+
expect(sql).toContain('AS PeopleMissingOrganization');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
54
106
|
//# sourceMappingURL=directory-dashboard-days.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-dashboard-days.test.js","sourceRoot":"","sources":["../../../../src/lib/data/__tests__/directory-dashboard-days.test.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"directory-dashboard-days.test.js","sourceRoot":"","sources":["../../../../src/lib/data/__tests__/directory-dashboard-days.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAEtE,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACzB,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IACrD,MAAM,MAAM,GAAG,MAAM,cAAc,EAAyC,CAAC;IAC7E,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE;YAAQ,QAAQ,GAAG,QAAQ,CAAC;SAAE,EAAE,CAAC;AACnE,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAErE,MAAM,OAAO,GAAG,yCAAyC,CAAC;AAC1D,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,iCAAiC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACzG,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,OAAO,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEtG,MAAM,aAAa,GAAG,qCAAqC,CAAC;AAC5D,MAAM,aAAa,GAAG,kCAAkC,CAAC;AAEzD,sFAAsF;AACtF,SAAS,MAAM,CAAC,MAAqC;IACjD,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAA6B,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACrG,CAAC;AAED,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACtD,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,wDAAwD;QACxD,EAAE,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvD,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;QACxF,MAAM,CAAC;YACH,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5F,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SAChG,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,OAAO,GAAG,MAAM,6BAA6B,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,OAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,6BAA6B,EAAE,CAAC;QAEtD,MAAM,CAAC,OAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;IACpD,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC;YACH,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3E,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;SACvE,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,6BAA6B,EAAE,CAAC;QAEtD,MAAM,CAAC,OAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QAC/E,MAAM,CAAC;YACH,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE;gBAClB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;YACpC,CAAC;YACD,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SAC9E,CAAC,CAAC;QAEH,MAAM,MAAM,CAAC,6BAA6B,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IACtE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAE9F,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAChD,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAEvC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,+EAA+E,CAAC,CAAC;QACvG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,GAAG,aAAa,CAAC;YACvE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,GAAG,0CAA0C,GAAG,EAAE,CAAC,CAAC;QACrG,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,iEAAiE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACvF,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACnD,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAEvC,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;QACnG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sFAAsF,EAAE,GAAG,EAAE;QAC5F,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACnD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -14,6 +14,10 @@ export interface DirectoryDashboardSummary {
|
|
|
14
14
|
WorthALook: DirectoryAttentionItem[];
|
|
15
15
|
Queues: DirectoryQueue[];
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* The dashboard's headline figures. `null` when the summary query fails. When only the per-day
|
|
19
|
+
* query fails, the summary is still returned, with no bars: the headline counts do not depend on it.
|
|
20
|
+
*/
|
|
17
21
|
export declare function LoadDirectoryDashboardSummary(): Promise<DirectoryDashboardSummary | null>;
|
|
18
22
|
/** Cheap directory load — one round trip, no aggregates. */
|
|
19
23
|
export declare function LoadDirectorySnapshot(): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-queries.d.ts","sourceRoot":"","sources":["../../../src/lib/data/directory-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EAC3B,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"directory-queries.d.ts","sourceRoot":"","sources":["../../../src/lib/data/directory-queries.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,wBAAwB,EAC3B,MAAM,mBAAmB,CAAC;AAU3B,MAAM,WAAW,yBAAyB;IACtC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yBAAyB,EAAE,MAAM,CAAC;IAClC,wBAAwB,EAAE,MAAM,CAAC;IACjC,2BAA2B,EAAE,MAAM,CAAC;IACpC,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,mBAAmB,EAAE,eAAe,EAAE,CAAC;IACvC,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,MAAM,EAAE,cAAc,EAAE,CAAC;CAC5B;AA2CD;;;GAGG;AACH,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CA2G/F;AAkDD,4DAA4D;AAC5D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC;IACnD,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC1C,aAAa,EAAE,wBAAwB,EAAE,CAAC;CAC7C,CAAC,CA+BD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAW5F;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAWzG"}
|
|
@@ -2,6 +2,11 @@ import { LogError, RunQuery, RunView } from '@memberjunction/core';
|
|
|
2
2
|
import { AddDays, BusinessTimeZoneEngine, FromCalendarDay } from '@mj-biz-apps/common-entities';
|
|
3
3
|
import { COMMON_ENTITIES } from './entity-names';
|
|
4
4
|
const DIRECTORY_SUMMARY_QUERY = 'Common: Directory Dashboard Summary';
|
|
5
|
+
/**
|
|
6
|
+
* The "people added" bars, read apart from the summary: the business-day function it calls cannot
|
|
7
|
+
* be inlined by SQL Server and would make the whole summary single-threaded (see the SQL file).
|
|
8
|
+
*/
|
|
9
|
+
const DIRECTORY_PEOPLE_PER_DAY_QUERY = 'Common: Directory People Per Day';
|
|
5
10
|
const DIRECTORY_SUMMARY_CATEGORY = 'Common';
|
|
6
11
|
function num(v) {
|
|
7
12
|
return v === null || v === undefined || v === '' ? 0 : Number(v);
|
|
@@ -20,16 +25,37 @@ function str(v) {
|
|
|
20
25
|
function businessWeekday(today, daysAgo) {
|
|
21
26
|
return FromCalendarDay(AddDays(today, -daysAgo)).toLocaleDateString('en-US', { weekday: 'short', timeZone: 'UTC' });
|
|
22
27
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
/**
|
|
29
|
+
* The first row of a saved query in the Common category, or `null` when the query fails, throws or
|
|
30
|
+
* returns nothing. A throw (a dropped connection, a gateway timeout) is logged and reported the same
|
|
31
|
+
* way as a failed result, so callers have one failure case to handle.
|
|
32
|
+
*/
|
|
33
|
+
async function loadSingleRow(queryName) {
|
|
34
|
+
try {
|
|
35
|
+
const result = await new RunQuery().RunQuery({
|
|
36
|
+
QueryName: queryName,
|
|
37
|
+
CategoryPath: DIRECTORY_SUMMARY_CATEGORY,
|
|
38
|
+
});
|
|
39
|
+
if (!result?.Success) {
|
|
40
|
+
LogError(`${queryName} failed — ${result?.ErrorMessage ?? 'unknown error'}`);
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return (result.Results ?? [])[0] ?? null;
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
LogError(`${queryName} failed — ${e instanceof Error ? e.message : String(e)}`);
|
|
30
47
|
return null;
|
|
31
48
|
}
|
|
32
|
-
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The dashboard's headline figures. `null` when the summary query fails. When only the per-day
|
|
52
|
+
* query fails, the summary is still returned, with no bars: the headline counts do not depend on it.
|
|
53
|
+
*/
|
|
54
|
+
export async function LoadDirectoryDashboardSummary() {
|
|
55
|
+
const [row, days] = await Promise.all([
|
|
56
|
+
loadSingleRow(DIRECTORY_SUMMARY_QUERY),
|
|
57
|
+
loadSingleRow(DIRECTORY_PEOPLE_PER_DAY_QUERY),
|
|
58
|
+
]);
|
|
33
59
|
if (!row) {
|
|
34
60
|
return null;
|
|
35
61
|
}
|
|
@@ -118,11 +144,13 @@ export async function LoadDirectoryDashboardSummary() {
|
|
|
118
144
|
PeopleMissingOrganization: num(row['PeopleMissingOrganization']),
|
|
119
145
|
OrganizationsMissingType: num(row['OrganizationsMissingType']),
|
|
120
146
|
OrganizationsMissingWebsite: num(row['OrganizationsMissingWebsite']),
|
|
121
|
-
PeoplePerDay:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
147
|
+
PeoplePerDay: days
|
|
148
|
+
? [6, 5, 4, 3, 2, 1, 0].map((ago) => ({
|
|
149
|
+
Label: businessWeekday(today, ago),
|
|
150
|
+
Value: num(days[`PeopleAddedD${ago}`]),
|
|
151
|
+
Current: ago === 0,
|
|
152
|
+
}))
|
|
153
|
+
: [],
|
|
126
154
|
OrganizationTypeMix: mix,
|
|
127
155
|
WorthALook: worth,
|
|
128
156
|
Queues: queues.filter((q) => q.Count > 0),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-queries.js","sourceRoot":"","sources":["../../../src/lib/data/directory-queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAoB,MAAM,8BAA8B,CAAC;AAClH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAWjD,MAAM,uBAAuB,GAAG,qCAAqC,CAAC;AACtE,MAAM,0BAA0B,GAAG,QAAQ,CAAC;AAkB5C,SAAS,GAAG,CAAC,CAAU;IACnB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,GAAG,CAAC,CAAU;IACnB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,KAAkB,EAAE,OAAe;IACxD,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AACxH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"directory-queries.js","sourceRoot":"","sources":["../../../src/lib/data/directory-queries.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import type
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { type EntityInfo } from '@memberjunction/core';
|
|
3
3
|
import type { MJUserViewEntityExtended } from '@memberjunction/core-entities';
|
|
4
4
|
import { type EntityViewerConfig, type RecordOpenedEvent } from '@memberjunction/ng-entity-viewer';
|
|
5
5
|
import type { DirectoryAttentionItem, DirectoryBarRow, DirectoryDayBar, DirectoryHeadline, DirectoryQueue, DirectoryRelationshipRow } from '../data/directory-types';
|
|
@@ -9,13 +9,21 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
*
|
|
10
10
|
* Headline counts come from MJ Query `Common: Directory Dashboard Summary`
|
|
11
11
|
* (COUNT over the whole party file). RunView MaxRows must not feed these tiles.
|
|
12
|
+
*
|
|
13
|
+
* The page does not wait for the counts. On a large party file the summary takes seconds, so the
|
|
14
|
+
* page renders once the two grid views have loaded, and the count cards say "Counting…" until the
|
|
15
|
+
* summary arrives. Every load ends its loading state whether it succeeds, fails or throws.
|
|
12
16
|
*/
|
|
13
|
-
export declare class CommonDashboardPageComponent implements OnInit {
|
|
17
|
+
export declare class CommonDashboardPageComponent implements OnInit, OnDestroy {
|
|
14
18
|
private readonly cdr;
|
|
15
19
|
private readonly navigation;
|
|
16
20
|
/** Peek cards: no Filter records / Search / pager. Grid toolbar seeded off by entity-viewer. */
|
|
17
21
|
readonly PeekViewerConfig: Partial<EntityViewerConfig>;
|
|
22
|
+
/** The two grid views are loading; the page shows nothing else until they are done. */
|
|
18
23
|
IsLoading: boolean;
|
|
24
|
+
/** The summary counts are loading; the count cards say so until they are done. */
|
|
25
|
+
SummaryLoading: boolean;
|
|
26
|
+
private destroyed;
|
|
19
27
|
Queues: DirectoryQueue[];
|
|
20
28
|
PeoplePerDay: DirectoryDayBar[];
|
|
21
29
|
OrganizationTypeMix: DirectoryBarRow[];
|
|
@@ -31,6 +39,10 @@ export declare class CommonDashboardPageComponent implements OnInit {
|
|
|
31
39
|
*/
|
|
32
40
|
Headline: DirectoryHeadline;
|
|
33
41
|
ngOnInit(): Promise<void>;
|
|
42
|
+
ngOnDestroy(): void;
|
|
43
|
+
private loadSummary;
|
|
44
|
+
/** The loads finish after the user may have left the page; a destroyed view cannot be checked. */
|
|
45
|
+
private render;
|
|
34
46
|
barHeight(bar: DirectoryDayBar): number;
|
|
35
47
|
mixWidth(row: DirectoryBarRow): number;
|
|
36
48
|
OpenPeople(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-dashboard.page.d.ts","sourceRoot":"","sources":["../../../src/lib/pages/common-dashboard.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"common-dashboard.page.d.ts","sourceRoot":"","sources":["../../../src/lib/pages/common-dashboard.page.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,SAAS,EAAE,MAAM,EAAU,MAAM,eAAe,CAAC;AAExF,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAE9E,OAAO,EAAsB,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAQvH,OAAO,KAAK,EACR,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,wBAAwB,EAC3B,MAAM,yBAAyB,CAAC;;AAGjC;;;;;;;;;GASG;AACH,qBAwfa,4BAA6B,YAAW,MAAM,EAAE,SAAS;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiD;IAE5E,gGAAgG;IAChG,SAAgB,gBAAgB,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAK3D;IAEF,uFAAuF;IAChF,SAAS,UAAQ;IACxB,kFAAkF;IAC3E,cAAc,UAAQ;IAC7B,OAAO,CAAC,SAAS,CAAS;IACnB,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,YAAY,EAAE,eAAe,EAAE,CAAM;IACrC,mBAAmB,EAAE,eAAe,EAAE,CAAM;IAC5C,YAAY,EAAE,UAAU,GAAG,IAAI,CAAQ;IACvC,kBAAkB,EAAE,UAAU,GAAG,IAAI,CAAQ;IAC7C,gBAAgB,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACzD,uBAAuB,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IAChE,UAAU,EAAE,sBAAsB,EAAE,CAAM;IACjD;;;;OAIG;IACI,QAAQ,EAAE,iBAAiB,CAAgC;IAErD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B,WAAW,IAAI,IAAI;YAIZ,WAAW;IAmBzB,kGAAkG;IAClG,OAAO,CAAC,MAAM;IAIP,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM;IAKvC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM;IAKtC,UAAU,IAAI,IAAI;IAIlB,iBAAiB,IAAI,IAAI;IAIzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK9B,SAAS,IAAI,IAAI;IAIjB,eAAe,IAAI,IAAI;IAIvB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAK9C,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAKpD,aAAa,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI;IAKjD,gBAAgB,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI;yCA9HnD,4BAA4B;2CAA5B,4BAA4B;CAuIxC"}
|