Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(feat) Adds support for non-Gregorian calendars, with special work-arounds for Amharic #790

Merged
merged 4 commits into from
Nov 7, 2023

Conversation

ibacher
Copy link
Member

@ibacher ibacher commented Oct 18, 2023

Requirements

  • This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a conventional commit label. See existing PR titles for inspiration.

For changes to apps

If applicable

  • My work includes tests or is validated by existing tests.
  • I have updated the esm-framework mock to reflect any API changes I have made.

Summary

Basically, this has the same intention as #786, but with a somewhat cleaner implementation, utilising the standard JS library. It also adds support for registering default custom calendars on a per-locale basis, which is currently only used to use the Ethiopian calendar when the locale is Amharic.

See the added tests for some of what this PR allows.

Screenshots

Date Formatting

Related Issue

Other

There's a hack in here I don't love: if the locale is set to Amharic, we format the date in English, but using the Ethiopic calendar, but this was done to produce the same results as #786.

#786 also basically stops the display of time strings, but this is a configurable option for the call to formatDate(), and we should probably have a mechanism to handle the implementation-specific defaults rather than just relying on the workaround of having a separate formatter that doesn't display time in some circumstances.

@ibacher
Copy link
Member Author

ibacher commented Oct 18, 2023

cc: @amn-icap @gracepotma This is my proposal for a better way of achieving the goal of #786.

@github-actions
Copy link
Contributor

github-actions bot commented Oct 18, 2023

Size Change: -2.09 MB (-41%) 🎉

Total Size: 2.99 MB

