Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1453 commits
Select commit Hold shift + click to select a range
49f8bb6
fixed unknown field
chris-bes Oct 5, 2025
f17b8d0
deleted unrelated
chris-bes Oct 5, 2025
4e45077
allow switching project
chris-bes Oct 5, 2025
c3cf790
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
chris-bes Oct 5, 2025
872a75e
removed performance
chris-bes Oct 5, 2025
c7405f1
removed performance
chris-bes Oct 5, 2025
762188a
Merge pull request #6499 from beyondessential/rn-1545-fix-unknown-field
chris-bes Oct 5, 2025
6eac371
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
chris-bes Oct 5, 2025
46f4730
fixed more
chris-bes Oct 5, 2025
660e00c
renamed
chris-bes Oct 5, 2025
199df47
missing changes
chris-bes Oct 5, 2025
fb9d062
Merge branch 'rn-1545-remove-user-id' into rn-1545-allow-switching-pr…
chris-bes Oct 5, 2025
503ed8e
fix more bugs
chris-bes Oct 5, 2025
85b4bb3
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
chris-bes Oct 5, 2025
2615578
fixed test
chris-bes Oct 6, 2025
09d1e26
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 6, 2025
bc51c19
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 6, 2025
1f49c0d
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 6, 2025
e68ca75
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 6, 2025
94a9069
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 6, 2025
07a2e2c
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 6, 2025
4bf4b8e
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 6, 2025
260fa30
await
jaskfla Oct 6, 2025
7de1947
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 6, 2025
84505dd
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 6, 2025
9818589
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 6, 2025
699de38
type guard
jaskfla Oct 6, 2025
11cc325
remove dead import
jaskfla Oct 6, 2025
56d108a
cherry pick fix from `rn-1545-fix-bugs`
jaskfla Oct 6, 2025
e98f4fe
remove dead import
jaskfla Oct 6, 2025
90a0c48
cherry pixk unit test fix from `rn-1545-fix-bugs`
jaskfla Oct 6, 2025
fdf8f76
test(centralServer): fix `EditEntity` unit test
jaskfla Oct 6, 2025
40fe9b7
fix(sync): disable proxy buffering for datatrak-web-, sync-servers
jaskfla Oct 6, 2025
7da4ad3
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 6, 2025
b95b105
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 6, 2025
5c8e23f
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 6, 2025
0341d1b
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 6, 2025
9cc1d44
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 6, 2025
0748fcb
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 6, 2025
77ab215
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 6, 2025
c14ed21
fix bad usage
jaskfla Oct 6, 2025
5cf5909
Merge branch 'dev' into rn-1545-epic-datatrak-offline
jaskfla Oct 6, 2025
12ddf0b
test(centralServer): fix unit tests
jaskfla Oct 6, 2025
7aebe1a
tweak: expore @tupaia/constants in workspace
jaskfla Oct 7, 2025
54fa0e6
tweak(constants): use Yarn
jaskfla Oct 7, 2025
adedab2
test(datatrakWebServer): fix repeating task unit test
jaskfla Oct 7, 2025
9cbbd68
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 7, 2025
93dc871
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 7, 2025
0d83c2d
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 7, 2025
0c1f699
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 7, 2025
03ac626
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 7, 2025
4eb8c6e
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 7, 2025
29bbcb6
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 7, 2025
46a8c30
Merge branch 'rn-1490-6' into rn-1545-remove-user-id
jaskfla Oct 8, 2025
30552d4
Merge branch 'rn-1545-remove-user-id' into rn-1545-allow-switching-pr…
jaskfla Oct 8, 2025
806fd1c
Merge remote-tracking branch 'origin/rn-1545-allow-switching-project'…
jaskfla Oct 8, 2025
7f0362b
refactor(datatrakWebServer): deduplicate constant
jaskfla Oct 8, 2025
2a9ce9d
fix `assertCanImport` usages
jaskfla Oct 8, 2025
4ac5550
replace `console` with `winston` in database
jaskfla Oct 8, 2025
c1fc218
fix leaderboard unit test
jaskfla Oct 8, 2025
ce9eecd
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 8, 2025
8686507
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 8, 2025
6506c02
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 8, 2025
8ecbeea
Merge branch 'rn-1490-6' into rn-1545-remove-user-id
jaskfla Oct 8, 2025
29d5892
Merge branch 'rn-1545-remove-user-id' into rn-1545-allow-switching-pr…
jaskfla Oct 8, 2025
73159a3
Merge remote-tracking branch 'origin/rn-1545-allow-switching-project'…
jaskfla Oct 8, 2025
9d83e78
dedupe import
jaskfla Oct 8, 2025
2f714d9
dedupe another import
jaskfla Oct 8, 2025
49955ed
fix `assertCanImportSurveyResponses.test`
jaskfla Oct 8, 2025
aa9ff7a
partial revert: sequentially process recent entities
jaskfla Oct 8, 2025
7dfc2a2
offline login
chris-bes Oct 8, 2025
1948505
update `addRecentEntities.test`, reflect new code
jaskfla Oct 8, 2025
f3ca93c
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 8, 2025
592d862
Merge branch 'rn-1490-6' into rn-1545-remove-user-id
jaskfla Oct 8, 2025
7cd2471
Merge branch 'rn-1545-remove-user-id' into rn-1545-allow-switching-pr…
jaskfla Oct 8, 2025
a3b392f
Merge remote-tracking branch 'origin/rn-1545-allow-switching-project'…
jaskfla Oct 8, 2025
da71252
fix
chris-bes Oct 8, 2025
03ab42b
fix bad merge
jaskfla Oct 9, 2025
ce520d3
Merge branch 'rn-1490-6' into rn-1545-remove-user-id
jaskfla Oct 9, 2025
0f20234
Merge branch 'rn-1545-remove-user-id' into rn-1545-allow-switching-pr…
jaskfla Oct 9, 2025
c7dc6af
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 9, 2025
ac4f51b
fix(datatrak): show spinner when initialising `SyncContext`
jaskfla Oct 9, 2025
7403a6a
tweak(sync): RN-1545: remove user ID filter (#6515)
jaskfla Oct 9, 2025
28813f7
tweak(database): remove unused variable
jaskfla Oct 9, 2025
9a67311
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 9, 2025
6d10747
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 9, 2025
36985d7
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 9, 2025
0c554d4
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 9, 2025
3fe0f14
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 9, 2025
efc8b5c
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 9, 2025
71f8552
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 9, 2025
4190bcf
fix(datatrak): build
jaskfla Oct 9, 2025
8421f85
refactor(datatrak): simplify IIFE
jaskfla Oct 9, 2025
9704d18
fix(datatrak): remove unused import
jaskfla Oct 9, 2025
762e952
fix(datatrak): build
jaskfla Oct 9, 2025
bc61966
tweak(datatrak): remove dead hooks
jaskfla Oct 9, 2025
bb80549
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 9, 2025
0c00b2f
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 9, 2025
79ff626
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 9, 2025
a548ed7
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 9, 2025
7454b24
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 9, 2025
62a91e2
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 9, 2025
68fb928
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 9, 2025
f8719f4
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 9, 2025
c8bf0ec
fix(syncServer): cherry pick build fix from #6492
jaskfla Oct 9, 2025
45416f7
tweak(database): narrower `SqlQuery` static method types
jaskfla Oct 9, 2025
1e9ee91
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 9, 2025
6204f97
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 9, 2025
211a9f6
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 9, 2025
0fbc658
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 9, 2025
010a11d
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 9, 2025
fa85262
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 9, 2025
d4edadb
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 9, 2025
6dc5f39
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 9, 2025
1f6763a
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 9, 2025
670ec06
fallback internally
jaskfla Oct 9, 2025
c387242
fix
chris-bes Oct 9, 2025
3b1c23d
reduce risk of circular import
jaskfla Oct 10, 2025
847397e
fix(database): generated types (#6510)
jaskfla Oct 10, 2025
d55a4de
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 10, 2025
ad0125f
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 10, 2025
9702723
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 10, 2025
99cf68d
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 10, 2025
55b8577
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 10, 2025
97d7df6
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 10, 2025
5b2f045
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 10, 2025
f1b37cf
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 10, 2025
50c8e2c
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 10, 2025
f738f24
Merge branch 'dev' into rn-1545-epic-datatrak-offline
jaskfla Oct 10, 2025
4041c8d
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 10, 2025
46f6519
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 10, 2025
6beba19
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 10, 2025
c7fc5aa
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 10, 2025
ee1a65c
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 10, 2025
64e4f40
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 10, 2025
7e11e3c
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 10, 2025
2baa4c7
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 10, 2025
8648fbf
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 10, 2025
39d768e
remove .only()
chris-bes Oct 10, 2025
fb277a9
fix duplicate import
jaskfla Oct 12, 2025
3aa3cd0
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 12, 2025
f64e993
tweak(datatrakWebServer): improve `GET /user` performance
jaskfla Oct 12, 2025
813bba5
fix(datatrak): invalidate query cache on new changes pulled
jaskfla Oct 12, 2025
c8a93ba
fix(meditrak): build (#6511)
jaskfla Oct 12, 2025
ce6c0e9
fix(db): bad merge resolution
jaskfla Oct 12, 2025
c65839f
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 12, 2025
0d85d87
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 12, 2025
0a990c8
prevent camel-cased IDs in `visibility_criteria`
jaskfla Oct 13, 2025
6a6271e
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 13, 2025
5efd357
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 13, 2025
9e0ff98
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 13, 2025
c99b1a3
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 13, 2025
a0a13ce
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 13, 2025
d866487
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 13, 2025
d8601d4
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 13, 2025
e8091c7
expand fix to other JSON attributes
jaskfla Oct 13, 2025
0b3a0b7
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 13, 2025
dcf0814
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 13, 2025
5c1b565
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 13, 2025
4800cfe
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 13, 2025
38709c7
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 13, 2025
34751f0
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 13, 2025
e9c040f
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 13, 2025
3d164e9
tweak(database): tighten database & model registry type hints (#6521)
jaskfla Oct 14, 2025
a708219
Merge branch 'dev' into rn-1545-epic-datatrak-offline
jaskfla Oct 14, 2025
d8c5fd5
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 14, 2025
ff73439
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 14, 2025
97885d5
refactor(database): parallelise promises in `EntityModel`
jaskfla Oct 14, 2025
e813ba0
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 14, 2025
65bb1e0
more descrive variable name
jaskfla Oct 14, 2025
889d947
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 14, 2025
13aa88e
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 14, 2025
e6f793f
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 14, 2025
1d1615f
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 14, 2025
cba78e9
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 14, 2025
81a1bc9
remove redundant filter
jaskfla Oct 14, 2025
2c36952
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 14, 2025
5ea9e59
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 14, 2025
a138178
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 14, 2025
d639ef7
fix useTask type
jaskfla Oct 14, 2025
d5e5684
type fixes from `rn-1490-5`
jaskfla Oct 14, 2025
3007ae6
prepare the way
jaskfla Oct 14, 2025
75ee68e
fix build
jaskfla Oct 14, 2025
0512b7b
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 14, 2025
7d4f0de
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 14, 2025
cbcc76f
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 14, 2025
9f48e0d
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 14, 2025
1535fd8
db: update datatrak-web initial schema with latest entity types
jaskfla Oct 15, 2025
0f802b5
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 15, 2025
5da1db4
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 15, 2025
7394386
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 15, 2025
9f6614c
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 15, 2025
44bf370
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 15, 2025
a328e7c
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 15, 2025
ff810be
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 15, 2025
5cd05bd
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 15, 2025
42f8597
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 15, 2025
d4ee8bb
test(datatrak): mock `window.matchMedia` in all datatrak-web tests
jaskfla Oct 15, 2025
f9e2c49
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1490
jaskfla Oct 15, 2025
8e3c9ab
Merge branch 'rn-1490' into rn-1490-1
jaskfla Oct 15, 2025
da39e9e
Merge branch 'rn-1490-1' into rn-1490-2
jaskfla Oct 15, 2025
25798f5
Merge branch 'rn-1490-2' into rn-1490-3
jaskfla Oct 15, 2025
9ae4689
Merge branch 'rn-1490-3' into rn-1490-4
jaskfla Oct 15, 2025
c494c36
Merge branch 'rn-1490-4' into rn-1490-5
jaskfla Oct 15, 2025
4e125fc
Merge branch 'rn-1490-5' into rn-1490-6
jaskfla Oct 15, 2025
fc79ade
Merge branch 'rn-1490-6' into rn-1545-allow-switching-project
jaskfla Oct 15, 2025
78aeadb
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 15, 2025
b4a24c6
test(datatrak): mock `localSystemFact.get`
jaskfla Oct 16, 2025
cd4e3ed
addressed reviews
chris-bes Oct 16, 2025
30c5fc8
addressed review
chris-bes Oct 16, 2025
5ecc457
Merge pull request #6453 from beyondessential/rn-1608-notify-upgrade
chris-bes Oct 16, 2025
9f8b657
refactor: RN-1490: move duplicated survey logic into model layer (#6411)
jaskfla Oct 19, 2025
ecf43c2
feat(datatrak): RN-1490: offline survey screens (#6439)
jaskfla Oct 19, 2025
c1469c7
refactor: RN-1490: move `processSurveyResponse` into model layer (#6449)
jaskfla Oct 19, 2025
27139a3
refactor: RN-1490: move survey submission dependencies into model lay…
jaskfla Oct 19, 2025
f7d6000
feat(datatrak): RN-1490: offline survey submission (#6460)
jaskfla Oct 19, 2025
4c38574
refactor: RN-1490: update a user’s recent entities offline (#6461)
jaskfla Oct 19, 2025
ffd168e
refactor: RN-1490: move survey submission permission checks to model …
jaskfla Oct 19, 2025
e382fb2
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1545-allow-switc…
jaskfla Oct 19, 2025
a7ac4c9
Merge branch 'rn-1545-allow-switching-project' into rn-1545-fix-bugs
jaskfla Oct 19, 2025
ec41064
type hint `getFilteredUsersForPermissionGroup`
jaskfla Oct 13, 2025
0104eb1
prefer interface
jaskfla Oct 13, 2025
6e7a3bf
throw nongeneric errors
jaskfla Oct 13, 2025
e8d8bc6
code style
jaskfla Oct 13, 2025
63e1ffa
offline `usePermissionGroupUsers`
jaskfla Oct 13, 2025
eb9e400
update interface
jaskfla Oct 13, 2025
faa0e2e
tweak(database): fix bad type hint, faster query, for user recent ent…
jaskfla Oct 21, 2025
519466c
addressed review
chris-bes Oct 21, 2025
9d2626c
Merge pull request #6500 from beyondessential/rn-1545-allow-switching…
chris-bes Oct 21, 2025
759be74
addressed reviews
chris-bes Oct 21, 2025
1fa6e63
Merge pull request #6492 from beyondessential/rn-1545-fix-bugs
chris-bes Oct 21, 2025
eee37bc
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1672-offline-login
chris-bes Oct 21, 2025
1cb3548
addressed reviews
chris-bes Oct 21, 2025
08287b4
Merge pull request #6518 from beyondessential/rn-1672-offline-login
chris-bes Oct 21, 2025
1cdc7ed
Merge branch 'dev' into rn-1545-epic-datatrak-offline
jaskfla Oct 22, 2025
8e7afa5
fix(datatrak): `useSurveyQuery`’s `enabled` logic
jaskfla Oct 22, 2025
0a6e056
tweak(datatrak): use read-only transaction in local useSurveysQuery q…
jaskfla Oct 23, 2025
0623d3e
fix(datatrak): remove dead imports
jaskfla Oct 23, 2025
5a4a5d0
fix(datatrak): RN-1490: crash when submitting survey response offline…
jaskfla Oct 23, 2025
139d891
Merge branch 'rn-1545-epic-datatrak-offline' into rn-1711-handle-swit…
chris-bes Oct 23, 2025
ce80092
addressed reviews
chris-bes Oct 23, 2025
ba1da1a
Merge pull request #6436 from beyondessential/rn-1711-handle-switchin…
chris-bes Oct 23, 2025
8a677af
Merge pull request #6519 from beyondessential/rn-1490-issue-3
chris-bes Oct 24, 2025
d6f55a0
Merge branch 'dev' into rn-1545-epic-datatrak-offline
chris-bes Oct 30, 2025
f8ea3a6
fixed generated types
chris-bes Oct 30, 2025
5914cf1
notify upgrade
chris-bes Sep 18, 2025
ceb5c4e
clean up
chris-bes Sep 18, 2025
261952c
addressed reviews
chris-bes Oct 16, 2025
43d58d1
addressed review
chris-bes Oct 16, 2025
d278263
Merge branch 'rn-1545-epic-datatrak-offline' of https://github.com/be…
chris-bes Oct 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 6 additions & 4 deletions .storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,14 @@ const config: StorybookConfig = {
resolve: {
preserveSymlinks: true, // use the yarn workspace symlinks
alias: {
http: path.resolve(__dirname, '../moduleMock.js'),
winston: path.resolve(__dirname, '../moduleMock.js'),
jsonwebtoken: path.resolve(__dirname, '../moduleMock.js'),
'node-fetch': path.resolve(__dirname, '../moduleMock.js'),
http: path.resolve(__dirname, '../mock/moduleMock.js'),
winston: path.resolve(__dirname, '../mock/moduleMock.js'),
jsonwebtoken: path.resolve(__dirname, '../mock/moduleMock.js'),
'node-fetch': path.resolve(__dirname, '../mock/moduleMock.js'),
// This is a workaround for us using react-16 in the monorepo
'@storybook/react-dom-shim': '@storybook/react-dom-shim/dist/react-16',
'pg-pubsub': path.resolve(__dirname, '../mock/moduleMock.js'),
'@node-rs/argon2': path.resolve(__dirname, '../mock/argon2ModuleMock.js'),
},
},
});
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ While each package type has their own structure, there are a few common standard
- [entity-server](/packages/entity-server/README.md)
- [report-server](/packages/report-server/README.md)
- [data-table-server](/packages/data-table-server/README.md)
- [sync-server](/packages/sync-server/README.md)
- [sync](/packages/sync/README.md)

Server packages can be built by running `yarn workspace @tupaia/package-name build`. Server packages can then be started by running `yarn workspace @tupaia/package-name start`.

Expand Down
1 change: 1 addition & 0 deletions env/api-client.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ ENTITY_API_URL="http://localhost:8050/v1"
REPORT_API_URL="http://localhost:8030/v1"
TUPAIA_WEB_SERVER_API_URL="http://localhost:8100/v1"
WEB_CONFIG_API_URL="http://localhost:8000/api/v1"
SYNC_API_URL="http://localhost:8120/v1"
13 changes: 13 additions & 0 deletions mock/argon2ModuleMock.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
export const hash = () => {
throw new Error('@node-rs/argon2 not available in browser environment');
};

export const verify = () => {
throw new Error('@node-rs/argon2 not available in browser environment');
};

// Export any other functions your code imports
export default {
hash,
verify,
};
File renamed without changes.
8 changes: 8 additions & 0 deletions mock/pgMock.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export const types = () => {
throw new Error('pg not available in browser environment');
};

// Export any other functions your code imports
export default {
types,
};
21 changes: 21 additions & 0 deletions mock/winston.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const winston = {
error: console.error,
warn: console.warn,
info: console.info,
log: console.log,
http: console.log,
verbose: console.log,
debug: console.debug,
};

// Support both CommonJS and ES modules
export default winston;
export const {
error,
warn,
info,
log,
http,
verbose,
debug,
} = winston;
6 changes: 5 additions & 1 deletion packages/access-policy/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@
"test:coverage": "yarn test --coverage"
},
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/eslint-parser": "^7.27.5",
"@tupaia/utils": "workspace:*",
"eslint": "^7.32.0",
"npm-run-all": "^4.1.5",
"rimraf": "^6.0.1"
},
"dependencies": {
"@tupaia/constants": "workspace:*",
"@tupaia/tsutils": "workspace:*"
}
}
4 changes: 2 additions & 2 deletions packages/access-policy/src/AccessPolicy.js
Original file line number Diff line number Diff line change
Expand Up @@ -112,9 +112,9 @@ export class AccessPolicy {
/**
* Return entities the user has access to the given permission group for
*
* @param {string} [permissionGroup]
* @param {string} [permissionGroup] Permission group name
*
* @returns entities[] The entity objects
* @returns {string[]} The entity codes
*/
getEntitiesAllowed(permissionGroup) {
const allEntityCodes = Object.keys(this.policy);
Expand Down
17 changes: 17 additions & 0 deletions packages/access-policy/src/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
export { AccessPolicy } from './AccessPolicy';
export {
allowNoPermissions,
assertAdminPanelAccess,
assertAllPermissions,
assertAnyPermissions,
assertBESAdminAccess,
assertPermissionGroupAccess,
assertPermissionGroupsAccess,
assertVizBuilderAccess,
hasBESAdminAccess,
hasPermissionGroupAccess,
hasPermissionGroupsAccess,
hasSomePermissionGroupsAccess,
hasTupaiaAdminPanelAccess,
hasTupaiaAdminPanelAccessToCountry,
hasVizBuilderAccess,
} from './permissions';
144 changes: 144 additions & 0 deletions packages/access-policy/src/permissions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import {
BES_ADMIN_PERMISSION_GROUP,
TUPAIA_ADMIN_PANEL_PERMISSION_GROUP,
VIZ_BUILDER_PERMISSION_GROUP,
} from '@tupaia/constants';

/**
* @typedef {import('./AccessPolicy').AccessPolicy} AccessPolicy
* @typedef {(accessPolicy: AccessPolicy) => true} SimplePermissionsAssertion
* @typedef {(accessPolicy: AccessPolicy) => boolean} SimplePermissionsChecker
* @typedef {string} PermissionGroupName
*/

/**
* Returns true all the time. This is for any route handlers that do not need permissions.
* @returns {true}
*/
export const allowNoPermissions = () => true;

/**
* Returns true if all of the permissions assertions pass, or throws an error
* @param {function[]} assertions Each permissions assertion should return `true` or throw
* @param {string} errorMessage
* @returns {true}
* @privateRemarks Ideally, these should throw `PermissionsError`s but adding @tupaia/utils as a
* transitive dependency of @tupaia/meditrak-app causes MediTrak build to fail because it has
* imports from node:fs.
*/
export const assertAllPermissions = (assertions, errorMessage) => async accessPolicy => {
try {
for (const assertion of assertions) await assertion(accessPolicy);
return true;
} catch (e) {
throw new Error(errorMessage || e.message);
}
};

/**
* Returns `true` if any of the permissions assertions pass, otherwise throws
* @param {function[]} assertions Each permissions assertion should return true or throw
* @param {string} errorMessage
* @returns {true}
* @privateRemarks Ideally, these should throw `PermissionsError`s but adding @tupaia/utils as a
* transitive dependency of @tupaia/meditrak-app causes MediTrak build to fail because it has
* imports from node:fs.
*/
export const assertAnyPermissions = (assertions, errorMessage) => async accessPolicy => {
const combinedErrorMessages = ['One of the following conditions need to be satisfied:'];

for (const assertion of assertions) {
try {
await assertion(accessPolicy);
return true;
} catch (e) {
combinedErrorMessages.push(e.message);
// swallow specific errors, in case any assertion returns true
}
}
throw new Error(errorMessage || combinedErrorMessages.join('\n'));
};

/** @type {SimplePermissionsChecker} */
export const hasBESAdminAccess = accessPolicy =>
accessPolicy.allowsSome(undefined, BES_ADMIN_PERMISSION_GROUP);

/** @type {SimplePermissionsChecker} */
export const hasVizBuilderAccess = accessPolicy =>
accessPolicy.allowsSome(undefined, VIZ_BUILDER_PERMISSION_GROUP);

/**
* @param {AccessPolicy} accessPolicy
* @param {PermissionGroupName} permissionGroup
* @returns {boolean}
*/
export const hasPermissionGroupAccess = (accessPolicy, permissionGroup) =>
accessPolicy.allowsSome(undefined, permissionGroup);

/**
* Has access to all permission groups inputted
* @param {AccessPolicy} accessPolicy
* @param {PermissionGroupName[]} permissionGroups
* @returns {boolean}
*/
export const hasPermissionGroupsAccess = (accessPolicy, permissionGroups) =>
permissionGroups.every(pg => accessPolicy.allowsSome(undefined, pg));

/** @type {SimplePermissionsChecker} */
export const hasSomePermissionGroupsAccess = (accessPolicy, permissionGroups) =>
permissionGroups.some(pg => accessPolicy.allowsSome(undefined, pg));

/** @type {SimplePermissionsAssertion} */
export const assertBESAdminAccess = accessPolicy => {
if (hasBESAdminAccess(accessPolicy)) return true;
throw new Error(`Need ${BES_ADMIN_PERMISSION_GROUP} access`);
};

/** @type {SimplePermissionsAssertion} */
export const assertVizBuilderAccess = accessPolicy => {
if (hasVizBuilderAccess(accessPolicy)) return true;
throw new Error(`Need ${VIZ_BUILDER_PERMISSION_GROUP} access`);
};

/** @type {SimplePermissionsChecker} */
export const hasTupaiaAdminPanelAccess = accessPolicy =>
accessPolicy.allowsSome(undefined, TUPAIA_ADMIN_PANEL_PERMISSION_GROUP);

/**
* @param {AccessPolicy} accessPolicy
* @param {string} countryCode
* @returns {boolean}
*/
export const hasTupaiaAdminPanelAccessToCountry = (accessPolicy, countryCode) =>
accessPolicy.allows(countryCode, TUPAIA_ADMIN_PANEL_PERMISSION_GROUP);

/** @type {SimplePermissionsAssertion} */
export const assertAdminPanelAccess = accessPolicy => {
if (hasTupaiaAdminPanelAccess(accessPolicy)) return true;
throw new Error(`Need ${TUPAIA_ADMIN_PANEL_PERMISSION_GROUP} access`);
};

/**
* @param {AccessPolicy} accessPolicy
* @param {PermissionGroupName} permissionGroupName
* @returns {true}
*/
export const assertPermissionGroupAccess = (accessPolicy, permissionGroupName) => {
if (hasPermissionGroupAccess(accessPolicy, permissionGroupName)) return true;
throw new Error(`Need ${permissionGroupName} access`);
};

/**
* @param {AccessPolicy} accessPolicy
* @param {PermissionGroupName[]} permissionGroupNames
* @returns {true}
*/
export const assertPermissionGroupsAccess = (accessPolicy, permissionGroupNames) => {
if (
hasBESAdminAccess(accessPolicy) ||
hasPermissionGroupsAccess(accessPolicy, permissionGroupNames)
) {
return true;
}
throw new Error(`Need access to ${permissionGroupNames.join(', ')}`);
};
40 changes: 21 additions & 19 deletions packages/admin-panel-server/src/app/createApp.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { NextFunction, Request, Response } from 'express';
import { NextFunction, Request, RequestHandler, Response } from 'express';

import { TupaiaDatabase } from '@tupaia/database';
import {
OrchestratorApiBuilder,
Expand All @@ -7,48 +8,49 @@ import {
handleWith,
} from '@tupaia/server-boilerplate';
import { getEnvVarOrDefault } from '@tupaia/utils';
import { AdminPanelSessionModel } from '../models';
import { hasTupaiaAdminPanelAccess } from '../utils';

import { upload } from '../middleware';
import { AdminPanelSessionModel } from '../models';
import {
ExportDashboardVisualisationRequest,
ExportDashboardVisualisationRoute,
ExportDataTableRequest,
ExportDataTableRoute,
ExportEntityHierarchiesRequest,
ExportEntityHierarchiesRoute,
ExportMapOverlayVisualisationRequest,
ExportMapOverlayVisualisationRoute,
FetchDashboardVisualisationRequest,
FetchDashboardVisualisationRoute,
FetchDataTableBuiltInParamsRequest,
FetchDataTableBuiltInParamsRoute,
FetchDataTablePreviewDataRequest,
FetchDataTablePreviewDataRoute,
FetchHierarchyEntitiesRequest,
FetchHierarchyEntitiesRoute,
FetchMapOverlayVisualisationRequest,
FetchMapOverlayVisualisationRoute,
FetchReportPreviewDataRequest,
FetchReportPreviewDataRoute,
FetchDataTablePreviewDataRequest,
FetchDataTablePreviewDataRoute,
FetchTransformSchemasRequest,
FetchTransformSchemasRoute,
ImportDashboardVisualisationRequest,
ImportDashboardVisualisationRoute,
ImportDataTableRequest,
ImportDataTableRoute,
ImportMapOverlayVisualisationRequest,
ImportMapOverlayVisualisationRoute,
PresentationOptionsPromptRequest,
PresentationOptionsPromptRoute,
SaveDashboardVisualisationRequest,
SaveDashboardVisualisationRoute,
SaveMapOverlayVisualisationRequest,
SaveMapOverlayVisualisationRoute,
UploadTestDataRequest,
UploadTestDataRoute,
UserRoute,
ImportMapOverlayVisualisationRequest,
ImportMapOverlayVisualisationRoute,
FetchTransformSchemasRequest,
FetchTransformSchemasRoute,
FetchDataTableBuiltInParamsRequest,
FetchDataTableBuiltInParamsRoute,
ExportEntityHierarchiesRequest,
ExportEntityHierarchiesRoute,
PresentationOptionsPromptRequest,
PresentationOptionsPromptRoute,
} from '../routes';
import { hasTupaiaAdminPanelAccess } from '../utils';
import { PromptManager } from '../viz-builder/prompts/PromptManager';

export const addPromptManagerToContext =
Expand Down Expand Up @@ -131,22 +133,22 @@ export async function createApp(promptManager: PromptManager) {
)
.post<ImportDashboardVisualisationRequest>(
'import/dashboardVisualisations',
upload.array('dashboardVisualisations'),
upload.array('dashboardVisualisations') as RequestHandler,
handleWith(ImportDashboardVisualisationRoute),
)
.post<ImportDataTableRequest>(
'import/dataTables',
upload.array('dataTables'),
upload.array('dataTables') as RequestHandler,
handleWith(ImportDataTableRoute),
)
.post<ImportMapOverlayVisualisationRequest>(
'import/mapOverlayVisualisations',
upload.array('mapOverlayVisualisations'),
upload.array('mapOverlayVisualisations') as RequestHandler,
handleWith(ImportMapOverlayVisualisationRoute),
)
.post<UploadTestDataRequest>(
'uploadTestData',
upload.single('testData'),
upload.single('testData') as RequestHandler,
handleWith(UploadTestDataRoute),
)
.get<FetchMapOverlayVisualisationRequest>(
Expand Down
2 changes: 1 addition & 1 deletion packages/admin-panel/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"ace-builds": "^1.10.1",
"axios": "^1.12.2",
"content-disposition-header": "^0.6.0",
"date-fns": "^2.29.2",
"date-fns": "^2.30.0",
"file-saver": "^1.3.3",
"jsoneditor": "^10.0.1",
"lodash.debounce": "^4.0.8",
Expand Down
1 change: 0 additions & 1 deletion packages/admin-panel/src/pages/resources/ResourcePage.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import { ResubmitSurveyResponseModal } from '../../surveyResponse/ResubmitSurvey
import { Breadcrumbs } from '../../layout';
import { useItemDetails } from '../../api/queries/useResourceDetails';
import { ArchiveSurveyResponseModal } from '../../surveyResponse';
import { useUser } from '../../api/queries';
import { getExplodedFields, useHasBesAdminAccess, useHasVizBuilderAccess } from '../../utilities';

const useEndpoint = (endpoint, details, params) => {
Expand Down
1 change: 1 addition & 0 deletions packages/aggregator/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
"lodash.groupby": "^4.6.0"
},
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/eslint-parser": "^7.27.5",
"@types/jest": "^29.5.14",
"jest": "^29.7.0",
Expand Down
Loading
Loading