@kenyaemr/esm-bed-management-app 1.0.1-pre.4 → 1.0.1-pre.7

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.
@@ -0,0 +1,222 @@
1
+ import React, { useEffect, useMemo, useState } from "react";
2
+ import { useTranslation } from "react-i18next";
3
+ import {
4
+ Button,
5
+ DataTable,
6
+ DataTableSkeleton,
7
+ InlineLoading,
8
+ Pagination,
9
+ Table,
10
+ TableBody,
11
+ TableCell,
12
+ TableContainer,
13
+ TableHead,
14
+ TableHeader,
15
+ TableRow,
16
+ Tile,
17
+ } from "@carbon/react";
18
+ import { Add, Edit } from "@carbon/react/icons";
19
+ import {
20
+ isDesktop as desktopLayout,
21
+ useConfig,
22
+ useLayoutType,
23
+ } from "@openmrs/esm-framework";
24
+ import { CardHeader, ErrorState } from "@openmrs/esm-patient-common-lib";
25
+ import type { BedTypeData } from "../../types";
26
+ import { useBedType } from "../../summary/summary.resource";
27
+ import Header from "../../header/header.component";
28
+ import BedTypeForm from "./new-bed-type-form.component";
29
+ import styles from "../../bed-administration/bed-administration-table.scss";
30
+ import EditBedTypeForm from "./edit-bed-type.component";
31
+
32
+ const BedTypeAdministrationTable: React.FC = () => {
33
+ const { t } = useTranslation();
34
+ const headerTitle = t("bedType", "Bed Type");
35
+ const layout = useLayoutType();
36
+ const isTablet = layout === "tablet";
37
+ const responsiveSize = isTablet ? "lg" : "sm";
38
+ const isDesktop = desktopLayout(layout);
39
+ const [showEditBedModal, setShowEditBedModal] = useState(false);
40
+ const [isBedDataLoading, setIsBedDataLoading] = useState(false);
41
+ const [showBedTypeModal, setAddBedTypeModal] = useState(false);
42
+ const [currentPage, setCurrentPage] = useState(1);
43
+ const [editData, setEditData] = useState<BedTypeData>();
44
+ const [pageSize] = useState(10);
45
+ const { bedTypeData, isError, loading, validate, mutate } = useBedType();
46
+ const [currentPageSize, setPageSize] = useState(10);
47
+ const pageSizes = [10, 20, 30, 40, 50];
48
+ const tableHeaders = [
49
+ {
50
+ header: t("name", "Name"),
51
+ key: "name",
52
+ },
53
+ {
54
+ header: t("displayName", "Display Name"),
55
+ key: "displayName",
56
+ },
57
+ {
58
+ header: t("description", "Description"),
59
+ key: "description",
60
+ },
61
+ {
62
+ key: "actions",
63
+ header: t("actions", "Actions"),
64
+ },
65
+ ];
66
+
67
+ const tableRows = useMemo(() => {
68
+ return bedTypeData?.map((entry) => ({
69
+ id: entry.uuid,
70
+ name: entry?.name,
71
+ displayName: entry?.displayName,
72
+ description: entry?.description,
73
+ actions: (
74
+ <>
75
+ <Button
76
+ enterDelayMs={300}
77
+ renderIcon={Edit}
78
+ onClick={(e) => {
79
+ e.preventDefault();
80
+ setEditData(entry);
81
+ setShowEditBedModal(true);
82
+ setAddBedTypeModal(false);
83
+ }}
84
+ kind={"ghost"}
85
+ iconDescription={t("editBedType", "Edit Bed Type")}
86
+ hasIconOnly
87
+ size={responsiveSize}
88
+ tooltipAlignment="start"
89
+ />
90
+ </>
91
+ ),
92
+ }));
93
+ }, [responsiveSize, bedTypeData, t]);
94
+
95
+ if (isBedDataLoading || loading) {
96
+ return (
97
+ <>
98
+ <Header route="Bed Type" />
99
+ <div className={styles.widgetCard}>
100
+ <DataTableSkeleton role="progressbar" compact={isDesktop} zebra />
101
+ </div>
102
+ </>
103
+ );
104
+ }
105
+
106
+ if (isError) {
107
+ return (
108
+ <>
109
+ <Header route="Bed Type" />
110
+ <div className={styles.widgetCard}>
111
+ <ErrorState error={isError} headerTitle={headerTitle} />
112
+ </div>
113
+ </>
114
+ );
115
+ }
116
+
117
+ return (
118
+ <>
119
+ <Header route="Bed Type" />
120
+
121
+ <div className={styles.widgetCard}>
122
+ {showBedTypeModal ? (
123
+ <BedTypeForm
124
+ onModalChange={setAddBedTypeModal}
125
+ showModal={showBedTypeModal}
126
+ mutate={mutate}
127
+ />
128
+ ) : null}
129
+ {showEditBedModal ? (
130
+ <EditBedTypeForm
131
+ onModalChange={setShowEditBedModal}
132
+ showModal={showEditBedModal}
133
+ editData={editData}
134
+ mutate={mutate}
135
+ />
136
+ ) : null}
137
+ <CardHeader title={headerTitle}>
138
+ <span className={styles.backgroundDataFetchingIndicator}>
139
+ <span>{validate ? <InlineLoading /> : null}</span>
140
+ </span>
141
+ {bedTypeData?.length ? (
142
+ <Button
143
+ kind="ghost"
144
+ renderIcon={(props) => <Add size={16} {...props} />}
145
+ onClick={() => setAddBedTypeModal(true)}
146
+ >
147
+ {t("addBedtype", "Add Bed Type")}
148
+ </Button>
149
+ ) : null}
150
+ </CardHeader>
151
+ <DataTable
152
+ rows={tableRows}
153
+ headers={tableHeaders}
154
+ isSortable
155
+ size={isTablet ? "lg" : "sm"}
156
+ useZebraStyles
157
+ >
158
+ {({ rows, headers, getTableProps }) => (
159
+ <TableContainer>
160
+ <Table {...getTableProps()}>
161
+ <TableHead>
162
+ <TableRow>
163
+ {headers.map((header) => (
164
+ <TableHeader>
165
+ {header.header?.content ?? header.header}
166
+ </TableHeader>
167
+ ))}
168
+ </TableRow>
169
+ </TableHead>
170
+ <TableBody>
171
+ {rows.map((row) => (
172
+ <TableRow key={row.id}>
173
+ {row.cells.map((cell) => (
174
+ <TableCell key={cell.id}>
175
+ {cell.value?.content ?? cell.value}
176
+ </TableCell>
177
+ ))}
178
+ </TableRow>
179
+ ))}
180
+ </TableBody>
181
+ </Table>
182
+ {rows.length === 0 ? (
183
+ <div className={styles.tileContainer}>
184
+ <Tile className={styles.tile}>
185
+ <div className={styles.tileContent}>
186
+ <p className={styles.content}>
187
+ {t("No data", "No data to display")}
188
+ </p>
189
+ <p className={styles.helper}>
190
+ {t("checkFilters", "Check the filters above")}
191
+ </p>
192
+ </div>
193
+ <p className={styles.separator}>{t("or", "or")}</p>
194
+ <Button
195
+ kind="ghost"
196
+ size="sm"
197
+ renderIcon={(props) => <Add size={16} {...props} />}
198
+ onClick={() => setAddBedTypeModal(true)}
199
+ >
200
+ {t("bedType", "Add Bed Type")}
201
+ </Button>
202
+ </Tile>
203
+ </div>
204
+ ) : null}
205
+ <Pagination
206
+ page={currentPage}
207
+ pageSize={pageSize}
208
+ pageSizes={[10, 20, 30, 40, 50]}
209
+ totalItems={bedTypeData.length}
210
+ onChange={({ page, pageSize }) => {
211
+ setCurrentPage(page);
212
+ setPageSize(pageSize);
213
+ }}
214
+ />
215
+ </TableContainer>
216
+ )}
217
+ </DataTable>
218
+ </div>
219
+ </>
220
+ );
221
+ };
222
+ export default BedTypeAdministrationTable;
@@ -0,0 +1,80 @@
1
+ import React, { useCallback } from "react";
2
+ import { useTranslation } from "react-i18next";
3
+ import { showToast, showNotification, useConfig } from "@openmrs/esm-framework";
4
+
5
+ import { editBedType, useBedType } from "../../summary/summary.resource";
6
+ import { BedTypeDataAdministration } from "../../bed-administration/bed-administration-types";
7
+ import { BedTypeData, Mutator } from "../../types";
8
+ import BedTypeAdministrationForm from "./bed-type-admin-form.component";
9
+
10
+ interface EditBedTypeFormProps {
11
+ showModal: boolean;
12
+ onModalChange: (showModal: boolean) => void;
13
+ editData: BedTypeData;
14
+ mutate: Mutator;
15
+ }
16
+
17
+ const EditBedTypeForm: React.FC<EditBedTypeFormProps> = ({
18
+ showModal,
19
+ onModalChange,
20
+ editData,
21
+ mutate,
22
+ }) => {
23
+ const { t } = useTranslation();
24
+ const headerTitle = t("editBedType", "Edit Bed Type");
25
+ const { bedTypeData } = useBedType();
26
+ const availableBedTypes = bedTypeData ? bedTypeData : [];
27
+ const handleCreateQuestion = useCallback(
28
+ (formData: BedTypeDataAdministration) => {
29
+ const bedUuid = editData.uuid;
30
+ const { name, displayName, description } = formData;
31
+ const bedPayload = {
32
+ name,
33
+ displayName,
34
+ description,
35
+ };
36
+ editBedType({ bedPayload, bedTypeId: bedUuid })
37
+ .then(() => {
38
+ showToast({
39
+ title: t("formSaved", "Bed Type"),
40
+ kind: "success",
41
+ critical: true,
42
+ description:
43
+ bedPayload.name +
44
+ " " +
45
+ t("saveSuccessMessage", "was saved successfully."),
46
+ });
47
+
48
+ mutate();
49
+ onModalChange(false);
50
+ })
51
+ .catch((error) => {
52
+ showNotification({
53
+ title: t("errorCreatingForm", "Error creating bed"),
54
+ kind: "error",
55
+ critical: true,
56
+ description: error?.message,
57
+ });
58
+ onModalChange(false);
59
+ });
60
+ onModalChange(false);
61
+ },
62
+ [onModalChange, mutate, editData, t]
63
+ );
64
+
65
+ return (
66
+ <>
67
+ <BedTypeAdministrationForm
68
+ onModalChange={onModalChange}
69
+ availableBedTypes={availableBedTypes}
70
+ showModal={showModal}
71
+ handleCreateQuestion={handleCreateQuestion}
72
+ headerTitle={headerTitle}
73
+ initialData={editData}
74
+ allLocations={[]}
75
+ />
76
+ </>
77
+ );
78
+ };
79
+
80
+ export default EditBedTypeForm;
@@ -0,0 +1,87 @@
1
+ import React, { useCallback } from "react";
2
+ import { useTranslation } from "react-i18next";
3
+ import { showToast, showNotification, useConfig } from "@openmrs/esm-framework";
4
+ import type { BedTypeData, Mutator } from "../../types";
5
+ import { useBedType } from "../../bed-administration/bed-administration.resource";
6
+ import { saveBedType, useLocationsByTag } from "../../summary/summary.resource";
7
+ import BedTypeAdministrationForm from "./bed-type-admin-form.component";
8
+
9
+ interface BedTypeFormProps {
10
+ showModal: boolean;
11
+ onModalChange: (showModal: boolean) => void;
12
+ mutate: Mutator;
13
+ }
14
+
15
+ const NewBedTypeForm: React.FC<BedTypeFormProps> = ({
16
+ showModal,
17
+ onModalChange,
18
+ mutate,
19
+ }) => {
20
+ const { t } = useTranslation();
21
+ const { admissionLocationTagUuid } = useConfig();
22
+ const { data: admissionLocations } = useLocationsByTag(
23
+ admissionLocationTagUuid
24
+ );
25
+ const headerTitle = t("addBedType", "Create Bed type");
26
+ const { bedTypes } = useBedType();
27
+ const availableBedTypes = bedTypes ? bedTypes : [];
28
+
29
+ const initialData: BedTypeData = {
30
+ uuid: "",
31
+ name: "",
32
+ displayName: "",
33
+ description: "",
34
+ };
35
+
36
+ const handleCreateQuestion = useCallback(
37
+ (formData: BedTypeData) => {
38
+ const { name, displayName, description } = formData;
39
+
40
+ const bedObject = {
41
+ name,
42
+ displayName,
43
+ description,
44
+ };
45
+
46
+ saveBedType({ bedPayload: bedObject })
47
+ .then(() => {
48
+ showToast({
49
+ title: t("formCreated", "Add bed Type"),
50
+ kind: "success",
51
+ critical: true,
52
+ description: `Bed ${name} was created successfully.`,
53
+ });
54
+
55
+ mutate();
56
+ onModalChange(false);
57
+ })
58
+ .catch((error) => {
59
+ showNotification({
60
+ title: t("errorCreatingForm", "Error creating bed"),
61
+ kind: "error",
62
+ critical: true,
63
+ description: error?.message,
64
+ });
65
+ onModalChange(false);
66
+ });
67
+ onModalChange(false);
68
+ },
69
+ [onModalChange, mutate, t]
70
+ );
71
+
72
+ return (
73
+ <>
74
+ <BedTypeAdministrationForm
75
+ onModalChange={onModalChange}
76
+ allLocations={admissionLocations}
77
+ availableBedTypes={availableBedTypes}
78
+ showModal={showModal}
79
+ handleCreateQuestion={handleCreateQuestion}
80
+ headerTitle={headerTitle}
81
+ initialData={initialData}
82
+ />
83
+ </>
84
+ );
85
+ };
86
+
87
+ export default NewBedTypeForm;
package/src/index.ts CHANGED
@@ -55,7 +55,20 @@ export const adminLeftPanelLink = getSyncLifecycle(
55
55
  }),
