Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
a8b2b03
get file extension for custom templates during the download action
eperedo Nov 19, 2025
7bcf4c4
import d2-api from types helper
eperedo Nov 19, 2025
a8b7c5e
Merge branch 'fix/ts-errors-d2-api-history' of github.com:EyeSeeTea/B…
eperedo Nov 19, 2025
a72c25a
feat: Add weekly period variants and fix weekly period not using isoW…
nshandra Dec 19, 2025
78f7a46
feat: add SixMonthly period and test
nshandra Dec 19, 2025
04e8ead
feat: add SixMonthlyApril and Nov and tests
nshandra Dec 19, 2025
0f6cea4
feat: add BiWeekly and Nov and tests
nshandra Dec 19, 2025
78db8d9
feat: add BiMonthly and Nov and tests
nshandra Dec 19, 2025
e2d67f3
feat: add QuarterlyNov and Nov and tests
nshandra Dec 19, 2025
85c2dec
feat: add Financial periods
nshandra Jan 12, 2026
e3382da
feat: switch periods.js to ts.
nshandra Jan 13, 2026
50dbe52
fix: update ou parameter to get tracked entities in v42
deeonwuli Mar 4, 2026
b79e8b7
fix: remove obsolete condition for majorVersion 41 in buildOrgUnitMod…
deeonwuli Mar 5, 2026
48efcbb
feat: add import result badge and centralize status config
MatiasArriola Mar 17, 2026
3734b8d
Fix org unit validation on template download
xurxodev Mar 18, 2026
4fdde5d
chore: migrate to Vite
xurxodev Mar 23, 2026
e5a7da3
chore: Migrate to yarn 4
xurxodev Mar 23, 2026
55b9761
fix(security): remediate dependency vulnerabilities and stabilize run…
xurxodev Mar 23, 2026
564fd2c
fix(security): upgrade vulnerable deps and pin transitive resolutions
xurxodev Mar 23, 2026
7d7e654
fix(security,test): pin transitives, migrate to Vitest
xurxodev Mar 24, 2026
9cdd36a
fix(ci): make update-po compatible with Yarn 4 hooks
xurxodev Mar 24, 2026
aeeafa9
fix(i18n): Add `postinstall: yarn localize`
xurxodev Mar 24, 2026
b010d06
fix: refactor buildOrgUnitsParameter function for apiVersion 42 compa…
deeonwuli Mar 24, 2026
65abbfb
fix: refactor getVersion function to use memoization for improved per…
deeonwuli Mar 24, 2026
24bbfe4
Merge branch 'development' into feat/add-missing-dhis2-periods
nshandra Mar 24, 2026
83a6492
fix: add v42 compatibility to getExistingTeis
deeonwuli Mar 24, 2026
7d51393
feat: add input validation tests, handle undefined periodType.
nshandra Mar 24, 2026
c85884f
refactor: avoid variable mutation, add typing.
nshandra Mar 24, 2026
f4a930e
feat: add leap day and ISO weeks related tests
nshandra Mar 24, 2026
ea6dd4d
refactor: use SynchronizationStatus type instead of string, remove re…
MatiasArriola Apr 1, 2026
72789f3
chore: resolve i18n fuzzy comments from this PR
MatiasArriola Apr 1, 2026
975b193
ignore empty string
gqcorneby Apr 7, 2026
347b537
Remove cypress and travis file
xurxodev Apr 7, 2026
6fc47a2
feat: add DataFormPeriod type guard, use guard in download page
nshandra Apr 9, 2026
9f5585b
feat: add translations of onPeriodValidationError message. Avoid repo…
nshandra Apr 15, 2026
46001dc
fix: brittle types and locale dependent code.
nshandra Apr 20, 2026
7e39175
fix: remove any from isDataFormPeriod
nshandra Apr 20, 2026
3d2fb7f
fix: make onPeriodValidationError non-optional
nshandra Apr 20, 2026
e30cc5d
Merge branch 'development' into feat/add-missing-dhis2-periods
nshandra Apr 20, 2026
f0a4b69
fix: remove jest import from periods test
nshandra Apr 22, 2026
d731a10
[fix]: Replace invalid XML characters from cell values during export …
deeonwuli Jun 2, 2026
5fd5fa0
Merge branch 'development' into feat/after-import-result-badge
Ramon-Jimenez Jun 9, 2026
695c6b8
Merge pull request #390 from EyeSeeTea/feat/after-import-result-badge
Ramon-Jimenez Jun 9, 2026
380a153
Merge branch 'development' of github.com:EyeSeeTea/Bulk-Load into fix…
eperedo Jun 9, 2026
b906c90
Merge pull request #380 from EyeSeeTea/fix/download-custom-template-e…
Ramon-Jimenez Jun 9, 2026
80e0fd7
Merge pull request #396 from EyeSeeTea/fix/ignore-empy-readByRow
Ramon-Jimenez Jun 9, 2026
3f56238
Harden getMajorVersion for pre-release versions and add tests
Ramon-Jimenez Jun 10, 2026
ad3b790
Merge pull request #387 from EyeSeeTea/fix/tracker-data-population-v42
Ramon-Jimenez Jun 10, 2026
eb618c9
fix(excel): ignore empty formula rows when reading sheet bounds (#403)
gqcorneby Jun 11, 2026
5a4dd51
fix: empty org unit selector in downloaded template when org unit sel…
xurxodev Jun 11, 2026
cde526a
fix: include user's capture org units (or descendants of them) in dow…
xurxodev Jun 11, 2026
7c747df
Merge pull request #391 from EyeSeeTea/fix/dataset-download-ou-valida…
Ramon-Jimenez Jun 11, 2026
8e11708
Merge remote-tracking branch 'origin/development' into feature/security
xurxodev Jun 12, 2026
7434481
fix(history): import lodash in HistoryEntry to fix runtime error on i…
xurxodev Jun 12, 2026
6d96eac
Merge branch 'development' into feat/add-missing-dhis2-periods
Ramon-Jimenez Jun 15, 2026
4e1afa8
Merge pull request #385 from EyeSeeTea/feat/add-missing-dhis2-periods
Ramon-Jimenez Jun 15, 2026
6b00361
Add matching indicators for NRC template (#400)
eperedo Jun 15, 2026
f167c20
Merge pull request #394 from EyeSeeTea/feature/security
Ramon-Jimenez Jun 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ BROWSER=false
PORT=8081
SKIP_PREFLIGHT_CHECK=true
REACT_APP_DHIS2_BASE_URL=http://localhost:8080
VITE_DHIS2_BASE_URL=http://localhost:8080
VITE_DHIS2_AUTH=
VITE_PORT=8081

CYPRESS_DHIS2_AUTH='admin:district'
CYPRESS_EXTERNAL_API="https://dev.eyeseetea.com/play"
Expand Down
4 changes: 1 addition & 3 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ module.exports = {
"react-app",
"eslint:recommended",
"plugin:react/recommended",
"plugin:cypress/recommended",
"plugin:@typescript-eslint/recommended",
],
parser: "@typescript-eslint/parser",
Expand Down Expand Up @@ -45,8 +44,7 @@ module.exports = {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn",
},
plugins: ["cypress", "@typescript-eslint", "react-hooks", "unused-imports"],
env: { "cypress/globals": true },
plugins: ["@typescript-eslint", "react-hooks", "unused-imports"],
settings: {
react: {
pragma: "React",
Expand Down
15 changes: 10 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,15 @@ src/react-app-env.d.ts
bak
.eslintcache

# cypress
cypress/screenshots/
cypress/videos/
cypress/fixtures/

# IntelliJ
.idea/*

# personal session notes
.journal

# Yarn 4
.yarn/cache
.yarn/install-state.gz
.yarn/unplugged
.yarn/build-state.yml
.pnp.*
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v16.14.0
v22.22.0
24 changes: 0 additions & 24 deletions .travis.yml

This file was deleted.

1 change: 1 addition & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
25 changes: 5 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,22 @@ $ yarn install
Start the development server:

```
$ PORT=8081 REACT_APP_DHIS2_BASE_URL="http://localhost:8080" yarn start
$ PORT=8081 VITE_DHIS2_BASE_URL="http://localhost:8080" VITE_DHIS2_AUTH="" yarn start
```

Now in your browser, go to `http://localhost:8081`.

Notes:

- Requests to DHIS2 will be transparently proxied (see `src/setupProxy.js`) from `http://localhost:8081/dhis2/path` to `http://localhost:8080/path` to avoid CORS and cross-domain problems.
- Requests to DHIS2 will be transparently proxied from `http://localhost:8081/dhis2/path` to `http://localhost:8080/path` (see `vite.config.ts`) to avoid CORS and cross-domain problems.

- The optional environment variable `REACT_APP_DHIS2_AUTH=USERNAME:PASSWORD` forces some credentials to be used by the proxy. This variable is usually not set, so the app has the same user logged in at `REACT_APP_DHIS2_BASE_URL`.
- The optional environment variable `VITE_DHIS2_AUTH=USERNAME:PASSWORD` forces some credentials to be used by the proxy. This variable is usually not set, so the app has the same user logged in at `VITE_DHIS2_BASE_URL`.

- The optional environment variable `REACT_APP_PROXY_LOG_LEVEL` can be helpful to debug the proxyfied requests (accepts: "warn" | "debug" | "info" | "error" | "silent")
- The optional environment variable `VITE_PROXY_LOG_LEVEL` can be helpful to debug the proxied requests (accepts: "warn" | "debug" | "info" | "error" | "silent")

- Create a file `.env.local` (copy it from `.env`) to customize environment variables so you can simply run `yarn start`.

- [why-did-you-render](https://github.com/welldone-software/why-did-you-render) is installed, but it does not work when using standard react scripts (`yarn start`). Instead, use `yarn craco-start` to debug re-renders with WDYR. Note that hot reloading does not work out-of-the-box with [craco](https://github.com/gsoft-inc/craco).
- [why-did-you-render](https://github.com/welldone-software/why-did-you-render) is loaded in development to help debug re-renders.

## Tests

Expand All @@ -43,21 +43,6 @@ Notes:
$ yarn test
```

### Integration tests (Cypress)

Create the required users for testing (`cypress/support/App.ts`) in your instance and run:

```
$ export CYPRESS_EXTERNAL_API="http://localhost:8080"
$ export CYPRESS_ROOT_URL=http://localhost:8081

# non-interactive
$ yarn cy:e2e:run

# interactive UI
$ yarn cy:e2e:open
```

## Build app ZIP

```
Expand Down
30 changes: 0 additions & 30 deletions craco.config.js

This file was deleted.

12 changes: 0 additions & 12 deletions cypress/integration/landing-page.spec.js

This file was deleted.

11 changes: 0 additions & 11 deletions cypress/plugins/index.js

This file was deleted.

28 changes: 0 additions & 28 deletions cypress/support/commands.ts

This file was deleted.

2 changes: 0 additions & 2 deletions cypress/support/index.js

This file was deleted.

10 changes: 0 additions & 10 deletions cypress/tsconfig.json

This file was deleted.

28 changes: 26 additions & 2 deletions i18n/en.pot
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"POT-Creation-Date: 2026-03-18T04:23:33.926Z\n"
"PO-Revision-Date: 2026-03-18T04:23:33.926Z\n"
"POT-Creation-Date: 2025-11-19T17:15:26.356Z\n"
"PO-Revision-Date: 2025-11-19T17:15:26.356Z\n"

msgid "Events - Create/update"
msgstr ""
Expand Down Expand Up @@ -245,6 +245,21 @@ msgstr ""
msgid "All"
msgstr ""

msgid "Import successful"
msgstr ""

msgid "Import with warnings"
msgstr ""

msgid "Import with errors"
msgstr ""

msgid "Network error"
msgstr ""

msgid "Import pending"
msgstr ""

msgid ""
"There has been an error. You can either retry or contact your administrator "
"if you think there has been an un recoverable error"
Expand Down Expand Up @@ -621,6 +636,12 @@ msgstr[1] ""
msgid "Are you sure you want to remove the selected templates"
msgstr ""

msgid "Cannot determine file extension for template"
msgstr ""

msgid "Unsupported file extension for template"
msgstr ""

msgid "Cannot download spreadsheet for template"
msgstr ""

Expand Down Expand Up @@ -948,6 +969,9 @@ msgstr ""
msgid "Synchronization Results"
msgstr ""

msgid "Selected template has unsupported period type: {{periodType}}"
msgstr ""

msgid "Select organisation unit to populate data"
msgstr ""

Expand Down
26 changes: 25 additions & 1 deletion i18n/es.po
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Bulk Load\n"
"POT-Creation-Date: 2026-03-18T04:23:33.926Z\n"
"POT-Creation-Date: 2025-11-19T17:15:26.356Z\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
Expand Down Expand Up @@ -274,6 +274,21 @@ msgstr ""
msgid "All"
msgstr "Todos"

msgid "Import successful"
msgstr "Importación exitosa"

msgid "Import with warnings"
msgstr ""

msgid "Import with errors"
msgstr "Importación con errores"

msgid "Network error"
msgstr ""

msgid "Import pending"
msgstr "Importación pendiente"

msgid ""
"There has been an error. You can either retry or contact your administrator "
"if you think there has been an un recoverable error"
Expand Down Expand Up @@ -682,6 +697,12 @@ msgstr[1] ""
msgid "Are you sure you want to remove the selected templates"
msgstr "Esta seguro que quiere borrar las plantillas seleccionadas"

msgid "Cannot determine file extension for template"
msgstr ""

msgid "Unsupported file extension for template"
msgstr ""

msgid "Cannot download spreadsheet for template"
msgstr ""

Expand Down Expand Up @@ -1009,6 +1030,9 @@ msgstr "Respuesta JSON"
msgid "Synchronization Results"
msgstr "Resultados de la sincronización"

msgid "Selected template has unsupported period type: {{periodType}}"
msgstr "La plantilla seleccionada tiene el tipo de período no soportado: {{periodType}}"

msgid "Select organisation unit to populate data"
msgstr "Seleccione la unidad de organización para rellenar los datos"

Expand Down
26 changes: 25 additions & 1 deletion i18n/fr.po
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Bulk Load App\n"
"POT-Creation-Date: 2026-03-18T04:23:33.926Z\n"
"POT-Creation-Date: 2025-11-19T17:15:26.356Z\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
Expand Down Expand Up @@ -268,6 +268,21 @@ msgstr ""
msgid "All"
msgstr "Tout"

msgid "Import successful"
msgstr ""

msgid "Import with warnings"
msgstr ""

msgid "Import with errors"
msgstr ""

msgid "Network error"
msgstr ""

msgid "Import pending"
msgstr ""

msgid ""
"There has been an error. You can either retry or contact your administrator "
"if you think there has been an un recoverable error"
Expand Down Expand Up @@ -674,6 +689,12 @@ msgstr[1] ""
msgid "Are you sure you want to remove the selected templates"
msgstr "Voulez-vous vraiment supprimer les thèmes sélectionnés"

msgid "Cannot determine file extension for template"
msgstr ""

msgid "Unsupported file extension for template"
msgstr ""

msgid "Cannot download spreadsheet for template"
msgstr ""

Expand Down Expand Up @@ -1028,6 +1049,9 @@ msgstr ""
msgid "Synchronization Results"
msgstr ""

msgid "Selected template has unsupported period type: {{periodType}}"
msgstr "Modèle sélectionné avec un type de période non supporté: {{periodType}}"

msgid "Select organisation unit to populate data"
msgstr ""

Expand Down
Loading
Loading