@openmrs/esm-fast-data-entry-app 1.0.0-pre.19 → 1.0.0-pre.25

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 (58) hide show
  1. package/dist/147.js +2 -0
  2. package/dist/{737.js.LICENSE.txt → 147.js.LICENSE.txt} +0 -0
  3. package/dist/247.js +1 -0
  4. package/dist/508.js +1 -0
  5. package/dist/574.js +1 -1
  6. package/dist/595.js +1 -1
  7. package/dist/595.js.LICENSE.txt +2 -0
  8. package/dist/634.js +2 -0
  9. package/dist/{900.js.LICENSE.txt → 634.js.LICENSE.txt} +0 -0
  10. package/dist/804.js +1 -1
  11. package/dist/954.js +1 -0
  12. package/dist/openmrs-esm-fast-data-entry-app.js +1 -1
  13. package/dist/openmrs-esm-fast-data-entry-app.js.buildmanifest.json +74 -74
  14. package/dist/openmrs-esm-fast-data-entry-app.old +1 -1
  15. package/package.json +1 -1
  16. package/src/FormBootstrap.tsx +142 -0
  17. package/src/Root.tsx +11 -8
  18. package/src/context/FormWorkflowContext.tsx +40 -0
  19. package/src/context/FormWorkflowReducer.ts +38 -0
  20. package/src/empty-state/EmptyDataIllustration.tsx +51 -0
  21. package/src/empty-state/EmptyState.tsx +29 -0
  22. package/src/empty-state/styles.scss +55 -0
  23. package/src/form-entry-workflow/FormEntryWorkflow.tsx +88 -0
  24. package/src/form-entry-workflow/index.ts +3 -0
  25. package/src/form-entry-workflow/styles.scss +59 -0
  26. package/src/forms-page/FormsPage.tsx +54 -0
  27. package/src/forms-page/index.ts +3 -0
  28. package/src/forms-page/styles.scss +11 -0
  29. package/src/{forms → forms-table}/FormsTable.tsx +51 -23
  30. package/src/forms-table/index.ts +3 -0
  31. package/src/forms-table/styles.scss +20 -0
  32. package/src/hooks/index.ts +4 -0
  33. package/src/hooks/useGetAllForms.ts +31 -0
  34. package/src/{forms → hooks}/useGetPatient.ts +0 -0
  35. package/src/{forms/PatientInfo.test.tsx → patient-banner/PatientBanner.test.tsx} +3 -3
  36. package/src/{forms/PatientInfo.tsx → patient-banner/PatientBanner.tsx} +2 -2
  37. package/src/patient-banner/index.ts +3 -0
  38. package/src/{forms/patient-info.scss → patient-banner/styles.scss} +0 -0
  39. package/src/patient-card/PatientCard.tsx +51 -0
  40. package/src/patient-card/index.ts +3 -0
  41. package/src/patient-card/styles.scss +30 -0
  42. package/src/patient-search-header/PatientSearchHeader.tsx +47 -0
  43. package/src/patient-search-header/index.ts +3 -0
  44. package/src/patient-search-header/styles.scss +17 -0
  45. package/translations/en.json +13 -4
  46. package/dist/375.js +0 -1
  47. package/dist/418.js +0 -1
  48. package/dist/737.js +0 -2
  49. package/dist/900.js +0 -2
  50. package/dist/947.js +0 -1
  51. package/src/FormEntry.tsx +0 -42
  52. package/src/Loader.tsx +0 -16
  53. package/src/forms/FormWorkflow.tsx +0 -135
  54. package/src/forms/FormsRoot.tsx +0 -73
  55. package/src/forms/PatientCard.tsx +0 -37
  56. package/src/forms/mockData.ts +0 -20
  57. package/src/forms/styles.scss +0 -13
  58. package/src/loader.scss +0 -9
@@ -13,26 +13,61 @@ import {
13
13
  TableToolbarSearch,
14
14
  } from "carbon-components-react";
15
15
  import React from "react";
16
+ import { useTranslation } from "react-i18next";
16
17
  import { Link } from "react-router-dom";
18
+ import EmptyState from "../empty-state/EmptyState";
19
+ import styles from "./styles.scss";
17
20
 