Filename Size Change
packages/apps/esm-devtools-app/dist/889.js 173 kB -310 kB (-64%) 🏆
packages/apps/esm-implementer-tools-app/dist/640.js 0 B -32.8 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/837.js 0 B -55.1 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/889.js 173 kB -310 kB (-64%) 🏆
packages/apps/esm-implementer-tools-app/dist/main.js 72.8 kB +68.6 kB (+1639%) 🆘
packages/apps/esm-login-app/dist/144.js 0 B -21.7 kB (removed) 🏆
packages/apps/esm-login-app/dist/342.js 0 B -11.6 kB (removed) 🏆
packages/apps/esm-login-app/dist/829.js 0 B -10.2 kB (removed) 🏆
packages/apps/esm-login-app/dist/889.js 173 kB -310 kB (-64%) 🏆
packages/apps/esm-login-app/dist/main.js 52.6 kB +49 kB (+1359%) 🆘
packages/apps/esm-offline-tools-app/dist/273.js 0 B -48.9 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/281.js 0 B -16.3 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/501.js 0 B -24.2 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/526.js 0 B -15.7 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/594.js 0 B -11.4 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/889.js 173 kB -310 kB (-64%) 🏆
packages/apps/esm-offline-tools-app/dist/main.js 136 kB +79.4 kB (+140%) 🆘
packages/apps/esm-primary-navigation-app/dist/241.js 0 B -14 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/735.js 18.7 kB +16 kB (+608%) 🆘
packages/apps/esm-primary-navigation-app/dist/889.js 173 kB -310 kB (-64%) 🏆
packages/apps/esm-primary-navigation-app/dist/953.js 0 B -12.8 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/main.js 33.7 kB +28.9 kB (+603%) 🆘
packages/framework/esm-framework/dist/openmrs-esm-framework.js 373 kB -376 kB (-50%) 🏆
packages/framework/esm-styleguide/dist/openmrs-esm-styleguide.js 82.7 kB -313 kB (-79%) 🏆
packages/shell/esm-app-shell/dist/6738bea79c65fe1d.js 0 B -16.5 kB (removed) 🏆
packages/shell/esm-app-shell/dist/openmrs.d12e9a694dc09338.js 0 B -330 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/285.js 60.8 kB +60.8 kB (new file) 🆕
packages/apps/esm-implementer-tools-app/dist/727.js 32.9 kB +32.9 kB (new file) 🆕
packages/apps/esm-login-app/dist/249.js 22.9 kB +22.9 kB (new file) 🆕
packages/apps/esm-login-app/dist/275.js 25.8 kB +25.8 kB (new file) 🆕
packages/apps/esm-offline-tools-app/dist/102.js 81.3 kB +81.3 kB (new file) 🆕
packages/apps/esm-offline-tools-app/dist/193.js 55.1 kB +55.1 kB (new file) 🆕
packages/apps/esm-primary-navigation-app/dist/262.js 13.3 kB +13.3 kB (new file) 🆕
packages/shell/esm-app-shell/dist/openmrs.3b3425ac118a993d.js 331 kB +331 kB (new file) 🆕
ℹ️ View Unchanged
Filename Size Change
packages/apps/esm-devtools-app/dist/68.js 4.66 kB +377 B (+9%) 🔍
packages/apps/esm-devtools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-devtools-app/dist/988.js 282 B 0 B
packages/apps/esm-devtools-app/dist/main.js 2.95 kB 0 B
packages/apps/esm-devtools-app/dist/openmrs-esm-devtools-app.js 3.03 kB 0 B
packages/apps/esm-implementer-tools-app/dist/220.js 0 B -4.43 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/246.js 0 B -449 B (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-implementer-tools-app/dist/319.js 633 B 0 B
packages/apps/esm-implementer-tools-app/dist/329.js 10 kB +1 B (0%)
packages/apps/esm-implementer-tools-app/dist/426.js 1.66 kB 0 B
packages/apps/esm-implementer-tools-app/dist/460.js 735 B 0 B
packages/apps/esm-implementer-tools-app/dist/466.js 0 B -5.85 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/499.js 0 B -2.87 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/500.js 0 B -2.83 kB (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/519.js 0 B -400 B (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/56.js 3.07 kB 0 B
packages/apps/esm-implementer-tools-app/dist/574.js 560 B 0 B
packages/apps/esm-implementer-tools-app/dist/575.js 0 B -713 B (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/587.js 2.81 kB 0 B
packages/apps/esm-implementer-tools-app/dist/620.js 126 kB 0 B
packages/apps/esm-implementer-tools-app/dist/625.js 562 B 0 B
packages/apps/esm-implementer-tools-app/dist/657.js 0 B -562 B (removed) 🏆
packages/apps/esm-implementer-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-implementer-tools-app/dist/757.js 560 B 0 B
packages/apps/esm-implementer-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-implementer-tools-app/dist/807.js 559 B -886 B (-61%) 🏆
packages/apps/esm-implementer-tools-app/dist/833.js 681 B 0 B
packages/apps/esm-implementer-tools-app/dist/openmrs-esm-implementer-tools-app.js 3.3 kB -4 B (0%)
packages/apps/esm-login-app/dist/111.js 1.22 kB +1 B (0%)
packages/apps/esm-login-app/dist/126.js 2.5 kB 0 B
packages/apps/esm-login-app/dist/173.js 1.22 kB 0 B
packages/apps/esm-login-app/dist/236.js 272 B 0 B
packages/apps/esm-login-app/dist/240.js 364 B 0 B
packages/apps/esm-login-app/dist/261.js 0 B -6.28 kB (removed) 🏆
packages/apps/esm-login-app/dist/263.js 6.65 kB 0 B
packages/apps/esm-login-app/dist/272.js 264 B 0 B
packages/apps/esm-login-app/dist/319.js 504 B 0 B
packages/apps/esm-login-app/dist/336.js 234 B 0 B
packages/apps/esm-login-app/dist/337.js 0 B -1.31 kB (removed) 🏆
packages/apps/esm-login-app/dist/460.js 580 B 0 B
packages/apps/esm-login-app/dist/539.js 298 B 0 B
packages/apps/esm-login-app/dist/56.js 3.06 kB 0 B
packages/apps/esm-login-app/dist/574.js 428 B 0 B
packages/apps/esm-login-app/dist/610.js 0 B -5.84 kB (removed) 🏆
packages/apps/esm-login-app/dist/625.js 421 B 0 B
packages/apps/esm-login-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-login-app/dist/644.js 305 B 0 B
packages/apps/esm-login-app/dist/673.js 284 B 0 B
packages/apps/esm-login-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-login-app/dist/757.js 509 B 0 B
packages/apps/esm-login-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-login-app/dist/807.js 685 B 0 B
packages/apps/esm-login-app/dist/833.js 528 B 0 B
packages/apps/esm-login-app/dist/967.js 0 B -576 B (removed) 🏆
packages/apps/esm-login-app/dist/openmrs-esm-login-app.js 3.28 kB -1 B (0%)
packages/apps/esm-offline-tools-app/dist/202.js 0 B -9.79 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/206.js 0 B -7.41 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/224.js 0 B -3.86 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-offline-tools-app/dist/297.js 0 B -466 B (removed) 🏆
packages/apps/esm-offline-tools-app/dist/316.js 0 B -2.04 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/319.js 1.14 kB -15 B (-1%)
packages/apps/esm-offline-tools-app/dist/391.js 0 B -305 B (removed) 🏆
packages/apps/esm-offline-tools-app/dist/412.js 0 B -1.58 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/460.js 1.32 kB -2 B (0%)
packages/apps/esm-offline-tools-app/dist/47.js 0 B -6.34 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/538.js 0 B -6.79 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/541.js 0 B -383 B (removed) 🏆
packages/apps/esm-offline-tools-app/dist/56.js 3.07 kB 0 B
packages/apps/esm-offline-tools-app/dist/574.js 1.04 kB -13 B (-1%)
packages/apps/esm-offline-tools-app/dist/625.js 1.04 kB -2 B (0%)
packages/apps/esm-offline-tools-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-offline-tools-app/dist/696.js 0 B -410 B (removed) 🏆
packages/apps/esm-offline-tools-app/dist/733.js 0 B -290 B (removed) 🏆
packages/apps/esm-offline-tools-app/dist/735.js 2.63 kB 0 B
packages/apps/esm-offline-tools-app/dist/752.js 0 B -2.83 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/757.js 1.2 kB -16 B (-1%)
packages/apps/esm-offline-tools-app/dist/78.js 0 B -6.15 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-offline-tools-app/dist/807.js 1.1 kB -5 B (0%)
packages/apps/esm-offline-tools-app/dist/833.js 1.22 kB -13 B (-1%)
packages/apps/esm-offline-tools-app/dist/937.js 0 B -6.61 kB (removed) 🏆
packages/apps/esm-offline-tools-app/dist/openmrs-esm-offline-tools-app.js 3.29 kB -20 B (-1%)
packages/apps/esm-primary-navigation-app/dist/263.js 6.66 kB 0 B
packages/apps/esm-primary-navigation-app/dist/319.js 200 B 0 B
packages/apps/esm-primary-navigation-app/dist/460.js 217 B 0 B
packages/apps/esm-primary-navigation-app/dist/574.js 183 B 0 B
packages/apps/esm-primary-navigation-app/dist/575.js 0 B -441 B (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/625.js 184 B 0 B
packages/apps/esm-primary-navigation-app/dist/63.js 16.5 kB 0 B
packages/apps/esm-primary-navigation-app/dist/674.js 0 B -680 B (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/710.js 0 B -6.44 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/716.js 0 B -6.12 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/743.js 0 B -7.25 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/757.js 209 B 0 B
packages/apps/esm-primary-navigation-app/dist/788.js 42.9 kB 0 B
packages/apps/esm-primary-navigation-app/dist/807.js 235 B 0 B
packages/apps/esm-primary-navigation-app/dist/833.js 210 B 0 B
packages/apps/esm-primary-navigation-app/dist/948.js 0 B -3.08 kB (removed) 🏆
packages/apps/esm-primary-navigation-app/dist/openmrs-esm-primary-navigation-app.js 3.23 kB -58 B (-2%)
packages/framework/esm-api/dist/openmrs-esm-api.js 9.68 kB +6 B (0%)
packages/framework/esm-breadcrumbs/dist/openmrs-esm-breadcrumbs.js 2.66 kB 0 B
packages/framework/esm-config/dist/openmrs-esm-module-config.js 7.87 kB 0 B
packages/framework/esm-dynamic-loading/dist/openmrs-esm-dynamic-loading.js 2.12 kB 0 B
packages/framework/esm-error-handling/dist/openmrs-esm-error-handling.js 894 B 0 B
packages/framework/esm-extensions/dist/openmrs-esm-extensions.js 8.05 kB 0 B
packages/framework/esm-feature-flags/dist/openmrs-esm-feature-flags.js 1.67 kB 0 B
packages/framework/esm-framework/dist/146.openmrs-esm-framework.js 6.69 kB 0 B
packages/framework/esm-framework/dist/455.openmrs-esm-framework.js 4.57 kB 0 B
packages/framework/esm-framework/dist/530.openmrs-esm-framework.js 2.92 kB 0 B
packages/framework/esm-framework/dist/645.openmrs-esm-framework.js 9.31 kB 0 B
packages/framework/esm-framework/dist/710.openmrs-esm-framework.js 6.48 kB 0 B
packages/framework/esm-framework/dist/735.openmrs-esm-framework.js 2.66 kB 0 B
packages/framework/esm-framework/dist/788.openmrs-esm-framework.js 42.9 kB 0 B
packages/framework/esm-globals/dist/openmrs-esm-globals.js 714 B 0 B
packages/framework/esm-offline/dist/openmrs-esm-offline.js 34.4 kB 0 B
packages/framework/esm-react-utils/dist/openmrs-esm-react-utils.js 15.2 kB +374 B (+3%)
packages/framework/esm-state/dist/openmrs-esm-state.js 888 B 0 B
packages/framework/esm-utils/dist/openmrs-esm-utils.js 11 kB +743 B (+7%) 🔍
packages/shell/esm-app-shell/dist/74758f432e4bb251.js 0 B -6.02 kB (removed) 🏆
packages/shell/esm-app-shell/dist/966c4dfec919951f.js 1.58 kB 0 B
packages/shell/esm-app-shell/dist/service-worker.js 60.4 kB +6 B (0%)
packages/tooling/openmrs/dist/cli.js 3.09 kB 0 B
packages/tooling/openmrs/dist/commands/assemble.js 2.73 kB 0 B
packages/tooling/openmrs/dist/commands/build.js 1.66 kB 0 B
packages/tooling/openmrs/dist/commands/debug.js 579 B 0 B
packages/tooling/openmrs/dist/commands/develop.js 1.85 kB 0 B
packages/tooling/openmrs/dist/commands/index.js 438 B 0 B
packages/tooling/openmrs/dist/commands/start.js 848 B 0 B
packages/tooling/openmrs/dist/index.js 517 B 0 B
packages/tooling/openmrs/dist/runner.js 870 B 0 B
packages/tooling/openmrs/dist/utils/config.js 726 B 0 B
packages/tooling/openmrs/dist/utils/debugger.js 529 B 0 B
packages/tooling/openmrs/dist/utils/dependencies.js 639 B 0 B
packages/tooling/openmrs/dist/utils/helpers.js 393 B 0 B
packages/tooling/openmrs/dist/utils/importmap.js 3.25 kB 0 B
packages/tooling/openmrs/dist/utils/index.js 444 B 0 B
packages/tooling/openmrs/dist/utils/logger.js 234 B 0 B
packages/tooling/openmrs/dist/utils/npmConfig.js 854 B 0 B
packages/tooling/openmrs/dist/utils/untar.js 721 B 0 B
packages/tooling/openmrs/dist/utils/variables.js 192 B 0 B
packages/tooling/openmrs/dist/utils/webpack.js 276 B 0 B
packages/tooling/webpack-config/dist/index.js 3.58 kB +216 B (+6%) 🔍
packages/apps/esm-implementer-tools-app/dist/560.js 9.6 kB +9.6 kB (new file) 🆕
packages/apps/esm-primary-navigation-app/dist/960.js 2.64 kB +2.64 kB (new file) 🆕
packages/shell/esm-app-shell/dist/498a8af91d44612e.js 4.1 kB +4.1 kB (new file) 🆕
packages/shell/esm-app-shell/dist/73d588e193568bd0.js 6.01 kB +6.01 kB (new file) 🆕

compressed-size-action

@gracepotma
Copy link
Contributor

Wow - bravo Ian for pushing this through, and so fast. CC @aman-icap

// Custom formatting for English. Use hyphens instead of spaces.
localeString = localeString.replace(/ /g, "-");

if (_locale.language === "am") {
Copy link

@ebambo ebambo Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ibacher why do we need to keep the month names in English? Wouldn't it better to keep them in Amharic ? What do you think @aman-icap

Copy link
Member Author

@ibacher ibacher Oct 24, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did this because I was trying to keep this PR in line with the functionality in #786, which also uses English names for months in Amharic. I mentioned that in the PR description. My preference would be to not have that hack at all.

@denniskigen
Copy link
Member

denniskigen commented Nov 1, 2023

Any updates here? @ebambo

@ibacher ibacher merged commit cc53556 into main Nov 7, 2023
7 checks passed
@ibacher ibacher deleted the feat/non-gregorian-cals branch November 7, 2023 18:00
@ibacher
Copy link
Member Author

ibacher commented Nov 7, 2023

In the absence of any updates, approvals, etc. I'm just going to merge this in as it should be harmless for existing use-cases. Future work needed here can be addressed as additional tickets.

@gracepotma
Copy link
Contributor

gracepotma commented Nov 8, 2023

Update from Dagim: the ICAP-Eth team is testing the work done on this branch and recommended we disregard the other/original #786 PR for now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
4 participants