@argusoft/medplat-core 1.0.22 → 1.0.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/AddMenuConfiguration-m3R8FDhj.js +5570 -0
  2. package/dist/AddMenuConfiguration-m3R8FDhj.js.map +1 -0
  3. package/dist/AddMenuConfiguration.css +1 -1
  4. package/dist/{ChangePasswordModalCore-DotONnMz.js → ChangePasswordModalCore-Czu7OZe6.js} +957 -954
  5. package/dist/ChangePasswordModalCore-Czu7OZe6.js.map +1 -0
  6. package/dist/{ConditionConfig-C3rF2wXU.js → ConditionConfig-BECSbvY2.js} +2 -2
  7. package/dist/{ConditionConfig-C3rF2wXU.js.map → ConditionConfig-BECSbvY2.js.map} +1 -1
  8. package/dist/{EntityManagement-D4nG7wUX.js → EntityManagement-GaYsBTvf.js} +2 -2
  9. package/dist/{EntityManagement-D4nG7wUX.js.map → EntityManagement-GaYsBTvf.js.map} +1 -1
  10. package/dist/FhirRawResourceList-ZZFd7gTX.js +550 -0
  11. package/dist/FhirRawResourceList-ZZFd7gTX.js.map +1 -0
  12. package/dist/FhirServerList-Dkq7Kbes.js +116 -0
  13. package/dist/FhirServerList-Dkq7Kbes.js.map +1 -0
  14. package/dist/FhirServerProfile-CUOwC6Wb.js +253 -0
  15. package/dist/FhirServerProfile-CUOwC6Wb.js.map +1 -0
  16. package/dist/FhirServerWizard-Db6Hm4bQ.js +161 -0
  17. package/dist/FhirServerWizard-Db6Hm4bQ.js.map +1 -0
  18. package/dist/{ImmunizationConfigurationBase-CTBoSuSz.js → ImmunizationConfigurationBase-BevKZx_l.js} +386 -302
  19. package/dist/ImmunizationConfigurationBase-BevKZx_l.js.map +1 -0
  20. package/dist/{ManageEventConfiguration-BntUc_YI.js → ManageEventConfiguration-CBi2KMB1.js} +4 -4
  21. package/dist/{ManageEventConfiguration-BntUc_YI.js.map → ManageEventConfiguration-CBi2KMB1.js.map} +1 -1
  22. package/dist/{ManageUser-Ca1BsI1u.js → ManageUser-BnEPFSPT.js} +219 -219
  23. package/dist/{ManageUser-Ca1BsI1u.js.map → ManageUser-BnEPFSPT.js.map} +1 -1
  24. package/dist/{MobileMenuManagement-CV6QCeos.js → MobileMenuManagement-CVAKyKDa.js} +33 -32
  25. package/dist/MobileMenuManagement-CVAKyKDa.js.map +1 -0
  26. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js → MobileTypeEventConfigModal-C34AN-IJ.js} +2 -2
  27. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js.map → MobileTypeEventConfigModal-C34AN-IJ.js.map} +1 -1
  28. package/dist/{OtherTypeEventConfigModal-DiVhWDpG.js → OtherTypeEventConfigModal-BYjMFl0-.js} +93 -93
  29. package/dist/OtherTypeEventConfigModal-BYjMFl0-.js.map +1 -0
  30. package/dist/ServerFormFields-SLghoZ2z.js +136 -0
  31. package/dist/ServerFormFields-SLghoZ2z.js.map +1 -0
  32. package/dist/SyncDialog-BRGpHOE4.js +130 -0
  33. package/dist/SyncDialog-BRGpHOE4.js.map +1 -0
  34. package/dist/{TableList-HGbEN4bv.js → TableList-D6jnIbnz.js} +227 -244
  35. package/dist/TableList-D6jnIbnz.js.map +1 -0
  36. package/dist/{TypeConfiguration-CupQxH9Y.js → TypeConfiguration-Bs5WkIa2.js} +2 -2
  37. package/dist/{TypeConfiguration-CupQxH9Y.js.map → TypeConfiguration-Bs5WkIa2.js.map} +1 -1
  38. package/dist/dashboardLayoutUtils-Bt5HA96J.js +265 -0
  39. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +1 -0
  40. package/dist/index.css +1 -1
  41. package/dist/index.js +191 -135
  42. package/dist/index.js.map +1 -1
  43. package/dist/permissions-DEWACxJN.js +308 -0
  44. package/dist/permissions-DEWACxJN.js.map +1 -0
  45. package/package.json +1 -1
  46. package/dist/AddMenuConfiguration-DsnY0Rws.js +0 -2237
  47. package/dist/AddMenuConfiguration-DsnY0Rws.js.map +0 -1
  48. package/dist/ChangePasswordModalCore-DotONnMz.js.map +0 -1
  49. package/dist/ImmunizationConfigurationBase-CTBoSuSz.js.map +0 -1
  50. package/dist/MobileMenuManagement-CV6QCeos.js.map +0 -1
  51. package/dist/OtherTypeEventConfigModal-DiVhWDpG.js.map +0 -1
  52. package/dist/TableList-HGbEN4bv.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ import { jsxs as o, jsx as t, Fragment as d } from "react/jsx-runtime";