18
- const formsHeader = [
19
- {
20
- key: "name",
21
- header: "Form name",
22
- },
23
- {
24
- key: "actions",
25
- header: "Actions",
26
- },
27
- ];
21
+ const FormsTable = ({ rows, error, isLoading }) => {
22
+ const { t } = useTranslation();
23
+
24
+ const formsHeader = [
25
+ {
26
+ key: "name",
27
+ header: t("formName", "Form Name"),
28
+ },
29
+ {
30
+ key: "actions",
31
+ header: t("actions", "Actions"),
32
+ },
33
+ {
34
+ key: "actions2",
35
+ header: "",
36
+ },
37
+ ];
28
38
 
29
- const FormsTable = ({ rows }) => {
30
39
  const augmenteRows = rows?.map((row) => ({
31
40
  ...row,
32
- actions: <Link to={row.uuid}>Fill Form</Link>,
41
+ actions: <Link to={row.uuid}>{t("fillForm", "Fill Form")}</Link>,
42
+ actions2: (
43
+ <Link to="#" className={styles.inactiveLink}>
44
+ {t("startGroupSession", "Start Group Session")}
45
+ </Link>
46
+ ),
33
47
  }));
34
- if (!rows || !rows?.length) {
35
- return <DataTableSkeleton />;
48
+
49
+ if (isLoading) return <DataTableSkeleton />;
50
+ if (error) {
51
+ return (
52
+ <EmptyState
53
+ headerTitle={t("errorLoadingData", "Error Loading Data")}
54
+ displayText={`${t(
55
+ "dataErrorMessage",
56
+ "Something went wrong loading data from the server."
57
+ )} "${error?.response?.status}: ${error?.response?.statusText}"`}
58
+ />
59
+ );
60
+ }
61
+ if (augmenteRows.length === 0) {
62
+ return (
63
+ <EmptyState
64
+ headerTitle={t("noFormsFound", "No Forms To Show")}
65
+ displayText={t(
66
+ "noFormsFoundMessage",
67
+ "No forms could be found for this category. Please double check the form concept uuids and access permissions."
68
+ )}
69
+ />
70
+ );
36
71
  }
37
72
  return (
38
73
  <DataTable rows={augmenteRows} headers={formsHeader} isSortable>
@@ -46,15 +81,8 @@ const FormsTable = ({ rows }) => {
46
81
  }) => {
47
82
  return (
48
83
  <TableContainer>
49
- <div
50
- style={{
51
- position: "relative",
52
- display: "flex",
53
- height: "3rem",
54
- justifyContent: "flex-end",
55
- }}
56
- >
57
- <TableToolbar style={{ width: "20%", minWidth: "200px" }}>
84
+ <div className={styles.toolbarWrapper}>
85
+ <TableToolbar className={styles.tableToolbar}>
58
86
  <TableToolbarContent>
59
87
  <TableToolbarSearch onChange={onInputChange} />
60
88
  </TableToolbarContent>
@@ -0,0 +1,3 @@
1
+ import FormsTable from "./FormsTable";
2
+
3
+ export default FormsTable;
@@ -0,0 +1,20 @@
1
+ @import "~@openmrs/esm-styleguide/src/vars";
2
+ @import "~carbon-components/src/globals/scss/vars";
3
+ @import "~carbon-components/src/globals/scss/mixins";
4
+
5
+ .toolbarWrapper {
6
+ position: relative;
7
+ display: flex;
8
+ height: $spacing-09;
9
+ justify-content: flex-end;
10
+ }
11
+
12
+ .tableToolbar {
13
+ width: 20%;
14
+ min-width: 12.5rem;
15
+ }
16
+
17
+ .inactiveLink {
18
+ color: $carbon--gray-40;
19
+ cursor: not-allowed;
20
+ }
@@ -0,0 +1,4 @@
1
+ import useGetAllForms from "./useGetAllForms";
2
+ import useGetPatient from "./useGetPatient";
3
+
4
+ export { useGetAllForms, useGetPatient };
@@ -0,0 +1,31 @@
1
+ import { openmrsFetch } from "@openmrs/esm-framework";
2
+ import useSWR from "swr";
3
+
4
+ const customFormRepresentation =
5
+ "(uuid,name,display,encounterType:(uuid,name,viewPrivilege,editPrivilege),version,published,retired,resources:(uuid,name,dataType,valueReference))";
6
+
7
+ const formEncounterUrl = `/ws/rest/v1/form?v=custom:${customFormRepresentation}`;
8
+ const formEncounterUrlPoc = `/ws/rest/v1/form?v=custom:${customFormRepresentation}&q=poc`;
9
+
10
+ export function useGetAllForms(cachedOfflineFormsOnly = false) {
11
+ const showHtmlFormEntryForms = true;
12
+ const url = showHtmlFormEntryForms ? formEncounterUrl : formEncounterUrlPoc;
13
+ const { data, error } = useSWR([url, cachedOfflineFormsOnly], async () => {
14
+ const res = await openmrsFetch(url);
15
+ // show published forms and hide component forms
16
+ const forms =
17
+ res.data?.results?.filter(
18
+ (form) => form.published && !/component/i.test(form.name)
19
+ ) ?? [];
20
+
21
+ return forms;
22
+ });
23
+
24
+ return {
25
+ forms: data,
26
+ isLoading: !error && !data,
27
+ error,
28
+ };
29
+ }
30
+
31
+ export default useGetAllForms;
File without changes
@@ -1,9 +1,9 @@
1
1
  import React from "react";
2
2
  import { render } from "@testing-library/react";
3
- import PatientInfo from "./PatientInfo";
3
+ import PatientBanner from "./PatientBanner";
4
4
 
5
- describe("PatientInfo", () => {
5
+ describe("PatientBanner", () => {
6
6
  it("renders placeholder information when no data is present", () => {
7
- render(<PatientInfo patientUuid={null} />);
7
+ render(<PatientBanner patientUuid={null} />);
8
8
  });
9
9
  });
@@ -10,11 +10,11 @@ import {
10
10
  SkeletonText,
11
11
  } from "carbon-components-react";
12
12
  import React, { useState } from "react";
13
- import styles from "./patient-info.scss";
13
+ import styles from "./styles.scss";
14
14
  import ChevronDown16 from "@carbon/icons-react/es/chevron--down/16";
15
15
  import ChevronUp16 from "@carbon/icons-react/es/chevron--up/16";
16
16
  import { useTranslation } from "react-i18next";
17
- import useGetPatient from "./useGetPatient";
17
+ import useGetPatient from "../hooks/useGetPatient";
18
18
  interface PatientInfoProps {
19
19
  patientUuid: string;
20
20
  }
@@ -0,0 +1,3 @@
1
+ import PatientBanner from "./PatientBanner";
2
+
3
+ export default PatientBanner;
@@ -0,0 +1,51 @@
1
+ import { SkeletonText } from "carbon-components-react";
2
+ import React, { useContext } from "react";
3
+ import FormWorkflowContext from "../context/FormWorkflowContext";
4
+ import useGetPatient from "../hooks/useGetPatient";
5
+ import styles from "./styles.scss";
6
+
7
+ const CardContainer = ({ active, onClick, children }) => {
8
+ return (
9
+ <div
10
+ className={`${styles.cardContainer} ${!active && styles.hoverable}`}
11
+ onClick={onClick}
12
+ role="button"
13
+ tabIndex={0}
14
+ >
15
+ {children}
16
+ </div>
17
+ );
18
+ };
19
+
20
+ const PatientCard = ({ patientUuid }) => {
21
+ const { activePatientUuid, editEncounter } = useContext(FormWorkflowContext);
22
+ const patient = useGetPatient(patientUuid);
23
+ const givenName = patient?.name?.[0]?.given?.[0];
24
+ const familyName = patient?.name?.[0]?.family;
25
+ const identifier = patient?.identifier?.[0]?.value;
26
+
27
+ if (!patient) {
28
+ return (
29
+ <CardContainer onClick={() => {}} active={true}>
30
+ <SkeletonText className={styles.skeletonText} />
31
+ </CardContainer>
32
+ );
33
+ }
34
+
35
+ const active = activePatientUuid === patientUuid;
36
+
37
+ return (
38
+ <CardContainer onClick={() => editEncounter(patientUuid)} active={active}>
39
+ <div className={styles.identifier}>{identifier}</div>
40
+ <div
41
+ className={`${styles.displayName} ${
42
+ active && styles.activeDisplayName
43
+ }`}
44
+ >
45
+ {givenName} {familyName}
46
+ </div>
47
+ </CardContainer>
48
+ );
49
+ };
50
+
51
+ export default PatientCard;
@@ -0,0 +1,3 @@
1
+ import PatientCard from "./PatientCard";
2
+
3
+ export default PatientCard;
@@ -0,0 +1,30 @@
1
+ @import "~@openmrs/esm-styleguide/src/vars";
2
+ @import "~carbon-components/src/globals/scss/vars";
3
+ @import "~carbon-components/src/globals/scss/mixins";
4
+
5
+ .cardContainer {
6
+ padding: $spacing-05;
7
+ &:hover {
8
+ background-color: $carbon--gray-40;
9
+ }
10
+ }
11
+
12
+
13
+
14
+ .skeletonText {
15
+ max-width: 8rem;
16
+ }
17
+
18
+ .identifier {
19
+ font-weight: 300;
20
+ font-size: 0.8rem;
21
+ line-height: 0.9rem;
22
+ }
23
+
24
+ .displayName {
25
+ font-weight: bold;
26
+ }
27
+
28
+ .activeDisplayName {
29
+ color: $carbon--blue-50;
30
+ }
@@ -0,0 +1,47 @@
1
+ import { Add20, Close20 } from "@carbon/icons-react";
2
+ import { ExtensionSlot } from "@openmrs/esm-framework";
3
+ import { Button } from "carbon-components-react";
4
+ import React, { useContext } from "react";
5
+ import { Link } from "react-router-dom";
6
+ import FormWorkflowContext from "../context/FormWorkflowContext";
7
+ import styles from "./styles.scss";
8
+
9
+ const PatientSearchHeader = () => {
10
+ const { addPatient } = useContext(FormWorkflowContext);
11
+ const handleSelectPatient = (uuid) => {
12
+ addPatient(uuid);
13
+ };
14
+
15
+ return (
16
+ <div className={styles.searchHeaderContainer}>
17
+ <span className={styles.padded}>Next patient:</span>
18
+ <span className={styles.searchBarWrapper}>
19
+ <ExtensionSlot
20
+ extensionSlotName="patient-search-bar-slot"
21
+ state={{
22
+ selectPatientAction: handleSelectPatient,
23
+ buttonProps: {
24
+ kind: "primary",
25
+ },
26
+ }}
27
+ />
28
+ </span>
29
+ <span className={styles.padded}>or</span>
30
+ <span>
31
+ <Button disabled>
32
+ Create new patient <Add20 />
33
+ </Button>
34
+ </span>
35
+ <span style={{ flexGrow: 1 }} />
36
+ <span>
37
+ <Link to="">
38
+ <Button kind="ghost">
39
+ Cancel <Close20 />
40
+ </Button>
41
+ </Link>
42
+ </span>
43
+ </div>
44
+ );
45
+ };
46
+
47
+ export default PatientSearchHeader;
@@ -0,0 +1,3 @@
1
+ import PatientSearchHeader from "./PatientSearchHeader";
2
+
3
+ export default PatientSearchHeader;
@@ -0,0 +1,17 @@
1
+ @import "~@openmrs/esm-styleguide/src/vars";
2
+ @import "~carbon-components/src/globals/scss/vars";
3
+ @import "~carbon-components/src/globals/scss/mixins";
4
+
5
+ .searchHeaderContainer {
6
+ display: flex;
7
+ background-color: white;
8
+ padding: $spacing-07 $spacing-05;
9
+ }
10
+
11
+ .searchBarWrapper {
12
+ min-width: 35rem;
13
+ }
14
+
15
+ .padded {
16
+ padding: $spacing-05;
17
+ }
@@ -1,4 +1,13 @@
1
- {
2
- "casualGreeting": "hey",
3
- "formalGreeting": "hello"
4
- }
1
+ {
2
+ "actions": "Actions",
3
+ "casualGreeting": "hey",
4
+ "dataErrorMessage": "Something went wrong loading data from the server.",
5
+ "errorLoadingData": "Error Loading Data",
6
+ "fillForm": "Fill Form",
7
+ "formalGreeting": "hello",
8
+ "formName": "Form Name",
9
+ "noFormsFound": "No Forms To Show",
10
+ "noFormsFoundMessage": "No forms could be found for this category. Please double check the form concept uuids and access permissions.",
11
+ "selectPatientFirst": "Please select a patient first",
12
+ "startGroupSession": "Start Group Session"
13
+ }
package/dist/375.js DELETED
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_openmrs_esm_fast_data_entry_app=self.webpackChunk_openmrs_esm_fast_data_entry_app||[]).push([[375],{837:(e,t,r)=>{r.r(t),r.d(t,{FormsRoot:()=>A,customFormRepresentation:()=>x,default:()=>I,formEncounterUrl:()=>R,formEncounterUrlPoc:()=>T,useFormEncounters:()=>U});var n=r(5666),o=r.n(n),c=r(311),a=r(622),u=r(751),i=r(4211),l=r.n(i),s=r(8100),f=r(5393),m=r(2370),p=r(5566),d=r(2302),v=r(3567),y=r(5185),b=r(8529),O=r(8722),h=r(9758),w=r(4525),g=r(7450),P=r(7188),j=r(2221);function E(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Z(){return Z=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Z.apply(this,arguments)}var k=[{key:"name",header:"Form name"},{key:"actions",header:"Actions"}];const _=function(e){var t=e.rows,r=null==t?void 0:t.map((function(e){return t=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){E(e,t,r[t])}))}return e}({},e),r=null!=(r={actions:l().createElement(j.Link,{to:e.uuid},"Fill Form")})?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r}(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})),t;var t,r}));return t&&(null==t?void 0:t.length)?l().createElement(m.ZP,{rows:r,headers:k,isSortable:!0},(function(e){var t=e.rows,r=e.headers,n=e.getTableProps,o=e.getHeaderProps,c=e.getRowProps,a=e.onInputChange;return l().createElement(p.Z,null,l().createElement("div",{style:{position:"relative",display:"flex",height:"3rem",justifyContent:"flex-end"}},l().createElement(d.Z,{style:{width:"20%",minWidth:"200px"}},l().createElement(v.Z,null,l().createElement(y.Z,{onChange:a})))),l().createElement(b.Z,Z({},n()),l().createElement(O.Z,null,l().createElement(h.Z,null,r.map((function(e){return l().createElement(w.Z,Z({},o({header:e})),e.header)})))),l().createElement(g.Z,null,null==t?void 0:t.map((function(e){return l().createElement(h.Z,Z({},c({row:e})),e.cells.map((function(e){return l().createElement(P.Z,{key:e.id},e.value)})))})))))})):l().createElement(f.Z,null)};function S(e,t,r,n,o,c,a){try{var u=e[c](a),i=u.value}catch(e){return void r(e)}u.done?t(i):Promise.resolve(i).then(n,o)}function D(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var c=e.apply(t,r);function a(e){S(c,n,o,a,u,"next",e)}function u(e){S(c,n,o,a,u,"throw",e)}a(void 0)}))}}function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function C(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter((function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable})))),n.forEach((function(t){F(e,t,r[t])}))}return e}var x="(uuid,name,display,encounterType:(uuid,name,viewPrivilege,editPrivilege),version,published,retired,resources:(uuid,name,dataType,valueReference))",R="/ws/rest/v1/form?v=custom:".concat(x),T="/ws/rest/v1/form?v=custom:".concat(x,"&q=poc");function U(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=!0,r=t?R:T;return(0,s.ZP)([r,e],D(o().mark((function e(){var t,n,a,u,i;return o().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=3,(0,c.openmrsFetch)(r);case 3:return a=e.sent,i=null!==(u=null===(t=a.data)||void 0===t||null===(n=t.results)||void 0===n?void 0:n.filter((function(e){return e.published&&!/component/i.test(e.name)})))&&void 0!==u?u:[],e.abrupt("return",i);case 7:case"end":return e.stop()}}),e)}))))}var A=function(){var e=(0,c.useConfig)(),t=e.formCategories,r=e.formCategoriesToShow,n=function(e){if(e)return null==e?void 0:e.map((function(e){return t=C({},e),r=null!=(r={id:e.uuid})?r:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):function(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r.push.apply(r,n)}return r}(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})),t;var t,r}))}(U().data),o=r.map((function(e){var r=t.find((function(t){return t.name===e})),o=[];if(r&&n&&n.length){var c,a=null===(c=r.forms)||void 0===c?void 0:c.map((function(e){return e.formUUID}));o=n.filter((function(e){return a.includes(e.uuid)}))}return C({},{name:e,rows:o})}));return l().createElement("div",{style:{padding:"2rem"}},l().createElement("h3",{style:{marginBottom:"1.5rem"}},"Forms"),l().createElement(a.Z,{type:"container"},l().createElement(u.Z,{label:"All Forms"},l().createElement(_,{rows:n})),null==o?void 0:o.map((function(e){return l().createElement(u.Z,{label:e.name},l().createElement(_,{rows:e.rows}))}))))};const I=A}}]);
package/dist/418.js DELETED
@@ -1 +0,0 @@
1
- (self.webpackChunk_openmrs_esm_fast_data_entry_app=self.webpackChunk_openmrs_esm_fast_data_entry_app||[]).push([[418],{1418:(e,n,t)=>{"use strict";t.r(n),t.d(n,{I18nContext:()=>k,I18nextProvider:()=>le,Trans:()=>G,Translation:()=>ue,composeInitialProps:()=>A,date:()=>ye,getDefaults:()=>I,getI18n:()=>R,getInitialProps:()=>L,initReactI18next:()=>T,number:()=>he,plural:()=>be,select:()=>ve,selectOrdinal:()=>Oe,setDefaults:()=>N,setI18n:()=>D,time:()=>me,useSSR:()=>fe,useTranslation:()=>re,withSSR:()=>ge,withTranslation:()=>ce});var r=t(3366);function o(e,n){if(null==e)return{};var t,o,i=(0,r.Z)(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)t=a[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}function i(e){return i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i(e)}function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}var c=t(4211),s=t(1739),u=t.n(s),l=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function f(e){var n={type:"tag",name:"",voidElement:!1,attrs:{},children:[]},t=e.match(/<\/?([^\s]+?)[/\s>]/);if(t&&(n.name=t[1],(u()[t[1]]||"/"===e.charAt(e.length-2))&&(n.voidElement=!0),n.name.startsWith("!--"))){var r=e.indexOf("--\x3e");return{type:"comment",comment:-1!==r?e.slice(4,r):""}}for(var o=new RegExp(l),i=null;null!==(i=o.exec(e));)if(i[0].trim())if(i[1]){var a=i[1].trim(),c=[a,""];a.indexOf("=")>-1&&(c=a.split("=")),n.attrs[c[0]]=c[1],o.lastIndex--}else i[2]&&(n.attrs[i[2]]=i[3].trim().substring(1,i[3].length-1));return n}var p=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,d=/^\s*$/,g=Object.create(null);function y(e,n){switch(n.type){case"text":return e+n.content;case"tag":return e+="<"+n.name+(n.attrs?function(e){var n=[];for(var t in e)n.push(t+'="'+e[t]+'"');return n.length?" "+n.join(" "):""}(n.attrs):"")+(n.voidElement?"/>":">"),n.voidElement?e:e+n.children.reduce(y,"")+"</"+n.name+">";case"comment":return e+"\x3c!--"+n.comment+"--\x3e"}}var m={parse:function(e,n){n||(n={}),n.components||(n.components=g);var t,r=[],o=[],i=-1,a=!1;if(0!==e.indexOf("<")){var c=e.indexOf("<");r.push({type:"text",content:-1===c?e:e.substring(0,c)})}return e.replace(p,(function(c,s){if(a){if(c!=="</"+t.name+">")return;a=!1}var u,l="/"!==c.charAt(1),p=c.startsWith("\x3c!--"),g=s+c.length,y=e.charAt(g);if(p){var m=f(c);return i<0?(r.push(m),r):((u=o[i]).children.push(m),r)}if(l&&(i++,"tag"===(t=f(c)).type&&n.components[t.name]&&(t.type="component",a=!0),t.voidElement||a||!y||"<"===y||t.children.push({type:"text",content:e.slice(g,e.indexOf("<",g))}),0===i&&r.push(t),(u=o[i-1])&&u.children.push(t),o[i]=t),(!l||t.voidElement)&&(i>-1&&(t.voidElement||t.name===c.slice(2,-1))&&(i--,t=-1===i?r:o[i]),!a&&"<"!==y&&y)){u=-1===i?r:o[i].children;var h=e.indexOf("<",g),v=e.slice(g,-1===h?void 0:h);d.test(v)&&(v=" "),(h>-1&&i+u.length>=0||" "!==v)&&u.push({type:"text",content:v})}})),r},stringify:function(e){return e.reduce((function(e,n){return e+y("",n)}),"")}};const h=m;var v="".replace,b=/&(?:amp|#38|lt|#60|gt|#62|apos|#39|quot|#34);/g,O={"&amp;":"&","&#38;":"&","&lt;":"<","&#60;":"<","&gt;":">","&#62;":">","&apos;":"'","&#39;":"'","&quot;":'"',"&#34;":'"'};function j(e){return O[e]}function w(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function P(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function E(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?P(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):P(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var x,S={bindI18n:"languageChanged",bindI18nStore:"",transEmptyNodeValue:"",transSupportBasicHtmlNodes:!0,transWrapTextNodes:"",transKeepBasicHtmlNodesFor:["br","strong","i","p"],useSuspense:!0},k=(0,c.createContext)();function N(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};S=E(E({},S),e)}function I(){return S}var C=function(){function e(){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.usedNamespaces={}}var n,t;return n=e,(t=[{key:"addUsedNamespaces",value:function(e){var n=this;e.forEach((function(e){n.usedNamespaces[e]||(n.usedNamespaces[e]=!0)}))}},{key:"getUsedNamespaces",value:function(){return Object.keys(this.usedNamespaces)}}])&&w(n.prototype,t),Object.defineProperty(n,"prototype",{writable:!1}),e}();function D(e){x=e}function R(){return x}var T={type:"3rdParty",init:function(e){N(e.options.react),D(e)}};function A(e){return function(n){return new Promise((function(t){var r=L();e.getInitialProps?e.getInitialProps(n).then((function(e){t(E(E({},e),r))})):t(r)}))}}function L(){var e=R(),n=e.reportNamespaces?e.reportNamespaces.getUsedNamespaces():[],t={},r={};return e.languages.forEach((function(t){r[t]={},n.forEach((function(n){r[t][n]=e.getResourceBundle(t,n)||{}}))})),t.initialI18nStore=r,t.initialLanguage=e.language,t}function _(){if(console&&console.warn){for(var e,n=arguments.length,t=new Array(n),r=0;r<n;r++)t[r]=arguments[r];"string"==typeof t[0]&&(t[0]="react-i18next:: ".concat(t[0])),(e=console).warn.apply(e,t)}}var z={};function B(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];"string"==typeof n[0]&&z[n[0]]||("string"==typeof n[0]&&(z[n[0]]=new Date),_.apply(void 0,n))}function U(e,n,t){e.loadNamespaces(n,(function(){e.isInitialized?t():e.on("initialized",(function n(){setTimeout((function(){e.off("initialized",n)}),0),t()}))}))}function H(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.languages[0],o=!!n.options&&n.options.fallbackLng,i=n.languages[n.languages.length-1];if("cimode"===r.toLowerCase())return!0;var a=function(e,t){var r=n.services.backendConnector.state["".concat(e,"|").concat(t)];return-1===r||2===r};return!(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!a(n.isLanguageChangingTo,e)||!n.hasResourceBundle(r,e)&&n.services.backendConnector.backend&&(!n.options.resources||n.options.partialBundledLanguages)&&(!a(r,e)||o&&!a(i,e)))}function K(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!n.languages||!n.languages.length)return B("i18n.languages were undefined or empty",n.languages),!0;var r=void 0!==n.options.ignoreJSONStructure;return r?n.hasLoadedNamespace(e,{precheck:function(n,r){if(t.bindI18n&&t.bindI18n.indexOf("languageChanging")>-1&&n.services.backendConnector.backend&&n.isLanguageChangingTo&&!r(n.isLanguageChangingTo,e))return!1}}):H(e,n,t)}function V(e){return e.displayName||e.name||("string"==typeof e&&e.length>0?e:"Unknown")}var F=["format"],W=["children","count","parent","i18nKey","context","tOptions","values","defaults","components","ns","i18n","t","shouldUnescape"];function M(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function $(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?M(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):M(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function Z(e,n){if(!e)return!1;var t=e.props?e.props.children:e.children;return n?t.length>0:!!t}function q(e){return e?e&&e.children?e.children:e.props&&e.props.children:[]}function Y(e){return Array.isArray(e)?e:[e]}function J(e,n){if(!e)return"";var t="",r=Y(e),a=n.transSupportBasicHtmlNodes&&n.transKeepBasicHtmlNodesFor?n.transKeepBasicHtmlNodesFor:[];return r.forEach((function(e,r){if("string"==typeof e)t+="".concat(e);else if((0,c.isValidElement)(e)){var s=Object.keys(e.props).length,u=a.indexOf(e.type)>-1,l=e.props.children;if(!l&&u&&0===s)t+="<".concat(e.type,"/>");else if(l||u&&0===s)if(e.props.i18nIsDynamicList)t+="<".concat(r,"></").concat(r,">");else if(u&&1===s&&"string"==typeof l)t+="<".concat(e.type,">").concat(l,"</").concat(e.type,">");else{var f=J(l,n);t+="<".concat(r,">").concat(f,"</").concat(r,">")}else t+="<".concat(r,"></").concat(r,">")}else if(null===e)_("Trans: the passed in value is invalid - seems you passed in a null child.");else if("object"===i(e)){var p=e.format,d=o(e,F),g=Object.keys(d);if(1===g.length){var y=p?"".concat(g[0],", ").concat(p):g[0];t+="{{".concat(y,"}}")}else _("react-i18next: the passed in object contained more than one variable - the object should look like {{ value, format }} where format is optional.",e)}else _("Trans: the passed in value is invalid - seems you passed in a variable like {number} - please pass in variables for interpolation as full objects like {{number}}.",e)})),t}function G(e){var n=e.children,t=e.count,r=e.parent,a=e.i18nKey,s=e.context,u=e.tOptions,l=void 0===u?{}:u,f=e.values,p=e.defaults,d=e.components,g=e.ns,y=e.i18n,m=e.t,O=e.shouldUnescape,w=o(e,W),P=(0,c.useContext)(k)||{},E=P.i18n,x=P.defaultNS,S=y||E||R();if(!S)return B("You will need to pass in an i18next instance by using i18nextReactModule"),n;var N=m||S.t.bind(S)||function(e){return e};s&&(l.context=s);var C=$($({},I()),S.options&&S.options.react),D=g||N.ns||x||S.options&&S.options.defaultNS;D="string"==typeof D?[D]:D||["translation"];var T=p||J(n,C)||C.transEmptyNodeValue||a,A=C.hashTransKey,L=a||(A?A(T):T),_=f?l.interpolation:{interpolation:$($({},l.interpolation),{},{prefix:"#$?",suffix:"?$#"})},z=$($($($({},l),{},{count:t},f),_),{},{defaultValue:T,ns:D}),U=function(e,n,t,r,o,a){if(""===n)return[];var s=r.transKeepBasicHtmlNodesFor||[],u=n&&new RegExp(s.join("|")).test(n);if(!e&&!u)return[n];var l={};!function e(n){Y(n).forEach((function(n){"string"!=typeof n&&(Z(n)?e(q(n)):"object"!==i(n)||(0,c.isValidElement)(n)||Object.assign(l,n))}))}(e);var f=h.parse("<0>".concat(n,"</0>")),p=$($({},l),o);function d(e,n,t){var r=q(e),o=y(r,n.children,t);return function(e){return"[object Array]"===Object.prototype.toString.call(e)&&e.every((function(e){return(0,c.isValidElement)(e)}))}(r)&&0===o.length?r:o}function g(e,n,t,r,o){e.dummy&&(e.children=n),t.push((0,c.cloneElement)(e,$($({},e.props),{},{key:r}),o?void 0:n))}function y(n,o,l){var f=Y(n);return Y(o).reduce((function(n,o,m){var h,O,w,P,E=o.children&&o.children[0]&&o.children[0].content&&t.services.interpolator.interpolate(o.children[0].content,p,t.language);if("tag"===o.type){var x=f[parseInt(o.name,10)];!x&&1===l.length&&l[0][o.name]&&(x=l[0][o.name]),x||(x={});var S=0!==Object.keys(o.attrs).length?(O={props:o.attrs},(P=$({},w=x)).props=Object.assign(O.props,w.props),P):x,k=(0,c.isValidElement)(S),N=k&&Z(o,!0)&&!o.voidElement,I=u&&"object"===i(S)&&S.dummy&&!k,C="object"===i(e)&&null!==e&&Object.hasOwnProperty.call(e,o.name);if("string"==typeof S){var D=t.services.interpolator.interpolate(S,p,t.language);n.push(D)}else if(Z(S)||N)g(S,d(S,o,l),n,m);else if(I){var R=y(f,o.children,l);n.push((0,c.cloneElement)(S,$($({},S.props),{},{key:m}),R))}else if(Number.isNaN(parseFloat(o.name)))if(C)g(S,d(S,o,l),n,m,o.voidElement);else if(r.transSupportBasicHtmlNodes&&s.indexOf(o.name)>-1)if(o.voidElement)n.push((0,c.createElement)(o.name,{key:"".concat(o.name,"-").concat(m)}));else{var T=y(f,o.children,l);n.push((0,c.createElement)(o.name,{key:"".concat(o.name,"-").concat(m)},T))}else if(o.voidElement)n.push("<".concat(o.name," />"));else{var A=y(f,o.children,l);n.push("<".concat(o.name,">").concat(A,"</").concat(o.name,">"))}else if("object"!==i(S)||k)1===o.children.length&&E?n.push((0,c.cloneElement)(S,$($({},S.props),{},{key:m}),E)):n.push((0,c.cloneElement)(S,$($({},S.props),{},{key:m})));else{var L=o.children[0]?E:null;L&&n.push(L)}}else if("text"===o.type){var _=r.transWrapTextNodes,z=a?(h=t.services.interpolator.interpolate(o.content,p,t.language),v.call(h,b,j)):t.services.interpolator.interpolate(o.content,p,t.language);_?n.push((0,c.createElement)(_,{key:"".concat(o.name,"-").concat(m)},z)):n.push(z)}return n}),[])}return q(y([{dummy:!0,children:e||[]}],f,Y(e||[]))[0])}(d||n,L?N(L,z):T,S,C,z,O),H=void 0!==r?r:C.defaultTransParent;return H?(0,c.createElement)(H,w,U):U}function Q(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function X(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,i=[],a=!0,c=!1;try{for(t=t.call(e);!(a=(r=t.next()).done)&&(i.push(r.value),!n||i.length!==n);a=!0);}catch(e){c=!0,o=e}finally{try{a||null==t.return||t.return()}finally{if(c)throw o}}return i}}(e,n)||function(e,n){if(e){if("string"==typeof e)return Q(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?Q(e,n):void 0}}(e,n)||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.")}()}function ee(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function ne(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ee(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ee(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var te=function(e,n){var t=(0,c.useRef)();return(0,c.useEffect)((function(){t.current=n?t.current:e}),[e,n]),t.current};function re(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=n.i18n,r=(0,c.useContext)(k)||{},o=r.i18n,i=r.defaultNS,a=t||o||R();if(a&&!a.reportNamespaces&&(a.reportNamespaces=new C),!a){B("You will need to pass in an i18next instance by using initReactI18next");var s=function(e){return Array.isArray(e)?e[e.length-1]:e},u=[s,{},!1];return u.t=s,u.i18n={},u.ready=!1,u}a.options.react&&void 0!==a.options.react.wait&&B("It seems you are still using the old wait option, you may migrate to the new useSuspense behaviour.");var l=ne(ne(ne({},I()),a.options.react),n),f=l.useSuspense,p=l.keyPrefix,d=e||i||a.options&&a.options.defaultNS;d="string"==typeof d?[d]:d||["translation"],a.reportNamespaces.addUsedNamespaces&&a.reportNamespaces.addUsedNamespaces(d);var g=(a.isInitialized||a.initializedStoreOnce)&&d.every((function(e){return K(e,a,l)}));function y(){return a.getFixedT(null,"fallback"===l.nsMode?d:d[0],p)}var m=(0,c.useState)(y),h=X(m,2),v=h[0],b=h[1],O=d.join(),j=te(O),w=(0,c.useRef)(!0);(0,c.useEffect)((function(){var e=l.bindI18n,n=l.bindI18nStore;function t(){w.current&&b(y)}return w.current=!0,g||f||U(a,d,(function(){w.current&&b(y)})),g&&j&&j!==O&&w.current&&b(y),e&&a&&a.on(e,t),n&&a&&a.store.on(n,t),function(){w.current=!1,e&&a&&e.split(" ").forEach((function(e){return a.off(e,t)})),n&&a&&n.split(" ").forEach((function(e){return a.store.off(e,t)}))}}),[a,O]);var P=(0,c.useRef)(!0);(0,c.useEffect)((function(){w.current&&!P.current&&b(y),P.current=!1}),[a]);var E=[v,a,g];if(E.t=v,E.i18n=a,E.ready=g,g)return E;if(!g&&!f)return E;throw new Promise((function(e){U(a,d,(function(){e()}))}))}var oe=["forwardedRef"];function ie(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function ae(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?ie(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ie(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function ce(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return function(t){function r(r){var i=r.forwardedRef,a=o(r,oe),s=X(re(e,ae(ae({},a),{},{keyPrefix:n.keyPrefix})),3),u=s[0],l=s[1],f=s[2],p=ae(ae({},a),{},{t:u,i18n:l,tReady:f});return n.withRef&&i?p.ref=i:!n.withRef&&i&&(p.forwardedRef=i),(0,c.createElement)(t,p)}return r.displayName="withI18nextTranslation(".concat(V(t),")"),r.WrappedComponent=t,n.withRef?(0,c.forwardRef)((function(e,n){return(0,c.createElement)(r,Object.assign({},e,{forwardedRef:n}))})):r}}var se=["ns","children"];function ue(e){var n=e.ns,t=e.children,r=X(re(n,o(e,se)),3),i=r[0],a=r[1],c=r[2];return t(i,{i18n:a,lng:a.language},c)}function le(e){var n=e.i18n,t=e.defaultNS,r=e.children,o=(0,c.useMemo)((function(){return{i18n:n,defaultNS:t}}),[n,t]);return(0,c.createElement)(k.Provider,{value:o},r)}function fe(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=t.i18n,o=(0,c.useContext)(k)||{},i=o.i18n,a=r||i||R();a.options&&a.options.isClone||(e&&!a.initializedStoreOnce&&(a.services.resourceStore.data=e,a.options.ns=Object.values(e).reduce((function(e,n){return Object.keys(n).forEach((function(n){e.indexOf(n)<0&&e.push(n)})),e}),a.options.ns),a.initializedStoreOnce=!0,a.isInitialized=!0),n&&!a.initializedLanguageOnce&&(a.changeLanguage(n),a.initializedLanguageOnce=!0))}var pe=["initialI18nStore","initialLanguage"];function de(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function ge(){return function(e){function n(n){var t=n.initialI18nStore,r=n.initialLanguage,i=o(n,pe);return fe(t,r),(0,c.createElement)(e,function(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?de(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):de(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}({},i))}return n.getInitialProps=A(e),n.displayName="withI18nextSSR(".concat(V(e),")"),n.WrappedComponent=e,n}}var ye=function(){return""},me=function(){return""},he=function(){return""},ve=function(){return""},be=function(){return""},Oe=function(){return""}},1739:e=>{e.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}},3366:(e,n,t)=>{"use strict";function r(e,n){if(null==e)return{};var t,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)t=i[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}t.d(n,{Z:()=>r})}}]);