@openmrs/esm-home-app 3.1.1 → 3.1.2-pre.103

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.
Files changed (66) hide show
  1. package/.turbo/turbo-build.log +29 -0
  2. package/__mocks__/react-i18next.mock.js +49 -0
  3. package/dist/183.js +1 -0
  4. package/dist/199.js +1 -0
  5. package/dist/{319.openmrs-esm-home-app.js → 319.js} +0 -0
  6. package/dist/354.js +1 -0
  7. package/dist/499.js +1 -0
  8. package/dist/520.js +1 -0
  9. package/dist/54.js +1 -0
  10. package/dist/574.js +1 -0
  11. package/dist/59.js +1 -0
  12. package/dist/709.js +1 -0
  13. package/dist/784.js +2 -0
  14. package/dist/784.js.LICENSE.txt +9 -0
  15. package/dist/858.js +2 -0
  16. package/dist/858.js.LICENSE.txt +3 -0
  17. package/dist/870.js +1 -0
  18. package/dist/97.js +2 -0
  19. package/dist/97.js.LICENSE.txt +21 -0
  20. package/dist/994.js +1 -0
  21. package/dist/main.js +1 -0
  22. package/dist/openmrs-esm-home-app.js +1 -2
  23. package/dist/openmrs-esm-home-app.js.buildmanifest.json +248 -67
  24. package/dist/openmrs-esm-home-app.old +1 -0
  25. package/jest.config.json +32 -0
  26. package/package.json +8 -10
  27. package/setupTests.ts +13 -0
  28. package/src/dashboard/home-dashboard.component.tsx +15 -27
  29. package/src/dashboard/{home-dashboard.component.css → home-dashboard.css} +0 -0
  30. package/src/dashboard/home-dashboard.test.tsx +19 -19
  31. package/src/dashboard-button/dashboard-button.component.tsx +1 -1
  32. package/src/dashboard-button/{dashboard-button.component.css → dashboard-button.css} +0 -0
  33. package/src/helpers/render-with-router.tsx +4 -7
  34. package/src/index.ts +0 -6
  35. package/src/openmrs-esm-home-schema.ts +0 -7
  36. package/src/refapp-links/active-visits.tsx +4 -1
  37. package/src/refapp-links/appointment-scheduling.tsx +6 -1
  38. package/src/refapp-links/capture-vitals.tsx +4 -1
  39. package/src/refapp-links/configure-metadata.tsx +6 -1
  40. package/src/refapp-links/data-management.tsx +6 -1
  41. package/src/refapp-links/reports.tsx +6 -1
  42. package/src/refapp-links/system-administration.tsx +4 -3
  43. package/src/root.component.tsx +5 -7
  44. package/src/root.scss +0 -1
  45. package/src/{root.component.test.tsx → root.test.tsx} +2 -5
  46. package/translations/en.json +7 -10
  47. package/babel.config.json +0 -10
  48. package/dist/212.openmrs-esm-home-app.js +0 -2
  49. package/dist/212.openmrs-esm-home-app.js.map +0 -1
  50. package/dist/314.openmrs-esm-home-app.js +0 -2
  51. package/dist/314.openmrs-esm-home-app.js.map +0 -1
  52. package/dist/347.openmrs-esm-home-app.js +0 -2
  53. package/dist/347.openmrs-esm-home-app.js.map +0 -1
  54. package/dist/410.openmrs-esm-home-app.js +0 -2
  55. package/dist/410.openmrs-esm-home-app.js.map +0 -1
  56. package/dist/574.openmrs-esm-home-app.js +0 -1
  57. package/dist/663.openmrs-esm-home-app.js +0 -2
  58. package/dist/663.openmrs-esm-home-app.js.map +0 -1
  59. package/dist/779.openmrs-esm-home-app.js +0 -2
  60. package/dist/779.openmrs-esm-home-app.js.map +0 -1
  61. package/dist/898.openmrs-esm-home-app.js +0 -2
  62. package/dist/898.openmrs-esm-home-app.js.map +0 -1
  63. package/dist/990.openmrs-esm-home-app.js +0 -2
  64. package/dist/990.openmrs-esm-home-app.js.map +0 -1
  65. package/dist/openmrs-esm-home-app.js.map +0 -1
  66. package/src/assets/placeholder.png +0 -0
