@openmrs/esm-report-builder 0.1.1-pre.92 → 0.1.1-pre.97
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/128.css +1 -0
- package/dist/128.css.map +1 -0
- package/dist/128.js +338 -0
- package/dist/128.js.map +1 -0
- package/dist/1480.js +1 -0
- package/dist/1480.js.map +1 -0
- package/dist/1646.js +1 -0
- package/dist/1646.js.map +1 -0
- package/dist/1869.js +1 -0
- package/dist/1869.js.map +1 -0
- package/dist/1877.js +1 -0
- package/dist/1877.js.map +1 -0
- package/dist/2131.js +1 -0
- package/dist/2131.js.map +1 -0
- package/dist/2317.js +1 -0
- package/dist/2317.js.map +1 -0
- package/dist/2408.js +1 -0
- package/dist/2408.js.map +1 -0
- package/dist/2416.js +1 -0
- package/dist/2416.js.map +1 -0
- package/dist/282.js +1 -0
- package/dist/282.js.map +1 -0
- package/dist/2881.js +1 -0
- package/dist/2881.js.map +1 -0
- package/dist/2997.js +1 -0
- package/dist/2997.js.map +1 -0
- package/dist/3378.js +1 -0
- package/dist/3378.js.map +1 -0
- package/dist/3963.js +1 -0
- package/dist/3963.js.map +1 -0
- package/dist/4106.js +1 -0
- package/dist/4106.js.map +1 -0
- package/dist/4111.js +1 -0
- package/dist/4111.js.map +1 -0
- package/dist/4171.css +1 -0
- package/dist/4171.css.map +1 -0
- package/dist/4171.js +43 -0
- package/dist/4171.js.map +1 -0
- package/dist/434.js +1 -0
- package/dist/434.js.map +1 -0
- package/dist/4348.js +1 -0
- package/dist/4348.js.map +1 -0
- package/dist/4383.js +1 -0
- package/dist/4383.js.map +1 -0
- package/dist/4658.js +1 -0
- package/dist/4658.js.map +1 -0
- package/dist/4668.js +1 -0
- package/dist/4668.js.map +1 -0
- package/dist/4928.js +1 -0
- package/dist/4928.js.map +1 -0
- package/dist/5098.js +1 -0
- package/dist/5098.js.map +1 -0
- package/dist/5117.js +1 -0
- package/dist/5117.js.map +1 -0
- package/dist/5132.js +1 -0
- package/dist/5132.js.map +1 -0
- package/dist/5145.js +1 -0
- package/dist/5145.js.map +1 -0
- package/dist/550.js +1 -0
- package/dist/550.js.map +1 -0
- package/dist/5503.js +1 -0
- package/dist/5503.js.map +1 -0
- package/dist/556.js +1 -0
- package/dist/556.js.map +1 -0
- package/dist/5644.js +1 -0
- package/dist/5644.js.map +1 -0
- package/dist/5940.js +1 -0
- package/dist/5940.js.map +1 -0
- package/dist/6047.js +1 -0
- package/dist/6047.js.map +1 -0
- package/dist/6237.js +1 -0
- package/dist/6237.js.map +1 -0
- package/dist/6247.js +1 -0
- package/dist/6247.js.map +1 -0
- package/dist/6371.js +1 -0
- package/dist/6371.js.map +1 -0
- package/dist/6377.js +1 -0
- package/dist/6377.js.map +1 -0
- package/dist/6444.js +1 -0
- package/dist/6444.js.map +1 -0
- package/dist/6508.js +1 -0
- package/dist/6508.js.map +1 -0
- package/dist/6652.js +1 -0
- package/dist/6652.js.map +1 -0
- package/dist/6724.js +1 -0
- package/dist/6724.js.map +1 -0
- package/dist/6867.js +19 -0
- package/dist/6867.js.map +1 -0
- package/dist/6904.js +1 -0
- package/dist/6904.js.map +1 -0
- package/dist/7045.js +1 -0
- package/dist/7045.js.map +1 -0
- package/dist/7175.js +1 -0
- package/dist/7175.js.map +1 -0
- package/dist/7182.js +1 -0
- package/dist/7182.js.map +1 -0
- package/dist/7475.js +1 -0
- package/dist/7475.js.map +1 -0
- package/dist/7742.js +1 -0
- package/dist/7742.js.map +1 -0
- package/dist/7912.js +1 -0
- package/dist/7912.js.map +1 -0
- package/dist/8251.js +1 -0
- package/dist/8251.js.map +1 -0
- package/dist/8358.js +1 -0
- package/dist/8358.js.map +1 -0
- package/dist/8359.js +1 -0
- package/dist/8359.js.map +1 -0
- package/dist/8695.js +1 -0
- package/dist/8695.js.map +1 -0
- package/dist/903.js +1 -0
- package/dist/903.js.map +1 -0
- package/dist/9072.js +1 -0
- package/dist/9072.js.map +1 -0
- package/dist/9806.js +1 -0
- package/dist/9806.js.map +1 -0
- package/dist/997.js +1 -0
- package/dist/997.js.map +1 -0
- package/dist/openmrs-esm-report-builder.js +3 -1
- package/dist/openmrs-esm-report-builder.js.buildmanifest.json +1099 -196
- package/dist/openmrs-esm-report-builder.js.map +1 -1
- package/dist/routes.json +1 -1
- package/package.json +21 -34
- package/rspack.config.js +2 -0
- package/src/__debug__/all-designs.test.tsx +7 -4
- package/src/components/data-visualizer/data-visualizer.scss +0 -1
- package/src/components/indicators/utils/composite-indicator-sql.utils.test.ts +1 -1
- package/src/components/indicators/utils/custom-indicator-interpreter.test.ts +320 -320
- package/src/components/indicators/utils/population-sql.compiler.test.ts +950 -964
- package/src/components/linelist/design/panels/column-category-selector.scss +7 -12
- package/src/components/linelist/design/panels/query-config-panel.scss +7 -8
- package/src/components/security/access-denied-page.component.tsx +45 -50
- package/src/components/security/privilege-route.component.test.tsx +59 -62
- package/src/components/security/privilege-route.component.tsx +3 -3
- package/src/constants/privileges.test.ts +1 -0
- package/src/features/dashboards/utils/dashboard-config.util.test.ts +37 -6
- package/src/globals.d.ts +0 -5
- package/src/hooks/use-report-builder-privileges.test.tsx +69 -75
- package/src/routes.json +3 -0
- package/src/utils/api-error.utils.test.ts +14 -18
- package/src/utils/etl-browser/etl-browser.util.test.ts +125 -119
- package/src/utils/etl-task/etl-task-card.util.test.ts +3 -2
- package/tools/i18next-parser.config.js +0 -0
- package/tools/setup-tests.ts +1 -1
- package/tools/update-openmrs-deps.mjs +42 -0
- package/translations/am.json +65 -0
- package/translations/ar.json +65 -0
- package/translations/ar_SY.json +65 -0
- package/translations/bn.json +65 -0
- package/translations/cs.json +65 -0
- package/translations/de.json +65 -0
- package/translations/en_US.json +65 -0
- package/translations/es.json +65 -0
- package/translations/es_MX.json +65 -0
- package/translations/fr.json +65 -0
- package/translations/he.json +65 -0
- package/translations/hi.json +65 -0
- package/translations/hi_IN.json +65 -0
- package/translations/id.json +65 -0
- package/translations/it.json +65 -0
- package/translations/ka.json +65 -0
- package/translations/km.json +65 -0
- package/translations/ku.json +65 -0
- package/translations/ky.json +65 -0
- package/translations/lg.json +65 -0
- package/translations/ne.json +65 -0
- package/translations/pl.json +65 -0
- package/translations/pt.json +65 -0
- package/translations/pt_BR.json +65 -0
- package/translations/qu.json +65 -0
- package/translations/ro_RO.json +65 -0
- package/translations/ru_RU.json +65 -0
- package/translations/si.json +65 -0
- package/translations/sq.json +65 -0
- package/translations/sw.json +65 -0
- package/translations/sw_KE.json +65 -0
- package/translations/tr.json +65 -0
- package/translations/tr_TR.json +65 -0
- package/translations/uk.json +65 -0
- package/translations/uz.json +65 -0
- package/translations/uz@Latn.json +65 -0
- package/translations/uz_UZ.json +65 -0
- package/translations/vi.json +65 -0
- package/translations/zh.json +65 -0
- package/translations/zh_CN.json +65 -0
- package/translations/zh_TW.json +65 -0
- package/tsconfig.json +9 -28
- package/vitest.config.mts +42 -0
- package/dist/162.js +0 -1
- package/dist/162.js.map +0 -1
- package/dist/184.js +0 -2
- package/dist/184.js.LICENSE.txt +0 -14
- package/dist/184.js.map +0 -1
- package/dist/242.js +0 -2
- package/dist/242.js.LICENSE.txt +0 -21
- package/dist/242.js.map +0 -1
- package/dist/253.js +0 -1
- package/dist/253.js.map +0 -1
- package/dist/300.js +0 -1
- package/dist/311.js +0 -1
- package/dist/311.js.map +0 -1
- package/dist/469.js +0 -2
- package/dist/469.js.LICENSE.txt +0 -45
- package/dist/469.js.map +0 -1
- package/dist/478.js +0 -2
- package/dist/478.js.LICENSE.txt +0 -9
- package/dist/478.js.map +0 -1
- package/dist/539.js +0 -1
- package/dist/539.js.map +0 -1
- package/dist/540.js +0 -2
- package/dist/540.js.LICENSE.txt +0 -9
- package/dist/540.js.map +0 -1
- package/dist/669.js +0 -1
- package/dist/669.js.map +0 -1
- package/dist/710.js +0 -1
- package/dist/710.js.map +0 -1
- package/dist/729.js +0 -1
- package/dist/729.js.map +0 -1
- package/dist/838.js +0 -2
- package/dist/838.js.LICENSE.txt +0 -9
- package/dist/838.js.map +0 -1
- package/dist/917.js +0 -1
- package/dist/917.js.map +0 -1
- package/dist/961.js +0 -2
- package/dist/961.js.LICENSE.txt +0 -19
- package/dist/961.js.map +0 -1
- package/dist/main.js +0 -1
- package/dist/main.js.map +0 -1
- package/jest.config.js +0 -28
- package/routes.json +0 -22
- package/tools/scss-stub.js +0 -12
- package/webpack.config.js +0 -30
|
@@ -1,145 +1,151 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
groupTablesBySource,
|
|
4
|
+
tableNameMatchesPattern,
|
|
5
|
+
quoteTableIdentifier,
|
|
6
|
+
buildTablePreviewSql,
|
|
7
|
+
escapeCsvCell,
|
|
8
|
+
toCsv,
|
|
9
|
+
summarizeColumns,
|
|
10
|
+
OTHER_GROUP_ID,
|
|
10
11
|
} from './';
|
|
11
12
|
import type { SchemaTable } from '../../resources/theme/etl-schema.api';
|
|
12
13
|
import type { ETLSourceDto } from '../../resources/etl-source/etl-source.api';
|
|
13
14
|
import type { TableColumn } from '../../resources/theme/etl-table-meta.api';
|
|
14
15
|
|
|
15
16
|
function table(name: string, extra: Partial<SchemaTable> = {}): SchemaTable {
|
|
16
|
-
|
|
17
|
+
return { name, ...extra };
|
|
17
18
|
}
|
|
18
19
|
|
|
19
20
|
function source(uuid: string, name: string, tablePatterns: string, extra: Partial<ETLSourceDto> = {}): ETLSourceDto {
|
|
20
|
-
|
|
21
|
+
return { uuid, name, tablePatterns, ...extra } as ETLSourceDto;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
describe('tableNameMatchesPattern', () => {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
25
|
+
it('matches prefixes case-insensitively', () => {
|
|
26
|
+
expect(tableNameMatchesPattern('mamba_visits', 'mamba')).toBe(true);
|
|
27
|
+
expect(tableNameMatchesPattern('Mamba_Visits', 'MAMBA')).toBe(true);
|
|
28
|
+
expect(tableNameMatchesPattern('other_table', 'mamba')).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it('treats % and _ as live wildcards like the server LIKE', () => {
|
|
32
|
+
expect(tableNameMatchesPattern('fact_encounter', 'fact_%')).toBe(true);
|
|
33
|
+
expect(tableNameMatchesPattern('fact_x', 'fact_')).toBe(true);
|
|
34
|
+
expect(tableNameMatchesPattern('fact', 'fact_')).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
it('rejects empty patterns and names', () => {
|
|
38
|
+
expect(tableNameMatchesPattern('mamba_visits', ' ')).toBe(false);
|
|
39
|
+
expect(tableNameMatchesPattern('', 'mamba')).toBe(false);
|
|
40
|
+
});
|
|
40
41
|
});
|
|
41
42
|
|
|
42
43
|
describe('groupTablesBySource', () => {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
];
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
expect(groups).toHaveLength(0);
|
|
81
|
-
expect(other.tables).toHaveLength(1);
|
|
82
|
-
});
|
|
44
|
+
const sources = [source('uuid-1', 'Mamba', 'mamba'), source('uuid-2', 'Analytics', 'analytics, etl_flattened')];
|
|
45
|
+
|
|
46
|
+
it('groups tables under the first matching source', () => {
|
|
47
|
+
const tables = [table('mamba_visits'), table('mamba_ops'), table('analytics_daily'), table('etl_flattened_x')];
|
|
48
|
+
const { groups, other } = groupTablesBySource(tables, sources);
|
|
49
|
+
|
|
50
|
+
expect(groups[0].tables.map((t) => t.name)).toEqual(['mamba_visits', 'mamba_ops']);
|
|
51
|
+
expect(groups[1].tables.map((t) => t.name)).toEqual(['analytics_daily', 'etl_flattened_x']);
|
|
52
|
+
expect(other.tables).toHaveLength(0);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('ignores inactive or voided sources', () => {
|
|
56
|
+
const sourcesWithInactive = [...sources, source('uuid-3', 'Retired', 'fact_', { active: false })];
|
|
57
|
+
const { groups, other } = groupTablesBySource([table('fact_encounter')], sourcesWithInactive);
|
|
58
|
+
|
|
59
|
+
expect(groups.find((g) => g.id === 'uuid-3')).toBeUndefined();
|
|
60
|
+
expect(other.tables.map((t) => t.name)).toEqual(['fact_encounter']);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
it('collects unmatched tables in Other', () => {
|
|
64
|
+
const { other } = groupTablesBySource([table('misc_things'), table('mamba_visits')], sources);
|
|
65
|
+
expect(other.id).toBe(OTHER_GROUP_ID);
|
|
66
|
+
expect(other.tables.map((t) => t.name)).toEqual(['misc_things']);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('keeps empty groups for sources that match nothing', () => {
|
|
70
|
+
const { groups } = groupTablesBySource([table('misc_things')], sources);
|
|
71
|
+
expect(groups).toHaveLength(2);
|
|
72
|
+
expect(groups.every((g) => g.tables.length === 0)).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('handles empty inputs', () => {
|
|
76
|
+
expect(groupTablesBySource([], sources).other.tables).toHaveLength(0);
|
|
77
|
+
const { groups, other } = groupTablesBySource([table('x')], []);
|
|
78
|
+
expect(groups).toHaveLength(0);
|
|
79
|
+
expect(other.tables).toHaveLength(1);
|
|
80
|
+
});
|
|
83
81
|
});
|
|
84
82
|
|
|
85
83
|
describe('quoteTableIdentifier / buildTablePreviewSql', () => {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
84
|
+
it('backtick-quotes plain names', () => {
|
|
85
|
+
expect(quoteTableIdentifier('fact_encounter')).toBe('`fact_encounter`');
|
|
86
|
+
expect(buildTablePreviewSql('fact_encounter')).toBe('SELECT * FROM `fact_encounter`');
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('doubles embedded backticks', () => {
|
|
90
|
+
expect(quoteTableIdentifier('we`ird')).toBe('`we``ird`');
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('throws on empty names', () => {
|
|
94
|
+
expect(() => quoteTableIdentifier('')).toThrow();
|
|
95
|
+
expect(() => quoteTableIdentifier(' ')).toThrow();
|
|
96
|
+
});
|
|
99
97
|
});
|
|
100
98
|
|
|
101
99
|
describe('escapeCsvCell / toCsv', () => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
100
|
+
it('passes plain cells through and renders null as empty', () => {
|
|
101
|
+
expect(escapeCsvCell('plain')).toBe('plain');
|
|
102
|
+
expect(escapeCsvCell(-15)).toBe('-15');
|
|
103
|
+
expect(escapeCsvCell(null)).toBe('');
|
|
104
|
+
expect(escapeCsvCell(undefined)).toBe('');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('quotes cells with special characters and doubles quotes', () => {
|
|
108
|
+
expect(escapeCsvCell('a,b')).toBe('"a,b"');
|
|
109
|
+
expect(escapeCsvCell('say "hi"')).toBe('"say ""hi"""');
|
|
110
|
+
expect(escapeCsvCell('line\nbreak')).toBe('"line\nbreak"');
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it('guards formula-injection prefixes but keeps negatives', () => {
|
|
114
|
+
expect(escapeCsvCell('=cmd')).toBe("'=cmd");
|
|
115
|
+
expect(escapeCsvCell('+2')).toBe("'+2");
|
|
116
|
+
expect(escapeCsvCell('@risk')).toBe("'@risk");
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('serializes header plus rows', () => {
|
|
120
|
+
expect(
|
|
121
|
+
toCsv(
|
|
122
|
+
['a', 'b'],
|
|
123
|
+
[
|
|
124
|
+
[1, 'x,y'],
|
|
125
|
+
[null, 'z'],
|
|
126
|
+
],
|
|
127
|
+
),
|
|
128
|
+
).toBe('a,b\n1,"x,y"\n,z');
|
|
129
|
+
});
|
|
124
130
|
});
|
|
125
131
|
|
|
126
132
|
describe('summarizeColumns', () => {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
133
|
+
const columns: TableColumn[] = [
|
|
134
|
+
{ name: 'id', type: 'int' },
|
|
135
|
+
{ name: 'patient_id', type: 'int' },
|
|
136
|
+
{ name: 'name', type: 'varchar' },
|
|
137
|
+
{ name: 'note', type: 'text' },
|
|
138
|
+
{ name: 'flag' },
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
it('counts totals and breaks down by type, sorted by count desc', () => {
|
|
142
|
+
const summary = summarizeColumns(columns);
|
|
143
|
+
expect(summary.total).toBe(5);
|
|
144
|
+
expect(summary.byType[0]).toEqual({ type: 'int', count: 2 });
|
|
145
|
+
expect(summary.byType.map((t) => t.type)).toEqual(['int', 'text', 'unknown', 'varchar']);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('handles empty input', () => {
|
|
149
|
+
expect(summarizeColumns([])).toEqual({ total: 0, byType: [] });
|
|
150
|
+
});
|
|
145
151
|
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
1
2
|
import {
|
|
2
3
|
computeNextRun,
|
|
3
4
|
countStatusEntries,
|
|
@@ -22,11 +23,11 @@ const monitors = [monitor('uuid-1', 'alpha-monitor'), monitor('uuid-2', 'Beta Mo
|
|
|
22
23
|
|
|
23
24
|
describe('etl-task-card.util', () => {
|
|
24
25
|
beforeEach(() => {
|
|
25
|
-
|
|
26
|
+
vi.useFakeTimers().setSystemTime(NOW);
|
|
26
27
|
});
|
|
27
28
|
|
|
28
29
|
afterEach(() => {
|
|
29
|
-
|
|
30
|
+
vi.useRealTimers();
|
|
30
31
|
});
|
|
31
32
|
|
|
32
33
|
describe('parseLenientDate', () => {
|
|
File without changes
|
package/tools/setup-tests.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import '@testing-library/jest-dom';
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
|
|
3
|
+
try {
|
|
4
|
+
execSync(`yarn up --fixed '@openmrs/esm-framework@next' 'openmrs@next'`, {
|
|
5
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
6
|
+
windowsHide: true,
|
|
7
|
+
});
|
|
8
|
+
} catch (error) {
|
|
9
|
+
console.error(`Error while updating dependencies: ${error.message ?? error}`);
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
execSync(`yarn dedupe`, {
|
|
15
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
16
|
+
windowsHide: true,
|
|
17
|
+
});
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.error(`Error while deduplicating dependencies: ${error.message ?? error}`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
execSync(`git diff-index --quiet HEAD --`, {
|
|
25
|
+
stdio: 'ignore',
|
|
26
|
+
windowsHide: true,
|
|
27
|
+
});
|
|
28
|
+
process.exit(0);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
// git diff-index --quite HEAD --
|
|
31
|
+
// exits with status 1 if there are changes; we only need to run yarn verify if there are changes
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
execSync(`yarn verify`, {
|
|
36
|
+
stdio: ['ignore', 'inherit', 'inherit'],
|
|
37
|
+
windowsHide: true,
|
|
38
|
+
});
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error(`Error while running yarn verify: ${error.message ?? error}. Updates require manual intervention.`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reportBuilder": "Report builder",
|
|
3
|
+
"openReportBuilder": "Open report builder",
|
|
4
|
+
"dataVisualizer": "Data visualizer",
|
|
5
|
+
"home": "Home",
|
|
6
|
+
"searchThisList": "Search this list",
|
|
7
|
+
"No data": "No data to display",
|
|
8
|
+
"type_of_report": "Type of report",
|
|
9
|
+
"fixed": "Fixed",
|
|
10
|
+
"dynamic": "Dynamic",
|
|
11
|
+
"report_type": "Which kind of report do you want to show?",
|
|
12
|
+
"select_report_type": "Select report type",
|
|
13
|
+
"facility_reports": "Facility Reports",
|
|
14
|
+
"select_facility_report": "Select facility report",
|
|
15
|
+
"national_reports": "National Reports",
|
|
16
|
+
"select_national_report": "Select national report",
|
|
17
|
+
"donor_reports": "Donor Reports",
|
|
18
|
+
"select_donor_report": "Select donor report",
|
|
19
|
+
"cqi_reports": "CQI Reports",
|
|
20
|
+
"select_cqi_report": "Select CQI report",
|
|
21
|
+
"select_cohort": "Select your cohort of interest",
|
|
22
|
+
"patient_with_encounters": "Patient with encounters",
|
|
23
|
+
"patients_on_appointment": "Patients on appointment",
|
|
24
|
+
"dynamic_report_type": "Which kind of dynamic report type do you want to base on?",
|
|
25
|
+
"select_dynamic_report_type": "Select dynamic report type",
|
|
26
|
+
"select_report": "Select report",
|
|
27
|
+
"reporting_duration": "Do you want your report to cover a fixed reporting period or a relative one?",
|
|
28
|
+
"fixed_period": "Fixed period",
|
|
29
|
+
"relative_period": "Relative period",
|
|
30
|
+
"start_date": "Start Date",
|
|
31
|
+
"end_date": "End Date",
|
|
32
|
+
"select_reporting_period": "Select your desired reporting period",
|
|
33
|
+
"choose_reporting_period": "Choose the reporting period",
|
|
34
|
+
"indicators": "Indicators",
|
|
35
|
+
"choose_indicators": "Choose the indicators",
|
|
36
|
+
"available_parameters": "Available parameters",
|
|
37
|
+
"selected_parameters": "Selected parameters",
|
|
38
|
+
"move_all_right": "Move all parameters to the right",
|
|
39
|
+
"move_all_left": "Move all parameters to the left",
|
|
40
|
+
"view_report": "View Report",
|
|
41
|
+
"save_report": "Save Report",
|
|
42
|
+
"download_report": "Download Report",
|
|
43
|
+
"send_report_dhis2": "Send Report to DHIS2",
|
|
44
|
+
"patient_list": "Patient list",
|
|
45
|
+
"pivot_table": "Pivot table",
|
|
46
|
+
"aggregate_report": "Aggregate Report",
|
|
47
|
+
"no_data_display": "No data to display",
|
|
48
|
+
"use_filters": "Use the report filters above to build your reports",
|
|
49
|
+
"enter_report_details": "ENTER REPORT DETAILS",
|
|
50
|
+
"cancel": "Cancel",
|
|
51
|
+
"save": "Save",
|
|
52
|
+
"report_title": "Report Title",
|
|
53
|
+
"enter_report_title": "Enter report title",
|
|
54
|
+
"report_description": "Report Description",
|
|
55
|
+
"enter_report_description": "Enter report description",
|
|
56
|
+
"today": "Today",
|
|
57
|
+
"this_week": "This Week",
|
|
58
|
+
"this_month": "This Month",
|
|
59
|
+
"this_quarter": "This Quarter",
|
|
60
|
+
"last_quarter": "Last Quarter",
|
|
61
|
+
"cohort": "Cohort",
|
|
62
|
+
"program": "Program",
|
|
63
|
+
"patient_search": "Patient Search",
|
|
64
|
+
"report_definition": "Report Definition"
|
|
65
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reportBuilder": "Report builder",
|
|
3
|
+
"openReportBuilder": "Open report builder",
|
|
4
|
+
"dataVisualizer": "Data visualizer",
|
|
5
|
+
"home": "Home",
|
|
6
|
+
"searchThisList": "Search this list",
|
|
7
|
+
"No data": "No data to display",
|
|
8
|
+
"type_of_report": "Type of report",
|
|
9
|
+
"fixed": "Fixed",
|
|
10
|
+
"dynamic": "Dynamic",
|
|
11
|
+
"report_type": "Which kind of report do you want to show?",
|
|
12
|
+
"select_report_type": "Select report type",
|
|
13
|
+
"facility_reports": "Facility Reports",
|
|
14
|
+
"select_facility_report": "Select facility report",
|
|
15
|
+
"national_reports": "National Reports",
|
|
16
|
+
"select_national_report": "Select national report",
|
|
17
|
+
"donor_reports": "Donor Reports",
|
|
18
|
+
"select_donor_report": "Select donor report",
|
|
19
|
+
"cqi_reports": "CQI Reports",
|
|
20
|
+
"select_cqi_report": "Select CQI report",
|
|
21
|
+
"select_cohort": "Select your cohort of interest",
|
|
22
|
+
"patient_with_encounters": "Patient with encounters",
|
|
23
|
+
"patients_on_appointment": "Patients on appointment",
|
|
24
|
+
"dynamic_report_type": "Which kind of dynamic report type do you want to base on?",
|
|
25
|
+
"select_dynamic_report_type": "Select dynamic report type",
|
|
26
|
+
"select_report": "Select report",
|
|
27
|
+
"reporting_duration": "Do you want your report to cover a fixed reporting period or a relative one?",
|
|
28
|
+
"fixed_period": "Fixed period",
|
|
29
|
+
"relative_period": "Relative period",
|
|
30
|
+
"start_date": "Start Date",
|
|
31
|
+
"end_date": "End Date",
|
|
32
|
+
"select_reporting_period": "Select your desired reporting period",
|
|
33
|
+
"choose_reporting_period": "Choose the reporting period",
|
|
34
|
+
"indicators": "Indicators",
|
|
35
|
+
"choose_indicators": "Choose the indicators",
|
|
36
|
+
"available_parameters": "Available parameters",
|
|
37
|
+
"selected_parameters": "Selected parameters",
|
|
38
|
+
"move_all_right": "Move all parameters to the right",
|
|
39
|
+
"move_all_left": "Move all parameters to the left",
|
|
40
|
+
"view_report": "View Report",
|
|
41
|
+
"save_report": "Save Report",
|
|
42
|
+
"download_report": "Download Report",
|
|
43
|
+
"send_report_dhis2": "Send Report to DHIS2",
|
|
44
|
+
"patient_list": "Patient list",
|
|
45
|
+
"pivot_table": "Pivot table",
|
|
46
|
+
"aggregate_report": "Aggregate Report",
|
|
47
|
+
"no_data_display": "No data to display",
|
|
48
|
+
"use_filters": "Use the report filters above to build your reports",
|
|
49
|
+
"enter_report_details": "ENTER REPORT DETAILS",
|
|
50
|
+
"cancel": "Cancel",
|
|
51
|
+
"save": "Save",
|
|
52
|
+
"report_title": "Report Title",
|
|
53
|
+
"enter_report_title": "Enter report title",
|
|
54
|
+
"report_description": "Report Description",
|
|
55
|
+
"enter_report_description": "Enter report description",
|
|
56
|
+
"today": "Today",
|
|
57
|
+
"this_week": "This Week",
|
|
58
|
+
"this_month": "This Month",
|
|
59
|
+
"this_quarter": "This Quarter",
|
|
60
|
+
"last_quarter": "Last Quarter",
|
|
61
|
+
"cohort": "Cohort",
|
|
62
|
+
"program": "Program",
|
|
63
|
+
"patient_search": "Patient Search",
|
|
64
|
+
"report_definition": "Report Definition"
|
|
65
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reportBuilder": "Report builder",
|
|
3
|
+
"openReportBuilder": "Open report builder",
|
|
4
|
+
"dataVisualizer": "Data visualizer",
|
|
5
|
+
"home": "Home",
|
|
6
|
+
"searchThisList": "Search this list",
|
|
7
|
+
"No data": "No data to display",
|
|
8
|
+
"type_of_report": "Type of report",
|
|
9
|
+
"fixed": "Fixed",
|
|
10
|
+
"dynamic": "Dynamic",
|
|
11
|
+
"report_type": "Which kind of report do you want to show?",
|
|
12
|
+
"select_report_type": "Select report type",
|
|
13
|
+
"facility_reports": "Facility Reports",
|
|
14
|
+
"select_facility_report": "Select facility report",
|
|
15
|
+
"national_reports": "National Reports",
|
|
16
|
+
"select_national_report": "Select national report",
|
|
17
|
+
"donor_reports": "Donor Reports",
|
|
18
|
+
"select_donor_report": "Select donor report",
|
|
19
|
+
"cqi_reports": "CQI Reports",
|
|
20
|
+
"select_cqi_report": "Select CQI report",
|
|
21
|
+
"select_cohort": "Select your cohort of interest",
|
|
22
|
+
"patient_with_encounters": "Patient with encounters",
|
|
23
|
+
"patients_on_appointment": "Patients on appointment",
|
|
24
|
+
"dynamic_report_type": "Which kind of dynamic report type do you want to base on?",
|
|
25
|
+
"select_dynamic_report_type": "Select dynamic report type",
|
|
26
|
+
"select_report": "Select report",
|
|
27
|
+
"reporting_duration": "Do you want your report to cover a fixed reporting period or a relative one?",
|
|
28
|
+
"fixed_period": "Fixed period",
|
|
29
|
+
"relative_period": "Relative period",
|
|
30
|
+
"start_date": "Start Date",
|
|
31
|
+
"end_date": "End Date",
|
|
32
|
+
"select_reporting_period": "Select your desired reporting period",
|
|
33
|
+
"choose_reporting_period": "Choose the reporting period",
|
|
34
|
+
"indicators": "Indicators",
|
|
35
|
+
"choose_indicators": "Choose the indicators",
|
|
36
|
+
"available_parameters": "Available parameters",
|
|
37
|
+
"selected_parameters": "Selected parameters",
|
|
38
|
+
"move_all_right": "Move all parameters to the right",
|
|
39
|
+
"move_all_left": "Move all parameters to the left",
|
|
40
|
+
"view_report": "View Report",
|
|
41
|
+
"save_report": "Save Report",
|
|
42
|
+
"download_report": "Download Report",
|
|
43
|
+
"send_report_dhis2": "Send Report to DHIS2",
|
|
44
|
+
"patient_list": "Patient list",
|
|
45
|
+
"pivot_table": "Pivot table",
|
|
46
|
+
"aggregate_report": "Aggregate Report",
|
|
47
|
+
"no_data_display": "No data to display",
|
|
48
|
+
"use_filters": "Use the report filters above to build your reports",
|
|
49
|
+
"enter_report_details": "ENTER REPORT DETAILS",
|
|
50
|
+
"cancel": "Cancel",
|
|
51
|
+
"save": "Save",
|
|
52
|
+
"report_title": "Report Title",
|
|
53
|
+
"enter_report_title": "Enter report title",
|
|
54
|
+
"report_description": "Report Description",
|
|
55
|
+
"enter_report_description": "Enter report description",
|
|
56
|
+
"today": "Today",
|
|
57
|
+
"this_week": "This Week",
|
|
58
|
+
"this_month": "This Month",
|
|
59
|
+
"this_quarter": "This Quarter",
|
|
60
|
+
"last_quarter": "Last Quarter",
|
|
61
|
+
"cohort": "Cohort",
|
|
62
|
+
"program": "Program",
|
|
63
|
+
"patient_search": "Patient Search",
|
|
64
|
+
"report_definition": "Report Definition"
|
|
65
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"reportBuilder": "Report builder",
|
|
3
|
+
"openReportBuilder": "Open report builder",
|
|
4
|
+
"dataVisualizer": "Data visualizer",
|
|
5
|
+
"home": "Home",
|
|
6
|
+
"searchThisList": "Search this list",
|
|
7
|
+
"No data": "No data to display",
|
|
8
|
+
"type_of_report": "Type of report",
|
|
9
|
+
"fixed": "Fixed",
|
|
10
|
+
"dynamic": "Dynamic",
|
|
11
|
+
"report_type": "Which kind of report do you want to show?",
|
|
12
|
+
"select_report_type": "Select report type",
|
|
13
|
+
"facility_reports": "Facility Reports",
|
|
14
|
+
"select_facility_report": "Select facility report",
|
|
15
|
+
"national_reports": "National Reports",
|
|
16
|
+
"select_national_report": "Select national report",
|
|
17
|
+
"donor_reports": "Donor Reports",
|
|
18
|
+
"select_donor_report": "Select donor report",
|
|
19
|
+
"cqi_reports": "CQI Reports",
|
|
20
|
+
"select_cqi_report": "Select CQI report",
|
|
21
|
+
"select_cohort": "Select your cohort of interest",
|
|
22
|
+
"patient_with_encounters": "Patient with encounters",
|
|
23
|
+
"patients_on_appointment": "Patients on appointment",
|
|
24
|
+
"dynamic_report_type": "Which kind of dynamic report type do you want to base on?",
|
|
25
|
+
"select_dynamic_report_type": "Select dynamic report type",
|
|
26
|
+
"select_report": "Select report",
|
|
27
|
+
"reporting_duration": "Do you want your report to cover a fixed reporting period or a relative one?",
|
|
28
|
+
"fixed_period": "Fixed period",
|
|
29
|
+
"relative_period": "Relative period",
|
|
30
|
+
"start_date": "Start Date",
|
|
31
|
+
"end_date": "End Date",
|
|
32
|
+
"select_reporting_period": "Select your desired reporting period",
|
|
33
|
+
"choose_reporting_period": "Choose the reporting period",
|
|
34
|
+
"indicators": "Indicators",
|
|
35
|
+
"choose_indicators": "Choose the indicators",
|
|
36
|
+
"available_parameters": "Available parameters",
|
|
37
|
+
"selected_parameters": "Selected parameters",
|
|
38
|
+
"move_all_right": "Move all parameters to the right",
|
|
39
|
+
"move_all_left": "Move all parameters to the left",
|
|
40
|
+
"view_report": "View Report",
|
|
41
|
+
"save_report": "Save Report",
|
|
42
|
+
"download_report": "Download Report",
|
|
43
|
+
"send_report_dhis2": "Send Report to DHIS2",
|
|
44
|
+
"patient_list": "Patient list",
|
|
45
|
+
"pivot_table": "Pivot table",
|
|
46
|
+
"aggregate_report": "Aggregate Report",
|
|
47
|
+
"no_data_display": "No data to display",
|
|
48
|
+
"use_filters": "Use the report filters above to build your reports",
|
|
49
|
+
"enter_report_details": "ENTER REPORT DETAILS",
|
|
50
|
+
"cancel": "Cancel",
|
|
51
|
+
"save": "Save",
|
|
52
|
+
"report_title": "Report Title",
|
|
53
|
+
"enter_report_title": "Enter report title",
|
|
54
|
+
"report_description": "Report Description",
|
|
55
|
+
"enter_report_description": "Enter report description",
|
|
56
|
+
"today": "Today",
|
|
57
|
+
"this_week": "This Week",
|
|
58
|
+
"this_month": "This Month",
|
|
59
|
+
"this_quarter": "This Quarter",
|
|
60
|
+
"last_quarter": "Last Quarter",
|
|
61
|
+
"cohort": "Cohort",
|
|
62
|
+
"program": "Program",
|
|
63
|
+
"patient_search": "Patient Search",
|
|
64
|
+
"report_definition": "Report Definition"
|
|
65
|
+
}
|