2
+ import h from "prop-types";
3
+ import { Stack as p, TextField as n, Divider as b, Typography as m, FormControl as g, InputLabel as v, Select as f, MenuItem as y, FormControlLabel as A, Switch as T } from "@mui/material";
4
+ const S = /^[a-z][a-z0-9-]*$/, U = [
5
+ { value: "NONE", label: "None (public server)" },
6
+ { value: "BASIC", label: "Basic (username + password)" },
7
+ { value: "BEARER", label: "Bearer token" },
8
+ { value: "API_KEY", label: "API key header" }
9
+ ];
10
+ function C({ value: a, onChange: u, isEdit: l = !1, errors: s = {} }) {
11
+ const r = (e) => u({ ...a, ...e }), i = a.authType ?? "NONE", c = l && a.hasSecret ? "•••••••• (leave blank to keep current)" : "";
12
+ return /* @__PURE__ */ o(p, { spacing: 2.5, children: [
13
+ /* @__PURE__ */ t(
14
+ n,
15
+ {
16
+ label: "Server Name *",
17
+ size: "small",
18
+ fullWidth: !0,
19
+ value: a.name ?? "",
20
+ onChange: (e) => r({ name: e.target.value }),
21
+ disabled: l,
22
+ error: !!s.name,
23
+ helperText: s.name ?? "Lowercase letters, digits and hyphens. e.g. primary-terminology"
24
+ }
25
+ ),
26
+ /* @__PURE__ */ t(
27
+ n,
28
+ {
29
+ label: "Base URL *",
30
+ size: "small",
31
+ fullWidth: !0,
32
+ value: a.baseUrl ?? "",
33
+ onChange: (e) => r({ baseUrl: e.target.value }),
34
+ error: !!s.baseUrl,
35
+ helperText: s.baseUrl ?? "The FHIR server base URL, e.g. https://your-fhir-server/fhir"
36
+ }
37
+ ),
38
+ /* @__PURE__ */ t(b, { textAlign: "left", children: /* @__PURE__ */ t(m, { variant: "caption", color: "text.secondary", sx: { fontWeight: 700 }, children: "AUTHENTICATION" }) }),
39
+ /* @__PURE__ */ o(g, { fullWidth: !0, size: "small", children: [
40
+ /* @__PURE__ */ t(v, { children: "Authentication" }),
41
+ /* @__PURE__ */ t(f, { value: i, label: "Authentication", onChange: (e) => r({ authType: e.target.value }), children: U.map((e) => /* @__PURE__ */ t(y, { value: e.value, children: e.label }, e.value)) })
42
+ ] }),
43
+ i === "BASIC" && /* @__PURE__ */ o(d, { children: [
44
+ /* @__PURE__ */ t(
45
+ n,
46
+ {
47
+ label: "Username",
48
+ size: "small",
49
+ fullWidth: !0,
50
+ value: a.authUsername ?? "",
51
+ onChange: (e) => r({ authUsername: e.target.value })
52
+ }
53
+ ),
54
+ /* @__PURE__ */ t(
55
+ n,
56
+ {
57
+ label: "Password",
58
+ type: "password",
59
+ size: "small",
60
+ fullWidth: !0,
61
+ value: a.authSecret ?? "",
62
+ placeholder: c,
63
+ onChange: (e) => r({ authSecret: e.target.value })
64
+ }
65
+ )
66
+ ] }),
67
+ i === "BEARER" && /* @__PURE__ */ t(
68
+ n,
69
+ {
70
+ label: "Bearer Token",
71
+ type: "password",
72
+ size: "small",
73
+ fullWidth: !0,
74
+ value: a.authSecret ?? "",
75
+ placeholder: c,
76
+ onChange: (e) => r({ authSecret: e.target.value }),
77
+ helperText: "Sent as: Authorization: Bearer <token>"
78
+ }
79
+ ),
80
+ i === "API_KEY" && /* @__PURE__ */ o(d, { children: [
81
+ /* @__PURE__ */ t(
82
+ n,
83
+ {
84
+ label: "Header Name",
85
+ size: "small",
86
+ fullWidth: !0,
87
+ value: a.authHeaderName ?? "",
88
+ onChange: (e) => r({ authHeaderName: e.target.value }),
89
+ placeholder: "e.g. x-api-key"
90
+ }
91
+ ),
92
+ /* @__PURE__ */ t(
93
+ n,
94
+ {
95
+ label: "Header Value",
96
+ type: "password",
97
+ size: "small",
98
+ fullWidth: !0,
99
+ value: a.authSecret ?? "",
100
+ placeholder: c,
101
+ onChange: (e) => r({ authSecret: e.target.value })
102
+ }
103
+ )
104
+ ] }),
105
+ /* @__PURE__ */ t(
106
+ A,
107
+ {
108
+ control: /* @__PURE__ */ t(T, { checked: a.isActive ?? !0, onChange: (e) => r({ isActive: e.target.checked }) }),
109
+ label: /* @__PURE__ */ t(m, { variant: "body2", children: "Active" })
110
+ }
111
+ )
112
+ ] });
113
+ }
114
+ C.propTypes = {
115
+ value: h.object.isRequired,
116
+ onChange: h.func.isRequired,
117
+ isEdit: h.bool,
118
+ errors: h.object
119
+ };
120
+ function E(a, { isEdit: u = !1 } = {}) {
121
+ var s, r;
122
+ const l = {};
123
+ if ((s = a.name) != null && s.trim() ? !u && !S.test(a.name) && (l.name = "Lowercase letters, digits, hyphens; must start with a letter.") : l.name = "Name is required.", !((r = a.baseUrl) != null && r.trim())) l.baseUrl = "Base URL is required.";
124
+ else
125
+ try {
126
+ new URL(a.baseUrl);
127
+ } catch {
128
+ l.baseUrl = "Must be a valid URL.";
129
+ }
130
+ return l;
131
+ }
132
+ export {
133
+ C as S,
134
+ E as v
135
+ };
136
+ //# sourceMappingURL=ServerFormFields-SLghoZ2z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerFormFields-SLghoZ2z.js","sources":["../src/views/FhirResource/components/ServerFormFields.jsx"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport {\n Stack, TextField, FormControl, InputLabel, Select, MenuItem,\n FormControlLabel, Switch, Typography, Divider,\n} from \"@mui/material\";\n\nconst NAME_PATTERN = /^[a-z][a-z0-9-]*$/;\n\nconst AUTH_TYPES = [\n { value: \"NONE\", label: \"None (public server)\" },\n { value: \"BASIC\", label: \"Basic (username + password)\" },\n { value: \"BEARER\", label: \"Bearer token\" },\n { value: \"API_KEY\", label: \"API key header\" },\n];\n\n/**\n * Controlled server form fields (name, base URL, authentication). Shared by the\n * creation wizard and the edit modal. `value` is the form object; `onChange`\n * receives a partial patch.\n */\nexport default function ServerFormFields({ value, onChange, isEdit = false, errors = {} }) {\n const set = (patch) => onChange({ ...value, ...patch });\n const authType = value.authType ?? \"NONE\";\n const secretPlaceholder = isEdit && value.hasSecret ? \"•••••••• (leave blank to keep current)\" : \"\";\n\n return (\n <Stack spacing={2.5}>\n <TextField\n label=\"Server Name *\"\n size=\"small\"\n fullWidth\n value={value.name ?? \"\"}\n onChange={(e) => set({ name: e.target.value })}\n disabled={isEdit}\n error={Boolean(errors.name)}\n helperText={errors.name ?? \"Lowercase letters, digits and hyphens. e.g. primary-terminology\"}\n />\n\n <TextField\n label=\"Base URL *\"\n size=\"small\"\n fullWidth\n value={value.baseUrl ?? \"\"}\n onChange={(e) => set({ baseUrl: e.target.value })}\n error={Boolean(errors.baseUrl)}\n helperText={errors.baseUrl ?? \"The FHIR server base URL, e.g. https://your-fhir-server/fhir\"}\n />\n\n <Divider textAlign=\"left\">\n <Typography variant=\"caption\" color=\"text.secondary\" sx={{ fontWeight: 700 }}>AUTHENTICATION</Typography>\n </Divider>\n\n <FormControl fullWidth size=\"small\">\n <InputLabel>Authentication</InputLabel>\n <Select value={authType} label=\"Authentication\" onChange={(e) => set({ authType: e.target.value })}>\n {AUTH_TYPES.map((a) => <MenuItem key={a.value} value={a.value}>{a.label}</MenuItem>)}\n </Select>\n </FormControl>\n\n {authType === \"BASIC\" && (\n <>\n <TextField label=\"Username\" size=\"small\" fullWidth\n value={value.authUsername ?? \"\"} onChange={(e) => set({ authUsername: e.target.value })} />\n <TextField label=\"Password\" type=\"password\" size=\"small\" fullWidth\n value={value.authSecret ?? \"\"} placeholder={secretPlaceholder}\n onChange={(e) => set({ authSecret: e.target.value })} />\n </>\n )}\n\n {authType === \"BEARER\" && (\n <TextField label=\"Bearer Token\" type=\"password\" size=\"small\" fullWidth\n value={value.authSecret ?? \"\"} placeholder={secretPlaceholder}\n onChange={(e) => set({ authSecret: e.target.value })}\n helperText=\"Sent as: Authorization: Bearer <token>\" />\n )}\n\n {authType === \"API_KEY\" && (\n <>\n <TextField label=\"Header Name\" size=\"small\" fullWidth\n value={value.authHeaderName ?? \"\"} onChange={(e) => set({ authHeaderName: e.target.value })}\n placeholder=\"e.g. x-api-key\" />\n <TextField label=\"Header Value\" type=\"password\" size=\"small\" fullWidth\n value={value.authSecret ?? \"\"} placeholder={secretPlaceholder}\n onChange={(e) => set({ authSecret: e.target.value })} />\n </>\n )}\n\n <FormControlLabel\n control={<Switch checked={value.isActive ?? true} onChange={(e) => set({ isActive: e.target.checked })} />}\n label={<Typography variant=\"body2\">Active</Typography>}\n />\n </Stack>\n );\n}\n\nServerFormFields.propTypes = {\n value: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n isEdit: PropTypes.bool,\n errors: PropTypes.object,\n};\n\nexport function validateServerForm(form, { isEdit = false } = {}) {\n const errors = {};\n if (!form.name?.trim()) errors.name = \"Name is required.\";\n else if (!isEdit && !NAME_PATTERN.test(form.name)) errors.name = \"Lowercase letters, digits, hyphens; must start with a letter.\";\n if (!form.baseUrl?.trim()) errors.baseUrl = \"Base URL is required.\";\n else {\n try { new URL(form.baseUrl); } catch { errors.baseUrl = \"Must be a valid URL.\"; }\n }\n return errors;\n}\n"],"names":["NAME_PATTERN","AUTH_TYPES","ServerFormFields","value","onChange","isEdit","errors","set","patch","authType","secretPlaceholder","jsxs","Stack","jsx","TextField","Divider","Typography","FormControl","InputLabel","Select","a","MenuItem","Fragment","FormControlLabel","Switch","PropTypes","validateServerForm","form","_a","_b"],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { jsxs as n, jsx as t, Fragment as G } from "react/jsx-runtime";
2
+ import { useState as i, useMemo as V } from "react";
3
+ import { Dialog as _, DialogTitle as v, Typography as T, Tabs as Y, Tab as W, DialogContent as J, Box as j, Alert as K, FormControlLabel as C, Checkbox as B, Divider as N, Stack as k, FormControl as Q, InputLabel as X, Select as Z, MenuItem as D, TextField as ee, Switch as te, Chip as se, DialogActions as ae, Button as R } from "@mui/material";
4
+ import { showToast as d } from "@/common/toaster/toaster";
5
+ import { d as le, s as ce, j as ne, k as ie } from "./permissions-DEWACxJN.js";
6
+ const oe = ["ValueSet", "CodeSystem", "Organization", "Location", "HealthcareService"];
7
+ function ue({ open: z, server: s, onClose: p, onDone: o }) {
8
+ var A;
9
+ const [h, E] = i("types"), [y, F] = i({}), [u, H] = i("ValueSet"), [g, L] = i(""), [f, O] = i(!0), [c, m] = i(!1), [w, I] = i(null), r = V(() => {
10
+ const e = (s == null ? void 0 : s.supportedResources) ?? [];
11
+ return e.length ? e : oe;
12
+ }, [s]), S = Object.keys(y).filter((e) => y[e]), P = r.length > 0 && r.every((e) => y[e]), M = r.some((e) => y[e]), U = (e) => {
13
+ F(Object.fromEntries(r.map((l) => [l, e])));
14
+ }, $ = async () => {
15
+ var e, l;
16
+ if (S.length === 0) {
17
+ d({ type: "error", message: "Select at least one resource type." });
18
+ return;
19
+ }
20
+ m(!0);
21
+ try {
22
+ const a = await ce(s.id, S, {
23
+ alsoProcess: f,
24
+ onProgress: I
25
+ });
26
+ d({ type: "success", message: `Synced ${a} resource(s).` }), o == null || o(), p();
27
+ } catch (a) {
28
+ d({ type: "error", message: ((l = (e = a == null ? void 0 : a.response) == null ? void 0 : e.data) == null ? void 0 : l.message) ?? "Sync failed." });
29
+ } finally {
30
+ m(!1), I(null);
31
+ }
32
+ }, q = async () => {
33
+ var e, l;
34
+ if (!u || !g.trim()) {
35
+ d({ type: "error", message: "Resource type and FHIR id are required." });
36
+ return;
37
+ }
38
+ m(!0);
39
+ try {
40
+ const a = await ne(s.id, u, g.trim()), b = a == null ? void 0 : a.data;
41
+ f && (b != null && b.id) && await ie(b.id), d({ type: "success", message: `Synced ${u}/${g.trim()}.` }), o == null || o(), p();
42
+ } catch (a) {
43
+ d({ type: "error", message: ((l = (e = a == null ? void 0 : a.response) == null ? void 0 : e.data) == null ? void 0 : l.message) ?? "Sync failed." });
44
+ } finally {
45
+ m(!1);
46
+ }
47
+ }, x = c && h === "types" && w;
48
+ return /* @__PURE__ */ n(_, { open: z, onClose: c ? void 0 : p, maxWidth: "sm", fullWidth: !0, children: [
49
+ /* @__PURE__ */ n(v, { children: [
50
+ "Sync from “",
51
+ s == null ? void 0 : s.name,
52
+ "”",
53
+ /* @__PURE__ */ t(T, { variant: "caption", color: "text.secondary", display: "block", children: s == null ? void 0 : s.baseUrl })
54
+ ] }),
55
+ !x && /* @__PURE__ */ n(Y, { value: h, onChange: (e, l) => E(l), sx: { px: 3, "& .MuiTab-root": { textTransform: "none", fontWeight: 700 } }, children: [
56
+ /* @__PURE__ */ t(W, { value: "types", label: "By Resource Type", disabled: c }),
57
+ /* @__PURE__ */ t(W, { value: "single", label: "Single Resource", disabled: c })
58
+ ] }),
59
+ /* @__PURE__ */ n(J, { dividers: !0, children: [
60
+ x ? /* @__PURE__ */ t(le, { progress: w }) : h === "types" ? /* @__PURE__ */ n(j, { children: [
61
+ !((A = s == null ? void 0 : s.supportedResources) != null && A.length) && /* @__PURE__ */ t(K, { severity: "info", sx: { mb: 2 }, children: "Capability not discovered yet — showing common resource types. Use “Refresh Capability” on the server to list exactly what this server supports." }),
62
+ /* @__PURE__ */ t(
63
+ C,
64
+ {
65
+ control: /* @__PURE__ */ t(
66
+ B,
67
+ {
68
+ checked: P,
69
+ indeterminate: M && !P,
70
+ onChange: (e) => U(e.target.checked)
71
+ }
72
+ ),
73
+ label: /* @__PURE__ */ t(T, { variant: "body2", sx: { fontWeight: 700 }, children: "Select All" }),
74
+ sx: { mb: 0.5 }
75
+ }
76
+ ),
77
+ /* @__PURE__ */ t(N, { sx: { mb: 1 } }),
78
+ /* @__PURE__ */ t(k, { children: r.map((e) => /* @__PURE__ */ t(
79
+ C,
80
+ {
81
+ control: /* @__PURE__ */ t(
82
+ B,
83
+ {
84
+ checked: !!y[e],
85
+ onChange: (l) => F((a) => ({ ...a, [e]: l.target.checked }))
86
+ }
87
+ ),
88
+ label: e
89
+ },
90
+ e
91
+ )) })
92
+ ] }) : /* @__PURE__ */ n(k, { spacing: 2.5, sx: { pt: 1 }, children: [
93
+ /* @__PURE__ */ n(Q, { fullWidth: !0, size: "small", children: [
94
+ /* @__PURE__ */ t(X, { children: "Resource Type" }),
95
+ /* @__PURE__ */ t(Z, { value: u, label: "Resource Type", onChange: (e) => H(e.target.value), children: r.map((e) => /* @__PURE__ */ t(D, { value: e, children: e }, e)) })
96
+ ] }),
97
+ /* @__PURE__ */ t(
98
+ ee,
99
+ {
100
+ label: "FHIR ID *",
101
+ size: "small",
102
+ value: g,
103
+ onChange: (e) => L(e.target.value),
104
+ placeholder: "The FHIR logical id of the resource",
105
+ helperText: "Syncs a single resource by GET /{ResourceType}/{id}"
106
+ }
107
+ )
108
+ ] }),
109
+ !x && /* @__PURE__ */ n(G, { children: [
110
+ /* @__PURE__ */ t(
111
+ C,
112
+ {
113
+ sx: { mt: 2 },
114
+ control: /* @__PURE__ */ t(te, { checked: f, onChange: (e) => O(e.target.checked) }),
115
+ label: /* @__PURE__ */ t(T, { variant: "body2", children: "Process into the system after sync" })
116
+ }
117
+ ),
118
+ h === "types" && S.length > 0 && /* @__PURE__ */ t(j, { sx: { mt: 1 }, children: /* @__PURE__ */ t(k, { direction: "row", spacing: 1, flexWrap: "wrap", useFlexGap: !0, children: S.map((e) => /* @__PURE__ */ t(se, { label: e, size: "small" }, e)) }) })
119
+ ] })
120
+ ] }),
121
+ /* @__PURE__ */ n(ae, { sx: { px: 3, pb: 2 }, children: [
122
+ !c && /* @__PURE__ */ t(R, { onClick: p, children: "Cancel" }),
123
+ h === "types" ? /* @__PURE__ */ t(R, { variant: "contained", disabled: c, onClick: $, children: c ? "Syncing…" : "Sync Selected" }) : /* @__PURE__ */ t(R, { variant: "contained", disabled: c, onClick: q, children: c ? "Syncing…" : "Sync Resource" })
124
+ ] })
125
+ ] });
126
+ }
127
+ export {
128
+ ue as S
129
+ };
130
+ //# sourceMappingURL=SyncDialog-BRGpHOE4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SyncDialog-BRGpHOE4.js","sources":["../src/views/FhirResource/SyncDialog.jsx"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport {\n Dialog, DialogTitle, DialogContent, DialogActions, Button, Tabs, Tab,\n Box, Stack, FormControlLabel, Checkbox, Switch, Typography, TextField,\n FormControl, InputLabel, Select, MenuItem, Alert, Chip, Divider,\n} from \"@mui/material\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n syncTypesSequentially, syncSingleResource, reprocessOne,\n} from \"../../services/FhirResource\";\nimport { SyncProgress } from \"./components/FhirUi\";\n\n// Sensible defaults when the server has no discovered capability yet.\nconst DEFAULT_TYPES = [\"ValueSet\", \"CodeSystem\", \"Organization\", \"Location\", \"HealthcareService\"];\n\nfunction SyncDialog({ open, server, onClose, onDone }) {\n const [tab, setTab] = useState(\"types\");\n const [selected, setSelected] = useState({});\n const [singleType, setSingleType] = useState(\"ValueSet\");\n const [fhirId, setFhirId] = useState(\"\");\n const [alsoProcess, setAlsoProcess] = useState(true);\n const [busy, setBusy] = useState(false);\n const [progress, setProgress] = useState(null);\n\n const availableTypes = useMemo(() => {\n const caps = server?.supportedResources ?? [];\n return caps.length ? caps : DEFAULT_TYPES;\n }, [server]);\n\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 const handleSyncTypes = async () => {\n if (checkedTypes.length === 0) {\n showToast({ type: \"error\", message: \"Select at least one resource type.\" });\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 onDone?.();\n onClose();\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 handleSyncSingle = async () => {\n if (!singleType || !fhirId.trim()) {\n showToast({ type: \"error\", message: \"Resource type and FHIR id are required.\" });\n return;\n }\n setBusy(true);\n try {\n const res = await syncSingleResource(server.id, singleType, fhirId.trim());\n const raw = res?.data;\n if (alsoProcess && raw?.id) await reprocessOne(raw.id);\n showToast({ type: \"success\", message: `Synced ${singleType}/${fhirId.trim()}.` });\n onDone?.();\n onClose();\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Sync failed.\" });\n } finally {\n setBusy(false);\n }\n };\n\n const showProgress = busy && tab === \"types\" && progress;\n\n return (\n <Dialog open={open} onClose={busy ? undefined : onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>\n Sync from “{server?.name}”\n <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\">\n {server?.baseUrl}\n </Typography>\n </DialogTitle>\n\n {!showProgress && (\n <Tabs value={tab} onChange={(_, v) => setTab(v)} sx={{ px: 3, \"& .MuiTab-root\": { textTransform: \"none\", fontWeight: 700 } }}>\n <Tab value=\"types\" label=\"By Resource Type\" disabled={busy} />\n <Tab value=\"single\" label=\"Single Resource\" disabled={busy} />\n </Tabs>\n )}\n\n <DialogContent dividers>\n {showProgress ? (\n <SyncProgress progress={progress} />\n ) : tab === \"types\" ? (\n <Box>\n {!server?.supportedResources?.length && (\n <Alert severity=\"info\" sx={{ mb: 2 }}>\n Capability not discovered yet — showing common resource types. Use “Refresh Capability” on the\n server to list exactly what this server supports.\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={\n <Checkbox\n checked={Boolean(selected[t])}\n onChange={(e) => setSelected((s) => ({ ...s, [t]: e.target.checked }))}\n />\n }\n label={t}\n />\n ))}\n </Stack>\n </Box>\n ) : (\n <Stack spacing={2.5} sx={{ pt: 1 }}>\n <FormControl fullWidth size=\"small\">\n <InputLabel>Resource Type</InputLabel>\n <Select value={singleType} label=\"Resource Type\" onChange={(e) => setSingleType(e.target.value)}>\n {availableTypes.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\n </Select>\n </FormControl>\n <TextField\n label=\"FHIR ID *\"\n size=\"small\"\n value={fhirId}\n onChange={(e) => setFhirId(e.target.value)}\n placeholder=\"The FHIR logical id of the resource\"\n helperText=\"Syncs a single resource by GET /{ResourceType}/{id}\"\n />\n </Stack>\n )}\n\n {!showProgress && (\n <>\n <FormControlLabel\n sx={{ mt: 2 }}\n control={<Switch checked={alsoProcess} onChange={(e) => setAlsoProcess(e.target.checked)} />}\n label={<Typography variant=\"body2\">Process into the system after sync</Typography>}\n />\n {tab === \"types\" && checkedTypes.length > 0 && (\n <Box sx={{ mt: 1 }}>\n <Stack direction=\"row\" spacing={1} flexWrap=\"wrap\" useFlexGap>\n {checkedTypes.map((t) => <Chip key={t} label={t} size=\"small\" />)}\n </Stack>\n </Box>\n )}\n </>\n )}\n </DialogContent>\n\n <DialogActions sx={{ px: 3, pb: 2 }}>\n {/* While a sync is in progress the user can only watch — no cancel. */}\n {!busy && <Button onClick={onClose}>Cancel</Button>}\n {tab === \"types\" ? (\n <Button variant=\"contained\" disabled={busy} onClick={handleSyncTypes}>\n {busy ? \"Syncing…\" : \"Sync Selected\"}\n </Button>\n ) : (\n <Button variant=\"contained\" disabled={busy} onClick={handleSyncSingle}>\n {busy ? \"Syncing…\" : \"Sync Resource\"}\n </Button>\n )}\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default SyncDialog;\n"],"names":["DEFAULT_TYPES","SyncDialog","open","server","onClose","onDone","tab","setTab","useState","selected","setSelected","singleType","setSingleType","fhirId","setFhirId","alsoProcess","setAlsoProcess","busy","setBusy","progress","setProgress","availableTypes","useMemo","caps","checkedTypes","t","allSelected","someSelected","toggleSelectAll","checked","handleSyncTypes","showToast","total","syncTypesSequentially","err","_b","_a","handleSyncSingle","res","syncSingleResource","raw","reprocessOne","showProgress","jsxs","Dialog","DialogTitle","jsx","Typography","Tabs","_","v","Tab","DialogContent","SyncProgress","Box","Alert","FormControlLabel","Checkbox","Divider","Stack","e","s","FormControl","InputLabel","Select","MenuItem","TextField","Fragment","Switch","Chip","DialogActions","Button"],"mappings":"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"}