56
56
  options
57
57
  );
58
-
58
+ export const bedTypeLeftPanelLink = getSyncLifecycle(
59
+ createLeftPanelLink({
60
+ name: "bed-type",
61
+ title: "Bed Type",
62
+ }),
63
+ options
64
+ );
65
+ export const bedTagLeftPanelLink = getSyncLifecycle(
66
+ createLeftPanelLink({
67
+ name: "bed-tag",
68
+ title: "Bed Tag",
69
+ }),
70
+ options
71
+ );
59
72
  export const bedAdmissionDashboardLink = getSyncLifecycle(
60
73
  createDashboardLink({
61
74
  name: "bed-admission",
@@ -6,6 +6,8 @@ import Home from "./home.component";
6
6
  import LeftPanel from "./left-panel/left-panel.component";
7
7
  import WardWithBeds from "./ward-with-beds/ward-with-beds.component";
8
8
  import styles from "./root.scss";
9
+ import BedTagAdministrationTable from "./bed-admission/bed-tag/bed-tag-administration-table.component";
10
+ import BedTypeAdministrationTable from "./bed-admission/bed-type/bed-type-administration-table.component";
9
11
 
10
12
  const Root: React.FC = () => {
11
13
  const spaBasePath = window.spaBase;
@@ -26,6 +28,8 @@ const Root: React.FC = () => {
26
28
  <Route path="/" element={<Home />} />
27
29
  <Route path="/location/:location" element={<WardWithBeds />} />
28
30
  <Route path="/administration" element={<BedAdministrationTable />} />
31
+ <Route path="/bed-tag" element={<BedTagAdministrationTable />} />
32
+ <Route path="/bed-type" element={<BedTypeAdministrationTable />} />
29
33
  </Routes>
30
34
  </main>
31
35
  </BrowserRouter>
package/src/routes.json CHANGED
@@ -32,6 +32,16 @@
32
32
  "name": "bed-admission-dashboard",
33
33
  "slot": "bed-admission-dashboard-slot"
34
34
  },
35
+ {
36
+ "component": "bedTypeLeftPanelLink",
37
+ "name": "bed-type-left-panel-link",
38
+ "slot": "bed-management-left-panel-slot"
39
+ },
40
+ {
41
+ "component": "bedTagLeftPanelLink",
42
+ "name": "bed-tag-left-panel-link",
43
+ "slot": "bed-management-left-panel-slot"
44
+ },
35
45
  {
36
46
  "name": "bed-admission-dashboard-link",
37
47
  "component": "bedAdmissionDashboardLink",
@@ -1,5 +1,5 @@
1
1
  import useSWR from "swr";
2
- import { openmrsFetch } from "@openmrs/esm-framework";
2
+ import { FetchResponse, openmrsFetch } from "@openmrs/esm-framework";
3
3
  import type { AdmissionLocation, Bed, MappedBedData } from "../types";
4
4
 
5
5
  export const useLocationsByTag = (locationUuid: string) => {
@@ -121,3 +121,91 @@ export const useAdmissionLocationBedLayout = (locationUuid: string) => {
121
121
  mutate,
122
122
  };
123
123
  };
124
+ export const useBedType = () => {
125
+ const url = `/ws/rest/v1/bedtype/`;
126
+ const { data, error, isLoading, isValidating, mutate } = useSWR<
127
+ { data },
128
+ Error
129
+ >(url, openmrsFetch);
130
+ const results = data?.data?.results ? data?.data?.results : [];
131
+ return {
132
+ bedTypeData: results,
133
+ isError: error,
134
+ loading: isLoading,
135
+ validate: isValidating,
136
+ mutate,
137
+ };
138
+ };
139
+
140
+ export const useBedTag = () => {
141
+ const url = `/ws/rest/v1/bedTag/`;
142
+ const { data, error, isLoading, isValidating, mutate } = useSWR<
143
+ { data },
144
+ Error
145
+ >(url, openmrsFetch);
146
+ const results = data?.data?.results ? data?.data?.results : [];
147
+ return {
148
+ bedTypeData: results,
149
+ isError: error,
150
+ loading: isLoading,
151
+ validate: isValidating,
152
+ mutate,
153
+ };
154
+ };
155
+ interface BedType {
156
+ name: string;
157
+ displayName: string;
158
+ description: string;
159
+ }
160
+ interface BedTag {
161
+ name: string;
162
+ }
163
+ export async function saveBedType({
164
+ bedPayload,
165
+ }): Promise<FetchResponse<BedType>> {
166
+ const response: FetchResponse = await openmrsFetch(`/ws/rest/v1/bedtype`, {
167
+ method: "POST",
168
+ headers: { "Content-Type": "application/json" },
169
+ body: bedPayload,
170
+ });
171
+ return response;
172
+ }
173
+
174
+ export async function saveBedTag({
175
+ bedPayload,
176
+ }): Promise<FetchResponse<BedTag>> {
177
+ const response: FetchResponse = await openmrsFetch(`/ws/rest/v1/bedTag/`, {
178
+ method: "POST",
179
+ headers: { "Content-Type": "application/json" },
180
+ body: bedPayload,
181
+ });
182
+ return response;
183
+ }
184
+ export async function editBedType({
185
+ bedPayload,
186
+ bedTypeId,
187
+ }): Promise<FetchResponse<BedType>> {
188
+ const response: FetchResponse = await openmrsFetch(
189
+ `/ws/rest/v1/bedtype/${bedTypeId}`,
190
+ {
191
+ method: "POST",
192
+ headers: { "Content-Type": "application/json" },
193
+ body: bedPayload,
194
+ }
195
+ );
196
+ return response;
197
+ }
198
+ export async function editBedTag({
199
+ bedPayload,
200
+ bedTagId,
201
+ }): Promise<FetchResponse<BedType>> {
202
+ const response: FetchResponse = await openmrsFetch(
203
+ `/ws/rest/v1/bedTag/${bedTagId}`,
204
+ {
205
+ method: "POST",
206
+ headers: { "Content-Type": "application/json" },
207
+ body: bedPayload,
208
+ }
209
+ );
210
+ return response;
211
+ }
package/src/types.ts CHANGED
@@ -150,3 +150,14 @@ export interface BedDetails extends Bed {
150
150
  identifiers: Array<{ identifier: string }>;
151
151
  };
152
152
  }
153
+ export interface BedTypeData {
154
+ uuid: string;
155
+ name: string;
156
+ displayName: string;
157
+ description: string;
158
+ }
159
+
160
+ export interface BedTagData {
161
+ uuid: string;
162
+ name: string;
163
+ }
package/dist/959.js DELETED
@@ -1 +0,0 @@
1
- "use strict";(globalThis.webpackChunk_kenyaemr_esm_bed_management_app=globalThis.webpackChunk_kenyaemr_esm_bed_management_app||[]).push([[959],{2746:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,'.-esm-bed-management__bed-administration-table__widgetCard___C_FVH{border:1px solid #e0e0e0;margin:1.5rem}.-esm-bed-management__bed-administration-table__widgetCard___C_FVH .cds--modal-content{margin-bottom:unset}@media(min-width: 66rem){.-esm-bed-management__bed-administration-table__widgetCard___C_FVH .cds--modal-container{max-height:100%;width:60%}}@media(min-width: 42rem){.-esm-bed-management__bed-administration-table__widgetCard___C_FVH .cds--modal-container{max-height:100%}}.-esm-bed-management__bed-administration-table__flexContainer____vXa0{display:flex;justify-content:space-between;padding:0 1rem;margin-top:2rem;margin-left:.5rem}.-esm-bed-management__bed-administration-table__filterContainer____09gV{flex:1}.-esm-bed-management__bed-administration-table__filterContainer____09gV .cds--dropdown__wrapper--inline{gap:0}.-esm-bed-management__bed-administration-table__filterContainer____09gV .cds--list-box__menu-icon{height:1rem}.-esm-bed-management__bed-administration-table__backgroundDataFetchingIndicator___K4V9t{align-items:center;display:flex;justify-content:end}.-esm-bed-management__bed-administration-table__tileContainer___ezLCk{background-color:#fff;border-top:1px solid #e0e0e0;padding:3rem 0}.-esm-bed-management__bed-administration-table__tile___VExf6{margin:auto;width:fit-content;display:flex;flex-direction:column;align-items:center}.-esm-bed-management__bed-administration-table__tileContent___JFtwT{display:flex;flex-direction:column;align-items:center}.-esm-bed-management__bed-administration-table__content___px3wE{font-size:var(--cds-heading-compact-02-font-size, 1rem);font-weight:var(--cds-heading-compact-02-font-weight, 600);line-height:var(--cds-heading-compact-02-line-height, 1.375);letter-spacing:var(--cds-heading-compact-02-letter-spacing, 0);color:#525252;margin-bottom:.5rem}.-esm-bed-management__bed-administration-table__helper___CZLsU{font-size:var(--cds-body-compact-01-font-size, 0.875rem);font-weight:var(--cds-body-compact-01-font-weight, 400);line-height:var(--cds-body-compact-01-line-height, 1.28572);letter-spacing:var(--cds-body-compact-01-letter-spacing, 0.16px);color:#525252}.-esm-bed-management__bed-administration-table__separator___IPb7s{font-size:var(--cds-body-compact-02-font-size, 1rem);font-weight:var(--cds-body-compact-02-font-weight, 400);line-height:var(--cds-body-compact-02-line-height, 1.375);letter-spacing:var(--cds-body-compact-02-letter-spacing, 0);color:#525252;width:80%;margin:1.5rem auto;overflow:hidden;text-align:center}.-esm-bed-management__bed-administration-table__separator___IPb7s::before,.-esm-bed-management__bed-administration-table__separator___IPb7s::after{background-color:#a8a8a8;content:"";display:inline-block;height:1px;position:relative;vertical-align:middle;width:50%}.-esm-bed-management__bed-administration-table__separator___IPb7s::before{right:.5rem;margin-left:-50%}.-esm-bed-management__bed-administration-table__separator___IPb7s::after{left:.5rem;margin-right:-50%}',"",{version:3,sources:["webpack://./src/bed-administration/bed-administration-table.scss","webpack://./node_modules/@carbon/colors/index.scss","webpack://./node_modules/@carbon/type/scss/_styles.scss"],names:[],mappings:"AAGA,mEACE,wBAAA,CACA,aAAA,CAEA,uFACE,mBAAA,CAGF,yBACE,yFACE,eAAA,CACA,SAAA,CAAA,CAIJ,yBACE,yFACE,eAAA,CAAA,CAMN,sEACE,YAAA,CACA,6BAAA,CACA,cAAA,CACA,eAAA,CACA,iBAAA,CAGF,wEACE,MAAA,CAEA,wGACE,KAAA,CAGF,kGACE,WAAA,CAIJ,wFACE,kBAAA,CACA,YAAA,CACA,mBAAA,CAGF,sEACE,qBCqEQ,CDpER,4BAAA,CACA,cAAA,CAGF,6DACE,WAAA,CACA,iBAAA,CACA,YAAA,CACA,qBAAA,CACA,kBAAA,CAGF,oEACE,YAAA,CACA,qBAAA,CACA,kBAAA,CAGF,gEE0xBI,uDAAA,CAAA,0DAAA,CAAA,4DAAA,CAAA,8DAAA,CFxxBF,aC1BQ,CD2BR,mBAAA,CAGF,+DEoxBI,wDAAA,CAAA,uDAAA,CAAA,2DAAA,CAAA,gEAAA,CFlxBF,aChCQ,CDmCV,kEE+wBI,oDAAA,CAAA,uDAAA,CAAA,yDAAA,CAAA,2DAAA,CF7wBF,aCrCQ,CDsCR,SAAA,CACA,kBAAA,CACA,eAAA,CACA,iBAAA,CAEA,mJAEE,wBChDM,CDiDN,UAAA,CACA,oBAAA,CACA,UAAA,CACA,iBAAA,CACA,qBAAA,CACA,SAAA,CAGF,0EACE,WAAA,CACA,gBAAA,CAGF,yEACE,UAAA,CACA,iBAAA",sourceRoot:""}]),i.locals={widgetCard:"-esm-bed-management__bed-administration-table__widgetCard___C_FVH",flexContainer:"-esm-bed-management__bed-administration-table__flexContainer____vXa0",filterContainer:"-esm-bed-management__bed-administration-table__filterContainer____09gV",backgroundDataFetchingIndicator:"-esm-bed-management__bed-administration-table__backgroundDataFetchingIndicator___K4V9t",tileContainer:"-esm-bed-management__bed-administration-table__tileContainer___ezLCk",tile:"-esm-bed-management__bed-administration-table__tile___VExf6",tileContent:"-esm-bed-management__bed-administration-table__tileContent___JFtwT",content:"-esm-bed-management__bed-administration-table__content___px3wE",helper:"-esm-bed-management__bed-administration-table__helper___CZLsU",separator:"-esm-bed-management__bed-administration-table__separator___IPb7s"};const l=i},5294:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,".-esm-bed-management__home__section___IM0n2{border-right:1px solid #e0e0e0}","",{version:3,sources:["webpack://./src/home.scss"],names:[],mappings:"AAEA,4CACE,8BAAA",sourceRoot:""}]),i.locals={section:"-esm-bed-management__home__section___IM0n2"};const l=i},5791:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,".-esm-bed-management__left-panel__leftPanel___hr2VD{border-right:1px solid #e0e0e0;padding-top:1rem}.-esm-bed-management__left-panel__leftPanel___hr2VD .cds--side-nav__link{color:#525252;font-size:var(--cds-heading-compact-01-font-size, 0.875rem);font-weight:var(--cds-heading-compact-01-font-weight, 600);line-height:var(--cds-heading-compact-01-line-height, 1.28572);letter-spacing:var(--cds-heading-compact-01-letter-spacing, 0.16px)}.-esm-bed-management__left-panel__leftPanel___hr2VD .cds--side-nav__link:focus,.-esm-bed-management__left-panel__leftPanel___hr2VD .cds--side-nav__link:hover{background-color:#e8e8e8}.-esm-bed-management__left-panel__leftPanel___hr2VD .cds--side-nav__link.active-left-nav-link{color:#161616;border-left:.25rem solid var(--brand-01);outline:none;padding:0 .75rem;background-color:#e0e0e0}.omrs-breakpoint-gt-tablet .cds--side-nav__link{height:2rem}.omrs-breakpoint-lt-desktop .cds--side-nav__link{height:3rem}","",{version:3,sources:["webpack://./src/left-panel/left-panel.scss","webpack://./node_modules/@carbon/colors/index.scss","webpack://./node_modules/@carbon/type/scss/_styles.scss"],names:[],mappings:"AAGA,oDACE,8BAAA,CACA,gBAAA,CAGA,yEACE,aCuCM,CCkzBN,2DAAA,CAAA,0DAAA,CAAA,8DAAA,CAAA,mEAAA,CFt1BA,8JAEE,wBCwJU,CDpJZ,8FACE,aCgCK,CD/BL,wCAAA,CACA,YAAA,CACA,gBAAA,CACA,wBCoBI,CDbR,gDACE,WAAA,CAMF,iDACE,WAAA",sourceRoot:""}]),i.locals={leftPanel:"-esm-bed-management__left-panel__leftPanel___hr2VD"};const l=i},49:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,".-esm-bed-management__root__container___Rf8rX{background-color:#fff;height:calc(100vh - 3rem)}.omrs-breakpoint-gt-tablet .-esm-bed-management__root__container___Rf8rX{margin-left:var(--omrs-sidenav-width)}","",{version:3,sources:["webpack://./src/root.scss","webpack://./node_modules/@carbon/colors/index.scss"],names:[],mappings:"AAGA,8CACE,qBCsHQ,CDrHR,yBAAA,CAGF,yEACE,qCAAA",sourceRoot:""}]),i.locals={container:"-esm-bed-management__root__container___Rf8rX"};const l=i},4899:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,".-esm-bed-management__summary__cardContainer___D4baU{background-color:#fff;display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));justify-content:space-between;padding:1rem}.-esm-bed-management__summary__buttonMain___X9ijE{background-color:#fff;color:#007d79;cursor:text}.-esm-bed-management__summary__sectionLoader___WRQq1{text-align:center}.-esm-bed-management__summary__buttonMain___X9ijE:active,.-esm-bed-management__summary__buttonMain___X9ijE:focus,.-esm-bed-management__summary__buttonMain___X9ijE:hover{color:#007d79 !important;background-color:#fff !important}.-esm-bed-management__summary__inactiveMain___c2eaO{margin-bottom:4rem}.-esm-bed-management__summary__buttonContainer___TBZmO{display:flex}.-esm-bed-management__summary__buttonItems___EYz73{flex:auto}.-esm-bed-management__summary__pageHeaderContainer___OGECY{display:flex;justify-content:space-between;align-items:center;padding:1rem;background-color:#ededed}.-esm-bed-management__summary__pageHeader___wcuT7{text-overflow:ellipsis;overflow:hidden;white-space:nowrap;font-size:1.25rem;font-weight:400;line-height:1.4;letter-spacing:0}.-esm-bed-management__summary__link___XMpAS{text-decoration:none;display:flex;align-items:center;color:#0f62fe}.-esm-bed-management__summary__link___XMpAS svg{margin-left:.5rem}.-esm-bed-management__summary__loader___G69Xc{margin:2rem}","",{version:3,sources:["webpack://./src/summary/summary.scss","webpack://./node_modules/@carbon/colors/index.scss","webpack://./node_modules/@carbon/layout/scss/generated/_spacing.scss"],names:[],mappings:"AAGA,qDACC,qBCsHS,CDrHT,YAAA,CACA,+CAAA,CACA,6BAAA,CACA,YAAA,CAGD,kDACC,qBC8GS,CD7GT,aC8FS,CD7FT,WAAA,CAGD,qDACC,iBAAA,CAIA,yKACC,wBAAA,CACA,gCAAA,CAIF,oDACC,kBAAA,CAGD,uDACC,YAAA,CAGD,mDACC,SAAA,CAGD,2DACC,YAAA,CACA,6BAAA,CACA,kBAAA,CACA,YEbY,CFcZ,wBAAA,CAGD,kDACC,sBAAA,CACA,eAAA,CACA,kBAAA,CACA,iBAAA,CACA,eAAA,CACA,eAAA,CACA,gBAAA,CAGD,4CACE,oBAAA,CACA,YAAA,CACA,kBAAA,CACA,aC7CQ,CD+CR,gDACE,iBE5CS,CFgDb,8CACC,WAAA",sourceRoot:""}]),i.locals={cardContainer:"-esm-bed-management__summary__cardContainer___D4baU",buttonMain:"-esm-bed-management__summary__buttonMain___X9ijE",sectionLoader:"-esm-bed-management__summary__sectionLoader___WRQq1",inactiveMain:"-esm-bed-management__summary__inactiveMain___c2eaO",buttonContainer:"-esm-bed-management__summary__buttonContainer___TBZmO",buttonItems:"-esm-bed-management__summary__buttonItems___EYz73",pageHeaderContainer:"-esm-bed-management__summary__pageHeaderContainer___OGECY",pageHeader:"-esm-bed-management__summary__pageHeader___wcuT7",link:"-esm-bed-management__summary__link___XMpAS",loader:"-esm-bed-management__summary__loader___G69Xc"};const l=i},8755:(e,t,n)=>{n.d(t,{Z:()=>l});var a=n(7537),r=n.n(a),o=n(3645),i=n.n(o)()(r());i.push([e.id,".-esm-bed-management__ward-with-beds__container___ihQHo{margin:1rem}.-esm-bed-management__ward-with-beds__backButton___myuDs{align-items:center;display:flex;justify-content:flex-start;margin-left:1rem}.-esm-bed-management__ward-with-beds__backButton___myuDs button{display:flex;padding-left:0 !important}.-esm-bed-management__ward-with-beds__backButton___myuDs button svg{order:1;margin-right:.5rem;margin-left:.5 !important}.-esm-bed-management__ward-with-beds__backButton___myuDs button span{order:2}","",{version:3,sources:["webpack://./src/ward-with-beds/ward-with-beds.scss","webpack://./node_modules/@carbon/layout/scss/generated/_spacing.scss"],names:[],mappings:"AAEA,wDACE,WAAA,CAGF,yDACE,kBAAA,CACA,YAAA,CACA,0BAAA,CACA,gBAAA,CAEA,gEACE,YAAA,CACA,yBAAA,CAEA,oEACE,OAAA,CACA,kBCGO,CDFP,yBAAA,CAGF,qEACE,OAAA",sourceRoot:""}]),i.locals={container:"-esm-bed-management__ward-with-beds__container___ihQHo",backButton:"-esm-bed-management__ward-with-beds__backButton___myuDs"};const l=i},7959:(e,t,n)=>{n.r(t),n.d(t,{default:()=>xe});var a=n(1672),r=n.n(a),o=n(1914),i=n(1132),l=n(3397),s=n(7330),c=n(2327),d=n(8115),m=n(9455),u=n(3883),A=n(5591);function _(e,t,n,a,r,o,i){try{var l=e[o](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,r)}function b(e){return function(){var t=this,n=arguments;return new Promise((function(a,r){var o=e.apply(t,n);function i(e){_(o,a,r,i,l,"next",e)}function l(e){_(o,a,r,i,l,"throw",e)}i(void 0)}))}}function p(e,t){var n,a,r,o,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,a&&(r=2&o[0]?a.return:o[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,o[1])).done)return r;switch(a=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!((r=(r=i.trys).length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]<r[3])){i.label=o[1];break}if(6===o[0]&&i.label<r[1]){i.label=r[1],r=o;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(o);break}r[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],a=0}finally{n=r=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}}function f(){return(f=b((function(e){var t;return p(this,(function(n){switch(n.label){case 0:return t=e.bedPayload,[4,(0,i.openmrsFetch)("/ws/rest/v1/bed",{method:"POST",headers:{"Content-Type":"application/json"},body:t})];case 1:return[2,n.sent()]}}))}))).apply(this,arguments)}function g(){var e,t,n=(0,A.ZP)("/ws/rest/v1/bedtype",i.openmrsFetch),r=n.data,o=n.error,l=n.isLoading,s=(0,a.useMemo)((function(){var e,t,n,a=null!==(n=null===(t=r)||void 0===t||null===(e=t.data)||void 0===e?void 0:e.results)&&void 0!==n?n:[],o=[];return a.forEach((function(e){o.some((function(t){return t.name===e.name}))||o.push(e)})),o}),[null===(t=r)||void 0===t||null===(e=t.data)||void 0===e?void 0:e.results]);return{bedTypes:s||[],isLoading:l,error:o}}function C(){return(C=b((function(e){var t,n;return p(this,(function(a){switch(a.label){case 0:return t=e.bedPayload,n=e.bedId,[4,(0,i.openmrsFetch)("/ws/rest/v1/bed/".concat(n),{method:"POST",headers:{"Content-Type":"application/json"},body:t})];case 1:return[2,a.sent()]}}))}))).apply(this,arguments)}var y=n(3638),v=n(1604),h=n(7536),E=n(6312);function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),a.forEach((function(t){k(e,t,n[t])}))}return e}function B(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(o.push(a.value),!t||o.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?w(e,t):void 0}}(e,t)||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.")}()}var x=v.z.string().transform((function(e,t){var n=parseInt(e);return isNaN(n)||n<1?(t.addIssue({code:v.z.ZodIssueCode.custom,message:"Please enter a valid number"}),v.z.NEVER):e})),T=v.z.object({bedId:v.z.string().min(5).max(255),description:v.z.string().max(255),bedRow:x,bedColumn:x,location:v.z.object({display:v.z.string(),uuid:v.z.string()}).refine((function(e){return""!=e.display}),"Please select a valid location"),occupancyStatus:v.z.string().refine((function(e){return""!=e}),"Please select a valid occupied status"),bedType:v.z.string().refine((function(e){return""!=e}),"Please select a valid bed type")});const D=function(e){var t,n=e.showModal,o=e.onModalChange,i=e.availableBedTypes,c=e.allLocations,d=e.handleCreateQuestion,m=e.headerTitle,u=e.occupancyStatuses,A=e.initialData,_=(0,l.useTranslation)().t,b=B((0,a.useState)((0,y.Z)(A.status)),2),p=b[0],f=b[1],g=B((0,a.useState)(A.bedType.name),1)[0],C=B((0,a.useState)(!1),2),v=C[0],w=C[1],k=B((0,a.useState)(""),2),x=k[0],D=k[1],O=function(e){var t,n,a,r;return null!==(r=null===(a=e.item.display)||void 0===a?void 0:a.toLowerCase().includes(null===(n=e)||void 0===n||null===(t=n.inputValue)||void 0===t?void 0:t.toLowerCase()))&&void 0!==r?r:[]},P=(0,h.cI)({mode:"all",resolver:(0,E.F)(T),defaultValues:{bedId:A.bedNumber||"",description:A.description||"",bedRow:A.row.toString()||"0",bedColumn:A.column.toString()||"0",location:A.location||{},occupancyStatus:(0,y.Z)(A.status)||p,bedType:A.bedType.name||""}}),I=P.handleSubmit,F=P.control,j=P.formState.isDirty;return r().createElement(s.lpG,{open:n,onClose:function(){return o(!1)},preventCloseOnClickOutside:!0},r().createElement(s.xBx,{title:m}),r().createElement(s.l09,{onSubmit:I((function(e){T.safeParse(e).success&&(w(!1),d(e))}),(function(e){D(Object.entries(e)[0][1].message),w(!0)}))},r().createElement(s.fef,{hasScrollingContent:!0},r().createElement(s.Kqy,{gap:3},r().createElement(s.cwH,{legendText:""},r().createElement(h.Qr,{name:"bedId",control:F,render:function(e){var t,n=e.field,a=e.fieldState;return r().createElement(r().Fragment,null,r().createElement(s.oil,S({id:"bedId",labelText:_("bedId","Bed number"),placeholder:_("bedIdPlaceholder","e.g. BMW-201"),invalidText:null===(t=a.error)||void 0===t?void 0:t.message},n)))}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"description",control:F,render:function(e){var t,n,a,o,i=e.field,l=e.fieldState;return r().createElement(r().Fragment,null,r().createElement(s.Kx8,(a=S({rows:2,id:"description",invalidText:null===(n=l)||void 0===n||null===(t=n.error)||void 0===t?void 0:t.message,labelText:_("description","Bed description")},i),o=null!=(o={placeholder:_("description","Enter the bed description")})?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(o)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n.push.apply(n,a)}return n}(Object(o)).forEach((function(e){Object.defineProperty(a,e,Object.getOwnPropertyDescriptor(o,e))})),a)))}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"bedRow",control:F,render:function(e){var t,n,a=e.fieldState,o=e.field;return r().createElement(s.Y2U,S({hideSteppers:!0,id:"bedRow",label:"Bed row",labelText:"Bed row",invalidText:null===(n=a)||void 0===n||null===(t=n.error)||void 0===t?void 0:t.message},o))}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"bedColumn",control:F,render:function(e){var t,n=e.field,a=e.fieldState;return r().createElement(s.Y2U,S({hideSteppers:!0,id:"bedColumn",label:"Bed column",labelText:"Bed column",invalidText:null===(t=a.error)||void 0===t?void 0:t.message},n))}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"location",control:F,render:function(e){var n,a,o=e.fieldState,i=e.field,l=i.onChange,d=i.onBlur,m=i.value,u=i.ref;return r().createElement(s.CtY,{"aria-label":_("location","Location"),shouldFilterItem:O,id:"location",label:_("location","Location"),invalidText:null===(a=o)||void 0===a||null===(n=a.error)||void 0===n?void 0:n.message,items:c,onBlur:d,ref:u,selectedItem:m,onChange:function(e){var t=e.selectedItem;return l(t)},itemToString:function(e){var n;return null!==(t=null===(n=e)||void 0===n?void 0:n.display)&&void 0!==t?t:""},placeholder:_("selectBedLocation","Select a bed location"),titleText:_("bedLocation","Location")})}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"occupancyStatus",control:F,render:function(e){var t,n=e.field,a=e.fieldState;return r().createElement(s.PhF,S({id:"occupancyStatus",labelText:_("occupancyStatus","Occupied Status"),invalidText:null===(t=a.error)||void 0===t?void 0:t.message,defaultValue:p,onChange:function(e){return f(e.target.value)},value:p},n),r().createElement(s.QlF,{text:_("chooseOccupiedStatus","Choose occupied status"),value:""}),u.map((function(e,t){return r().createElement(s.QlF,{text:_("occupancyStatus","".concat(e)),value:_("occupancyStatus","".concat(e)),key:"occupancyStatus-".concat(t)})})))}})),r().createElement(s.cwH,null,r().createElement(h.Qr,{name:"bedType",control:F,render:function(e){var t=e.field;return r().createElement(s.PhF,S({id:"bedType",labelText:_("bedType","Bed type"),invalidText:_("required","Required"),defaultValue:g},t),r().createElement(s.QlF,{text:_("chooseBedtype","Choose a bed type")}),i.map((function(e,t){return r().createElement(s.QlF,{text:e.name,value:e.name,key:"bedType-".concat(t)},e.name)})))}})),v&&r().createElement(s.K0D,{lowContrast:!0,title:_("error","Error"),style:{minWidth:"100%",margin:"0rem",padding:"0rem"},role:"alert",kind:"error",subtitle:_("pleaseFillField",x)+".",onClose:function(){return w(!1)}}))),r().createElement(s.mzw,null,r().createElement(s.zxk,{onClick:function(){return o(!1)},kind:"secondary"},_("cancel","Cancel")),r().createElement(s.zxk,{disabled:!j,type:"submit"},r().createElement("span",null,_("save","Save"))))))},O=function(e){var t=e.showModal,n=e.onModalChange,o=e.editData,s=e.mutate,c=(0,l.useTranslation)().t,d=(0,i.useConfig)().admissionLocationTagUuid,m=(0,u.We)(d).data,A=c("editBed","Edit bed"),_=g().bedTypes||[],b=(0,a.useCallback)((function(e){var t=o.uuid,a=e.bedId,r=void 0===a?o.bedNumber:a,l=e.description,d=void 0===l?o.description:l,m=e.occupancyStatus,u=void 0===m?o.status:m,A=e.bedRow,_=void 0===A?o.row.toString():A,b=e.bedColumn,p=void 0===b?o.column.toString():b,f=e.location.uuid,g=void 0===f?o.location.uuid:f,y=e.bedType,v={bedNumber:r,bedType:void 0===y?o.bedType.name:y,description:d,status:u.toUpperCase(),row:parseInt(_),column:parseInt(p),locationUuid:g};(function(e){return C.apply(this,arguments)})({bedPayload:v,bedId:t}).then((function(){(0,i.showToast)({title:c("formSaved","Bed saved"),kind:"success",critical:!0,description:v.bedNumber+" "+c("saveSuccessMessage","was saved successfully.")}),s(),n(!1)})).catch((function(e){var t;(0,i.showNotification)({title:c("errorCreatingForm","Error creating bed"),kind:"error",critical:!0,description:null===(t=e)||void 0===t?void 0:t.message}),n(!1)})),n(!1)}),[n,s,o,c]);return r().createElement(r().Fragment,null,r().createElement(D,{onModalChange:n,allLocations:m,availableBedTypes:_,showModal:t,handleCreateQuestion:b,headerTitle:A,occupancyStatuses:["Available","Occupied"],initialData:o}))};var P=n(5032);const I=function(e){var t=e.showModal,n=e.onModalChange,o=e.mutate,s=(0,l.useTranslation)().t,c=(0,i.useConfig)().admissionLocationTagUuid,d=(0,u.We)(c).data,m=s("createNewBed","Create a new bed"),A=g().bedTypes||[],_=(0,a.useCallback)((function(e){var t=e.bedId,a=e.description,r=e.occupancyStatus,l=e.bedRow,c=e.bedColumn,d=e.location,m=e.bedType;(function(e){return f.apply(this,arguments)})({bedPayload:{bedNumber:t,bedType:m,description:a,status:r.toUpperCase(),row:parseInt(l.toString()),column:parseInt(c.toString()),locationUuid:d.uuid}}).then((function(){(0,i.showToast)({title:s("formCreated","New bed created"),kind:"success",critical:!0,description:"Bed ".concat(t," was created successfully.")}),o(),n(!1)})).catch((function(e){var t;(0,i.showNotification)({title:s("errorCreatingForm","Error creating bed"),kind:"error",critical:!0,description:null===(t=e)||void 0===t?void 0:t.message}),n(!1)})),n(!1)}),[n,o,s]);return r().createElement(r().Fragment,null,r().createElement(D,{onModalChange:n,allLocations:d,availableBedTypes:A,showModal:t,handleCreateQuestion:_,headerTitle:m,occupancyStatuses:["Available","Occupied"],initialData:{uuid:"",bedNumber:"",status:"",description:"",row:0,column:0,location:{display:"",uuid:""},bedType:{name:""}}}))};var F=n(7410),j=n.n(F),N=n(4766),z=n.n(N),Z=n(1991),M=n.n(Z),L=n(3702),G=n.n(L),R=n(2434),V=n.n(R),H=n(1422),Q=n.n(H),U=n(2746),Y={};Y.styleTagTransform=Q(),Y.setAttributes=G(),Y.insert=M().bind(null,"head"),Y.domAPI=z(),Y.insertStyleElement=V(),j()(U.Z,Y);const q=U.Z&&U.Z.locals?U.Z.locals:void 0;function W(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function X(e,t,n,a,r,o,i){try{var l=e[o](i),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(a,r)}function J(e){return function(){var t=this,n=arguments;return new Promise((function(a,r){var o=e.apply(t,n);function i(e){X(o,a,r,i,l,"next",e)}function l(e){X(o,a,r,i,l,"throw",e)}i(void 0)}))}}function K(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function $(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),a.forEach((function(t){K(e,t,n[t])}))}return e}function ee(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(o.push(a.value),!t||o.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw r}}return o}}(e,t)||te(e,t)||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 te(e,t){if(e){if("string"==typeof e)return W(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?W(e,t):void 0}}function ne(e,t){var n,a,r,o,i={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return o={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function l(o){return function(l){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,a&&(r=2&o[0]?a.return:o[0]?a.throw||((r=a.return)&&r.call(a),0):a.next)&&!(r=r.call(a,o[1])).done)return r;switch(a=0,r&&(o=[2&o[0],r.value]),o[0]){case 0:case 1:r=o;break;case 4:return i.label++,{value:o[1],done:!1};case 5:i.label++,a=o[1],o=[0];continue;case 7:o=i.ops.pop(),i.trys.pop();continue;default:if(!((r=(r=i.trys).length>0&&r[r.length-1])||6!==o[0]&&2!==o[0])){i=0;continue}if(3===o[0]&&(!r||o[1]>r[0]&&o[1]<r[3])){i.label=o[1];break}if(6===o[0]&&i.label<r[1]){i.label=r[1],r=o;break}if(r&&i.label<r[2]){i.label=r[2],i.ops.push(o);break}r[2]&&i.ops.pop(),i.trys.pop();continue}o=t.call(e,i)}catch(e){o=[6,e],a=0}finally{n=r=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,l])}}}const ae=function(){var e,t,n,o,A,_,b=function(e){var t=e.condition,n=(0,l.useTranslation)().t;return t?r().createElement(s.Vp9,{type:"green",size:"md"},n("yes","Yes")):r().createElement(s.Vp9,{type:"red",size:"md"},n("no","No"))},p=(0,l.useTranslation)().t,f=p("wardAllocation","Ward Allocation"),g=(0,i.useLayoutType)(),C="tablet"===g,y=C?"lg":"sm",v=(0,i.isDesktop)(g),h=(0,i.useConfig)().admissionLocationTagUuid,E=ee((0,a.useState)([]),2),w=E[0],k=E[1],S=ee((0,a.useState)(!1),2),B=S[0],x=S[1],T=ee((0,a.useState)(!1),2),D=T[0],F=T[1],j=ee((0,a.useState)(!1),2),N=j[0],z=j[1],Z=ee((0,a.useState)(),2),M=Z[0],L=Z[1],G=ee((0,a.useState)("ALL"),2),R=G[0],V=G[1],H=(null===(t=w)||void 0===t?void 0:t.length)?(e=[]).concat.apply(e,function(e){if(Array.isArray(e))return W(e)}(_=w)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(_)||te(_)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()):[],Q=(0,u.d$)(h),U=Q.data,Y=Q.isLoading,X=Q.error,K=Q.isValidating,ae=Q.mutate,re=ee((0,a.useState)(10),2),oe=re[0],ie=re[1],le=[10,20,30,40,50],se=(0,i.usePagination)("ALL"===R?H:null!==(A=H.filter((function(e){return e.status===R})))&&void 0!==A?A:[],oe),ce=se.results,de=se.currentPage,me=se.totalPages,ue=se.goTo;(0,a.useEffect)((function(){if(!Y&&U){x(!0);var e=(t=J((function(){var e,t;return ne(this,(function(n){switch(n.label){case 0:return e=U.data.results.map(function(){var e=J((function(e){var t;return ne(this,(function(n){switch(n.label){case 0:return[4,(0,u.kV)(e.uuid)];case 1:return(t=n.sent()).data.results.length?[2,t.data.results.map((function(t){return n=$({},t),a=null!=(a={location:e})?a:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(a)):function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n.push.apply(n,a)}return n}(Object(a)).forEach((function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(a,e))})),n;var n,a}))]:[2,null]}}))}));return function(t){return e.apply(this,arguments)}}()),[4,Promise.all(e)];case 1:return t=n.sent().filter(Boolean),k(t),x(!1),[2]}}))})),function(){return t.apply(this,arguments)});e().finally((function(){return x(!1)}))}var t}),[U,Y,w.length]);var Ae,_e,be,pe=[{key:"bedNumber",header:p("bedId","Bed ID")},{key:"location",header:p("location","Location")},{key:"occupancyStatus",header:p("occupancyStatus","Occupied")},{key:"allocationStatus",header:p("allocationStatus","Allocated")},{key:"actions",header:p("actions","Actions")}],fe=(0,a.useMemo)((function(){return ce.map((function(e){var t,n;return{id:e.uuid,bedNumber:e.bedNumber,location:e.location.display,occupancyStatus:r().createElement(b,{condition:"OCCUPIED"===(null===(t=e)||void 0===t?void 0:t.status)}),allocationStatus:r().createElement(b,{condition:null===(n=e.location)||void 0===n?void 0:n.uuid}),actions:r().createElement(r().Fragment,null,r().createElement(s.zxk,{enterDelayMs:300,renderIcon:c.I8,onClick:function(t){t.preventDefault(),L(e),z(!0),F(!1)},kind:"ghost",iconDescription:p("editBed","Edit Bed"),hasIconOnly:!0,size:y,tooltipAlignment:"start"}))}}))}),[y,ce,p]);return!B&&!Y||w.length?X?r().createElement(r().Fragment,null,r().createElement(P.Z,{route:"Ward Allocation"}),r().createElement("div",{className:q.widgetCard},r().createElement(m.Te,{error:X,headerTitle:f}))):r().createElement(r().Fragment,null,r().createElement(P.Z,{route:"Ward Allocation"}),r().createElement("div",{className:q.flexContainer},(null===(n=ce)||void 0===n?void 0:n.length)?r().createElement("div",{className:q.filterContainer},r().createElement(s.Ltx,{id:"occupancyStatus",initialSelectedItem:"All",label:"",titleText:p("filterByOccupancyStatus","Filter by occupancy status")+":",type:"inline",items:["All","Available","Occupied"],onChange:function(e){var t=e.selectedItem;return V(t.trim().toUpperCase())}})):null),r().createElement("div",{className:q.widgetCard},D?r().createElement(I,{onModalChange:F,showModal:D,mutate:ae}):null,N?r().createElement(O,{onModalChange:z,showModal:N,editData:M,mutate:ae}):null,r().createElement(m.Ol,{title:f},r().createElement("span",{className:q.backgroundDataFetchingIndicator},r().createElement("span",null,K?r().createElement(s.lSo,null):null)),(null===(o=ce)||void 0===o?void 0:o.length)?r().createElement(s.zxk,{kind:"ghost",renderIcon:function(e){return r().createElement(d.mm,$({size:16},e))},onClick:function(){return F(!0)}},p("addBed","Add bed")):null),r().createElement(s.wQF,{rows:fe,headers:pe,isSortable:!0,size:C?"lg":"sm",useZebraStyles:!0},(function(e){var t,n=e.rows,a=e.headers,o=e.getTableProps;return r().createElement(s.xJi,null,r().createElement(s.iA_,o(),r().createElement(s.ssF,null,r().createElement(s.SCH,null,a.map((function(e){var t;return r().createElement(s.xDH,null,null!==(Ae=null===(t=e.header)||void 0===t?void 0:t.content)&&void 0!==Ae?Ae:e.header)})))),r().createElement(s.RMI,null,n.map((function(e){return r().createElement(s.SCH,{key:e.id},e.cells.map((function(e){var t;return r().createElement(s.pj1,{key:e.id},null!==(_e=null===(t=e.value)||void 0===t?void 0:t.content)&&void 0!==_e?_e:e.value)})))})))),0===n.length?r().createElement("div",{className:q.tileContainer},r().createElement(s.n9L,{className:q.tile},r().createElement("div",{className:q.tileContent},r().createElement("p",{className:q.content},p("No data","No data to display")),r().createElement("p",{className:q.helper},p("checkFilters","Check the filters above"))),r().createElement("p",{className:q.separator},p("or","or")),r().createElement(s.zxk,{kind:"ghost",size:"sm",renderIcon:function(e){return r().createElement(d.mm,$({size:16},e))},onClick:function(){return F(!0)}},p("addBed","Add bed")))):null,r().createElement(s.tlE,{backwardText:"Previous page",forwardText:"Next page",page:de,pageNumberText:"Page Number",pageSize:me,pageSizes:(null===(t=le)||void 0===t?void 0:t.length)>0?le:[10],totalItems:null!==(be=H.length)&&void 0!==be?be:0,onChange:function(e){var t=e.pageSize,n=e.page;t!==oe&&ie(t),n!==de&&ue(n)}}))})))):r().createElement(r().Fragment,null,r().createElement(P.Z,{route:"Ward Allocation"}),r().createElement("div",{className:q.widgetCard},r().createElement(s.gqd,{role:"progressbar",compact:v,zebra:!0})))};var re=n(2858),oe=n(3873),ie=n(4899),le={};le.styleTagTransform=Q(),le.setAttributes=G(),le.insert=M().bind(null,"head"),le.domAPI=z(),le.insertStyleElement=V(),j()(ie.Z,le);const se=ie.Z&&ie.Z.locals?ie.Z.locals:void 0,ce=function(){var e,t,n=(0,l.useTranslation)().t,a=(0,u.b7)(),o=a.data,c=a.isLoading,A=a.error;return c?r().createElement("div",{className:se.loader},r().createElement(s.gqd,{role:"progressbar",zebra:!0})):(null===(e=o)||void 0===e?void 0:e.length)?r().createElement("div",{className:se.cardContainer},o.map((function(e){var t,a,o="".concat(window.getOpenmrsSpaBase(),"bed-management/location/").concat(e.ward.uuid);return r().createElement(oe.Z,{headerLabel:e.ward.display,label:n("beds","Beds"),value:null===(t=e)||void 0===t?void 0:t.totalBeds},(null===(a=e)||void 0===a?void 0:a.totalBeds)&&r().createElement("div",{className:se.link},r().createElement(i.ConfigurableLink,{className:se.link,to:o},n("viewBeds","View beds")),r().createElement(d.ol,{size:16})))}))):c||0!==(null===(t=o)||void 0===t?void 0:t.length)||A?A?r().createElement(m.Te,{headerTitle:n("errorFetchingbedInformation","Error fetching bed information"),error:A}):void 0:r().createElement(re.Z,{msg:"No data to display",helper:""})};var de=n(5294),me={};me.styleTagTransform=Q(),me.setAttributes=G(),me.insert=M().bind(null,"head"),me.domAPI=z(),me.insertStyleElement=V(),j()(de.Z,me);const ue=de.Z&&de.Z.locals?de.Z.locals:void 0,Ae=function(){return r().createElement("section",{className:ue.section},r().createElement(P.Z,{route:"Summary"}),r().createElement(ce,null))};var _e=n(5791),be={};be.styleTagTransform=Q(),be.setAttributes=G(),be.insert=M().bind(null,"head"),be.domAPI=z(),be.insertStyleElement=V(),j()(_e.Z,be);const pe=_e.Z&&_e.Z.locals?_e.Z.locals:void 0,fe=function(){var e=(0,i.useLayoutType)();return(0,a.useEffect)((function(){return(0,i.attach)("nav-menu-slot","bed-management-left-panel"),function(){return(0,i.detach)("nav-menu-slot","bed-management-left-panel")}}),[]),(0,i.isDesktop)(e)&&r().createElement(s.kwZ,{"aria-label":"Bed management left panel",className:pe.leftPanel,expanded:!0},r().createElement(i.ExtensionSlot,{name:"bed-management-left-panel-slot"}))};var ge=n(8755),Ce={};Ce.styleTagTransform=Q(),Ce.setAttributes=G(),Ce.insert=M().bind(null,"head"),Ce.domAPI=z(),Ce.insertStyleElement=V(),j()(ge.Z,Ce);const ye=ge.Z&&ge.Z.locals?ge.Z.locals:void 0;function ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function he(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ee(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},a=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(a=a.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),a.forEach((function(t){he(e,t,n[t])}))}return e}const we=function(){var e,t,n,c,m,A=(0,o.useParams)().location,_=(0,u.Gr)(A),b=_.isLoading,p=_.bedData,f=(0,u.p9)(A).name,g=(c=(0,a.useState)(10),m=2,function(e){if(Array.isArray(e))return e}(c)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o=[],i=!0,l=!1;try{for(n=n.call(e);!(i=(a=n.next()).done)&&(o.push(a.value),!t||o.length!==t);i=!0);}catch(e){l=!0,r=e}finally{try{i||null==n.return||n.return()}finally{if(l)throw r}}return o}}(c,m)||function(e,t){if(e){if("string"==typeof e)return ve(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(n):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ve(e,t):void 0}}(c,m)||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.")}()),C=g[0],y=g[1],v=(0,i.usePagination)(p,C),h=v.results,E=v.goTo,w=v.currentPage,k=function(e){var t=e.condition,n=(0,l.useTranslation)().t;return t?r().createElement(s.Vp9,{type:"green",size:"md"},n("yes","Yes")):r().createElement(s.Vp9,{type:"red",size:"md"},n("no","No"))},S=(0,a.useMemo)((function(){var e;return null===(e=h)||void 0===e?void 0:e.map((function(e){var t;return{id:e.id,number:e.number,name:e.name,description:e.description,occupied:r().createElement(k,{condition:"OCCUPIED"===(null===(t=e)||void 0===t?void 0:t.status)})}}))}),[h]);return r().createElement(r().Fragment,null,r().createElement(P.Z,{route:f||"--"}),b&&r().createElement("div",{className:ye.container},r().createElement(s.gqd,{role:"progressbar",zebra:!0})),(null===(e=p)||void 0===e?void 0:e.length)?r().createElement(r().Fragment,null,r().createElement("div",{className:ye.backButton},r().createElement(s.zxk,{kind:"ghost",renderIcon:function(e){return r().createElement(d.Xd,Ee({size:24},e))},iconDescription:"Return to summary",onClick:function(){return(0,i.navigate)({to:"".concat(window.getOpenmrsSpaBase(),"bed-management")})}},r().createElement("span",null,"Return to summary"))),r().createElement("div",{className:ye.container},r().createElement(s.wQF,{rows:S,headers:[{id:0,header:"ID",key:"id"},{id:1,header:"Number",key:"number"},{id:2,header:"Name",key:"name"},{id:3,header:"Description",key:"description"},{id:4,header:"Occupied",key:"occupied"}],useZebraStyles:!0},(function(e){var t=e.rows,a=e.headers,o=e.getHeaderProps,i=e.getRowProps,l=e.getTableProps;return r().createElement(s.xJi,null,r().createElement(s.iA_,l(),r().createElement(s.ssF,null,r().createElement(s.SCH,null,a.map((function(e){return r().createElement(s.xDH,Ee({key:e.key},o({header:e})),e.header)})))),r().createElement(s.RMI,null,t.map((function(e){return r().createElement(s.SCH,Ee({key:e.id},i({row:e})),e.cells.map((function(e){var t;return r().createElement(s.pj1,{key:e.id},null!==(n=null===(t=e.value)||void 0===t?void 0:t.content)&&void 0!==n?n:e.value)})))})))))})),r().createElement(s.tlE,{backwardText:"Previous page",forwardText:"Next page",itemsPerPageText:"Items per page:",page:w,pageNumberText:"Page Number",pageSize:C,onChange:function(e){var t=e.page,n=e.pageSize;E(t),y(n)},pageSizes:[10,20,30,40,50],totalItems:null===(t=h)||void 0===t?void 0:t.length}))):null)};var ke=n(49),Se={};Se.styleTagTransform=Q(),Se.setAttributes=G(),Se.insert=M().bind(null,"head"),Se.domAPI=z(),Se.insertStyleElement=V(),j()(ke.Z,Se);const Be=ke.Z&&ke.Z.locals?ke.Z.locals:void 0,xe=function(){var e=window.spaBase;return(0,a.useEffect)((function(){return(0,i.setLeftNav)({name:"bed-management-left-panel-slot",basePath:e}),function(){return(0,i.unsetLeftNav)("bed-management-left-panel-slot")}}),[e]),r().createElement(o.BrowserRouter,{basename:"".concat(window.getOpenmrsSpaBase(),"bed-management")},r().createElement(fe,null),r().createElement("main",{className:Be.container},r().createElement(o.Routes,null,r().createElement(o.Route,{path:"/",element:r().createElement(Ae,null)}),r().createElement(o.Route,{path:"/location/:location",element:r().createElement(we,null)}),r().createElement(o.Route,{path:"/administration",element:r().createElement(ae,null)}))))}}}]);