@argusoft/medplat-core 1.0.28 → 1.0.30
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.
- package/dist/AccessRights-xrday-L1.js +1023 -0
- package/dist/AccessRights-xrday-L1.js.map +1 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
- package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
- package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-D1sU8RjY.js} +2 -2
- package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
- package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
- package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
- package/dist/AddMenuConfiguration-e5BVXhmw.js +8547 -0
- package/dist/AddMenuConfiguration-e5BVXhmw.js.map +1 -0
- package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
- package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
- package/dist/AppModal-CCtrQ5Tr.js +394 -0
- package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
- package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js +387 -0
- package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js.map +1 -0
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js +391 -0
- package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +1 -0
- package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-BPsJquTS.js} +1606 -1611
- package/dist/ChangePasswordModalCore-BPsJquTS.js.map +1 -0
- package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-Ddz9halE.js} +2 -2
- package/dist/ConditionConfig-Ddz9halE.js.map +1 -0
- package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js +435 -0
- package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js.map +1 -0
- package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
- package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
- package/dist/EventConfig-BmLemzX3.js +26 -0
- package/dist/EventConfig-BmLemzX3.js.map +1 -0
- package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-Bzh1qWXU.js} +31 -30
- package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-Bzh1qWXU.js.map} +1 -1
- package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-B2SRrnB1.js} +2 -2
- package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-B2SRrnB1.js.map} +1 -1
- package/dist/EventsSkeleton-BIcPks4T.js +61 -0
- package/dist/EventsSkeleton-BIcPks4T.js.map +1 -0
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +79 -0
- package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +1 -0
- package/dist/FeatureMenu-DYJmDt7q.js +521 -0
- package/dist/FeatureMenu-DYJmDt7q.js.map +1 -0
- package/dist/Features-Dne21RWu.js +14 -0
- package/dist/Features-Dne21RWu.js.map +1 -0
- package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-DuTwnngN.js} +19 -19
- package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-DuTwnngN.js.map} +1 -1
- package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
- package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
- package/dist/FlywayQuery-CQygj51V.js +179 -0
- package/dist/FlywayQuery-CQygj51V.js.map +1 -0
- package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
- package/dist/{ManageNotification-CaBAOhji.js.map → Google-DQxMfbaL.js.map} +1 -1
- package/dist/GrantPermissionModal-BDN66Atn.js +236 -0
- package/dist/GrantPermissionModal-BDN66Atn.js.map +1 -0
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +7639 -0
- package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +1 -0
- package/dist/ImmunizationConfigurationBase.css +1 -1
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
- package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +665 -0
- package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +1 -0
- package/dist/LanguagesModal-B3NTebYT.js +352 -0
- package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
- package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
- package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-CoYcpjR9.js} +465 -397
- package/dist/ManageEventConfiguration-CoYcpjR9.js.map +1 -0
- package/dist/ManageNotification-C5MhV77Q.js +934 -0
- package/dist/ManageNotification-C5MhV77Q.js.map +1 -0
- package/dist/{ManageRole-CGYfglpo.js → ManageRole-CNZBRKGU.js} +32 -30
- package/dist/ManageRole-CNZBRKGU.js.map +1 -0
- package/dist/ManageTranslation-vRiptUAP.js +833 -0
- package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
- package/dist/ManageTranslation.css +1 -1
- package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DCFkUMV9.js} +1722 -1586
- package/dist/ManageUser-DCFkUMV9.js.map +1 -0
- package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js +272 -0
- package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js.map +1 -0
- package/dist/MobileAnalytics-pQoE8cG1.js +16888 -0
- package/dist/MobileAnalytics-pQoE8cG1.js.map +1 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
- package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
- package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-BeveaX0C.js} +2 -2
- package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +1 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
- package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
- package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-DEyRZEuM.js} +109 -110
- package/dist/NotificationList-DEyRZEuM.js.map +1 -0
- package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CM6VkdmY.js} +570 -478
- package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +1 -0
- package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js +482 -0
- package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map +1 -0
- package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js +157 -0
- package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js.map +1 -0
- package/dist/PermissionsModal-CCYkcKlC.js +151 -0
- package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js +119 -0
- package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map +1 -0
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +783 -0
- package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +1 -0
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js +818 -0
- package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +1 -0
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +599 -0
- package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +1 -0
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +1302 -0
- package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +1 -0
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js +252 -0
- package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +1 -0
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +648 -0
- package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +1 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js +1577 -0
- package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +1 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js +279 -0
- package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map +1 -0
- package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js +293 -0
- package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js.map +1 -0
- package/dist/QueryBuilder-CXaBe6sr.js +478 -0
- package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
- package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-s8iNx2Mu.js} +131 -142
- package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
- package/dist/Roles-BIyiic67.js +14 -0
- package/dist/Roles-BIyiic67.js.map +1 -0
- package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js +544 -0
- package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map +1 -0
- package/dist/SalesPage-D18DCseD-BxktGDRQ.js +315 -0
- package/dist/SalesPage-D18DCseD-BxktGDRQ.js.map +1 -0
- package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
- package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +747 -0
- package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +1 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
- package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
- package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-D1y_4A1u.js} +161 -121
- package/dist/ShowFlywayQuery-D1y_4A1u.js.map +1 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
- package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js +721 -0
- package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +1 -0
- package/dist/SubMenu-eEDhZUvh.js +317 -0
- package/dist/SubMenu-eEDhZUvh.js.map +1 -0
- package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
- package/dist/TableDetails-BtafRxXb.js.map +1 -0
- package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
- package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js +746 -0
- package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +1 -0
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +315 -0
- package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +1 -0
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +476 -0
- package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +1 -0
- package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-3O6ABrK-.js} +2 -2
- package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-3O6ABrK-.js.map} +1 -1
- package/dist/{UserList-Bc8gYxRL.js → UserList-DgPxsnj2.js} +253 -236
- package/dist/{UserList-Bc8gYxRL.js.map → UserList-DgPxsnj2.js.map} +1 -1
- package/dist/Users-Bpc4Sazd.js +41 -0
- package/dist/Users-Bpc4Sazd.js.map +1 -0
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +321 -0
- package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +1 -0
- package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
- package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js +434 -0
- package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +1 -0
- package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
- package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
- package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +4 -752
- package/dist/index.js.map +1 -1
- package/dist/index.lib-Dn8PMkeD.js +862 -0
- package/dist/index.lib-Dn8PMkeD.js.map +1 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
- package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
- package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
- package/package.json +5 -4
- package/dist/AccessRights-CHu27ZOw.js +0 -1262
- package/dist/AccessRights-CHu27ZOw.js.map +0 -1
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
- package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
- package/dist/AddLabelModal-DFllBVcd.js +0 -734
- package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
- package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
- package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
- package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
- package/dist/AppModal-CtG2GjD_.js +0 -428
- package/dist/AppModal-CtG2GjD_.js.map +0 -1
- package/dist/ChangePasswordModalCore-CDxkeIIM.js.map +0 -1
- package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
- package/dist/EventsSkeleton-8iiETGcf.js +0 -76
- package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
- package/dist/FeatureMenu-jl7-Tk6y.js +0 -265
- package/dist/FeatureMenu-jl7-Tk6y.js.map +0 -1
- package/dist/Features-CObdzJp_.js +0 -13
- package/dist/Features-CObdzJp_.js.map +0 -1
- package/dist/FlywayQuery-Cx2sly6g.js +0 -169
- package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js +0 -5910
- package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +0 -1
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
- package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
- package/dist/LanguagesModal-D6VfaGrl.js +0 -394
- package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
- package/dist/ManageDynamicFeature-BhONvfC_.js +0 -4189
- package/dist/ManageDynamicFeature-BhONvfC_.js.map +0 -1
- package/dist/ManageEventConfiguration-DV3I5POA.js.map +0 -1
- package/dist/ManageRole-CGYfglpo.js.map +0 -1
- package/dist/ManageTranslation-B4C9-lWD.js +0 -625
- package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
- package/dist/ManageUser-AY1EUDLI.js.map +0 -1
- package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
- package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
- package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
- package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
- package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
- package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
- package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
- package/dist/QueryBuilder-z7eqfd7D.js +0 -383
- package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
- package/dist/RoleManagement-BPl2cE27.js.map +0 -1
- package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
- package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
- package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
- package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
- package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
- package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
- package/dist/SubMenu-DYxAPH2Z.js +0 -191
- package/dist/SubMenu-DYxAPH2Z.js.map +0 -1
- package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
- package/dist/Users-CsJ08Kjm.js +0 -40
- package/dist/Users-CsJ08Kjm.js.map +0 -1
- package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
- package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
import { jsx as e, jsxs as i } from "react/jsx-runtime";
|
|
2
|
-
import { useState as y, useCallback as
|
|
2
|
+
import { useState as y, useCallback as C, useEffect as R } from "react";
|
|
3
3
|
import { useNavigate as w } from "react-router";
|
|
4
|
-
import { Box as u, Stack as c, Button as o, Grid as m, Skeleton as F, Card as
|
|
4
|
+
import { Box as u, Stack as c, Button as o, Grid as m, Skeleton as F, Card as S, Typography as l, CardContent as k, Chip as p, Divider as A, CardActions as z } from "@mui/material";
|
|
5
5
|
import b from "@mui/icons-material/AddRounded";
|
|
6
6
|
import H from "@mui/icons-material/RefreshRounded";
|
|
7
7
|
import T from "@mui/icons-material/SyncRounded";
|
|
8
8
|
import N from "@mui/icons-material/InboxRounded";
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import { showToast as
|
|
9
|
+
import D from "@mui/icons-material/OpenInNewRounded";
|
|
10
|
+
import v from "@mui/icons-material/DnsRounded";
|
|
11
|
+
import L from "@mui/icons-material/LockRounded";
|
|
12
|
+
import O from "@mui/icons-material/LockOpenRounded";
|
|
13
|
+
import W from "moment";
|
|
14
|
+
import { showToast as E } from "@/common/toaster/toaster";
|
|
15
15
|
import { u as $, r as j, F as G, a as P, S as V, M as B } from "./permissions-DEWACxJN.js";
|
|
16
16
|
import { S as M } from "./SyncDialog-BRGpHOE4.js";
|
|
17
17
|
function U({ server: n, onOpen: a, onSync: d, onStaging: f, canManage: g }) {
|
|
18
18
|
var r;
|
|
19
19
|
const s = n.authType && n.authType !== "NONE";
|
|
20
|
-
return /* @__PURE__ */ i(
|
|
20
|
+
return /* @__PURE__ */ i(S, { variant: "outlined", sx: { height: "100%", borderRadius: 2, display: "flex", flexDirection: "column" }, children: [
|
|
21
21
|
/* @__PURE__ */ i(k, { sx: { flexGrow: 1 }, children: [
|
|
22
22
|
/* @__PURE__ */ i(c, { direction: "row", justifyContent: "space-between", alignItems: "flex-start", children: [
|
|
23
23
|
/* @__PURE__ */ i(c, { direction: "row", spacing: 1, alignItems: "center", children: [
|
|
24
|
-
/* @__PURE__ */ e(u, { sx: { width: 36, height: 36, borderRadius: 1.5, bgcolor: "primary.main", color: "#fff", display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ e(
|
|
24
|
+
/* @__PURE__ */ e(u, { sx: { width: 36, height: 36, borderRadius: 1.5, bgcolor: "primary.main", color: "#fff", display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ e(v, { fontSize: "small" }) }),
|
|
25
25
|
/* @__PURE__ */ i(u, { children: [
|
|
26
26
|
/* @__PURE__ */ e(l, { variant: "subtitle1", sx: { fontWeight: 800, lineHeight: 1.1 }, children: n.name }),
|
|
27
27
|
/* @__PURE__ */ e(
|
|
28
28
|
p,
|
|
29
29
|
{
|
|
30
30
|
size: "small",
|
|
31
|
-
icon: s ? /* @__PURE__ */ e(
|
|
31
|
+
icon: s ? /* @__PURE__ */ e(L, {}) : /* @__PURE__ */ e(O, {}),
|
|
32
32
|
label: s ? n.authType : "Public",
|
|
33
33
|
variant: "outlined",
|
|
34
34
|
sx: { height: 20, mt: 0.5 }
|
|
@@ -47,29 +47,29 @@ function U({ server: n, onOpen: a, onSync: d, onStaging: f, canManage: g }) {
|
|
|
47
47
|
] }) : /* @__PURE__ */ e(l, { variant: "caption", color: "text.disabled", children: "Capability not discovered" }),
|
|
48
48
|
n.capabilitySyncedAt && /* @__PURE__ */ i(l, { variant: "caption", color: "text.secondary", display: "block", sx: { mt: 1 }, children: [
|
|
49
49
|
"synced ",
|
|
50
|
-
|
|
50
|
+
W(n.capabilitySyncedAt).fromNow()
|
|
51
51
|
] })
|
|
52
52
|
] }),
|
|
53
53
|
/* @__PURE__ */ i(z, { sx: { px: 2, pb: 2, pt: 0, gap: 1, flexWrap: "wrap" }, children: [
|
|
54
|
-
/* @__PURE__ */ e(o, { size: "small", variant: "contained", startIcon: /* @__PURE__ */ e(
|
|
54
|
+
/* @__PURE__ */ e(o, { size: "small", variant: "contained", startIcon: /* @__PURE__ */ e(D, {}), onClick: a, children: "Open" }),
|
|
55
55
|
g && /* @__PURE__ */ e(o, { size: "small", variant: "outlined", startIcon: /* @__PURE__ */ e(T, {}), onClick: d, children: "Sync" }),
|
|
56
56
|
/* @__PURE__ */ e(o, { size: "small", variant: "outlined", startIcon: /* @__PURE__ */ e(N, {}), onClick: f, children: "Staging" })
|
|
57
57
|
] })
|
|
58
58
|
] });
|
|
59
59
|
}
|
|
60
60
|
function ce() {
|
|
61
|
-
const n = w(), { canManage: a } = $(), [d, f] = y([]), [g, s] = y(!1), [r, x] = y(null), h =
|
|
61
|
+
const n = w(), { canManage: a } = $(), [d, f] = y([]), [g, s] = y(!1), [r, x] = y(null), h = C(async () => {
|
|
62
62
|
s(!0);
|
|
63
63
|
try {
|
|
64
64
|
const t = await j();
|
|
65
65
|
f((t == null ? void 0 : t.data) ?? []);
|
|
66
66
|
} catch {
|
|
67
|
-
|
|
67
|
+
E({ type: "error", message: "Failed to load FHIR servers." });
|
|
68
68
|
} finally {
|
|
69
69
|
s(!1);
|
|
70
70
|
}
|
|
71
71
|
}, []);
|
|
72
|
-
return
|
|
72
|
+
return R(() => {
|
|
73
73
|
h();
|
|
74
74
|
}, [h]), /* @__PURE__ */ e(G, { children: /* @__PURE__ */ i(u, { sx: { p: { xs: 2, md: 3 } }, children: [
|
|
75
75
|
/* @__PURE__ */ e(
|
|
@@ -84,8 +84,8 @@ function ce() {
|
|
|
84
84
|
] })
|
|
85
85
|
}
|
|
86
86
|
),
|
|
87
|
-
g ? /* @__PURE__ */ e(m, { container: !0, spacing: 2, children: Array.from({ length: 3 }).map((t,
|
|
88
|
-
/* @__PURE__ */ e(
|
|
87
|
+
g ? /* @__PURE__ */ e(m, { container: !0, spacing: 2, children: Array.from({ length: 3 }).map((t, I) => /* @__PURE__ */ e(m, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(F, { variant: "rounded", height: 220 }) }, I)) }) : d.length === 0 ? /* @__PURE__ */ e(S, { variant: "outlined", sx: { borderRadius: 2, p: 5, textAlign: "center" }, children: /* @__PURE__ */ i(c, { alignItems: "center", spacing: 1.5, children: [
|
|
88
|
+
/* @__PURE__ */ e(v, { sx: { fontSize: 48, color: "text.disabled" } }),
|
|
89
89
|
/* @__PURE__ */ e(l, { variant: "h6", sx: { fontWeight: 700 }, children: "No FHIR servers yet" }),
|
|
90
90
|
/* @__PURE__ */ e(l, { variant: "body2", color: "text.secondary", sx: { maxWidth: 420 }, children: "Connect a FHIR server by its base URL. We’ll guide you through discovering its capabilities and syncing resources." }),
|
|
91
91
|
a && /* @__PURE__ */ e(o, { variant: "contained", startIcon: /* @__PURE__ */ e(b, {}), onClick: () => n("/ui/medplat/admin/fhirResource/new"), children: "Connect your first server" })
|
|
@@ -113,4 +113,4 @@ function ce() {
|
|
|
113
113
|
export {
|
|
114
114
|
ce as default
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=FhirServerList-
|
|
116
|
+
//# sourceMappingURL=FhirServerList-DuTwnngN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FhirServerList-Dkq7Kbes.js","sources":["../src/views/FhirResource/FhirServerList.jsx"],"sourcesContent":["import { useEffect, useState, useCallback } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n Box, Button, Stack, Typography, Skeleton, Chip, Grid,\n Card, CardContent, CardActions, Divider,\n} from \"@mui/material\";\nimport AddRoundedIcon from \"@mui/icons-material/AddRounded\";\nimport RefreshRoundedIcon from \"@mui/icons-material/RefreshRounded\";\nimport SyncRoundedIcon from \"@mui/icons-material/SyncRounded\";\nimport InboxRoundedIcon from \"@mui/icons-material/InboxRounded\";\nimport OpenInNewRoundedIcon from \"@mui/icons-material/OpenInNewRounded\";\nimport DnsRoundedIcon from \"@mui/icons-material/DnsRounded\";\nimport LockRoundedIcon from \"@mui/icons-material/LockRounded\";\nimport LockOpenRoundedIcon from \"@mui/icons-material/LockOpenRounded\";\nimport moment from \"moment\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { retrieveAllServers } from \"../../services/FhirResource\";\nimport { FhirPageHeader, StatusChip, MonoText } from \"./components/FhirUi\";\nimport { FhirGuard, useFhirPermissions } from \"./components/permissions\";\nimport SyncDialog from \"./SyncDialog\";\n\nfunction ServerCard({ server, onOpen, onSync, onStaging, canManage }) {\n const secured = server.authType && server.authType !== \"NONE\";\n return (\n <Card variant=\"outlined\" sx={{ height: \"100%\", borderRadius: 2, display: \"flex\", flexDirection: \"column\" }}>\n <CardContent sx={{ flexGrow: 1 }}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Box sx={{ width: 36, height: 36, borderRadius: 1.5, bgcolor: \"primary.main\", color: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\n <DnsRoundedIcon fontSize=\"small\" />\n </Box>\n <Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 800, lineHeight: 1.1 }}>{server.name}</Typography>\n <Chip\n size=\"small\"\n icon={secured ? <LockRoundedIcon /> : <LockOpenRoundedIcon />}\n label={secured ? server.authType : \"Public\"}\n variant=\"outlined\"\n sx={{ height: 20, mt: 0.5 }}\n />\n </Box>\n </Stack>\n <StatusChip value={server.isActive ? \"ACTIVE\" : \"INACTIVE\"} />\n </Stack>\n\n <Box sx={{ mt: 1.5 }}><MonoText muted>{server.baseUrl}</MonoText></Box>\n\n <Divider sx={{ my: 1.5 }} />\n\n {server.capabilitySyncedAt ? (\n <Stack direction=\"row\" spacing={0.75} flexWrap=\"wrap\" useFlexGap>\n {server.fhirVersion ? <Chip size=\"small\" label={`FHIR ${server.fhirVersion}`} sx={{ height: 22 }} /> : null}\n <Chip size=\"small\" label={`${server.supportedResources?.length ?? 0} resources`} sx={{ height: 22 }} />\n {server.supportsExpand ? <Chip size=\"small\" color=\"success\" label=\"$expand\" sx={{ height: 22 }} /> : null}\n </Stack>\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">Capability not discovered</Typography>\n )}\n {server.capabilitySyncedAt && (\n <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" sx={{ mt: 1 }}>\n synced {moment(server.capabilitySyncedAt).fromNow()}\n </Typography>\n )}\n </CardContent>\n <CardActions sx={{ px: 2, pb: 2, pt: 0, gap: 1, flexWrap: \"wrap\" }}>\n <Button size=\"small\" variant=\"contained\" startIcon={<OpenInNewRoundedIcon />} onClick={onOpen}>Open</Button>\n {canManage && (\n <Button size=\"small\" variant=\"outlined\" startIcon={<SyncRoundedIcon />} onClick={onSync}>Sync</Button>\n )}\n <Button size=\"small\" variant=\"outlined\" startIcon={<InboxRoundedIcon />} onClick={onStaging}>Staging</Button>\n </CardActions>\n </Card>\n );\n}\n\nfunction FhirServerList() {\n const navigate = useNavigate();\n const { canManage } = useFhirPermissions();\n const [servers, setServers] = useState([]);\n const [loading, setLoading] = useState(false);\n const [syncServer, setSyncServer] = useState(null);\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const res = await retrieveAllServers();\n setServers(res?.data ?? []);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load FHIR servers.\" });\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => { load(); }, [load]);\n\n return (\n <FhirGuard>\n <Box sx={{ p: { xs: 2, md: 3 } }}>\n <FhirPageHeader\n title=\"FHIR Sync\"\n subtitle=\"Connect any FHIR-compliant server by its base URL, discover what it supports, then sync resources into the staging inbox and process them into the system.\"\n chips={[\"Sync\", \"Raw Storage\", \"Processing\"]}\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" startIcon={<RefreshRoundedIcon />} onClick={load}>Refresh</Button>\n {canManage && (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />} onClick={() => navigate(\"/ui/medplat/admin/fhirResource/new\")}>\n Connect Server\n </Button>\n )}\n </Stack>\n }\n />\n\n {loading ? (\n <Grid container spacing={2}>\n {Array.from({ length: 3 }).map((_, i) => (\n <Grid item xs={12} sm={6} md={4} key={i}><Skeleton variant=\"rounded\" height={220} /></Grid>\n ))}\n </Grid>\n ) : servers.length === 0 ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2, p: 5, textAlign: \"center\" }}>\n <Stack alignItems=\"center\" spacing={1.5}>\n <DnsRoundedIcon sx={{ fontSize: 48, color: \"text.disabled\" }} />\n <Typography variant=\"h6\" sx={{ fontWeight: 700 }}>No FHIR servers yet</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ maxWidth: 420 }}>\n Connect a FHIR server by its base URL. We’ll guide you through discovering its capabilities and syncing resources.\n </Typography>\n {canManage && (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />} onClick={() => navigate(\"/ui/medplat/admin/fhirResource/new\")}>\n Connect your first server\n </Button>\n )}\n </Stack>\n </Card>\n ) : (\n <Grid container spacing={2}>\n {servers.map((s) => (\n <Grid item xs={12} sm={6} md={4} key={s.id}>\n <ServerCard\n server={s}\n canManage={canManage}\n onOpen={() => navigate(`/ui/medplat/admin/fhirResource/${s.id}`)}\n onSync={() => setSyncServer(s)}\n onStaging={() => navigate(`/ui/medplat/admin/fhirResource/${s.id}/staging`)}\n />\n </Grid>\n ))}\n </Grid>\n )}\n\n {syncServer && (\n <SyncDialog\n open={Boolean(syncServer)}\n server={syncServer}\n onClose={() => setSyncServer(null)}\n onDone={load}\n />\n )}\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirServerList;\n"],"names":["ServerCard","server","onOpen","onSync","onStaging","canManage","secured","jsxs","Card","CardContent","Stack","jsx","Box","DnsRoundedIcon","Typography","Chip","LockRoundedIcon","LockOpenRoundedIcon","StatusChip","MonoText","Divider","_a","moment","CardActions","Button","OpenInNewRoundedIcon","SyncRoundedIcon","InboxRoundedIcon","FhirServerList","navigate","useNavigate","useFhirPermissions","servers","setServers","useState","loading","setLoading","syncServer","setSyncServer","load","useCallback","res","retrieveAllServers","showToast","useEffect","FhirGuard","FhirPageHeader","RefreshRoundedIcon","AddRoundedIcon","Grid","_","i","Skeleton","s","SyncDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FhirServerList-DuTwnngN.js","sources":["../src/views/FhirResource/FhirServerList.jsx"],"sourcesContent":["import { useEffect, useState, useCallback } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n Box, Button, Stack, Typography, Skeleton, Chip, Grid,\n Card, CardContent, CardActions, Divider,\n} from \"@mui/material\";\nimport AddRoundedIcon from \"@mui/icons-material/AddRounded\";\nimport RefreshRoundedIcon from \"@mui/icons-material/RefreshRounded\";\nimport SyncRoundedIcon from \"@mui/icons-material/SyncRounded\";\nimport InboxRoundedIcon from \"@mui/icons-material/InboxRounded\";\nimport OpenInNewRoundedIcon from \"@mui/icons-material/OpenInNewRounded\";\nimport DnsRoundedIcon from \"@mui/icons-material/DnsRounded\";\nimport LockRoundedIcon from \"@mui/icons-material/LockRounded\";\nimport LockOpenRoundedIcon from \"@mui/icons-material/LockOpenRounded\";\nimport moment from \"moment\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { retrieveAllServers } from \"../../services/FhirResource\";\nimport { FhirPageHeader, StatusChip, MonoText } from \"./components/FhirUi\";\nimport { FhirGuard, useFhirPermissions } from \"./components/permissions\";\nimport SyncDialog from \"./SyncDialog\";\n\nfunction ServerCard({ server, onOpen, onSync, onStaging, canManage }) {\n const secured = server.authType && server.authType !== \"NONE\";\n return (\n <Card variant=\"outlined\" sx={{ height: \"100%\", borderRadius: 2, display: \"flex\", flexDirection: \"column\" }}>\n <CardContent sx={{ flexGrow: 1 }}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <Box sx={{ width: 36, height: 36, borderRadius: 1.5, bgcolor: \"primary.main\", color: \"#fff\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\" }}>\n <DnsRoundedIcon fontSize=\"small\" />\n </Box>\n <Box>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 800, lineHeight: 1.1 }}>{server.name}</Typography>\n <Chip\n size=\"small\"\n icon={secured ? <LockRoundedIcon /> : <LockOpenRoundedIcon />}\n label={secured ? server.authType : \"Public\"}\n variant=\"outlined\"\n sx={{ height: 20, mt: 0.5 }}\n />\n </Box>\n </Stack>\n <StatusChip value={server.isActive ? \"ACTIVE\" : \"INACTIVE\"} />\n </Stack>\n\n <Box sx={{ mt: 1.5 }}><MonoText muted>{server.baseUrl}</MonoText></Box>\n\n <Divider sx={{ my: 1.5 }} />\n\n {server.capabilitySyncedAt ? (\n <Stack direction=\"row\" spacing={0.75} flexWrap=\"wrap\" useFlexGap>\n {server.fhirVersion ? <Chip size=\"small\" label={`FHIR ${server.fhirVersion}`} sx={{ height: 22 }} /> : null}\n <Chip size=\"small\" label={`${server.supportedResources?.length ?? 0} resources`} sx={{ height: 22 }} />\n {server.supportsExpand ? <Chip size=\"small\" color=\"success\" label=\"$expand\" sx={{ height: 22 }} /> : null}\n </Stack>\n ) : (\n <Typography variant=\"caption\" color=\"text.disabled\">Capability not discovered</Typography>\n )}\n {server.capabilitySyncedAt && (\n <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" sx={{ mt: 1 }}>\n synced {moment(server.capabilitySyncedAt).fromNow()}\n </Typography>\n )}\n </CardContent>\n <CardActions sx={{ px: 2, pb: 2, pt: 0, gap: 1, flexWrap: \"wrap\" }}>\n <Button size=\"small\" variant=\"contained\" startIcon={<OpenInNewRoundedIcon />} onClick={onOpen}>Open</Button>\n {canManage && (\n <Button size=\"small\" variant=\"outlined\" startIcon={<SyncRoundedIcon />} onClick={onSync}>Sync</Button>\n )}\n <Button size=\"small\" variant=\"outlined\" startIcon={<InboxRoundedIcon />} onClick={onStaging}>Staging</Button>\n </CardActions>\n </Card>\n );\n}\n\nfunction FhirServerList() {\n const navigate = useNavigate();\n const { canManage } = useFhirPermissions();\n const [servers, setServers] = useState([]);\n const [loading, setLoading] = useState(false);\n const [syncServer, setSyncServer] = useState(null);\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const res = await retrieveAllServers();\n setServers(res?.data ?? []);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load FHIR servers.\" });\n } finally {\n setLoading(false);\n }\n }, []);\n\n useEffect(() => { load(); }, [load]);\n\n return (\n <FhirGuard>\n <Box sx={{ p: { xs: 2, md: 3 } }}>\n <FhirPageHeader\n title=\"FHIR Sync\"\n subtitle=\"Connect any FHIR-compliant server by its base URL, discover what it supports, then sync resources into the staging inbox and process them into the system.\"\n chips={[\"Sync\", \"Raw Storage\", \"Processing\"]}\n actions={\n <Stack direction=\"row\" spacing={1}>\n <Button variant=\"outlined\" startIcon={<RefreshRoundedIcon />} onClick={load}>Refresh</Button>\n {canManage && (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />} onClick={() => navigate(\"/ui/medplat/admin/fhirResource/new\")}>\n Connect Server\n </Button>\n )}\n </Stack>\n }\n />\n\n {loading ? (\n <Grid container spacing={2}>\n {Array.from({ length: 3 }).map((_, i) => (\n <Grid item xs={12} sm={6} md={4} key={i}><Skeleton variant=\"rounded\" height={220} /></Grid>\n ))}\n </Grid>\n ) : servers.length === 0 ? (\n <Card variant=\"outlined\" sx={{ borderRadius: 2, p: 5, textAlign: \"center\" }}>\n <Stack alignItems=\"center\" spacing={1.5}>\n <DnsRoundedIcon sx={{ fontSize: 48, color: \"text.disabled\" }} />\n <Typography variant=\"h6\" sx={{ fontWeight: 700 }}>No FHIR servers yet</Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ maxWidth: 420 }}>\n Connect a FHIR server by its base URL. We’ll guide you through discovering its capabilities and syncing resources.\n </Typography>\n {canManage && (\n <Button variant=\"contained\" startIcon={<AddRoundedIcon />} onClick={() => navigate(\"/ui/medplat/admin/fhirResource/new\")}>\n Connect your first server\n </Button>\n )}\n </Stack>\n </Card>\n ) : (\n <Grid container spacing={2}>\n {servers.map((s) => (\n <Grid item xs={12} sm={6} md={4} key={s.id}>\n <ServerCard\n server={s}\n canManage={canManage}\n onOpen={() => navigate(`/ui/medplat/admin/fhirResource/${s.id}`)}\n onSync={() => setSyncServer(s)}\n onStaging={() => navigate(`/ui/medplat/admin/fhirResource/${s.id}/staging`)}\n />\n </Grid>\n ))}\n </Grid>\n )}\n\n {syncServer && (\n <SyncDialog\n open={Boolean(syncServer)}\n server={syncServer}\n onClose={() => setSyncServer(null)}\n onDone={load}\n />\n )}\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirServerList;\n"],"names":["ServerCard","server","onOpen","onSync","onStaging","canManage","secured","jsxs","Card","CardContent","Stack","jsx","Box","DnsRoundedIcon","Typography","Chip","LockRoundedIcon","LockOpenRoundedIcon","StatusChip","MonoText","Divider","_a","moment","CardActions","Button","OpenInNewRoundedIcon","SyncRoundedIcon","InboxRoundedIcon","FhirServerList","navigate","useNavigate","useFhirPermissions","servers","setServers","useState","loading","setLoading","syncServer","setSyncServer","load","useCallback","res","retrieveAllServers","showToast","useEffect","FhirGuard","FhirPageHeader","RefreshRoundedIcon","AddRoundedIcon","Grid","_","i","Skeleton","s","SyncDialog"],"mappings":"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"}
|
|
@@ -9,9 +9,9 @@ import { showToast as f } from "@/common/toaster/toaster";
|
|
|
9
9
|
import { F as de, b as pe, a as he, c as E, d as ue, e as ye, f as me, s as ge } from "./permissions-DEWACxJN.js";
|
|
10
10
|
import { S as Se, v as fe } from "./ServerFormFields-SLghoZ2z.js";
|
|
11
11
|
const Ce = ["Server Details", "Discover Capability", "Sync Resources"], be = ["ValueSet", "CodeSystem", "Organization", "Location", "HealthcareService"];
|
|
12
|
-
function
|
|
12
|
+
function Ie() {
|
|
13
13
|
var L, U, z, G;
|
|
14
|
-
const C = ee(), [y, b] = c(0), [x, M] = c({ name: "", baseUrl: "", authType: "NONE", isActive: !0 }), [V, Y] = c({}), [t, T] = c(null), [d, m] = c(!1), [v,
|
|
14
|
+
const C = ee(), [y, b] = c(0), [x, M] = c({ name: "", baseUrl: "", authType: "NONE", isActive: !0 }), [V, Y] = c({}), [t, T] = c(null), [d, m] = c(!1), [v, w] = c("idle"), [_, P] = c(""), [h, A] = c({}), [I, q] = c(!0), [j, W] = c(null), $ = () => C("/ui/medplat/admin/fhirResource"), J = async () => {
|
|
15
15
|
var a, s;
|
|
16
16
|
const r = fe(x);
|
|
17
17
|
if (Y(r), !Object.keys(r).length) {
|
|
@@ -27,25 +27,25 @@ function Ae() {
|
|
|
27
27
|
}
|
|
28
28
|
}, B = async (r) => {
|
|
29
29
|
var a, s;
|
|
30
|
-
|
|
30
|
+
w("loading"), P("");
|
|
31
31
|
try {
|
|
32
32
|
const o = await me(r);
|
|
33
|
-
T(o.data),
|
|
33
|
+
T(o.data), w("done");
|
|
34
34
|
} catch (o) {
|
|
35
|
-
|
|
35
|
+
w("error"), P(((s = (a = o == null ? void 0 : o.response) == null ? void 0 : a.data) == null ? void 0 : s.message) ?? "Could not reach the server's /metadata endpoint.");
|
|
36
36
|
}
|
|
37
|
-
}, u = (L = t == null ? void 0 : t.supportedResources) != null && L.length ? t.supportedResources : be,
|
|
38
|
-
|
|
37
|
+
}, u = (L = t == null ? void 0 : t.supportedResources) != null && L.length ? t.supportedResources : be, k = Object.keys(h).filter((r) => h[r]), D = u.length > 0 && u.every((r) => h[r]), K = u.some((r) => h[r]), Q = (r) => {
|
|
38
|
+
A(Object.fromEntries(u.map((a) => [a, r])));
|
|
39
39
|
}, X = async () => {
|
|
40
40
|
var r, a;
|
|
41
|
-
if (
|
|
41
|
+
if (k.length === 0) {
|
|
42
42
|
f({ type: "error", message: "Select at least one resource type, or skip this step." });
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
45
|
m(!0);
|
|
46
46
|
try {
|
|
47
|
-
const s = await ge(t.id,
|
|
48
|
-
alsoProcess:
|
|
47
|
+
const s = await ge(t.id, k, {
|
|
48
|
+
alsoProcess: I,
|
|
49
49
|
onProgress: W
|
|
50
50
|
});
|
|
51
51
|
f({ type: "success", message: `Synced ${s} resource(s).` }), C(`/ui/medplat/admin/fhirResource/${t.id}`);
|
|
@@ -134,7 +134,7 @@ function Ae() {
|
|
|
134
134
|
/* @__PURE__ */ e(i, { children: u.map((r) => /* @__PURE__ */ e(
|
|
135
135
|
R,
|
|
136
136
|
{
|
|
137
|
-
control: /* @__PURE__ */ e(F, { checked: !!h[r], onChange: (a) =>
|
|
137
|
+
control: /* @__PURE__ */ e(F, { checked: !!h[r], onChange: (a) => A((s) => ({ ...s, [r]: a.target.checked })) }),
|
|
138
138
|
label: r
|
|
139
139
|
},
|
|
140
140
|
r
|
|
@@ -143,19 +143,19 @@ function Ae() {
|
|
|
143
143
|
R,
|
|
144
144
|
{
|
|
145
145
|
sx: { mt: 1 },
|
|
146
|
-
control: /* @__PURE__ */ e(F, { checked:
|
|
146
|
+
control: /* @__PURE__ */ e(F, { checked: I, onChange: (r) => q(r.target.checked) }),
|
|
147
147
|
label: /* @__PURE__ */ e(p, { variant: "body2", children: "Process into the system after sync" })
|
|
148
148
|
}
|
|
149
149
|
)
|
|
150
150
|
] }),
|
|
151
151
|
/* @__PURE__ */ n(i, { direction: "row", spacing: 1, justifyContent: "flex-end", sx: { mt: 3 }, children: [
|
|
152
152
|
!d && /* @__PURE__ */ e(l, { onClick: O, children: "Skip" }),
|
|
153
|
-
/* @__PURE__ */ e(l, { variant: "contained", onClick: X, disabled: d, children: d ? "Syncing…" : `Sync ${
|
|
153
|
+
/* @__PURE__ */ e(l, { variant: "contained", onClick: X, disabled: d, children: d ? "Syncing…" : `Sync ${k.length || ""} Selected` })
|
|
154
154
|
] })
|
|
155
155
|
] }) })
|
|
156
156
|
] }) });
|
|
157
157
|
}
|
|
158
158
|
export {
|
|
159
|
-
|
|
159
|
+
Ie as default
|
|
160
160
|
};
|
|
161
|
-
//# sourceMappingURL=FhirServerWizard-
|
|
161
|
+
//# sourceMappingURL=FhirServerWizard-DZI8Olku.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FhirServerWizard-Db6Hm4bQ.js","sources":["../src/views/FhirResource/FhirServerWizard.jsx"],"sourcesContent":["import { useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n Box, Button, Stack, Typography, Stepper, Step, StepLabel, Paper,\n CircularProgress, Alert, Chip, FormControlLabel, Checkbox, Divider, IconButton, Tooltip,\n} from \"@mui/material\";\nimport ArrowBackRoundedIcon from \"@mui/icons-material/ArrowBackRounded\";\nimport CheckCircleRoundedIcon from \"@mui/icons-material/CheckCircleRounded\";\nimport CloudSyncRoundedIcon from \"@mui/icons-material/CloudSyncRounded\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n createServer, refreshCapability, syncTypesSequentially,\n} from \"../../services/FhirResource\";\nimport { FhirPageHeader, SectionCard, SyncProgress } from \"./components/FhirUi\";\nimport { FhirGuard, FHIR_PERMS } from \"./components/permissions\";\nimport ServerFormFields, { validateServerForm } from \"./components/ServerFormFields\";\n\nconst STEPS = [\"Server Details\", \"Discover Capability\", \"Sync Resources\"];\nconst DEFAULT_TYPES = [\"ValueSet\", \"CodeSystem\", \"Organization\", \"Location\", \"HealthcareService\"];\n\nfunction FhirServerWizard() {\n const navigate = useNavigate();\n const [activeStep, setActiveStep] = useState(0);\n\n const [form, setForm] = useState({ name: \"\", baseUrl: \"\", authType: \"NONE\", isActive: true });\n const [errors, setErrors] = useState({});\n const [server, setServer] = useState(null); // created server (with id + capability)\n const [busy, setBusy] = useState(false);\n\n // capability step\n const [capState, setCapState] = useState(\"idle\"); // idle | loading | done | error\n const [capError, setCapError] = useState(\"\");\n\n // sync step\n const [selected, setSelected] = useState({});\n const [alsoProcess, setAlsoProcess] = useState(true);\n const [progress, setProgress] = useState(null);\n\n const goToServers = () => navigate(\"/ui/medplat/admin/fhirResource\");\n\n // ---- Step 0: create the server ----\n const handleCreate = async () => {\n const errs = validateServerForm(form);\n setErrors(errs);\n if (Object.keys(errs).length) return;\n setBusy(true);\n try {\n const res = await createServer(form);\n setServer(res.data);\n setActiveStep(1);\n runCapability(res.data.id);\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Failed to create server.\" });\n } finally {\n setBusy(false);\n }\n };\n\n // ---- Step 1: discover capability ----\n const runCapability = async (serverId) => {\n setCapState(\"loading\");\n setCapError(\"\");\n try {\n const res = await refreshCapability(serverId);\n setServer(res.data);\n setCapState(\"done\");\n } catch (err) {\n setCapState(\"error\");\n setCapError(err?.response?.data?.message ?? \"Could not reach the server's /metadata endpoint.\");\n }\n };\n\n const availableTypes = server?.supportedResources?.length ? server.supportedResources : DEFAULT_TYPES;\n const checkedTypes = Object.keys(selected).filter((t) => selected[t]);\n const allSelected = availableTypes.length > 0 && availableTypes.every((t) => selected[t]);\n const someSelected = availableTypes.some((t) => selected[t]);\n\n const toggleSelectAll = (checked) => {\n setSelected(Object.fromEntries(availableTypes.map((t) => [t, checked])));\n };\n\n // ---- Step 2: sync ----\n const handleSync = async () => {\n if (checkedTypes.length === 0) {\n showToast({ type: \"error\", message: \"Select at least one resource type, or skip this step.\" });\n return;\n }\n setBusy(true);\n try {\n const total = await syncTypesSequentially(server.id, checkedTypes, {\n alsoProcess,\n onProgress: setProgress,\n });\n showToast({ type: \"success\", message: `Synced ${total} resource(s).` });\n navigate(`/ui/medplat/admin/fhirResource/${server.id}`);\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Sync failed.\" });\n } finally {\n setBusy(false);\n setProgress(null);\n }\n };\n\n const finishSkip = () => navigate(`/ui/medplat/admin/fhirResource/${server.id}`);\n\n return (\n <FhirGuard perm={FHIR_PERMS.MANAGE}>\n <Box sx={{ p: { xs: 2, md: 3 } }}>\n <FhirPageHeader\n title={\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Tooltip title=\"Back to servers\">\n <IconButton size=\"small\" onClick={goToServers}><ArrowBackRoundedIcon fontSize=\"small\" /></IconButton>\n </Tooltip>\n <span>Connect a FHIR Server</span>\n </Stack>\n }\n subtitle=\"Register a server by its base URL, discover what it supports, and optionally sync resources — all in a few guided steps.\"\n />\n\n <Stepper activeStep={activeStep} alternativeLabel sx={{ mb: 3 }}>\n {STEPS.map((label) => (\n <Step key={label}><StepLabel>{label}</StepLabel></Step>\n ))}\n </Stepper>\n\n {/* Step 0 */}\n {activeStep === 0 && (\n <SectionCard title=\"Server Details\" subtitle=\"Where to connect and how to authenticate\">\n <Box sx={{ maxWidth: 560 }}>\n <ServerFormFields value={form} onChange={setForm} errors={errors} />\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\" sx={{ mt: 3 }}>\n <Button onClick={goToServers} disabled={busy}>Cancel</Button>\n <Button variant=\"contained\" onClick={handleCreate} disabled={busy}>\n {busy ? \"Creating…\" : \"Create & Continue\"}\n </Button>\n </Stack>\n </Box>\n </SectionCard>\n )}\n\n {/* Step 1 */}\n {activeStep === 1 && (\n <SectionCard title=\"Discover Capability\" subtitle=\"Reading GET /metadata to learn what this server supports\">\n {capState === \"loading\" && (\n <Stack alignItems=\"center\" spacing={2} sx={{ py: 5 }}>\n <CircularProgress />\n <Typography variant=\"body2\" color=\"text.secondary\">Contacting {server?.baseUrl}…</Typography>\n </Stack>\n )}\n\n {capState === \"error\" && (\n <Stack spacing={2} sx={{ py: 2 }}>\n <Alert severity=\"error\">{capError}</Alert>\n <Typography variant=\"body2\" color=\"text.secondary\">\n The server was saved. You can retry capability discovery, or continue and try later from the server profile.\n </Typography>\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Button onClick={() => runCapability(server.id)} startIcon={<CloudSyncRoundedIcon />}>Retry</Button>\n <Button variant=\"contained\" onClick={() => setActiveStep(2)}>Continue anyway</Button>\n </Stack>\n </Stack>\n )}\n\n {capState === \"done\" && (\n <Stack spacing={2} sx={{ py: 1 }}>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <CheckCircleRoundedIcon color=\"success\" />\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>Capability discovered</Typography>\n </Stack>\n <Stack direction=\"row\" spacing={1.5} flexWrap=\"wrap\" useFlexGap>\n <Chip label={`FHIR ${server?.fhirVersion ?? \"?\"}`} color=\"primary\" variant=\"outlined\" />\n <Chip label={`${server?.supportedResources?.length ?? 0} resource types`} variant=\"outlined\" />\n <Chip label={server?.supportsExpand ? \"$expand supported\" : \"no $expand\"} color={server?.supportsExpand ? \"success\" : \"default\"} variant=\"outlined\" />\n </Stack>\n {server?.supportedResources?.length ? (\n <Box>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontWeight: 700 }}>SUPPORTED RESOURCES</Typography>\n <Stack direction=\"row\" spacing={0.75} flexWrap=\"wrap\" useFlexGap sx={{ mt: 0.75 }}>\n {server.supportedResources.map((r) => <Chip key={r} size=\"small\" label={r} />)}\n </Stack>\n </Box>\n ) : null}\n <Divider />\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Button onClick={finishSkip}>Finish (sync later)</Button>\n <Button variant=\"contained\" onClick={() => setActiveStep(2)}>Continue to Sync</Button>\n </Stack>\n </Stack>\n )}\n </SectionCard>\n )}\n\n {/* Step 2 */}\n {activeStep === 2 && (\n <SectionCard title=\"Sync Resources\" subtitle=\"Choose what to sync now — you can always sync more later\">\n <Box sx={{ maxWidth: 560 }}>\n {busy && progress ? (\n <SyncProgress progress={progress} />\n ) : (\n <>\n {!server?.supportedResources?.length && (\n <Alert severity=\"info\" sx={{ mb: 2 }}>\n Capability wasn't discovered — showing common resource types.\n </Alert>\n )}\n <FormControlLabel\n control={\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={(e) => toggleSelectAll(e.target.checked)}\n />\n }\n label={<Typography variant=\"body2\" sx={{ fontWeight: 700 }}>Select All</Typography>}\n sx={{ mb: 0.5 }}\n />\n <Divider sx={{ mb: 1 }} />\n <Stack>\n {availableTypes.map((t) => (\n <FormControlLabel\n key={t}\n control={<Checkbox checked={Boolean(selected[t])} onChange={(e) => setSelected((s) => ({ ...s, [t]: e.target.checked }))} />}\n label={t}\n />\n ))}\n </Stack>\n <FormControlLabel\n sx={{ mt: 1 }}\n control={<Checkbox checked={alsoProcess} onChange={(e) => setAlsoProcess(e.target.checked)} />}\n label={<Typography variant=\"body2\">Process into the system after sync</Typography>}\n />\n </>\n )}\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\" sx={{ mt: 3 }}>\n {/* While syncing the user can only watch progress — no skip/cancel. */}\n {!busy && <Button onClick={finishSkip}>Skip</Button>}\n <Button variant=\"contained\" onClick={handleSync} disabled={busy}>\n {busy ? \"Syncing…\" : `Sync ${checkedTypes.length || \"\"} Selected`}\n </Button>\n </Stack>\n </Box>\n </SectionCard>\n )}\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirServerWizard;\n"],"names":["STEPS","DEFAULT_TYPES","FhirServerWizard","navigate","useNavigate","activeStep","setActiveStep","useState","form","setForm","errors","setErrors","server","setServer","busy","setBusy","capState","setCapState","capError","setCapError","selected","setSelected","alsoProcess","setAlsoProcess","progress","setProgress","goToServers","handleCreate","errs","validateServerForm","res","createServer","runCapability","err","showToast","_b","_a","serverId","refreshCapability","availableTypes","checkedTypes","t","allSelected","someSelected","toggleSelectAll","checked","handleSync","total","syncTypesSequentially","finishSkip","FhirGuard","FHIR_PERMS","Box","jsx","FhirPageHeader","Stack","Tooltip","IconButton","ArrowBackRoundedIcon","Stepper","label","Step","StepLabel","SectionCard","jsxs","ServerFormFields","Button","CircularProgress","Typography","Alert","CloudSyncRoundedIcon","CheckCircleRoundedIcon","Chip","_c","Divider","SyncProgress","Fragment","_d","FormControlLabel","Checkbox","e"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FhirServerWizard-DZI8Olku.js","sources":["../src/views/FhirResource/FhirServerWizard.jsx"],"sourcesContent":["import { useState } from \"react\";\nimport { useNavigate } from \"react-router\";\nimport {\n Box, Button, Stack, Typography, Stepper, Step, StepLabel, Paper,\n CircularProgress, Alert, Chip, FormControlLabel, Checkbox, Divider, IconButton, Tooltip,\n} from \"@mui/material\";\nimport ArrowBackRoundedIcon from \"@mui/icons-material/ArrowBackRounded\";\nimport CheckCircleRoundedIcon from \"@mui/icons-material/CheckCircleRounded\";\nimport CloudSyncRoundedIcon from \"@mui/icons-material/CloudSyncRounded\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n createServer, refreshCapability, syncTypesSequentially,\n} from \"../../services/FhirResource\";\nimport { FhirPageHeader, SectionCard, SyncProgress } from \"./components/FhirUi\";\nimport { FhirGuard, FHIR_PERMS } from \"./components/permissions\";\nimport ServerFormFields, { validateServerForm } from \"./components/ServerFormFields\";\n\nconst STEPS = [\"Server Details\", \"Discover Capability\", \"Sync Resources\"];\nconst DEFAULT_TYPES = [\"ValueSet\", \"CodeSystem\", \"Organization\", \"Location\", \"HealthcareService\"];\n\nfunction FhirServerWizard() {\n const navigate = useNavigate();\n const [activeStep, setActiveStep] = useState(0);\n\n const [form, setForm] = useState({ name: \"\", baseUrl: \"\", authType: \"NONE\", isActive: true });\n const [errors, setErrors] = useState({});\n const [server, setServer] = useState(null); // created server (with id + capability)\n const [busy, setBusy] = useState(false);\n\n // capability step\n const [capState, setCapState] = useState(\"idle\"); // idle | loading | done | error\n const [capError, setCapError] = useState(\"\");\n\n // sync step\n const [selected, setSelected] = useState({});\n const [alsoProcess, setAlsoProcess] = useState(true);\n const [progress, setProgress] = useState(null);\n\n const goToServers = () => navigate(\"/ui/medplat/admin/fhirResource\");\n\n // ---- Step 0: create the server ----\n const handleCreate = async () => {\n const errs = validateServerForm(form);\n setErrors(errs);\n if (Object.keys(errs).length) return;\n setBusy(true);\n try {\n const res = await createServer(form);\n setServer(res.data);\n setActiveStep(1);\n runCapability(res.data.id);\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Failed to create server.\" });\n } finally {\n setBusy(false);\n }\n };\n\n // ---- Step 1: discover capability ----\n const runCapability = async (serverId) => {\n setCapState(\"loading\");\n setCapError(\"\");\n try {\n const res = await refreshCapability(serverId);\n setServer(res.data);\n setCapState(\"done\");\n } catch (err) {\n setCapState(\"error\");\n setCapError(err?.response?.data?.message ?? \"Could not reach the server's /metadata endpoint.\");\n }\n };\n\n const availableTypes = server?.supportedResources?.length ? server.supportedResources : DEFAULT_TYPES;\n const checkedTypes = Object.keys(selected).filter((t) => selected[t]);\n const allSelected = availableTypes.length > 0 && availableTypes.every((t) => selected[t]);\n const someSelected = availableTypes.some((t) => selected[t]);\n\n const toggleSelectAll = (checked) => {\n setSelected(Object.fromEntries(availableTypes.map((t) => [t, checked])));\n };\n\n // ---- Step 2: sync ----\n const handleSync = async () => {\n if (checkedTypes.length === 0) {\n showToast({ type: \"error\", message: \"Select at least one resource type, or skip this step.\" });\n return;\n }\n setBusy(true);\n try {\n const total = await syncTypesSequentially(server.id, checkedTypes, {\n alsoProcess,\n onProgress: setProgress,\n });\n showToast({ type: \"success\", message: `Synced ${total} resource(s).` });\n navigate(`/ui/medplat/admin/fhirResource/${server.id}`);\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Sync failed.\" });\n } finally {\n setBusy(false);\n setProgress(null);\n }\n };\n\n const finishSkip = () => navigate(`/ui/medplat/admin/fhirResource/${server.id}`);\n\n return (\n <FhirGuard perm={FHIR_PERMS.MANAGE}>\n <Box sx={{ p: { xs: 2, md: 3 } }}>\n <FhirPageHeader\n title={\n <Stack direction=\"row\" alignItems=\"center\" spacing={1}>\n <Tooltip title=\"Back to servers\">\n <IconButton size=\"small\" onClick={goToServers}><ArrowBackRoundedIcon fontSize=\"small\" /></IconButton>\n </Tooltip>\n <span>Connect a FHIR Server</span>\n </Stack>\n }\n subtitle=\"Register a server by its base URL, discover what it supports, and optionally sync resources — all in a few guided steps.\"\n />\n\n <Stepper activeStep={activeStep} alternativeLabel sx={{ mb: 3 }}>\n {STEPS.map((label) => (\n <Step key={label}><StepLabel>{label}</StepLabel></Step>\n ))}\n </Stepper>\n\n {/* Step 0 */}\n {activeStep === 0 && (\n <SectionCard title=\"Server Details\" subtitle=\"Where to connect and how to authenticate\">\n <Box sx={{ maxWidth: 560 }}>\n <ServerFormFields value={form} onChange={setForm} errors={errors} />\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\" sx={{ mt: 3 }}>\n <Button onClick={goToServers} disabled={busy}>Cancel</Button>\n <Button variant=\"contained\" onClick={handleCreate} disabled={busy}>\n {busy ? \"Creating…\" : \"Create & Continue\"}\n </Button>\n </Stack>\n </Box>\n </SectionCard>\n )}\n\n {/* Step 1 */}\n {activeStep === 1 && (\n <SectionCard title=\"Discover Capability\" subtitle=\"Reading GET /metadata to learn what this server supports\">\n {capState === \"loading\" && (\n <Stack alignItems=\"center\" spacing={2} sx={{ py: 5 }}>\n <CircularProgress />\n <Typography variant=\"body2\" color=\"text.secondary\">Contacting {server?.baseUrl}…</Typography>\n </Stack>\n )}\n\n {capState === \"error\" && (\n <Stack spacing={2} sx={{ py: 2 }}>\n <Alert severity=\"error\">{capError}</Alert>\n <Typography variant=\"body2\" color=\"text.secondary\">\n The server was saved. You can retry capability discovery, or continue and try later from the server profile.\n </Typography>\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Button onClick={() => runCapability(server.id)} startIcon={<CloudSyncRoundedIcon />}>Retry</Button>\n <Button variant=\"contained\" onClick={() => setActiveStep(2)}>Continue anyway</Button>\n </Stack>\n </Stack>\n )}\n\n {capState === \"done\" && (\n <Stack spacing={2} sx={{ py: 1 }}>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n <CheckCircleRoundedIcon color=\"success\" />\n <Typography variant=\"subtitle1\" sx={{ fontWeight: 700 }}>Capability discovered</Typography>\n </Stack>\n <Stack direction=\"row\" spacing={1.5} flexWrap=\"wrap\" useFlexGap>\n <Chip label={`FHIR ${server?.fhirVersion ?? \"?\"}`} color=\"primary\" variant=\"outlined\" />\n <Chip label={`${server?.supportedResources?.length ?? 0} resource types`} variant=\"outlined\" />\n <Chip label={server?.supportsExpand ? \"$expand supported\" : \"no $expand\"} color={server?.supportsExpand ? \"success\" : \"default\"} variant=\"outlined\" />\n </Stack>\n {server?.supportedResources?.length ? (\n <Box>\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontWeight: 700 }}>SUPPORTED RESOURCES</Typography>\n <Stack direction=\"row\" spacing={0.75} flexWrap=\"wrap\" useFlexGap sx={{ mt: 0.75 }}>\n {server.supportedResources.map((r) => <Chip key={r} size=\"small\" label={r} />)}\n </Stack>\n </Box>\n ) : null}\n <Divider />\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n <Button onClick={finishSkip}>Finish (sync later)</Button>\n <Button variant=\"contained\" onClick={() => setActiveStep(2)}>Continue to Sync</Button>\n </Stack>\n </Stack>\n )}\n </SectionCard>\n )}\n\n {/* Step 2 */}\n {activeStep === 2 && (\n <SectionCard title=\"Sync Resources\" subtitle=\"Choose what to sync now — you can always sync more later\">\n <Box sx={{ maxWidth: 560 }}>\n {busy && progress ? (\n <SyncProgress progress={progress} />\n ) : (\n <>\n {!server?.supportedResources?.length && (\n <Alert severity=\"info\" sx={{ mb: 2 }}>\n Capability wasn't discovered — showing common resource types.\n </Alert>\n )}\n <FormControlLabel\n control={\n <Checkbox\n checked={allSelected}\n indeterminate={someSelected && !allSelected}\n onChange={(e) => toggleSelectAll(e.target.checked)}\n />\n }\n label={<Typography variant=\"body2\" sx={{ fontWeight: 700 }}>Select All</Typography>}\n sx={{ mb: 0.5 }}\n />\n <Divider sx={{ mb: 1 }} />\n <Stack>\n {availableTypes.map((t) => (\n <FormControlLabel\n key={t}\n control={<Checkbox checked={Boolean(selected[t])} onChange={(e) => setSelected((s) => ({ ...s, [t]: e.target.checked }))} />}\n label={t}\n />\n ))}\n </Stack>\n <FormControlLabel\n sx={{ mt: 1 }}\n control={<Checkbox checked={alsoProcess} onChange={(e) => setAlsoProcess(e.target.checked)} />}\n label={<Typography variant=\"body2\">Process into the system after sync</Typography>}\n />\n </>\n )}\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\" sx={{ mt: 3 }}>\n {/* While syncing the user can only watch progress — no skip/cancel. */}\n {!busy && <Button onClick={finishSkip}>Skip</Button>}\n <Button variant=\"contained\" onClick={handleSync} disabled={busy}>\n {busy ? \"Syncing…\" : `Sync ${checkedTypes.length || \"\"} Selected`}\n </Button>\n </Stack>\n </Box>\n </SectionCard>\n )}\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirServerWizard;\n"],"names":["STEPS","DEFAULT_TYPES","FhirServerWizard","navigate","useNavigate","activeStep","setActiveStep","useState","form","setForm","errors","setErrors","server","setServer","busy","setBusy","capState","setCapState","capError","setCapError","selected","setSelected","alsoProcess","setAlsoProcess","progress","setProgress","goToServers","handleCreate","errs","validateServerForm","res","createServer","runCapability","err","showToast","_b","_a","serverId","refreshCapability","availableTypes","checkedTypes","t","allSelected","someSelected","toggleSelectAll","checked","handleSync","total","syncTypesSequentially","finishSkip","FhirGuard","FHIR_PERMS","Box","jsx","FhirPageHeader","Stack","Tooltip","IconButton","ArrowBackRoundedIcon","Stepper","label","Step","StepLabel","SectionCard","jsxs","ServerFormFields","Button","CircularProgress","Typography","Alert","CloudSyncRoundedIcon","CheckCircleRoundedIcon","Chip","_c","Divider","SyncProgress","Fragment","_d","FormControlLabel","Checkbox","e"],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { jsxs as s, jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { useTranslateProvider as h } from "@/common/languageTranslator/TranslationContext";
|
|
3
|
+
import { showToast as w } from "@/common/toaster/toaster";
|
|
4
|
+
import v from "@/hooks/useTrackEvent";
|
|
5
|
+
import { generateUUID as U } from "@/utils/UUIDgenerator";
|
|
6
|
+
import d from "@/common/fontAwesomeIcons/FontAwesomeIcons";
|
|
7
|
+
import { Dialog as D, DialogTitle as C, Box as x, Typography as f, IconButton as I, DialogContent as N, DialogActions as T, Button as c } from "@mui/material";
|
|
8
|
+
import E from "@/views/custom-components/PostgresEditor";
|
|
9
|
+
import a from "prop-types";
|
|
10
|
+
import { useMemo as k } from "react";
|
|
11
|
+
function q({ open: y, handleClose: i, data: t, type: m }) {
|
|
12
|
+
const { translate: l } = h(), g = v(), p = k(() => {
|
|
13
|
+
const r = U();
|
|
14
|
+
let e = {};
|
|
15
|
+
t != null && t.featureJson && (t == null ? void 0 : t.featureJson) != null ? e.featureJson = t == null ? void 0 : t.featureJson : e.featureJson = null;
|
|
16
|
+
let n = "";
|
|
17
|
+
e.groupName = t == null ? void 0 : t.groupName, e.menuName = t == null ? void 0 : t.name, e.subgroupName = t == null ? void 0 : t.subgroupName, e.navigationState = t == null ? void 0 : t.navigationState, e.menuType = m, e.uuid = r, e.groupName && e.groupName != null ? (n = "select id from menu_group mg where group_name = '" + e.groupName + "'", e.groupUUID = r) : (n = null, e.groupUUID = null);
|
|
18
|
+
let u;
|
|
19
|
+
return e.subgroupName && e.subgroupName != null ? (u = "select sub_group_id from menu_config mc where menu_name = '" + e.subgroupName + "'", e.subgroupUUID = r) : (u = null, e.subgroupUUID = null), e.text = "insert into menu_config (feature_json, group_id, active, is_dynamic_report, menu_name, navigation_state, sub_group_id,", e.text += `
|
|
20
|
+
`, e.text += 'menu_type,"uuid", group_name_uuid, sub_group_uuid)', e.text += `
|
|
21
|
+
`, e.text += "values(", e.featureJson != null ? e.text += "'" + e.featureJson + "'" : e.text += "null", e.text += `
|
|
22
|
+
`, e.text += ",", n != null ? e.text += "(" + n + ")" : e.text += "null", e.text += ",", e.text += "true, false,", e.text += "'" + e.menuName + "'", e.text += ",", e.text += `
|
|
23
|
+
`, e.text += "'" + e.navigationState + "'", e.text += ",", u != null ? e.text += "(" + u + ")" : e.text += "null", e.text += ",", e.text += "'" + e.menuType + "'", e.text += ",", e.text += "'" + e.uuid + "'", e.text += ",", e.groupUUID != null ? e.text += "'" + e.groupUUID + "'" : e.text += "null", e.text += ",", e.subgroupUUID != null ? e.text += "'" + e.subgroupUUID + "'" : e.text += "null", e.text += ")", e.text += `
|
|
24
|
+
`, e.text += "on conflict(navigation_state,active) do update", e.text += `
|
|
25
|
+
`, e.text += "SET feature_json = excluded.feature_json,", e.text += `
|
|
26
|
+
`, e.text += " group_id= excluded.group_id,", e.text += `
|
|
27
|
+
`, e.text += " menu_name = excluded.menu_name,", e.text += `
|
|
28
|
+
`, e.text += " sub_group_id= excluded.sub_group_id,", e.text += `
|
|
29
|
+
`, e.text += " menu_type= excluded.menu_type;", e.text;
|
|
30
|
+
}, [t, m]), _ = () => {
|
|
31
|
+
const r = new Blob([p], { type: "text/plain" }), e = (r.size / 1024).toFixed(2), n = document.createElement("a");
|
|
32
|
+
n.href = URL.createObjectURL(r), n.download = "V" + (/* @__PURE__ */ new Date()).getTime() + "__CREATED_OR_UPDATED_feature_" + m + ".sql", document.body.appendChild(n), n.click(), document.body.removeChild(n), g("file_download", {
|
|
33
|
+
file_type: "sql",
|
|
34
|
+
file_name: n.download,
|
|
35
|
+
file_size: `${e} KB`,
|
|
36
|
+
download_status: "success"
|
|
37
|
+
}), i();
|
|
38
|
+
}, b = () => {
|
|
39
|
+
navigator.clipboard.writeText(p).then(
|
|
40
|
+
() => {
|
|
41
|
+
w({
|
|
42
|
+
message: "Query copied",
|
|
43
|
+
type: "success"
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
(r) => {
|
|
47
|
+
console.error("Could not copy text: ", r);
|
|
48
|
+
}
|
|
49
|
+
), i();
|
|
50
|
+
};
|
|
51
|
+
return /* @__PURE__ */ s(
|
|
52
|
+
D,
|
|
53
|
+
{
|
|
54
|
+
"data-testid": "flywayquery-modal",
|
|
55
|
+
open: y,
|
|
56
|
+
onClose: i,
|
|
57
|
+
fullWidth: !0,
|
|
58
|
+
maxWidth: "md",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ s(
|
|
61
|
+
C,
|
|
62
|
+
{
|
|
63
|
+
sx: {
|
|
64
|
+
display: "flex",
|
|
65
|
+
alignItems: "flex-start",
|
|
66
|
+
justifyContent: "space-between",
|
|
67
|
+
gap: 2,
|
|
68
|
+
py: 1.5,
|
|
69
|
+
borderBottom: "1px solid",
|
|
70
|
+
borderColor: "divider"
|
|
71
|
+
},
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ s(x, { children: [
|
|
74
|
+
/* @__PURE__ */ o(
|
|
75
|
+
f,
|
|
76
|
+
{
|
|
77
|
+
variant: "subtitle1",
|
|
78
|
+
component: "span",
|
|
79
|
+
sx: { fontWeight: 700, display: "block" },
|
|
80
|
+
children: l("FLYWAY QUERY")
|
|
81
|
+
}
|
|
82
|
+
),
|
|
83
|
+
/* @__PURE__ */ o(f, { variant: "body2", color: "text.secondary", children: l(
|
|
84
|
+
"Copy or download this migration to recreate this menu entry on another environment."
|
|
85
|
+
) })
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ o(
|
|
88
|
+
I,
|
|
89
|
+
{
|
|
90
|
+
size: "small",
|
|
91
|
+
onClick: i,
|
|
92
|
+
"aria-label": l("Close"),
|
|
93
|
+
"data-testid": "flywayquery-close-button",
|
|
94
|
+
children: /* @__PURE__ */ o(d, { iconName: "faXmark" })
|
|
95
|
+
}
|
|
96
|
+
)
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
/* @__PURE__ */ o(N, { children: /* @__PURE__ */ o(
|
|
101
|
+
x,
|
|
102
|
+
{
|
|
103
|
+
"data-testid": "flywayquery-textfield-query-display",
|
|
104
|
+
role: "region",
|
|
105
|
+
"aria-label": l("FLYWAY QUERY"),
|
|
106
|
+
sx: {
|
|
107
|
+
mt: 2,
|
|
108
|
+
overflow: "hidden",
|
|
109
|
+
borderRadius: (r) => `${r.shape.borderRadius}px`,
|
|
110
|
+
border: "1px solid",
|
|
111
|
+
borderColor: "divider"
|
|
112
|
+
},
|
|
113
|
+
children: /* @__PURE__ */ o(
|
|
114
|
+
E,
|
|
115
|
+
{
|
|
116
|
+
mode: "READ_ONLY",
|
|
117
|
+
height: "45vh",
|
|
118
|
+
defaultValue: p
|
|
119
|
+
}
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
) }),
|
|
123
|
+
/* @__PURE__ */ s(
|
|
124
|
+
T,
|
|
125
|
+
{
|
|
126
|
+
sx: { px: 3, py: 2, borderTop: "1px solid", borderColor: "divider" },
|
|
127
|
+
children: [
|
|
128
|
+
/* @__PURE__ */ o(
|
|
129
|
+
c,
|
|
130
|
+
{
|
|
131
|
+
"data-testid": "flywayquery-close-button-action",
|
|
132
|
+
variant: "outlined",
|
|
133
|
+
color: "inherit",
|
|
134
|
+
size: "small",
|
|
135
|
+
onClick: i,
|
|
136
|
+
children: l("Close")
|
|
137
|
+
}
|
|
138
|
+
),
|
|
139
|
+
/* @__PURE__ */ o(
|
|
140
|
+
c,
|
|
141
|
+
{
|
|
142
|
+
"data-testid": "flywayquery-copy-button",
|
|
143
|
+
variant: "outlined",
|
|
144
|
+
size: "small",
|
|
145
|
+
color: "primary",
|
|
146
|
+
startIcon: /* @__PURE__ */ o(d, { iconName: "faCopy" }),
|
|
147
|
+
onClick: b,
|
|
148
|
+
children: l("Copy")
|
|
149
|
+
}
|
|
150
|
+
),
|
|
151
|
+
/* @__PURE__ */ o(
|
|
152
|
+
c,
|
|
153
|
+
{
|
|
154
|
+
"data-testid": "flywayquery-download-button",
|
|
155
|
+
variant: "contained",
|
|
156
|
+
color: "primary",
|
|
157
|
+
size: "small",
|
|
158
|
+
startIcon: /* @__PURE__ */ o(d, { iconName: "faDownload" }),
|
|
159
|
+
onClick: _,
|
|
160
|
+
children: l("Download")
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
]
|
|
164
|
+
}
|
|
165
|
+
)
|
|
166
|
+
]
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
q.propTypes = {
|
|
171
|
+
open: a.any,
|
|
172
|
+
handleClose: a.any,
|
|
173
|
+
data: a.any,
|
|
174
|
+
type: a.any
|
|
175
|
+
};
|
|
176
|
+
export {
|
|
177
|
+
q as default
|
|
178
|
+
};
|
|
179
|
+
//# sourceMappingURL=FlywayQuery-CQygj51V.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlywayQuery-CQygj51V.js","sources":["../src/views/Features/FlywayQuery.jsx"],"sourcesContent":["import { useTranslateProvider } from \"@/common/languageTranslator/TranslationContext\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport useTrackEvent from \"@/hooks/useTrackEvent\";\nimport { generateUUID } from \"@/utils/UUIDgenerator\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport {\n Box,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n IconButton,\n Typography,\n} from \"@mui/material\";\nimport PostgresEditor from \"@/views/custom-components/PostgresEditor\";\nimport PropTypes from \"prop-types\";\nimport React, { useMemo } from \"react\";\n\n/**\n * A functional component that renders a Flyway query interface.\n * @module FlywayQuery\n * @param {Object} props - The props object.\n * @param {boolean} props.open - Controls the visibility of the component.\n * @param {Function} props.handleClose - Callback function to handle closing the component.\n * @param {Object} props.data - Data to be used or displayed within the component.\n * @param {string} props.type - Determines the type of query or functionality.\n * @returns {JSX.Element} The rendered component.\n */\nexport default function FlywayQuery({ open, handleClose, data, type }) {\n const { translate } = useTranslateProvider();\n const trackEvent = useTrackEvent();\n\n // Derived, not effect-then-setState: PostgresEditor creates its Monaco\n // instance asynchronously and captures `defaultValue` at that moment, so a\n // query that only lands on the second render never reaches the editor.\n const queryText = useMemo(() => {\n const uuid = generateUUID();\n let temp = {};\n if (data?.featureJson && data?.featureJson != null) {\n temp.featureJson = data?.featureJson;\n } else {\n temp.featureJson = null;\n }\n let groupIdString = \"\";\n temp.groupName = data?.groupName;\n temp.menuName = data?.name;\n temp.subgroupName = data?.subgroupName;\n temp.navigationState = data?.navigationState;\n temp.menuType = type;\n temp.uuid = uuid;\n temp.groupUUID;\n temp.subgroupUUID;\n\n if (temp.groupName && temp.groupName != null) {\n groupIdString =\n \"select id from menu_group mg where group_name = '\" +\n temp.groupName +\n \"'\";\n temp.groupUUID = uuid;\n } else {\n groupIdString = null;\n temp.groupUUID = null;\n }\n let subgroupIdString;\n if (temp.subgroupName && temp.subgroupName != null) {\n subgroupIdString =\n \"select sub_group_id from menu_config mc where menu_name = '\" +\n temp.subgroupName +\n \"'\";\n temp.subgroupUUID = uuid;\n } else {\n subgroupIdString = null;\n temp.subgroupUUID = null;\n }\n\n temp.text =\n \"insert into menu_config (feature_json, group_id, active, is_dynamic_report, menu_name, navigation_state, sub_group_id,\";\n temp.text += \"\\n\";\n temp.text += 'menu_type,\"uuid\", group_name_uuid, sub_group_uuid)';\n temp.text += \"\\n\";\n temp.text += \"values(\";\n if (temp.featureJson != null) {\n temp.text += \"'\" + temp.featureJson + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \"\\n\";\n temp.text += \",\";\n if (groupIdString != null) {\n temp.text += \"(\" + groupIdString + \")\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n temp.text += \"true, false,\";\n temp.text += \"'\" + temp.menuName + \"'\";\n temp.text += \",\";\n temp.text += \"\\n\";\n temp.text += \"'\" + temp.navigationState + \"'\";\n temp.text += \",\";\n if (subgroupIdString != null) {\n temp.text += \"(\" + subgroupIdString + \")\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n temp.text += \"'\" + temp.menuType + \"'\";\n temp.text += \",\";\n temp.text += \"'\" + temp.uuid + \"'\";\n temp.text += \",\";\n if (temp.groupUUID != null) {\n temp.text += \"'\" + temp.groupUUID + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \",\";\n if (temp.subgroupUUID != null) {\n temp.text += \"'\" + temp.subgroupUUID + \"'\";\n } else {\n temp.text += \"null\";\n }\n temp.text += \")\";\n temp.text += \"\\n\";\n temp.text += \"on conflict(navigation_state,active) do update\";\n temp.text += \"\\n\";\n temp.text += \"SET feature_json = excluded.feature_json,\";\n temp.text += \"\\n\";\n temp.text += \"\tgroup_id= excluded.group_id,\";\n temp.text += \"\\n\";\n temp.text += \" \tmenu_name = excluded.menu_name,\";\n temp.text += \"\\n\";\n temp.text += \"\tsub_group_id= excluded.sub_group_id,\";\n temp.text += \"\\n\";\n temp.text += \" \tmenu_type= excluded.menu_type;\";\n\n return temp.text;\n }, [data, type]);\n\n /**\n * Handles the download of a SQL file with the query text.\n * @function handleDownload\n * @returns {void}\n */\n\n const handleDownload = () => {\n const blob = new Blob([queryText], { type: \"text/plain\" });\n const blobSizeInKB = (blob.size / 1024).toFixed(2);\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download =\n \"V\" +\n new Date().getTime() +\n \"__CREATED_OR_UPDATED_feature_\" +\n type +\n \".sql\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n trackEvent(\"file_download\", {\n file_type: \"sql\",\n file_name: link.download,\n file_size: `${blobSizeInKB} KB`,\n download_status: \"success\",\n });\n handleClose();\n };\n\n /**\n * Copies the query text to the clipboard and displays a success message.\n * @function handleCopy\n * @returns {void}\n */\n\n const handleCopy = () => {\n navigator.clipboard.writeText(queryText).then(\n () => {\n showToast({\n message: \"Query copied\",\n type: \"success\",\n });\n },\n (err) => {\n console.error(\"Could not copy text: \", err);\n },\n );\n handleClose();\n };\n\n return (\n <Dialog\n data-testid=\"flywayquery-modal\"\n open={open}\n onClose={handleClose}\n fullWidth\n maxWidth=\"md\"\n >\n <DialogTitle\n sx={{\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: 2,\n py: 1.5,\n borderBottom: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <Box>\n <Typography\n variant=\"subtitle1\"\n component=\"span\"\n sx={{ fontWeight: 700, display: \"block\" }}\n >\n {translate(\"FLYWAY QUERY\")}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {translate(\n \"Copy or download this migration to recreate this menu entry on another environment.\",\n )}\n </Typography>\n </Box>\n <IconButton\n size=\"small\"\n onClick={handleClose}\n aria-label={translate(\"Close\")}\n data-testid=\"flywayquery-close-button\"\n >\n <FontAwesomeIcons iconName=\"faXmark\" />\n </IconButton>\n </DialogTitle>\n\n <DialogContent>\n <Box\n data-testid=\"flywayquery-textfield-query-display\"\n role=\"region\"\n aria-label={translate(\"FLYWAY QUERY\")}\n sx={{\n mt: 2,\n overflow: \"hidden\",\n borderRadius: (t) => `${t.shape.borderRadius}px`,\n border: \"1px solid\",\n borderColor: \"divider\",\n }}\n >\n <PostgresEditor\n mode=\"READ_ONLY\"\n height=\"45vh\"\n defaultValue={queryText}\n />\n </Box>\n </DialogContent>\n\n <DialogActions\n sx={{ px: 3, py: 2, borderTop: \"1px solid\", borderColor: \"divider\" }}\n >\n <Button\n data-testid=\"flywayquery-close-button-action\"\n variant=\"outlined\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleClose}\n >\n {translate(\"Close\")}\n </Button>\n <Button\n data-testid=\"flywayquery-copy-button\"\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n startIcon={<FontAwesomeIcons iconName=\"faCopy\" />}\n onClick={handleCopy}\n >\n {translate(\"Copy\")}\n </Button>\n <Button\n data-testid=\"flywayquery-download-button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<FontAwesomeIcons iconName=\"faDownload\" />}\n onClick={handleDownload}\n >\n {translate(\"Download\")}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nFlywayQuery.propTypes = {\n open: PropTypes.any,\n handleClose: PropTypes.any,\n data: PropTypes.any,\n type: PropTypes.any,\n};\n"],"names":["FlywayQuery","open","handleClose","data","type","translate","useTranslateProvider","trackEvent","useTrackEvent","queryText","useMemo","uuid","generateUUID","temp","groupIdString","subgroupIdString","handleDownload","blob","blobSizeInKB","link","handleCopy","showToast","err","jsxs","Dialog","DialogTitle","Box","jsx","Typography","IconButton","FontAwesomeIcons","DialogContent","t","PostgresEditor","DialogActions","Button","PropTypes"],"mappings":"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"}
|