@@ -0,0 +1 @@
1
+ var _openmrs_esm_home_app;(()=>{"use strict";var e,r,t,n,o,a,i,l,s,u,p,f,d,h,c={961:(e,r,t)=>{var n={"./start":()=>t.e(354).then((()=>()=>t(354)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},m={};function v(e){var r=m[e];if(void 0!==r)return r.exports;var t=m[e]={id:e,loaded:!1,exports:{}};return c[e](t,t.exports,v),t.loaded=!0,t.exports}v.m=c,v.c=m,v.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return v.d(r,{a:r}),r},v.d=(e,r)=>{for(var t in r)v.o(r,t)&&!v.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},v.f={},v.e=e=>Promise.all(Object.keys(v.f).reduce(((r,t)=>(v.f[t](e,r),r)),[])),v.u=e=>e+".js",v.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),v.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@openmrs/esm-home-app:",v.l=(t,n,o,a)=>{if(e[t])e[t].push(n);else{var i,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var p=s[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){i=p;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,v.nc&&i.setAttribute("nonce",v.nc),i.setAttribute("data-webpack",r+o),i.src=t),e[t]=[n];var f=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},v.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},v.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{v.S={};var e={},r={};v.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];v.o(v.S,t)||(v.S[t]={});var a=v.S[t],i="@openmrs/esm-home-app",l=(e,r,t,n)=>{var o=a[e]=a[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:i>l.from))&&(o[r]={get:t,from:i,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","4.0.0-pre.1",(()=>Promise.all([v.e(858),v.e(268)]).then((()=>()=>v(858))))),l("react-i18next","11.18.3",(()=>Promise.all([v.e(709),v.e(268)]).then((()=>()=>v(709))))),l("react-router-dom","6.3.0",(()=>Promise.all([v.e(97),v.e(268)]).then((()=>()=>v(97))))),l("react","18.2.0",(()=>v.e(784).then((()=>()=>v(784)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;v.g.importScripts&&(e=v.g.location+"");var r=v.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");t.length&&(e=t[t.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),v.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var o=e[n],a=(typeof o)[0];if(n>=r.length)return"u"==a;var i=r[n],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&o!=i)return o<i;n++}},o=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,t+="u"==(typeof(l=e[a]))[0]?"-":(n>0?".":"")+(n=2,l);return t}var i=[];for(a=1;a<e.length;a++){var l=e[a];i.push(0===l?"not("+s()+")":1===l?"("+s()+" || "+s()+")":2===l?i.pop()+" "+i.pop():o(l))}return s();function s(){return i.pop().replace(/^\((.+)\)$/,"$1")}},a=(e,r)=>{if(0 in e){r=t(r);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,l=1,s=!0;;l++,i++){var u,p,f=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(p=(typeof(u=r[i]))[0]))return!s||("u"==f?l>n&&!o:""==f!=o);if("u"==p){if(!s||"u"!=f)return!1}else if(s)if(f==p)if(l<=n){if(u!=e[l])return!1}else{if(o?u>e[l]:u<e[l])return!1;u!=e[l]&&(s=!1)}else if("s"!=f&&"n"!=f){if(o||l<=n)return!1;s=!1,l--}else{if(l<=n||p<f!=o)return!1;s=!1}else"s"!=f&&"n"!=f&&(s=!1,l--)}}var d=[],h=d.pop.bind(d);for(i=1;i<e.length;i++){var c=e[i];d.push(1==c?h()|h():2==c?h()&h():c?a(c,r):!h())}return!!h()},i=(e,r)=>{var t=e[r];return Object.keys(t).reduce(((e,r)=>!e||!t[e].loaded&&n(e,r)?r:e),0)},l=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+o(n)+")",s=(e,r,t,n)=>{var o=i(e,t);return a(n,o)||"undefined"!=typeof console&&console.warn&&console.warn(l(e,t,o,n)),u(e[t][o])},u=e=>(e.loaded=1,e.get()),p=(e=>function(r,t,n,o){var a=v.I(r);return a&&a.then?a.then(e.bind(e,r,v.S[r],t,n,o)):e(0,v.S[r],t,n,o)})(((e,r,t,n,o)=>r&&v.o(r,t)?s(r,0,t,n):o())),f={},d={268:()=>p("default","react",[1,18],(()=>v.e(784).then((()=>()=>v(784))))),335:()=>p("default","@openmrs/esm-framework",[0,4,"x",,"pre"],(()=>Promise.all([v.e(858),v.e(268)]).then((()=>()=>v(858))))),228:()=>p("default","react-router-dom",[1,6],(()=>v.e(97).then((()=>()=>v(97))))),924:()=>p("default","react-i18next",[1,11],(()=>v.e(709).then((()=>()=>v(709)))))},h={54:[228],268:[268],354:[335],924:[924]},v.f.consumes=(e,r)=>{v.o(h,e)&&h[e].forEach((e=>{if(v.o(f,e))return r.push(f[e]);var t=r=>{f[e]=0,v.m[e]=t=>{delete v.c[e],t.exports=r()}},n=r=>{delete f[e],v.m[e]=t=>{throw delete v.c[e],r}};try{var o=d[e]();o.then?r.push(f[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}))},(()=>{var e={177:0};v.f.j=(r,t)=>{var n=v.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^(268|924)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=v.p+v.u(r),i=new Error;v.l(a,(t=>{if(v.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,l]=t,s=0;if(a.some((r=>0!==e[r]))){for(n in i)v.o(i,n)&&(v.m[n]=i[n]);l&&l(v)}for(r&&r(t);s<a.length;s++)o=a[s],v.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),v.nc=void 0;var g=v(961);_openmrs_esm_home_app=g})();
@@ -0,0 +1,32 @@
1
+ {
2
+ "transform": {
3
+ "^.+\\.tsx?$": "@swc/jest"
4
+ },
5
+ "transformIgnorePatterns": ["/node_modules/(?!@openmrs)"],
6
+ "moduleNameMapper": {
7
+ "\\.(s?css)$": "identity-obj-proxy",
8
+ "^lodash-es/(.*)$": "lodash/$1",
9
+ "@openmrs/esm-framework": "@openmrs/esm-framework/mock",
10
+ "react-i18next": "<rootDir>/__mocks__/react-i18next.mock.js"
11
+ },
12
+ "collectCoverageFrom": [
13
+ "**/src/**/*.tsx",
14
+ "!**/node_modules/**",
15
+ "!**/vendor/**",
16
+ "!**/src/**/*.test.*",
17
+ "!**/src/declarations.d.tsx"
18
+ ],
19
+ "coverageThreshold": {
20
+ "global": {
21
+ "statements": 8,
22
+ "branches": 5,
23
+ "functions": 7,
24
+ "lines": 8
25
+ }
26
+ },
27
+ "setupFilesAfterEnv": ["<rootDir>/setupTests.ts"],
28
+ "testEnvironment": "jsdom",
29
+ "testEnvironmentOptions": {
30
+ "url": "http://localhost/"
31
+ }
32
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-home-app",
3
- "version": "3.1.1",
3
+ "version": "3.1.2-pre.103",
4
4
  "description": "Homepage microfrontend for the OpenMRS SPA",
5
5
  "browser": "dist/openmrs-esm-home-app.js",
6
6
  "main": "src/index.ts",
@@ -13,8 +13,10 @@
13
13
  "build": "webpack --mode production",
14
14
  "analyze": "webpack --mode=production --env.analyze=true",
15
15
  "lint": "eslint src --ext tsx",
16
+ "test": "jest --config jest.config.json --verbose false --passWithNoTests",
17
+ "test-watch": "jest --watch --config jest.config.json",
16
18
  "typescript": "tsc",
17
- "extract-translations": "i18next 'src/**/*.component.tsx'"
19
+ "extract-translations": "i18next 'src/**/*.{component.tsx,tsx}'"
18
20
  },
19
21
  "browserslist": [
20
22
  "extends browserslist-config-openmrs"
@@ -38,19 +40,15 @@
38
40
  "url": "https://github.com/openmrs/openmrs-esm-home/issues"
39
41
  },
40
42
  "dependencies": {
41
- "@carbon/icons-react": "^10.18.0",
42
- "carbon-components-react": "^7.25.0",
43
43
  "lodash-es": "^4.17.15"
44
44
  },
45
45
  "peerDependencies": {
46
- "@openmrs/esm-framework": "3.x",
47
- "carbon-components": "10.x",
48
- "carbon-icons": "7.x",
46
+ "@openmrs/esm-framework": ">=4.x-pre",
49
47
  "dayjs": "1.x",
50
- "react": "16.x",
48
+ "react": "18.x",
51
49
  "react-i18next": "11.x",
52
- "react-router-dom": "5.x",
50
+ "react-router-dom": "6.x",
53
51
  "rxjs": "6.x"
54
52
  },
55
- "gitHead": "801099121a0bd4d29ef8f759289b14c6691f1dd5"
53
+ "gitHead": "eb0e6b4f7de22c8697201455242928d700e7916f"
56
54
  }
package/setupTests.ts ADDED
@@ -0,0 +1,13 @@
1
+ import '@testing-library/jest-dom/extend-expect';
2
+
3
+ declare global {
4
+ interface Window {
5
+ openmrsBase: string;
6
+ spaBase: string;
7
+ }
8
+ }
9
+
10
+ window.openmrsBase = '/openmrs';
11
+ window.spaBase = '/spa';
12
+ window.getOpenmrsSpaBase = () => '/openmrs/spa/';
13
+ window.HTMLElement.prototype.scrollIntoView = jest.fn();
@@ -1,40 +1,28 @@
1
1
  import React from 'react';
2
- import { match } from 'react-router-dom';
3
- import { useTranslation } from 'react-i18next';
4
2
  import { useConfig, ExtensionSlot, Extension } from '@openmrs/esm-framework';
5
3
  import DashboardButton from '../dashboard-button/dashboard-button.component';
6
- import styles from './home-dashboard.component.css';
4
+ import styles from './home-dashboard.css';
7
5
 
8
- export interface HomeDashboardProps {
9
- match: match;
10
- canSearch: boolean;
11
- }
12
-
13
- export default function HomeDashboard({ match, canSearch }: HomeDashboardProps) {
6
+ export default function HomeDashboard() {
14
7
  const config = useConfig();
15
- const { t } = useTranslation();
16
8
 
17
9
  return (
18
10
  <>
19
11
  <div className={styles.homeDashboard}>
20
12
  <section className={styles.mainSection}>
21
- {config.buttons.enabled && (
22
- <div className={styles.buttonArea}>
23
- <ExtensionSlot extensionSlotName="homepage-dashboard-slot">
24
- <div className={styles.homeButton}>
25
- <Extension />
26
- </div>
27
- </ExtensionSlot>
28
- {config.buttons.list.map((def) => (
29
- <DashboardButton {...def} key={def.label} />
30
- ))}
31
- </div>
32
- )}
33
- {config.widgets.enabled && (
34
- <div className={styles.widgetsArea}>
35
- <ExtensionSlot extensionSlotName="homepage-widgets-slot" />
36
- </div>
37
- )}
13
+ <div className={styles.buttonArea}>
14
+ <ExtensionSlot extensionSlotName="homepage-dashboard-slot">
15
+ <div className={styles.homeButton}>
16
+ <Extension />
17
+ </div>
18
+ </ExtensionSlot>
19
+ {config.buttons.list.map((def) => (
20
+ <DashboardButton {...def} key={def.label} />
21
+ ))}
22
+ </div>
23
+ <div className={styles.widgetsArea}>
24
+ <ExtensionSlot extensionSlotName="homepage-widgets-slot" />
25
+ </div>
38
26
  </section>
39
27
  </div>
40
28
  <section className={styles.logoSection}>
@@ -1,22 +1,18 @@
1
1
  import React from 'react';
2
- import '@testing-library/jest-dom';
3
- import { fireEvent } from '@testing-library/react';
4
- import { useConfig as mockUseConfig, UserHasAccess as mockUserHasAccessReact } from '@openmrs/esm-framework';
2
+ import { screen } from '@testing-library/react';
3
+ import { useConfig, UserHasAccess } from '@openmrs/esm-framework';
5
4
  import HomeDashboard from './home-dashboard.component';
6
5
  import renderWithRouter from '../helpers/render-with-router';
7
6
 
8
- const match = { params: { id: 1 }, isExact: true, path: '', url: '' };
7
+ const mockedUseConfig = useConfig as jest.Mock;
8
+ const mockedUserHasAccess = UserHasAccess as jest.Mock;
9
9
 
10
- function renderHome() {
11
- return renderWithRouter(<HomeDashboard match={match} canSearch />);
10
+ function renderHomeDashboard() {
11
+ return renderWithRouter(<HomeDashboard />);
12
12
  }
13
13
 
14
- it('renders without failing', () => {
15
- renderHome();
16
- });
17
-
18
14
  it('renders buttons declared in config', () => {
19
- (mockUseConfig as jest.MockedFunction<any>).mockReturnValue({
15
+ mockedUseConfig.mockReturnValue({
20
16
  buttons: {
21
17
  enabled: true,
22
18
  list: [
@@ -27,20 +23,22 @@ it('renders buttons declared in config', () => {
27
23
  ],
28
24
  },
29
25
  });
30
- const { getByText } = renderHome();
31
- const fooButton = getByText('Foo');
32
- expect(fooButton).not.toBeNull();
26
+
27
+ renderHomeDashboard();
28
+
29
+ expect(screen.getByRole('link', { name: /Foo/i })).toBeInTheDocument();
33
30
  });
34
31
 
35
32
  it('renders selectively based on privileges', () => {
36
- (mockUserHasAccessReact as any).mockImplementation((props) => {
33
+ mockedUserHasAccess.mockImplementation((props) => {
37
34
  if (['View Patients', 'Can Foo'].includes(props.privilege)) {
38
35
  return props.children;
39
36
  } else {
40
37
  return null;
41
38
  }
42
39
  });
43
- (mockUseConfig as jest.MockedFunction<any>).mockReturnValue({
40
+
41
+ mockedUseConfig.mockReturnValue({
44
42
  buttons: {
45
43
  enabled: true,
46
44
  list: [
@@ -57,7 +55,9 @@ it('renders selectively based on privileges', () => {
57
55
  ],
58
56
  },
59
57
  });
60
- const { queryByText } = renderHome();
61
- expect(queryByText('Foo')).not.toBeNull();
62
- expect(queryByText('Bar')).toBe(null);
58
+
59
+ renderHomeDashboard();
60
+
61
+ expect(screen.getByRole('link', { name: /Foo/i })).toBeInTheDocument();
62
+ expect(screen.queryByRole('link', { name: /Bar/i })).not.toBeInTheDocument();
63
63
  });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink, UserHasAccess } from '@openmrs/esm-framework';
3
- import styles from './dashboard-button.component.css';
3
+ import styles from './dashboard-button.css';
4
4
 
5
5
  export interface DashboardButtonProps {
6
6
  label: string;
@@ -1,18 +1,15 @@
1
1
  import React from 'react';
2
- import { Router } from 'react-router-dom';
2
+ import { MemoryRouter, Router } from 'react-router-dom';
3
3
  import { createMemoryHistory } from 'history';
4
4
  import { render } from '@testing-library/react';
5
5
 
6
6
  export default function renderWithRouter(
7
7
  ui,
8
- {
9
- route = '/',
10
- history = createMemoryHistory({ initialEntries: [route] }),
11
- match = { params: {}, isExact: true, path: '', url: '' },
12
- } = {},
8
+ { route = '/', match = { params: {}, isExact: true, path: '', url: '' } } = {},
13
9
  ) {
10
+ const history = createMemoryHistory({ initialEntries: [route] });
14
11
  return {
15
- ...render(<Router history={history}>{ui}</Router>),
12
+ ...render(<MemoryRouter>{ui}</MemoryRouter>),
16
13
  history,
17
14
  match,
18
15
  };
package/src/index.ts CHANGED
@@ -41,7 +41,6 @@ function setupOpenMRS() {
41
41
  extensions: [
42
42
  {
43
43
  id: 'active-visits-link',
44
- slot: 'app-menu-slot',
45
44
  load: getAsyncLifecycle(() => import('./refapp-links/active-visits'), options),
46
45
  privilege: 'App: coreapps.activeVisits',
47
46
  online: true,
@@ -49,7 +48,6 @@ function setupOpenMRS() {
49
48
  },
50
49
  {
51
50
  id: 'capture-vitals-link',
52
- slot: 'app-menu-slot',
53
51
  load: getAsyncLifecycle(() => import('./refapp-links/capture-vitals'), options),
54
52
  privilege: 'App: referenceapplication.vitals',
55
53
  online: true,
@@ -57,7 +55,6 @@ function setupOpenMRS() {
57
55
  },
58
56
  {
59
57
  id: 'appointment-scheduling-link',
60
- slot: 'app-menu-slot',
61
58
  load: getAsyncLifecycle(() => import('./refapp-links/appointment-scheduling'), options),
62
59
  privilege: 'App: appointmentschedulingui.home',
63
60
  online: true,
@@ -65,7 +62,6 @@ function setupOpenMRS() {
65
62
  },
66
63
  {
67
64
  id: 'reports-link',
68
- slot: 'app-menu-slot',
69
65
  load: getAsyncLifecycle(() => import('./refapp-links/reports'), options),
70
66
  privilege: 'View Reports',
71
67
  online: true,
@@ -73,7 +69,6 @@ function setupOpenMRS() {
73
69
  },
74
70
  {
75
71
  id: 'data-management-link',
76
- slot: 'app-menu-slot',
77
72
  load: getAsyncLifecycle(() => import('./refapp-links/data-management'), options),
78
73
  privilege: 'App: coreapps.dataManagement',
79
74
  online: true,
@@ -81,7 +76,6 @@ function setupOpenMRS() {
81
76
  },
82
77
  {
83
78
  id: 'configure-metadata-link',
84
- slot: 'app-menu-slot',
85
79
  load: getAsyncLifecycle(() => import('./refapp-links/configure-metadata'), options),
86
80
  privilege: 'App: coreapps.configuremetadata',
87
81
  online: true,
@@ -34,11 +34,4 @@ export const esmHomeSchema = {
34
34
  _validators: [validators.isUrlWithTemplateParameters(['patientUuid'])],
35
35
  },
36
36
  },
37
- widgets: {
38
- enabled: {
39
- _type: Type.Boolean,
40
- _default: true,
41
- _description: 'Whether to show widgets on the home page (including extensions)',
42
- },
43
- },
44
37
  };
@@ -1,10 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function ActiveVisits() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
9
  <ConfigurableLink to="${openmrsBase}/coreapps/activeVisits.page?app=coreapps.activeVisits">
7
- Active Visits
10
+ {t('activeVisits', 'Active Visits')}
8
11
  </ConfigurableLink>
9
12
  );
10
13
  }
@@ -1,8 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function AppointmentScheduling() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
- <ConfigurableLink to="${openmrsBase}/appointmentschedulingui/home.page">Appointment Scheduling</ConfigurableLink>
9
+ <ConfigurableLink to="${openmrsBase}/appointmentschedulingui/home.page">
10
+ {t('appointmentScheduling', 'Appointment Scheduling')}
11
+ </ConfigurableLink>
7
12
  );
8
13
  }
@@ -1,10 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function CaptureVitals() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
9
  <ConfigurableLink to="${openmrsBase}/coreapps/findpatient/findPatient.page?app=referenceapplication.vitals">
7
- Capture Vitals
10
+ {t('captureVitals', 'Capture Vitals')}
8
11
  </ConfigurableLink>
9
12
  );
10
13
  }
@@ -1,8 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function ConfigureMetadata() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
- <ConfigurableLink to="${openmrsBase}/adminui/metadata/configureMetadata.page">Configure Metadata</ConfigurableLink>
9
+ <ConfigurableLink to="${openmrsBase}/adminui/metadata/configureMetadata.page">
10
+ {t('configureMetadata', 'Configure Metadata')}
11
+ </ConfigurableLink>
7
12
  );
8
13
  }
@@ -1,8 +1,13 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function DataManagement() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
- <ConfigurableLink to="${openmrsBase}/coreapps/datamanagement/dataManagement.page">Data Management</ConfigurableLink>
9
+ <ConfigurableLink to="${openmrsBase}/coreapps/datamanagement/dataManagement.page">
10
+ {t('dataManagement', 'Data Management')}
11
+ </ConfigurableLink>
7
12
  );
8
13
  }
@@ -1,6 +1,11 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function Reports() {
5
- return <ConfigurableLink to="${openmrsBase}/reportingui/reportsapp/home.page">Reports</ConfigurableLink>;
6
+ const { t } = useTranslation();
7
+
8
+ return (
9
+ <ConfigurableLink to="${openmrsBase}/reportingui/reportsapp/home.page">{t('reports', 'Reports')}</ConfigurableLink>
10
+ );
6
11
  }
@@ -1,10 +1,11 @@
1
1
  import React from 'react';
2
2
  import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { useTranslation } from 'react-i18next';
3
4
 
4
5
  export default function SystemAdministration() {
6
+ const { t } = useTranslation();
7
+
5
8
  return (
6
- <ConfigurableLink to="${openmrsBase}/coreapps/systemadministration/systemAdministration.page">
7
- System Administration
8
- </ConfigurableLink>
9
+ <ConfigurableLink to="${openmrsBase}/admin">{t('systemAdministration', 'System Administration')}</ConfigurableLink>
9
10
  );
10
11
  }
@@ -1,15 +1,13 @@
1
1
  import React from 'react';
2
- import { BrowserRouter, Redirect, Route } from 'react-router-dom';
2
+ import { BrowserRouter, Route, Routes } from 'react-router-dom';
3
3
  import HomeDashboard from './dashboard/home-dashboard.component';
4
4
 
5
- interface RootProps {
6
- canSearch: boolean;
7
- }
8
-
9
- const Root: React.FC<RootProps> = ({ canSearch = true }) => (
5
+ const Root: React.FC = () => (
10
6
  <BrowserRouter basename={window.spaBase}>
11
7
  <main className="omrs-main-content">
12
- <Route path="/home" exact component={(props) => <HomeDashboard canSearch={canSearch} {...props} />} />
8
+ <Routes>
9
+ <Route path="/home" element={<HomeDashboard />} />
10
+ </Routes>
13
11
  </main>
14
12
  </BrowserRouter>
15
13
  );
package/src/root.scss CHANGED
@@ -1 +0,0 @@
1
- @import "carbon-components/scss/globals/scss/typography.scss";
@@ -1,14 +1,11 @@
1
1
  import React from 'react';
2
- import { render, cleanup } from '@testing-library/react';
2
+ import { render } from '@testing-library/react';
3
3
  import Root from './root.component';
4
4
 
5
- afterAll(cleanup);
6
-
7
5
  window.spaBase = '/';
8
6
 
9
7
  describe(`<Root />`, () => {
10
- afterEach(cleanup);
11
8
  it(`renders without dying`, () => {
12
- const wrapper = render(<Root canSearch />);
9
+ render(<Root />);
13
10
  });
14
11
  });
@@ -1,12 +1,9 @@
1
1
  {
2
- "containing": "containing",
3
- "found": "Found",
4
- "noPatientChartsFoundMessage": "Sorry, no patient charts have been found",
5
- "orPatientName": "OR the patient's name(s)",
6
- "patient": "patient",
7
- "patientSearchPrompt": "Search for patient",
8
- "patientSearchText": "Search by patient name OR identifier",
9
- "searchAgain": "Search Again",
10
- "searchResultsFor": "Search results for:",
11
- "trySearchWithPatientUniqueID": "Try searching with the patient's unique ID number"
2
+ "activeVisits": "Active Visits",
3
+ "appointmentScheduling": "Appointment Scheduling",
4
+ "captureVitals": "Capture Vitals",
5
+ "configureMetadata": "Configure Metadata",
6
+ "dataManagement": "Data Management",
7
+ "reports": "Reports",
8
+ "systemAdministration": "System Administration"
12
9
  }
package/babel.config.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "presets": [
3
- "@babel/preset-env",
4
- "@babel/preset-react",
5
- "@babel/preset-typescript"
6
- ],
7
- "plugins": [
8
- "@babel/plugin-proposal-class-properties"
9
- ]
10
- }
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[212],{212:(e,a,n)=>{n.r(a),n.d(a,{default:()=>m});var t=n(297),p=n(512);function m(){return t.default.createElement(p.ConfigurableLink,{to:"${openmrsBase}/coreapps/datamanagement/dataManagement.page"},"Data Management")}}}]);
2
- //# sourceMappingURL=212.openmrs-esm-home-app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"212.openmrs-esm-home-app.js","mappings":"gLAGe,SAASA,IACtB,OACE,wBAAC,EAAAC,iBAAD,CAAkBC,GAAG,8DAArB","sources":["webpack://@openmrs/esm-home-app/./src/refapp-links/data-management.tsx"],"sourcesContent":["import React from 'react';\nimport { ConfigurableLink } from '@openmrs/esm-framework';\n\nexport default function DataManagement() {\n return (\n <ConfigurableLink to=\"${openmrsBase}/coreapps/datamanagement/dataManagement.page\">Data Management</ConfigurableLink>\n );\n}\n"],"names":["DataManagement","ConfigurableLink","to"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[314],{314:(e,s,p)=>{p.r(s),p.d(s,{default:()=>i});var a=p(297),t=p(512);function i(){return a.default.createElement(t.ConfigurableLink,{to:"${openmrsBase}/coreapps/activeVisits.page?app=coreapps.activeVisits"},"Active Visits")}}}]);
2
- //# sourceMappingURL=314.openmrs-esm-home-app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"314.openmrs-esm-home-app.js","mappings":"gLAGe,SAASA,IACtB,OACE,wBAAC,EAAAC,iBAAD,CAAkBC,GAAG,uEAArB","sources":["webpack://@openmrs/esm-home-app/./src/refapp-links/active-visits.tsx"],"sourcesContent":["import React from 'react';\nimport { ConfigurableLink } from '@openmrs/esm-framework';\n\nexport default function ActiveVisits() {\n return (\n <ConfigurableLink to=\"${openmrsBase}/coreapps/activeVisits.page?app=coreapps.activeVisits\">\n Active Visits\n </ConfigurableLink>\n );\n}\n"],"names":["ActiveVisits","ConfigurableLink","to"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[347],{347:(e,a,p)=>{p.r(a),p.d(a,{default:()=>r});var n=p(297),t=p(512);function r(){return n.default.createElement(t.ConfigurableLink,{to:"${openmrsBase}/coreapps/findpatient/findPatient.page?app=referenceapplication.vitals"},"Capture Vitals")}}}]);
2
- //# sourceMappingURL=347.openmrs-esm-home-app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"347.openmrs-esm-home-app.js","mappings":"gLAGe,SAASA,IACtB,OACE,wBAAC,EAAAC,iBAAD,CAAkBC,GAAG,wFAArB","sources":["webpack://@openmrs/esm-home-app/./src/refapp-links/capture-vitals.tsx"],"sourcesContent":["import React from 'react';\nimport { ConfigurableLink } from '@openmrs/esm-framework';\n\nexport default function CaptureVitals() {\n return (\n <ConfigurableLink to=\"${openmrsBase}/coreapps/findpatient/findPatient.page?app=referenceapplication.vitals\">\n Capture Vitals\n </ConfigurableLink>\n );\n}\n"],"names":["CaptureVitals","ConfigurableLink","to"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[410],{410:(e,p,r)=>{r.r(p),r.d(p,{default:()=>n});var s=r(297),a=r(512);function n(){return s.default.createElement(a.ConfigurableLink,{to:"${openmrsBase}/reportingui/reportsapp/home.page"},"Reports")}}}]);
2
- //# sourceMappingURL=410.openmrs-esm-home-app.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"410.openmrs-esm-home-app.js","mappings":"gLAGe,SAASA,IACtB,OAAO,wBAAC,EAAAC,iBAAD,CAAkBC,GAAG,mDAArB","sources":["webpack://@openmrs/esm-home-app/./src/refapp-links/reports.tsx"],"sourcesContent":["import React from 'react';\nimport { ConfigurableLink } from '@openmrs/esm-framework';\n\nexport default function Reports() {\n return <ConfigurableLink to=\"${openmrsBase}/reportingui/reportsapp/home.page\">Reports</ConfigurableLink>;\n}\n"],"names":["Reports","ConfigurableLink","to"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[574],{574:e=>{e.exports=JSON.parse('{"containing":"containing","found":"Found","noPatientChartsFoundMessage":"Sorry, no patient charts have been found","orPatientName":"OR the patient\'s name(s)","patient":"patient","patientSearchPrompt":"Search for patient","patientSearchText":"Search by patient name OR identifier","searchAgain":"Search Again","searchResultsFor":"Search results for:","trySearchWithPatientUniqueID":"Try searching with the patient\'s unique ID number"}')}}]);
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_home_app=self.webpackChunk_openmrs_esm_home_app||[]).push([[663],{663:(n,e,t)=>{t.r(e),t.d(e,{default:()=>f});var o=t(297),a=t(146),r=t(789),i=t(512),s=t(62),m=t.n(s),c=t(598);m()(c.Z,{insert:"head",singleton:!1});const d=c.Z.locals||{};function l(n){const e=`omrs-link omrs-filled-neutral ${d.link}`,t=o.default.createElement("div",{className:d.textContainer},n.label),a=o.default.createElement(i.ConfigurableLink,{className:e,to:n.link},t);return n.requiredPrivilege?o.default.createElement(i.UserHasAccess,{privilege:n.requiredPrivilege},a):a}var h=t(221);m()(h.Z,{insert:"head",singleton:!1});const A=h.Z.locals||{};function u(){return(u=Object.assign||function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o])}return n}).apply(this,arguments)}function b({match:n,canSearch:e}){const t=(0,i.useConfig)(),{t:a}=(0,r.useTranslation)();return o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:A.homeDashboard},o.default.createElement("section",{className:A.mainSection},t.buttons.enabled&&o.default.createElement("div",{className:A.buttonArea},o.default.createElement(i.ExtensionSlot,{extensionSlotName:"homepage-dashboard-slot"},o.default.createElement("div",{className:A.homeButton},o.default.createElement(i.Extension,null))),t.buttons.list.map((n=>o.default.createElement(l,u({},n,{key:n.label}))))),t.widgets.enabled&&o.default.createElement("div",{className:A.widgetsArea},o.default.createElement(i.ExtensionSlot,{extensionSlotName:"homepage-widgets-slot"})))),o.default.createElement("section",{className:A.logoSection},o.default.createElement("svg",null,o.default.createElement("use",{xlinkHref:"#omrs-logo-full-mono"}))))}function _(){return(_=Object.assign||function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(n[o]=t[o])}return n}).apply(this,arguments)}const f=({canSearch:n=!0})=>o.default.createElement(a.BrowserRouter,{basename:window.spaBase},o.default.createElement("main",{className:"omrs-main-content"},o.default.createElement(a.Route,{path:"/home",exact:!0,component:e=>o.default.createElement(b,_({canSearch:n},e))})))},598:(n,e,t)=>{t.d(e,{Z:()=>s});var o=t(799),a=t.n(o),r=t(609),i=t.n(r)()(a());i.push([n.id,"/* Variables defined in home-dashboard.component.css */\n\n.-esm-home__dashboard-button-component__link___1b0_U {\n height: 7rem;\n width: var(--dashboard-button-width);\n margin: var(--dashboard-button-margin);\n justify-content: center;\n}\n\n.-esm-home__dashboard-button-component__textContainer___Fp8J1 {\n display: inline-flex;\n min-width: 0;\n white-space: normal;\n line-height: 1.5;\n}\n","",{version:3,sources:["webpack://./src/dashboard-button/dashboard-button.component.css"],names:[],mappings:"AAAA,sDAAsD;;AAEtD;EACE,YAAY;EACZ,oCAAoC;EACpC,sCAAsC;EACtC,uBAAuB;AACzB;;AAEA;EACE,oBAAoB;EACpB,YAAY;EACZ,mBAAmB;EACnB,gBAAgB;AAClB",sourcesContent:["/* Variables defined in home-dashboard.component.css */\n\n.link {\n height: 7rem;\n width: var(--dashboard-button-width);\n margin: var(--dashboard-button-margin);\n justify-content: center;\n}\n\n.textContainer {\n display: inline-flex;\n min-width: 0;\n white-space: normal;\n line-height: 1.5;\n}\n"],sourceRoot:""}]),i.locals={link:"-esm-home__dashboard-button-component__link___1b0_U",textContainer:"-esm-home__dashboard-button-component__textContainer___Fp8J1"};const s=i},221:(n,e,t)=>{t.d(e,{Z:()=>s});var o=t(799),a=t.n(o),r=t(609),i=t.n(r)()(a());i.push([n.id,":root {\n --dashboard-button-width: 10rem;\n --dashboard-button-margin: 0.25rem;\n}\n\n.-esm-home__home-dashboard-component__homeDashboard___3mnwW {\n display: flex;\n justify-content: center;\n margin: 0 auto;\n}\n\n.omrs-breakpoint-gt-phone .-esm-home__home-dashboard-component__homeDashboard___3mnwW {\n height: calc(100vh - var(--omrs-topnav-height) - 10rem);\n}\n\n.-esm-home__home-dashboard-component__mainSection___rph1T {\n min-height: 1vh;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-content: flex-start;\n flex-grow: 1;\n}\n\n.-esm-home__home-dashboard-component__searchLinkArea___3dQ9C {\n display: flex;\n flex-basis: 100%;\n justify-content: center;\n margin: 2rem auto;\n}\n\n.-esm-home__home-dashboard-component__buttonArea___1X1xb > div {\n min-height: 1vh;\n display: flex;\n flex-wrap: wrap;\n justify-content: left;\n align-items: center;\n flex-grow: 1;\n}\n\n.-esm-home__home-dashboard-component__label___1aL1c {\n color: var(--omrs-color-interaction);\n margin-left: 0.25rem;\n text-align: center;\n}\n\n.-esm-home__home-dashboard-component__logoSection___3boSj {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}\n\n.-esm-home__home-dashboard-component__break___2J1JH {\n height: 0;\n flex-basis: 100%;\n}\n\n.omrs-breakpoint-lt-tablet .-esm-home__home-dashboard-component__dashboardLink___3mwkQ {\n width: 80%;\n}\n\n.omrs-breakpoint-gt-phone .-esm-home__home-dashboard-component__dashboardLink___3mwkQ {\n width: 22rem;\n}\n\n.omrs-breakpoint-lt-tablet .-esm-home__home-dashboard-component__buttonArea___1X1xb {\n max-width: calc(\n var(--dashboard-button-width) * 2 + var(--dashboard-button-margin) * 4\n );\n}\n\n.omrs-breakpoint-gt-phone .-esm-home__home-dashboard-component__buttonArea___1X1xb {\n max-width: calc(\n var(--dashboard-button-width) * 3 + var(--dashboard-button-margin) * 6\n );\n}\n\n.omrs-breakpoint-gt-tablet .-esm-home__home-dashboard-component__buttonArea___1X1xb {\n max-width: calc(\n var(--dashboard-button-width) * 4 + var(--dashboard-button-margin) * 8\n );\n}\n\n.-esm-home__home-dashboard-component__homeButton___YfZfF a {\n height: 7rem;\n width: var(--dashboard-button-width);\n margin: var(--dashboard-button-margin);\n justify-content: center;\n white-space: normal;\n}\n\n.-esm-home__home-dashboard-component__widgetsArea___11xrt {\n margin-top: 2rem;\n padding: 0 1rem;\n width: 100%;\n}","",{version:3,sources:["webpack://./src/dashboard/home-dashboard.component.css"],names:[],mappings:"AAAA;EACE,+BAA+B;EAC/B,kCAAkC;AACpC;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,cAAc;AAChB;;AAEA;EACE,uDAAuD;AACzD;;AAEA;EACE,eAAe;EACf,aAAa;EACb,eAAe;EACf,uBAAuB;EACvB,yBAAyB;EACzB,YAAY;AACd;;AAEA;EACE,aAAa;EACb,gBAAgB;EAChB,uBAAuB;EACvB,iBAAiB;AACnB;;AAEA;EACE,eAAe;EACf,aAAa;EACb,eAAe;EACf,qBAAqB;EACrB,mBAAmB;EACnB,YAAY;AACd;;AAEA;EACE,oCAAoC;EACpC,oBAAoB;EACpB,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;AACd;;AAEA;EACE,SAAS;EACT,gBAAgB;AAClB;;AAEA;EACE,UAAU;AACZ;;AAEA;EACE,YAAY;AACd;;AAEA;EACE;;GAEC;AACH;;AAEA;EACE;;GAEC;AACH;;AAEA;EACE;;GAEC;AACH;;AAEA;EACE,YAAY;EACZ,oCAAoC;EACpC,sCAAsC;EACtC,uBAAuB;EACvB,mBAAmB;AACrB;;AAEA;EACE,gBAAgB;EAChB,eAAe;EACf,WAAW;AACb",sourcesContent:[":root {\n --dashboard-button-width: 10rem;\n --dashboard-button-margin: 0.25rem;\n}\n\n.homeDashboard {\n display: flex;\n justify-content: center;\n margin: 0 auto;\n}\n\n:global(.omrs-breakpoint-gt-phone) .homeDashboard {\n height: calc(100vh - var(--omrs-topnav-height) - 10rem);\n}\n\n.mainSection {\n min-height: 1vh;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n align-content: flex-start;\n flex-grow: 1;\n}\n\n.searchLinkArea {\n display: flex;\n flex-basis: 100%;\n justify-content: center;\n margin: 2rem auto;\n}\n\n.buttonArea > div {\n min-height: 1vh;\n display: flex;\n flex-wrap: wrap;\n justify-content: left;\n align-items: center;\n flex-grow: 1;\n}\n\n.label {\n color: var(--omrs-color-interaction);\n margin-left: 0.25rem;\n text-align: center;\n}\n\n.logoSection {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n}\n\n.break {\n height: 0;\n flex-basis: 100%;\n}\n\n:global(.omrs-breakpoint-lt-tablet) .dashboardLink {\n width: 80%;\n}\n\n:global(.omrs-breakpoint-gt-phone) .dashboardLink {\n width: 22rem;\n}\n\n:global(.omrs-breakpoint-lt-tablet) .buttonArea {\n max-width: calc(\n var(--dashboard-button-width) * 2 + var(--dashboard-button-margin) * 4\n );\n}\n\n:global(.omrs-breakpoint-gt-phone) .buttonArea {\n max-width: calc(\n var(--dashboard-button-width) * 3 + var(--dashboard-button-margin) * 6\n );\n}\n\n:global(.omrs-breakpoint-gt-tablet) .buttonArea {\n max-width: calc(\n var(--dashboard-button-width) * 4 + var(--dashboard-button-margin) * 8\n );\n}\n\n.homeButton a {\n height: 7rem;\n width: var(--dashboard-button-width);\n margin: var(--dashboard-button-margin);\n justify-content: center;\n white-space: normal;\n}\n\n.widgetsArea {\n margin-top: 2rem;\n padding: 0 1rem;\n width: 100%;\n}"],sourceRoot:""}]),i.locals={homeDashboard:"-esm-home__home-dashboard-component__homeDashboard___3mnwW",mainSection:"-esm-home__home-dashboard-component__mainSection___rph1T",searchLinkArea:"-esm-home__home-dashboard-component__searchLinkArea___3dQ9C",buttonArea:"-esm-home__home-dashboard-component__buttonArea___1X1xb",label:"-esm-home__home-dashboard-component__label___1aL1c",logoSection:"-esm-home__home-dashboard-component__logoSection___3boSj",break:"-esm-home__home-dashboard-component__break___2J1JH",dashboardLink:"-esm-home__home-dashboard-component__dashboardLink___3mwkQ",homeButton:"-esm-home__home-dashboard-component__homeButton___YfZfF",widgetsArea:"-esm-home__home-dashboard-component__widgetsArea___11xrt"};const s=i},609:n=>{n.exports=function(n){var e=[];return e.toString=function(){return this.map((function(e){var t=n(e);return e[2]?"@media ".concat(e[2]," {").concat(t,"}"):t})).join("")},e.i=function(n,t,o){"string"==typeof n&&(n=[[null,n,""]]);var a={};if(o)for(var r=0;r<this.length;r++){var i=this[r][0];null!=i&&(a[i]=!0)}for(var s=0;s<n.length;s++){var m=[].concat(n[s]);o&&a[m[0]]||(t&&(m[2]?m[2]="".concat(t," and ").concat(m[2]):m[2]=t),e.push(m))}},e}},799:n=>{function e(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,o=new Array(e);t<e;t++)o[t]=n[t];return o}n.exports=function(n){var t,o,a=(o=4,function(n){if(Array.isArray(n))return n}(t=n)||function(n,e){var t=n&&("undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"]);if(null!=t){var o,a,r=[],i=!0,s=!1;try{for(t=t.call(n);!(i=(o=t.next()).done)&&(r.push(o.value),!e||r.length!==e);i=!0);}catch(n){s=!0,a=n}finally{try{i||null==t.return||t.return()}finally{if(s)throw a}}return r}}(t,o)||function(n,t){if(n){if("string"==typeof n)return e(n,t);var o=Object.prototype.toString.call(n).slice(8,-1);return"Object"===o&&n.constructor&&(o=n.constructor.name),"Map"===o||"Set"===o?Array.from(n):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?e(n,t):void 0}}(t,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),r=a[1],i=a[3];if(!i)return r;if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(i)))),m="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),c="/*# ".concat(m," */"),d=i.sources.map((function(n){return"/*# sourceURL=".concat(i.sourceRoot||"").concat(n," */")}));return[r].concat(d).concat([c]).join("\n")}return[r].join("\n")}},62:(n,e,t)=>{var o,a=function(){var n={};return function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(n){t=null}n[e]=t}return n[e]}}(),r=[];function i(n){for(var e=-1,t=0;t<r.length;t++)if(r[t].identifier===n){e=t;break}return e}function s(n,e){for(var t={},o=[],a=0;a<n.length;a++){var s=n[a],m=e.base?s[0]+e.base:s[0],c=t[m]||0,d="".concat(m," ").concat(c);t[m]=c+1;var l=i(d),h={css:s[1],media:s[2],sourceMap:s[3]};-1!==l?(r[l].references++,r[l].updater(h)):r.push({identifier:d,updater:b(h,e),references:1}),o.push(d)}return o}function m(n){var e=document.createElement("style"),o=n.attributes||{};if(void 0===o.nonce){var r=t.nc;r&&(o.nonce=r)}if(Object.keys(o).forEach((function(n){e.setAttribute(n,o[n])})),"function"==typeof n.insert)n.insert(e);else{var i=a(n.insert||"head");if(!i)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");i.appendChild(e)}return e}var c,d=(c=[],function(n,e){return c[n]=e,c.filter(Boolean).join("\n")});function l(n,e,t,o){var a=t?"":o.media?"@media ".concat(o.media," {").concat(o.css,"}"):o.css;if(n.styleSheet)n.styleSheet.cssText=d(e,a);else{var r=document.createTextNode(a),i=n.childNodes;i[e]&&n.removeChild(i[e]),i.length?n.insertBefore(r,i[e]):n.appendChild(r)}}function h(n,e,t){var o=t.css,a=t.media,r=t.sourceMap;if(a?n.setAttribute("media",a):n.removeAttribute("media"),r&&"undefined"!=typeof btoa&&(o+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(r))))," */")),n.styleSheet)n.styleSheet.cssText=o;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(o))}}var A=null,u=0;function b(n,e){var t,o,a;if(e.singleton){var r=u++;t=A||(A=m(e)),o=l.bind(null,t,r,!1),a=l.bind(null,t,r,!0)}else t=m(e),o=h.bind(null,t,e),a=function(){!function(n){if(null===n.parentNode)return!1;n.parentNode.removeChild(n)}(t)};return o(n),function(e){if(e){if(e.css===n.css&&e.media===n.media&&e.sourceMap===n.sourceMap)return;o(n=e)}else a()}}n.exports=function(n,e){(e=e||{}).singleton||"boolean"==typeof e.singleton||(e.singleton=(void 0===o&&(o=Boolean(window&&document&&document.all&&!window.atob)),o));var t=s(n=n||[],e);return function(n){if(n=n||[],"[object Array]"===Object.prototype.toString.call(n)){for(var o=0;o<t.length;o++){var a=i(t[o]);r[a].references--}for(var m=s(n,e),c=0;c<t.length;c++){var d=i(t[c]);0===r[d].references&&(r[d].updater(),r.splice(d,1))}t=m}}}}}]);
2
- //# sourceMappingURL=663.openmrs-esm-home-app.js.map