@argusoft/medplat-core 1.0.23 → 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 (47) 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-DONyFFlx.js → ChangePasswordModalCore-Czu7OZe6.js} +954 -951
  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/FhirRawResourceList-ZZFd7gTX.js +550 -0
  9. package/dist/FhirRawResourceList-ZZFd7gTX.js.map +1 -0
  10. package/dist/FhirServerList-Dkq7Kbes.js +116 -0
  11. package/dist/FhirServerList-Dkq7Kbes.js.map +1 -0
  12. package/dist/FhirServerProfile-CUOwC6Wb.js +253 -0
  13. package/dist/FhirServerProfile-CUOwC6Wb.js.map +1 -0
  14. package/dist/FhirServerWizard-Db6Hm4bQ.js +161 -0
  15. package/dist/FhirServerWizard-Db6Hm4bQ.js.map +1 -0
  16. package/dist/{ImmunizationConfigurationBase-CTBoSuSz.js → ImmunizationConfigurationBase-BevKZx_l.js} +386 -302
  17. package/dist/ImmunizationConfigurationBase-BevKZx_l.js.map +1 -0
  18. package/dist/{ManageEventConfiguration-BntUc_YI.js → ManageEventConfiguration-CBi2KMB1.js} +4 -4
  19. package/dist/{ManageEventConfiguration-BntUc_YI.js.map → ManageEventConfiguration-CBi2KMB1.js.map} +1 -1
  20. package/dist/{ManageUser-Gv38VHMu.js → ManageUser-BnEPFSPT.js} +110 -110
  21. package/dist/{ManageUser-Gv38VHMu.js.map → ManageUser-BnEPFSPT.js.map} +1 -1
  22. package/dist/{MobileMenuManagement-CV6QCeos.js → MobileMenuManagement-CVAKyKDa.js} +33 -32
  23. package/dist/MobileMenuManagement-CVAKyKDa.js.map +1 -0
  24. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js → MobileTypeEventConfigModal-C34AN-IJ.js} +2 -2
  25. package/dist/{MobileTypeEventConfigModal-BNjZ8pnq.js.map → MobileTypeEventConfigModal-C34AN-IJ.js.map} +1 -1
  26. package/dist/{OtherTypeEventConfigModal-DiVhWDpG.js → OtherTypeEventConfigModal-BYjMFl0-.js} +93 -93
  27. package/dist/OtherTypeEventConfigModal-BYjMFl0-.js.map +1 -0
  28. package/dist/ServerFormFields-SLghoZ2z.js +136 -0
  29. package/dist/ServerFormFields-SLghoZ2z.js.map +1 -0
  30. package/dist/SyncDialog-BRGpHOE4.js +130 -0
  31. package/dist/SyncDialog-BRGpHOE4.js.map +1 -0
  32. package/dist/{TypeConfiguration-CupQxH9Y.js → TypeConfiguration-Bs5WkIa2.js} +2 -2
  33. package/dist/{TypeConfiguration-CupQxH9Y.js.map → TypeConfiguration-Bs5WkIa2.js.map} +1 -1
  34. package/dist/dashboardLayoutUtils-Bt5HA96J.js +265 -0
  35. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +1 -0
  36. package/dist/index.css +1 -1
  37. package/dist/index.js +190 -134
  38. package/dist/index.js.map +1 -1
  39. package/dist/permissions-DEWACxJN.js +308 -0
  40. package/dist/permissions-DEWACxJN.js.map +1 -0
  41. package/package.json +1 -1
  42. package/dist/AddMenuConfiguration-DsnY0Rws.js +0 -2237
  43. package/dist/AddMenuConfiguration-DsnY0Rws.js.map +0 -1
  44. package/dist/ChangePasswordModalCore-DONyFFlx.js.map +0 -1
  45. package/dist/ImmunizationConfigurationBase-CTBoSuSz.js.map +0 -1
  46. package/dist/MobileMenuManagement-CV6QCeos.js.map +0 -1
  47. package/dist/OtherTypeEventConfigModal-DiVhWDpG.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FhirRawResourceList-ZZFd7gTX.js","sources":["../src/views/FhirResource/RawResourceDetailDrawer.jsx","../src/views/FhirResource/FhirRawResourceList.jsx"],"sourcesContent":["import { useEffect, useState, useCallback } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Drawer, Box, Stack, Typography, IconButton, Divider, Chip, Paper, Tooltip,\n CircularProgress, Accordion, AccordionSummary, AccordionDetails,\n} from \"@mui/material\";\nimport { alpha, useTheme } from \"@mui/material/styles\";\nimport CloseRoundedIcon from \"@mui/icons-material/CloseRounded\";\nimport CheckRoundedIcon from \"@mui/icons-material/CheckRounded\";\nimport ErrorOutlineRoundedIcon from \"@mui/icons-material/ErrorOutlineRounded\";\nimport ExpandMoreRoundedIcon from \"@mui/icons-material/ExpandMoreRounded\";\nimport ContentCopyRoundedIcon from \"@mui/icons-material/ContentCopyRounded\";\nimport CloudSyncRoundedIcon from \"@mui/icons-material/CloudSyncRounded\";\nimport SettingsSuggestRoundedIcon from \"@mui/icons-material/SettingsSuggestRounded\";\nimport moment from \"moment\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { retrieveSyncEvents, retrieveSyncEventDetail } from \"../../services/FhirResource\";\nimport { StatusChip, MonoText } from \"./components/FhirUi\";\n\nconst fmt = (d) => (d ? moment(d).format(\"DD MMM YYYY, HH:mm:ss\") : \"—\");\n\nfunction Field({ label, children }) {\n return (\n <Box>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ fontWeight: 700, lineHeight: 1 }}>{label}</Typography>\n <Box sx={{ mt: 0.25 }}>{children}</Box>\n </Box>\n );\n}\n\n// ---- One node of a vertical timeline ----\nfunction TimelineNode({ ok, failed, icon, title, at, detail, isLast }) {\n const theme = useTheme();\n const color = failed ? theme.palette.error.main : ok ? theme.palette.success.main : theme.palette.grey[400];\n const Icon = icon ?? (failed ? ErrorOutlineRoundedIcon : CheckRoundedIcon);\n return (\n <Stack direction=\"row\" spacing={1.25} sx={{ minHeight: isLast ? \"auto\" : 48 }}>\n <Stack alignItems=\"center\">\n <Box sx={{\n width: 28, height: 28, borderRadius: \"50%\", flexShrink: 0,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n bgcolor: alpha(color, 0.15), border: `2px solid ${color}`, color,\n }}>\n <Icon sx={{ fontSize: 15 }} />\n </Box>\n {!isLast && <Box sx={{ width: 2, flexGrow: 1, my: 0.5, bgcolor: alpha(color, 0.35) }} />}\n </Stack>\n <Box sx={{ pb: isLast ? 0 : 1.5, minWidth: 0 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{title}</Typography>\n {at && <Typography variant=\"caption\" sx={{ color, fontWeight: 600 }}>{fmt(at)}</Typography>}\n {detail && (\n <Typography variant=\"caption\" color=\"text.secondary\" display=\"block\" sx={{ mt: 0.25, wordBreak: \"break-word\" }}>\n {detail}\n </Typography>\n )}\n </Box>\n </Stack>\n );\n}\nTimelineNode.propTypes = {\n ok: PropTypes.bool, failed: PropTypes.bool, icon: PropTypes.elementType,\n title: PropTypes.node, at: PropTypes.any, detail: PropTypes.node, isLast: PropTypes.bool,\n};\n\nfunction ErrorBox({ message }) {\n return (\n <Paper variant=\"outlined\" sx={{ mt: 1, p: 1, bgcolor: (t) => alpha(t.palette.error.main, 0.05), borderColor: \"error.light\" }}>\n <Box sx={{ maxHeight: 160, overflow: \"auto\", fontFamily: \"monospace\", fontSize: 10.5, whiteSpace: \"pre-wrap\", wordBreak: \"break-all\" }}>\n {message}\n </Box>\n </Paper>\n );\n}\nErrorBox.propTypes = { message: PropTypes.string };\n\n// ---- One sync event accordion: its payload + processing timeline (lazy loaded) ----\nfunction SyncEventItem({ event, defaultExpanded }) {\n const [expanded, setExpanded] = useState(Boolean(defaultExpanded));\n const [detail, setDetail] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const loadDetail = useCallback(async () => {\n if (detail) return;\n setLoading(true);\n try {\n const res = await retrieveSyncEventDetail(event.id);\n setDetail(res?.data ?? null);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load sync detail.\" });\n } finally {\n setLoading(false);\n }\n }, [detail, event.id]);\n\n useEffect(() => { if (expanded) loadDetail(); }, [expanded, loadDetail]);\n\n const syncFailed = event.downloadStatus === \"FAILED\";\n\n let payloadPretty = detail?.payloadJson;\n try { payloadPretty = JSON.stringify(JSON.parse(detail?.payloadJson), null, 2); } catch { /* keep raw */ }\n\n const copyPayload = () => {\n navigator.clipboard?.writeText(payloadPretty ?? \"\").then(\n () => showToast({ type: \"success\", message: \"Payload copied.\" }),\n () => showToast({ type: \"error\", message: \"Copy failed.\" }),\n );\n };\n\n return (\n <Accordion\n expanded={expanded}\n onChange={(_, v) => setExpanded(v)}\n disableGutters\n sx={{ border: \"1px solid\", borderColor: \"divider\", borderRadius: 1.5, \"&:before\": { display: \"none\" }, mb: 1, overflow: \"hidden\" }}\n >\n <AccordionSummary expandIcon={<ExpandMoreRoundedIcon />}>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\" sx={{ flexWrap: \"wrap\", rowGap: 0.5, pr: 1 }}>\n <CloudSyncRoundedIcon fontSize=\"small\" color={syncFailed ? \"error\" : \"action\"} />\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{fmt(event.syncedAt)}</Typography>\n <StatusChip value={event.downloadStatus} short />\n {event.processingAttempts > 0 ? (\n <StatusChip value={event.latestProcessingStatus} short />\n ) : (\n <Chip size=\"small\" variant=\"outlined\" label=\"Not processed\" sx={{ height: 20 }} />\n )}\n {event.versionId && (\n <Typography variant=\"caption\" color=\"text.secondary\">v{event.versionId}</Typography>\n )}\n </Stack>\n </AccordionSummary>\n <AccordionDetails sx={{ pt: 0 }}>\n {loading ? (\n <Stack alignItems=\"center\" sx={{ py: 2 }}><CircularProgress size={20} /></Stack>\n ) : (\n <>\n {/* Timeline: this sync, then each processing attempt */}\n <Box sx={{ mb: 1.5 }}>\n <TimelineNode\n ok={!syncFailed} failed={syncFailed} icon={CloudSyncRoundedIcon}\n title={syncFailed ? \"Sync failed\" : \"Synced\"}\n at={event.syncedAt}\n detail={syncFailed ? event.errorMessage : \"Content received\"}\n isLast={!detail?.processingEvents?.length}\n />\n {(detail?.processingEvents ?? []).map((p, idx, arr) => (\n <TimelineNode\n key={p.id}\n ok={p.processingStatus === \"PROCESSED\"}\n failed={p.processingStatus === \"FAILED\"}\n icon={SettingsSuggestRoundedIcon}\n title={p.processingStatus === \"PROCESSED\"\n ? `Processed${p.recordsProcessed != null ? ` — ${p.recordsProcessed} record(s)` : \"\"}`\n : \"Processing failed\"}\n at={p.processedAt}\n detail={p.processingStatus === \"FAILED\" ? <ErrorBox message={p.errorMessage} /> : null}\n isLast={idx === arr.length - 1}\n />\n ))}\n </Box>\n\n {syncFailed && event.errorMessage && <ErrorBox message={event.errorMessage} />}\n\n {/* Payload for this sync */}\n {detail?.payloadJson && (\n <Accordion disableGutters sx={{ boxShadow: \"none\", border: \"1px solid\", borderColor: \"divider\", borderRadius: 1.5, \"&:before\": { display: \"none\" }, mt: 1 }}>\n <AccordionSummary expandIcon={<ExpandMoreRoundedIcon />}>\n <Stack direction=\"row\" spacing={1} alignItems=\"center\" sx={{ flexGrow: 1 }}>\n <Typography variant=\"caption\" sx={{ fontWeight: 700 }}>Payload (JSON)</Typography>\n </Stack>\n <Tooltip title=\"Copy\">\n <IconButton size=\"small\" component=\"span\" onClick={(e) => { e.stopPropagation(); copyPayload(); }}>\n <ContentCopyRoundedIcon fontSize=\"inherit\" />\n </IconButton>\n </Tooltip>\n </AccordionSummary>\n <AccordionDetails>\n <Box sx={{ maxHeight: 320, overflow: \"auto\", bgcolor: \"#f8fafc\", p: 1.5, borderRadius: 1, fontFamily: \"monospace\", fontSize: 11, whiteSpace: \"pre-wrap\", wordBreak: \"break-all\" }}>\n {payloadPretty ?? \"—\"}\n </Box>\n </AccordionDetails>\n </Accordion>\n )}\n </>\n )}\n </AccordionDetails>\n </Accordion>\n );\n}\nSyncEventItem.propTypes = { event: PropTypes.object.isRequired, defaultExpanded: PropTypes.bool };\n\n/**\n * Right-side drawer for a resource: identity + latest status, then the full\n * append-only sync history. Expanding any sync shows its payload and the timeline\n * of processing attempts made against it.\n */\nexport default function RawResourceDetailDrawer({ open, summary, onClose, actionSlot }) {\n const r = summary ?? {};\n const [events, setEvents] = useState([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!open || !summary?.id) return;\n setEvents([]);\n setLoading(true);\n retrieveSyncEvents(summary.id)\n .then((res) => setEvents(res?.data ?? []))\n .catch(() => showToast({ type: \"error\", message: \"Failed to load sync history.\" }))\n .finally(() => setLoading(false));\n }, [open, summary]);\n\n return (\n <Drawer anchor=\"right\" open={open} onClose={onClose}\n PaperProps={{ sx: { width: { xs: \"100%\", sm: 560 }, maxWidth: \"100%\" } }}>\n {/* Header */}\n <Box sx={{ px: 2.5, py: 2, borderBottom: \"1px solid\", borderColor: \"divider\" }}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\" spacing={1}>\n <Box sx={{ minWidth: 0 }}>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ fontWeight: 700 }}>\n {r.resourceType} · #{r.id}\n </Typography>\n <Typography variant=\"h6\" sx={{ fontWeight: 800, lineHeight: 1.2, wordBreak: \"break-word\" }}>\n {r.title ?? <em style={{ color: \"#94a3b8\" }}>(untitled)</em>}\n </Typography>\n </Box>\n <IconButton onClick={onClose} size=\"small\"><CloseRoundedIcon /></IconButton>\n </Stack>\n <Stack direction=\"row\" spacing={1} sx={{ mt: 1 }} flexWrap=\"wrap\" useFlexGap>\n <StatusChip value={r.downloadStatus} />\n <StatusChip value={r.processingStatus} />\n </Stack>\n </Box>\n\n <Box sx={{ p: 2.5, overflowY: \"auto\", flexGrow: 1 }}>\n {/* Identity / metadata */}\n <Stack spacing={2} sx={{ mb: 2.5 }}>\n <Field label=\"Resource Id\"><MonoText muted>{r.resourceId ?? \"—\"}</MonoText></Field>\n <Field label=\"Canonical URL\"><MonoText muted>{r.canonicalUrl ?? \"—\"}</MonoText></Field>\n <Stack direction=\"row\" spacing={4}>\n <Field label=\"First Synced\"><Typography variant=\"body2\">{fmt(r.firstSyncedAt)}</Typography></Field>\n <Field label=\"Last Synced\"><Typography variant=\"body2\">{fmt(r.syncedAt)}</Typography></Field>\n </Stack>\n <Field label=\"Server\"><Typography variant=\"body2\">{r.serverName ?? \"—\"}</Typography></Field>\n </Stack>\n\n <Divider sx={{ mb: 2 }} />\n\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 800, mb: 1.5 }}>\n Sync History {events.length ? `(${events.length})` : \"\"}\n </Typography>\n\n {loading ? (\n <Stack alignItems=\"center\" sx={{ py: 3 }}><CircularProgress size={22} /></Stack>\n ) : events.length === 0 ? (\n <Typography variant=\"body2\" color=\"text.secondary\">No sync history yet.</Typography>\n ) : (\n events.map((ev, i) => (\n <SyncEventItem key={ev.id} event={ev} defaultExpanded={i === 0} />\n ))\n )}\n </Box>\n\n {/* Contextual actions */}\n {actionSlot && (\n <Box sx={{ p: 2, borderTop: \"1px solid\", borderColor: \"divider\" }}>\n <Stack direction=\"row\" spacing={1} justifyContent=\"flex-end\">\n {actionSlot(r)}\n </Stack>\n </Box>\n )}\n </Drawer>\n );\n}\n\nRawResourceDetailDrawer.propTypes = {\n open: PropTypes.bool,\n summary: PropTypes.object,\n onClose: PropTypes.func.isRequired,\n actionSlot: PropTypes.func,\n};\n","import { useEffect, useState, useCallback, useRef } from \"react\";\nimport { useParams, useNavigate } from \"react-router\";\nimport {\n Box, Button, Stack, Typography, Skeleton, Tooltip, IconButton, Chip,\n TableBody, TableCell, TableHead, TableRow, TablePagination, LinearProgress,\n Menu, MenuItem, ListItemIcon, ListItemText, Divider, TextField, InputAdornment,\n FormControl, InputLabel, Select, CircularProgress,\n} from \"@mui/material\";\nimport ArrowBackRoundedIcon from \"@mui/icons-material/ArrowBackRounded\";\nimport RefreshRoundedIcon from \"@mui/icons-material/RefreshRounded\";\nimport CloudDownloadRoundedIcon from \"@mui/icons-material/CloudDownloadRounded\";\nimport SettingsSuggestRoundedIcon from \"@mui/icons-material/SettingsSuggestRounded\";\nimport ReplayRoundedIcon from \"@mui/icons-material/ReplayRounded\";\nimport PlayArrowRoundedIcon from \"@mui/icons-material/PlayArrowRounded\";\nimport BoltRoundedIcon from \"@mui/icons-material/BoltRounded\";\nimport ExpandMoreRoundedIcon from \"@mui/icons-material/ExpandMoreRounded\";\nimport SearchRoundedIcon from \"@mui/icons-material/SearchRounded\";\nimport FilterAltOffRoundedIcon from \"@mui/icons-material/FilterAltOffRounded\";\nimport moment from \"moment\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n retrieveServerById, retrieveRawResources, retrieveRawResourceTypes,\n processPending, reprocess, reprocessOne, syncSingleResource,\n} from \"../../services/FhirResource\";\nimport {\n FhirPageHeader, SectionCard, GradientTable, EmptyRow, StatusChip, MonoText, ConfirmModal,\n} from \"./components/FhirUi\";\nimport { FhirGuard, useFhirPermissions } from \"./components/permissions\";\nimport RawResourceDetailDrawer from \"./RawResourceDetailDrawer\";\n\nconst DOWNLOAD_STATUSES = [\"DISCOVERED\", \"CONTENT_DOWNLOADED\", \"FAILED\"];\nconst PROCESSING_STATUSES = [\"NOT_STARTED\", \"PROCESSING\", \"PROCESSED\", \"FAILED\"];\nconst PAGE_SIZE = 10;\n\nconst SYNC_STATUS_LABEL = {\n DISCOVERED: \"Discovered\",\n CONTENT_DOWNLOADED: \"Content synced\",\n FAILED: \"Sync failed\",\n};\nconst PROCESSING_STATUS_LABEL = {\n NOT_STARTED: \"Not processed\",\n PROCESSING: \"Processing\",\n PROCESSED: \"Processed\",\n FAILED: \"Failed\",\n};\n\nfunction FhirRawResourceList() {\n const { serverId } = useParams();\n const navigate = useNavigate();\n const { canManage } = useFhirPermissions();\n\n const [server, setServer] = useState(null);\n const [rows, setRows] = useState([]);\n const [totalCount, setTotalCount] = useState(0);\n const [page, setPage] = useState(0);\n const [loading, setLoading] = useState(false);\n\n // Filters\n const [search, setSearch] = useState(\"\");\n const [resourceType, setResourceType] = useState(\"\");\n const [downloadStatus, setDownloadStatus] = useState(\"\");\n const [processingStatus, setProcessingStatus] = useState(\"\");\n const [typeOptions, setTypeOptions] = useState([]);\n\n // Op state — a single label for a global bar + a per-row id for row spinners.\n const [headerOp, setHeaderOp] = useState(null); // string label or null\n const [rowOp, setRowOp] = useState(null); // { id } or null\n const [actionsAnchor, setActionsAnchor] = useState(null);\n const [confirm, setConfirm] = useState(null);\n const [detailRow, setDetailRow] = useState(null);\n\n const searchTimer = useRef(null);\n\n const loadServer = useCallback(async () => {\n try {\n const [s, types] = await Promise.all([\n retrieveServerById(serverId),\n retrieveRawResourceTypes(serverId),\n ]);\n setServer(s?.data);\n setTypeOptions(types?.data ?? []);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load server.\" });\n }\n }, [serverId]);\n\n const loadRaw = useCallback(async (p = 0, filters = {}) => {\n setLoading(true);\n try {\n const res = await retrieveRawResources(serverId, { page: p, size: PAGE_SIZE, ...filters });\n const data = res?.data ?? {};\n setRows(data.content ?? []);\n setTotalCount(data.totalElements ?? 0);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load staged resources.\" });\n } finally {\n setLoading(false);\n }\n }, [serverId]);\n\n const currentFilters = useCallback(() => ({\n search, resourceType, downloadStatus, processingStatus,\n }), [search, resourceType, downloadStatus, processingStatus]);\n\n useEffect(() => { loadServer(); }, [loadServer]);\n\n // Reload when filters change (debounced for search).\n useEffect(() => {\n if (searchTimer.current) clearTimeout(searchTimer.current);\n searchTimer.current = setTimeout(() => {\n setPage(0);\n loadRaw(0, { search, resourceType, downloadStatus, processingStatus });\n }, 300);\n return () => clearTimeout(searchTimer.current);\n }, [search, resourceType, downloadStatus, processingStatus, loadRaw]);\n\n const handlePageChange = (_e, newPage) => {\n setPage(newPage);\n loadRaw(newPage, currentFilters());\n };\n\n const clearFilters = () => {\n setSearch(\"\"); setResourceType(\"\"); setDownloadStatus(\"\"); setProcessingStatus(\"\");\n };\n const hasFilters = search || resourceType || downloadStatus || processingStatus;\n\n // Header (bulk) op runner — shows a global progress bar, never disables rows' detail.\n const runHeaderOp = async (label, fn, successMsg) => {\n setHeaderOp(label);\n try {\n await fn();\n showToast({ type: \"success\", message: successMsg });\n await Promise.all([loadServer(), loadRaw(page, currentFilters())]);\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Operation failed.\" });\n } finally {\n setHeaderOp(null);\n }\n };\n\n // Row op runner — only the acting row shows a spinner.\n const runRowOp = async (id, fn, successMsg) => {\n setRowOp({ id });\n try {\n await fn();\n showToast({ type: \"success\", message: successMsg });\n await loadRaw(page, currentFilters());\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Operation failed.\" });\n } finally {\n setRowOp(null);\n }\n };\n\n // ---- confirmations ----\n const askProcess = () => setConfirm({\n title: \"Process Pending\",\n description: \"Process all synced-but-not-processed rows into the system, using stored payloads (no re-sync). Continue?\",\n onConfirm: () => runHeaderOp(\"Processing…\", () => processPending(serverId), \"Processing complete.\"),\n });\n const askReprocessFailed = () => setConfirm({\n title: \"Reprocess Failed\",\n description: \"Re-run processing for all rows whose processing previously failed, using stored payloads. Continue?\",\n onConfirm: () => runHeaderOp(\"Reprocessing…\", () => reprocess(serverId, \"FAILED\"), \"Failed rows reprocessed.\"),\n });\n const askReprocessAll = () => setConfirm({\n title: \"Reprocess All\",\n description: \"Re-run processing for every synced row on this server, using stored payloads. Continue?\",\n onConfirm: () => runHeaderOp(\"Reprocessing…\", () => reprocess(serverId, \"ALL\"), \"All rows reprocessed.\"),\n });\n\n const askSyncOne = (r) => setConfirm({\n title: \"Sync Complete Resource\",\n description: `Sync the full content for \"${r.title ?? r.resourceType}\". For a ValueSet this uses $expand when supported, otherwise a direct read. Continue?`,\n onConfirm: () => runRowOp(r.id, () => syncSingleResource(serverId, r.resourceType, r.resourceId), \"Content synced.\"),\n });\n\n const menuAction = (fn) => () => { setActionsAnchor(null); fn(); };\n\n const fmt = (d) => (d ? moment(d).format(\"DD MMM YYYY HH:mm\") : \"—\");\n\n // Contextual per-row action button (also reused inside the detail drawer).\n const rowActionButton = (r, { small = true } = {}) => {\n if (!canManage) return null;\n const busy = rowOp?.id === r.id;\n const spinner = <CircularProgress size={16} color=\"inherit\" />;\n if (r.downloadStatus === \"DISCOVERED\") {\n return (\n <Button size={small ? \"small\" : \"medium\"} variant=\"contained\" color=\"info\"\n startIcon={busy ? spinner : <CloudDownloadRoundedIcon />} disabled={busy}\n onClick={(e) => { e.stopPropagation(); askSyncOne(r); }}>\n Sync Content\n </Button>\n );\n }\n if (r.downloadStatus === \"FAILED\") {\n return (\n <Button size={small ? \"small\" : \"medium\"} variant=\"contained\" color=\"warning\"\n startIcon={busy ? spinner : <ReplayRoundedIcon />} disabled={busy}\n onClick={(e) => { e.stopPropagation(); askSyncOne(r); }}>\n Retry Sync\n </Button>\n );\n }\n if (r.downloadStatus === \"CONTENT_DOWNLOADED\" && r.processingStatus === \"NOT_STARTED\") {\n return (\n <Button size={small ? \"small\" : \"medium\"} variant=\"contained\"\n startIcon={busy ? spinner : <PlayArrowRoundedIcon />} disabled={busy}\n onClick={(e) => { e.stopPropagation(); runRowOp(r.id, () => reprocessOne(r.id), `Row #${r.id} processed.`); }}>\n Process Now\n </Button>\n );\n }\n if (r.downloadStatus === \"CONTENT_DOWNLOADED\" && (r.processingStatus === \"PROCESSED\" || r.processingStatus === \"FAILED\")) {\n return (\n <Button size={small ? \"small\" : \"medium\"} variant=\"outlined\" color=\"secondary\"\n startIcon={busy ? spinner : <ReplayRoundedIcon />} disabled={busy}\n onClick={(e) => { e.stopPropagation(); runRowOp(r.id, () => reprocessOne(r.id), `Row #${r.id} reprocessed.`); }}>\n Reprocess\n </Button>\n );\n }\n return null;\n };\n\n return (\n <FhirGuard>\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 server\">\n <IconButton size=\"small\" onClick={() => navigate(`/ui/medplat/admin/fhirResource/${serverId}`)}>\n <ArrowBackRoundedIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <span>Staging Inbox{server ? ` — ${server.name}` : \"\"}</span>\n </Stack>\n }\n subtitle=\"Every synced resource lands here. Sync and processing are tracked independently — click any row to see its full lifecycle.\"\n chips={server ? [server.fhirVersion ? `FHIR ${server.fhirVersion}` : \"FHIR\", server.baseUrl] : []}\n actions={\n <Stack direction=\"row\" spacing={1} alignItems=\"center\">\n {canManage && (\n <Button\n variant=\"contained\"\n sx={{ minWidth: 132 }}\n endIcon={<ExpandMoreRoundedIcon />}\n startIcon={headerOp ? <CircularProgress size={16} color=\"inherit\" /> : <BoltRoundedIcon />}\n disabled={Boolean(headerOp)}\n onClick={(e) => setActionsAnchor(e.currentTarget)}\n >\n {headerOp ? \"Working…\" : \"Actions\"}\n </Button>\n )}\n <Tooltip title=\"Reload\">\n <span>\n <IconButton onClick={() => loadRaw(page, currentFilters())} disabled={loading}>\n <RefreshRoundedIcon />\n </IconButton>\n </span>\n </Tooltip>\n </Stack>\n }\n />\n\n <Menu anchorEl={actionsAnchor} open={Boolean(actionsAnchor)} onClose={() => setActionsAnchor(null)}\n transformOrigin={{ horizontal: \"right\", vertical: \"top\" }} anchorOrigin={{ horizontal: \"right\", vertical: \"bottom\" }}\n MenuListProps={{ sx: { py: 0.5 } }}\n PaperProps={{ sx: { width: 360, maxWidth: \"calc(100vw - 32px)\", mt: 0.5 } }}>\n <MenuItem onClick={menuAction(askProcess)} sx={{ alignItems: \"flex-start\", py: 1 }}>\n <ListItemIcon sx={{ mt: 0.5 }}><SettingsSuggestRoundedIcon fontSize=\"small\" color=\"primary\" /></ListItemIcon>\n <ListItemText primary=\"Process Pending\"\n secondary=\"Project synced-but-unprocessed rows into the system\"\n secondaryTypographyProps={{ sx: { whiteSpace: \"normal\" } }} />\n </MenuItem>\n <Divider />\n <MenuItem onClick={menuAction(askReprocessFailed)} sx={{ alignItems: \"flex-start\", py: 1 }}>\n <ListItemIcon sx={{ mt: 0.5 }}><ReplayRoundedIcon fontSize=\"small\" color=\"warning\" /></ListItemIcon>\n <ListItemText primary=\"Reprocess Failed\"\n secondary=\"Retry rows that failed processing\"\n secondaryTypographyProps={{ sx: { whiteSpace: \"normal\" } }} />\n </MenuItem>\n <MenuItem onClick={menuAction(askReprocessAll)} sx={{ alignItems: \"flex-start\", py: 1 }}>\n <ListItemIcon sx={{ mt: 0.5 }}><ReplayRoundedIcon fontSize=\"small\" /></ListItemIcon>\n <ListItemText primary=\"Reprocess All\"\n secondary=\"Re-run processing for every synced row\"\n secondaryTypographyProps={{ sx: { whiteSpace: \"normal\" } }} />\n </MenuItem>\n </Menu>\n\n <SectionCard\n title=\"Staged Resources\"\n subtitle={loading ? \"Loading…\" : `${totalCount} ${totalCount === 1 ? \"resource\" : \"resources\"}`}\n >\n {/* Filter toolbar */}\n <Stack direction=\"row\" spacing={1.25} alignItems=\"center\" flexWrap=\"wrap\" useFlexGap sx={{ mb: 1.5 }}>\n <TextField\n size=\"small\" placeholder=\"Search name or id…\" value={search}\n onChange={(e) => setSearch(e.target.value)}\n InputProps={{ startAdornment: <InputAdornment position=\"start\"><SearchRoundedIcon fontSize=\"small\" /></InputAdornment> }}\n sx={{ minWidth: 220, flexGrow: 1, maxWidth: 320 }}\n />\n <FormControl size=\"small\" sx={{ minWidth: 150 }}>\n <InputLabel>Resource Type</InputLabel>\n <Select label=\"Resource Type\" value={resourceType} onChange={(e) => setResourceType(e.target.value)}>\n <MenuItem value=\"\">All types</MenuItem>\n {typeOptions.map((t) => <MenuItem key={t} value={t}>{t}</MenuItem>)}\n </Select>\n </FormControl>\n <FormControl size=\"small\" sx={{ minWidth: 160 }}>\n <InputLabel>Sync Status</InputLabel>\n <Select label=\"Sync Status\" value={downloadStatus} onChange={(e) => setDownloadStatus(e.target.value)}>\n <MenuItem value=\"\">All</MenuItem>\n {DOWNLOAD_STATUSES.map((s) => <MenuItem key={s} value={s}>{SYNC_STATUS_LABEL[s]}</MenuItem>)}\n </Select>\n </FormControl>\n <FormControl size=\"small\" sx={{ minWidth: 160 }}>\n <InputLabel>Processing</InputLabel>\n <Select label=\"Processing\" value={processingStatus} onChange={(e) => setProcessingStatus(e.target.value)}>\n <MenuItem value=\"\">All</MenuItem>\n {PROCESSING_STATUSES.map((s) => <MenuItem key={s} value={s}>{PROCESSING_STATUS_LABEL[s]}</MenuItem>)}\n </Select>\n </FormControl>\n {hasFilters && (\n <Tooltip title=\"Clear filters\">\n <IconButton size=\"small\" onClick={clearFilters}><FilterAltOffRoundedIcon /></IconButton>\n </Tooltip>\n )}\n </Stack>\n\n <Box sx={{ height: 3, mb: 0.5 }}>{headerOp && <LinearProgress />}</Box>\n <GradientTable>\n <TableHead>\n <TableRow>\n <TableCell>Ref</TableCell>\n <TableCell>Type</TableCell>\n <TableCell>Name</TableCell>\n <TableCell>Sync Status</TableCell>\n <TableCell>Processing Status</TableCell>\n <TableCell align=\"right\">Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {loading ? (\n Array.from({ length: 6 }).map((_, i) => (\n <TableRow key={i}>\n {Array.from({ length: 6 }).map((__, j) => (\n <TableCell key={j}><Skeleton height={22} /></TableCell>\n ))}\n </TableRow>\n ))\n ) : rows.length === 0 ? (\n <EmptyRow\n colSpan={6}\n title={hasFilters ? \"No matching resources\" : \"Nothing staged yet\"}\n hint={hasFilters\n ? \"Try adjusting or clearing the filters.\"\n : \"Use Sync on this server to bring resources into the staging inbox.\"}\n />\n ) : rows.map((r) => (\n <TableRow key={r.id} hover sx={{ cursor: \"pointer\" }} onClick={() => setDetailRow(r)}>\n <TableCell>\n <Chip label={`#${r.id}`} size=\"small\"\n sx={{ fontFamily: \"monospace\", fontWeight: 700, height: 22, borderRadius: 1 }} />\n </TableCell>\n <TableCell><Typography variant=\"body2\" sx={{ fontWeight: 600 }}>{r.resourceType}</Typography></TableCell>\n <TableCell sx={{ maxWidth: 260 }}>\n <Typography variant=\"body2\" sx={{ fontWeight: 700, wordBreak: \"break-word\" }}>\n {r.title ?? <em style={{ color: \"#94a3b8\" }}>(untitled)</em>}\n </Typography>\n <MonoText muted>{r.resourceId ?? \"—\"}</MonoText>\n </TableCell>\n <TableCell>\n <Stack spacing={0.5} alignItems=\"flex-start\">\n <StatusChip value={r.downloadStatus} />\n <Typography variant=\"caption\" color=\"text.secondary\">{fmt(r.syncedAt)}</Typography>\n </Stack>\n </TableCell>\n <TableCell>\n <Stack spacing={0.5} alignItems=\"flex-start\">\n <StatusChip value={r.processingStatus} />\n <Typography variant=\"caption\" color=\"text.secondary\">\n {r.processedAt ? fmt(r.processedAt) : \"—\"}\n </Typography>\n </Stack>\n </TableCell>\n <TableCell align=\"right\" onClick={(e) => e.stopPropagation()}>\n {rowActionButton(r)}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </GradientTable>\n\n <TablePagination\n component=\"div\"\n count={totalCount}\n page={page}\n onPageChange={handlePageChange}\n rowsPerPage={PAGE_SIZE}\n rowsPerPageOptions={[PAGE_SIZE]}\n />\n </SectionCard>\n\n <RawResourceDetailDrawer\n open={Boolean(detailRow)}\n summary={detailRow}\n onClose={() => setDetailRow(null)}\n actionSlot={canManage ? ((r) => rowActionButton(r, { small: false })) : undefined}\n />\n\n <ConfirmModal confirm={confirm} onClose={() => setConfirm(null)} />\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirRawResourceList;\n"],"names":["fmt","d","moment","Field","label","children","Box","jsx","Typography","TimelineNode","ok","failed","icon","title","at","detail","isLast","theme","useTheme","color","Icon","ErrorOutlineRoundedIcon","CheckRoundedIcon","jsxs","Stack","alpha","PropTypes","ErrorBox","message","Paper","t","SyncEventItem","event","defaultExpanded","expanded","setExpanded","useState","setDetail","loading","setLoading","loadDetail","useCallback","res","retrieveSyncEventDetail","showToast","useEffect","syncFailed","payloadPretty","copyPayload","_a","Accordion","_","v","AccordionSummary","ExpandMoreRoundedIcon","CloudSyncRoundedIcon","StatusChip","Chip","AccordionDetails","CircularProgress","Fragment","p","idx","arr","SettingsSuggestRoundedIcon","Tooltip","IconButton","e","ContentCopyRoundedIcon","RawResourceDetailDrawer","open","summary","onClose","actionSlot","r","events","setEvents","retrieveSyncEvents","Drawer","CloseRoundedIcon","MonoText","Divider","ev","i","DOWNLOAD_STATUSES","PROCESSING_STATUSES","PAGE_SIZE","SYNC_STATUS_LABEL","PROCESSING_STATUS_LABEL","FhirRawResourceList","serverId","useParams","navigate","useNavigate","canManage","useFhirPermissions","server","setServer","rows","setRows","totalCount","setTotalCount","page","setPage","search","setSearch","resourceType","setResourceType","downloadStatus","setDownloadStatus","processingStatus","setProcessingStatus","typeOptions","setTypeOptions","headerOp","setHeaderOp","rowOp","setRowOp","actionsAnchor","setActionsAnchor","confirm","setConfirm","detailRow","setDetailRow","searchTimer","useRef","loadServer","s","types","retrieveServerById","retrieveRawResourceTypes","loadRaw","filters","retrieveRawResources","data","currentFilters","handlePageChange","_e","newPage","clearFilters","hasFilters","runHeaderOp","fn","successMsg","err","_b","runRowOp","id","askProcess","processPending","askReprocessFailed","reprocess","askReprocessAll","askSyncOne","syncSingleResource","menuAction","rowActionButton","small","busy","spinner","Button","CloudDownloadRoundedIcon","ReplayRoundedIcon","PlayArrowRoundedIcon","reprocessOne","FhirGuard","FhirPageHeader","ArrowBackRoundedIcon","BoltRoundedIcon","RefreshRoundedIcon","Menu","MenuItem","ListItemIcon","ListItemText","SectionCard","TextField","InputAdornment","SearchRoundedIcon","FormControl","InputLabel","Select","FilterAltOffRoundedIcon","LinearProgress","GradientTable","TableHead","TableRow","TableCell","TableBody","__","j","Skeleton","EmptyRow","TablePagination","ConfirmModal"],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { useState as y, useCallback as R, useEffect as C } from "react";
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 I, Typography as l, CardContent as k, Chip as p, Divider as A, CardActions as z } from "@mui/material";
5
+ import b from "@mui/icons-material/AddRounded";
6
+ import H from "@mui/icons-material/RefreshRounded";
7
+ import T from "@mui/icons-material/SyncRounded";
8
+ import N from "@mui/icons-material/InboxRounded";
9
+ import L from "@mui/icons-material/OpenInNewRounded";
10
+ import S from "@mui/icons-material/DnsRounded";
11
+ import W from "@mui/icons-material/LockRounded";
12
+ import D from "@mui/icons-material/LockOpenRounded";
13
+ import E from "moment";
14
+ import { showToast as O } from "@/common/toaster/toaster";
15
+ import { u as $, r as j, F as G, a as P, S as V, M as B } from "./permissions-DEWACxJN.js";
16
+ import { S as M } from "./SyncDialog-BRGpHOE4.js";
17
+ function U({ server: n, onOpen: a, onSync: d, onStaging: f, canManage: g }) {
18
+ var r;
19
+ const s = n.authType && n.authType !== "NONE";
20
+ return /* @__PURE__ */ i(I, { variant: "outlined", sx: { height: "100%", borderRadius: 2, display: "flex", flexDirection: "column" }, children: [
21
+ /* @__PURE__ */ i(k, { sx: { flexGrow: 1 }, children: [
22
+ /* @__PURE__ */ i(c, { direction: "row", justifyContent: "space-between", alignItems: "flex-start", children: [
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(S, { fontSize: "small" }) }),
25
+ /* @__PURE__ */ i(u, { children: [
26
+ /* @__PURE__ */ e(l, { variant: "subtitle1", sx: { fontWeight: 800, lineHeight: 1.1 }, children: n.name }),
27
+ /* @__PURE__ */ e(
28
+ p,
29
+ {
30
+ size: "small",
31
+ icon: s ? /* @__PURE__ */ e(W, {}) : /* @__PURE__ */ e(D, {}),
32
+ label: s ? n.authType : "Public",
33
+ variant: "outlined",
34
+ sx: { height: 20, mt: 0.5 }
35
+ }
36
+ )
37
+ ] })
38
+ ] }),
39
+ /* @__PURE__ */ e(V, { value: n.isActive ? "ACTIVE" : "INACTIVE" })
40
+ ] }),
41
+ /* @__PURE__ */ e(u, { sx: { mt: 1.5 }, children: /* @__PURE__ */ e(B, { muted: !0, children: n.baseUrl }) }),
42
+ /* @__PURE__ */ e(A, { sx: { my: 1.5 } }),
43
+ n.capabilitySyncedAt ? /* @__PURE__ */ i(c, { direction: "row", spacing: 0.75, flexWrap: "wrap", useFlexGap: !0, children: [
44
+ n.fhirVersion ? /* @__PURE__ */ e(p, { size: "small", label: `FHIR ${n.fhirVersion}`, sx: { height: 22 } }) : null,
45
+ /* @__PURE__ */ e(p, { size: "small", label: `${((r = n.supportedResources) == null ? void 0 : r.length) ?? 0} resources`, sx: { height: 22 } }),
46
+ n.supportsExpand ? /* @__PURE__ */ e(p, { size: "small", color: "success", label: "$expand", sx: { height: 22 } }) : null
47
+ ] }) : /* @__PURE__ */ e(l, { variant: "caption", color: "text.disabled", children: "Capability not discovered" }),
48
+ n.capabilitySyncedAt && /* @__PURE__ */ i(l, { variant: "caption", color: "text.secondary", display: "block", sx: { mt: 1 }, children: [
49
+ "synced ",
50
+ E(n.capabilitySyncedAt).fromNow()
51
+ ] })
52
+ ] }),
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(L, {}), onClick: a, children: "Open" }),
55
+ g && /* @__PURE__ */ e(o, { size: "small", variant: "outlined", startIcon: /* @__PURE__ */ e(T, {}), onClick: d, children: "Sync" }),
56
+ /* @__PURE__ */ e(o, { size: "small", variant: "outlined", startIcon: /* @__PURE__ */ e(N, {}), onClick: f, children: "Staging" })
57
+ ] })
58
+ ] });
59
+ }
60
+ function ce() {
61
+ const n = w(), { canManage: a } = $(), [d, f] = y([]), [g, s] = y(!1), [r, x] = y(null), h = R(async () => {
62
+ s(!0);
63
+ try {
64
+ const t = await j();
65
+ f((t == null ? void 0 : t.data) ?? []);
66
+ } catch {
67
+ O({ type: "error", message: "Failed to load FHIR servers." });
68
+ } finally {
69
+ s(!1);
70
+ }
71
+ }, []);
72
+ return C(() => {
73
+ h();
74
+ }, [h]), /* @__PURE__ */ e(G, { children: /* @__PURE__ */ i(u, { sx: { p: { xs: 2, md: 3 } }, children: [
75
+ /* @__PURE__ */ e(
76
+ P,
77
+ {
78
+ title: "FHIR Sync",
79
+ 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.",
80
+ chips: ["Sync", "Raw Storage", "Processing"],
81
+ actions: /* @__PURE__ */ i(c, { direction: "row", spacing: 1, children: [
82
+ /* @__PURE__ */ e(o, { variant: "outlined", startIcon: /* @__PURE__ */ e(H, {}), onClick: h, children: "Refresh" }),
83
+ a && /* @__PURE__ */ e(o, { variant: "contained", startIcon: /* @__PURE__ */ e(b, {}), onClick: () => n("/ui/medplat/admin/fhirResource/new"), children: "Connect Server" })
84
+ ] })
85
+ }
86
+ ),
87
+ g ? /* @__PURE__ */ e(m, { container: !0, spacing: 2, children: Array.from({ length: 3 }).map((t, v) => /* @__PURE__ */ e(m, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(F, { variant: "rounded", height: 220 }) }, v)) }) : d.length === 0 ? /* @__PURE__ */ e(I, { variant: "outlined", sx: { borderRadius: 2, p: 5, textAlign: "center" }, children: /* @__PURE__ */ i(c, { alignItems: "center", spacing: 1.5, children: [
88
+ /* @__PURE__ */ e(S, { sx: { fontSize: 48, color: "text.disabled" } }),
89
+ /* @__PURE__ */ e(l, { variant: "h6", sx: { fontWeight: 700 }, children: "No FHIR servers yet" }),
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
+ a && /* @__PURE__ */ e(o, { variant: "contained", startIcon: /* @__PURE__ */ e(b, {}), onClick: () => n("/ui/medplat/admin/fhirResource/new"), children: "Connect your first server" })
92
+ ] }) }) : /* @__PURE__ */ e(m, { container: !0, spacing: 2, children: d.map((t) => /* @__PURE__ */ e(m, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
93
+ U,
94
+ {
95
+ server: t,
96
+ canManage: a,
97
+ onOpen: () => n(`/ui/medplat/admin/fhirResource/${t.id}`),
98
+ onSync: () => x(t),
99
+ onStaging: () => n(`/ui/medplat/admin/fhirResource/${t.id}/staging`)
100
+ }
101
+ ) }, t.id)) }),
102
+ r && /* @__PURE__ */ e(
103
+ M,
104
+ {
105
+ open: !!r,
106
+ server: r,
107
+ onClose: () => x(null),
108
+ onDone: h
109
+ }
110
+ )
111
+ ] }) });
112
+ }
113
+ export {
114
+ ce as default
115
+ };
116
+ //# sourceMappingURL=FhirServerList-Dkq7Kbes.js.map
@@ -0,0 +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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"}
@@ -0,0 +1,253 @@
1
+ import { jsxs as i, jsx as e, Fragment as $ } from "react/jsx-runtime";
2
+ import { useState as d, useEffect as U, useCallback as j } from "react";
3
+ import { useParams as z, useNavigate as L } from "react-router";
4
+ import { Dialog as M, DialogTitle as P, DialogContent as V, DialogActions as G, Button as D, Box as g, Stack as y, Tooltip as q, IconButton as J, Paper as K, Skeleton as Q, Typography as h, Chip as E, Divider as X, Grid as s, Card as Y, CardActionArea as Z, CardContent as _ } from "@mui/material";
5
+ import ee from "@mui/icons-material/ArrowBackRounded";
6
+ import te from "@mui/icons-material/SyncRounded";
7
+ import re from "@mui/icons-material/CloudSyncRounded";
8
+ import ie from "@mui/icons-material/InboxRounded";
9
+ import ne from "@mui/icons-material/EditRounded";
10
+ import ae from "@mui/icons-material/DeleteOutlineRounded";
11
+ import se from "@mui/icons-material/LockRounded";
12
+ import oe from "@mui/icons-material/LockOpenRounded";
13
+ import ce from "moment";
14
+ import { showToast as m } from "@/common/toaster/toaster";
15
+ import { g as le, e as de, u as he, h as ue, F as me, a as pe, S as fe, M as ye, C as ge, f as be, i as ve } from "./permissions-DEWACxJN.js";
16
+ import { S as xe, v as Se } from "./ServerFormFields-SLghoZ2z.js";
17
+ import { S as Ce } from "./SyncDialog-BRGpHOE4.js";
18
+ const O = () => ({
19
+ name: "",
20
+ baseUrl: "",
21
+ authType: "NONE",
22
+ authUsername: "",
23
+ authHeaderName: "",
24
+ authSecret: "",
25
+ isActive: !0,
26
+ hasSecret: !1
27
+ });
28
+ function Re({ open: n, server: r, onClose: u, onSaved: t }) {
29
+ const o = !!(r != null && r.id), [c, f] = d(O()), [T, b] = d({}), [v, x] = d(!1);
30
+ return U(() => {
31
+ f(r ? {
32
+ name: r.name ?? "",
33
+ baseUrl: r.baseUrl ?? "",
34
+ authType: r.authType ?? "NONE",
35
+ authUsername: r.authUsername ?? "",
36
+ authHeaderName: r.authHeaderName ?? "",
37
+ authSecret: "",
38
+ hasSecret: !!r.hasSecret,
39
+ isActive: r.isActive ?? !0
40
+ } : O()), b({});
41
+ }, [r, n]), /* @__PURE__ */ i(M, { open: n, onClose: u, maxWidth: "sm", fullWidth: !0, children: [
42
+ /* @__PURE__ */ e(P, { children: o ? "Edit FHIR Server" : "Add FHIR Server" }),
43
+ /* @__PURE__ */ e(V, { dividers: !0, children: /* @__PURE__ */ e(xe, { value: c, onChange: f, isEdit: o, errors: T }) }),
44
+ /* @__PURE__ */ i(G, { sx: { px: 3, pb: 2 }, children: [
45
+ /* @__PURE__ */ e(D, { onClick: u, disabled: v, children: "Cancel" }),
46
+ /* @__PURE__ */ e(D, { variant: "contained", onClick: async () => {
47
+ var w, C;
48
+ const S = Se(c, { isEdit: o });
49
+ if (b(S), !Object.keys(S).length) {
50
+ x(!0);
51
+ try {
52
+ o ? (await le(r.id, c), m({ type: "success", message: "Server updated." })) : (await de(c), m({ type: "success", message: "Server created." })), t == null || t(), u();
53
+ } catch (l) {
54
+ m({ type: "error", message: ((C = (w = l == null ? void 0 : l.response) == null ? void 0 : w.data) == null ? void 0 : C.message) ?? "Failed to save server." });
55
+ } finally {
56
+ x(!1);
57
+ }
58
+ }
59
+ }, disabled: v, children: o ? "Update" : "Save" })
60
+ ] })
61
+ ] });
62
+ }
63
+ function F({ label: n, children: r }) {
64
+ return /* @__PURE__ */ i(g, { children: [
65
+ /* @__PURE__ */ e(h, { variant: "overline", color: "text.secondary", sx: { fontWeight: 700, lineHeight: 1 }, children: n }),
66
+ /* @__PURE__ */ e(g, { sx: { mt: 0.5 }, children: r })
67
+ ] });
68
+ }
69
+ function I({ icon: n, title: r, description: u, color: t = "primary", onClick: o, disabled: c }) {
70
+ return /* @__PURE__ */ e(Y, { variant: "outlined", sx: { height: "100%", borderRadius: 1.5, opacity: c ? 0.6 : 1 }, children: /* @__PURE__ */ e(Z, { onClick: o, disabled: c, sx: { height: "100%", p: 0.5 }, children: /* @__PURE__ */ e(_, { children: /* @__PURE__ */ i(y, { direction: "row", spacing: 1.5, alignItems: "flex-start", children: [
71
+ /* @__PURE__ */ e(g, { sx: {
72
+ width: 40,
73
+ height: 40,
74
+ borderRadius: 1.5,
75
+ flexShrink: 0,
76
+ display: "flex",
77
+ alignItems: "center",
78
+ justifyContent: "center",
79
+ bgcolor: `${t}.main`,
80
+ color: "#fff"
81
+ }, children: n }),
82
+ /* @__PURE__ */ i(g, { children: [
83
+ /* @__PURE__ */ e(h, { variant: "subtitle2", sx: { fontWeight: 800 }, children: r }),
84
+ /* @__PURE__ */ e(h, { variant: "caption", color: "text.secondary", children: u })
85
+ ] })
86
+ ] }) }) }) });
87
+ }
88
+ function Le() {
89
+ var N, A;
90
+ const { serverId: n } = z(), r = L(), { canManage: u } = he(), [t, o] = d(null), [c, f] = d(!1), [T, b] = d(!1), [v, x] = d(!1), [k, S] = d(!1), [w, C] = d(null), l = j(async () => {
91
+ f(!0);
92
+ try {
93
+ const a = await ue(n);
94
+ o(a == null ? void 0 : a.data);
95
+ } catch {
96
+ m({ type: "error", message: "Failed to load server." });
97
+ } finally {
98
+ f(!1);
99
+ }
100
+ }, [n]);
101
+ U(() => {
102
+ l();
103
+ }, [l]);
104
+ const B = async () => {
105
+ var a, R;
106
+ b(!0);
107
+ try {
108
+ await be(n), m({ type: "success", message: "Capability refreshed." }), l();
109
+ } catch (p) {
110
+ m({ type: "error", message: ((R = (a = p == null ? void 0 : p.response) == null ? void 0 : a.data) == null ? void 0 : R.message) ?? "Could not reach /metadata." });
111
+ } finally {
112
+ b(!1);
113
+ }
114
+ }, H = () => C({
115
+ title: "Delete FHIR Server",
116
+ description: `Delete "${t.name}" (${t.baseUrl})? All of its staged resources will also be removed. This cannot be undone.`,
117
+ onConfirm: async () => {
118
+ var a, R;
119
+ try {
120
+ await ve(n), m({ type: "success", message: `Server "${t.name}" deleted.` }), r("/ui/medplat/admin/fhirResource");
121
+ } catch (p) {
122
+ m({ type: "error", message: ((R = (a = p == null ? void 0 : p.response) == null ? void 0 : a.data) == null ? void 0 : R.message) ?? "Failed to delete server." });
123
+ }
124
+ }
125
+ }), W = t != null && t.authType && t.authType !== "NONE" ? `${t.authType}${t.hasSecret ? "" : " (no secret)"}` : "None (public)";
126
+ return /* @__PURE__ */ e(me, { children: /* @__PURE__ */ i(g, { sx: { p: { xs: 2, md: 3 } }, children: [
127
+ /* @__PURE__ */ e(
128
+ pe,
129
+ {
130
+ title: /* @__PURE__ */ i(y, { direction: "row", alignItems: "center", spacing: 1, children: [
131
+ /* @__PURE__ */ e(q, { title: "Back to servers", children: /* @__PURE__ */ e(J, { size: "small", onClick: () => r("/ui/medplat/admin/fhirResource"), children: /* @__PURE__ */ e(ee, { fontSize: "small" }) }) }),
132
+ /* @__PURE__ */ e("span", { children: t ? t.name : "Server" })
133
+ ] }),
134
+ subtitle: "Server profile — connection, discovered capability, and everything you can do with it."
135
+ }
136
+ ),
137
+ /* @__PURE__ */ e(K, { variant: "outlined", sx: { p: 3, mb: 3, borderRadius: 2 }, children: c ? /* @__PURE__ */ e(Q, { height: 120 }) : t ? /* @__PURE__ */ i(y, { spacing: 2.5, children: [
138
+ /* @__PURE__ */ e(y, { direction: { xs: "column", md: "row" }, justifyContent: "space-between", spacing: 2, children: /* @__PURE__ */ i(y, { direction: "row", spacing: 1.5, alignItems: "center", children: [
139
+ /* @__PURE__ */ e(h, { variant: "h6", sx: { fontWeight: 800 }, children: t.name }),
140
+ /* @__PURE__ */ e(fe, { value: t.isActive ? "ACTIVE" : "INACTIVE" }),
141
+ /* @__PURE__ */ e(
142
+ E,
143
+ {
144
+ size: "small",
145
+ icon: t.authType && t.authType !== "NONE" ? /* @__PURE__ */ e(se, {}) : /* @__PURE__ */ e(oe, {}),
146
+ label: W,
147
+ variant: "outlined",
148
+ sx: { height: 24 }
149
+ }
150
+ )
151
+ ] }) }),
152
+ /* @__PURE__ */ e(ye, { muted: !0, children: t.baseUrl }),
153
+ /* @__PURE__ */ e(X, {}),
154
+ /* @__PURE__ */ i(s, { container: !0, spacing: 3, children: [
155
+ /* @__PURE__ */ e(s, { item: !0, xs: 6, md: 3, children: /* @__PURE__ */ e(F, { label: "FHIR Version", children: /* @__PURE__ */ e(h, { variant: "body2", sx: { fontWeight: 700 }, children: t.fhirVersion ?? "—" }) }) }),
156
+ /* @__PURE__ */ e(s, { item: !0, xs: 6, md: 3, children: /* @__PURE__ */ e(F, { label: "Resource Types", children: /* @__PURE__ */ e(h, { variant: "body2", sx: { fontWeight: 700 }, children: ((N = t.supportedResources) == null ? void 0 : N.length) ?? 0 }) }) }),
157
+ /* @__PURE__ */ e(s, { item: !0, xs: 6, md: 3, children: /* @__PURE__ */ e(F, { label: "$expand", children: /* @__PURE__ */ e(
158
+ E,
159
+ {
160
+ size: "small",
161
+ label: t.supportsExpand ? "Supported" : "Not supported",
162
+ color: t.supportsExpand ? "success" : "default",
163
+ variant: "outlined",
164
+ sx: { height: 22 }
165
+ }
166
+ ) }) }),
167
+ /* @__PURE__ */ e(s, { item: !0, xs: 6, md: 3, children: /* @__PURE__ */ e(F, { label: "Capability Synced", children: /* @__PURE__ */ e(h, { variant: "body2", children: t.capabilitySyncedAt ? ce(t.capabilitySyncedAt).fromNow() : "Never" }) }) })
168
+ ] }),
169
+ (A = t.supportedResources) != null && A.length ? /* @__PURE__ */ i(g, { children: [
170
+ /* @__PURE__ */ e(h, { variant: "overline", color: "text.secondary", sx: { fontWeight: 700 }, children: "Supported Resources" }),
171
+ /* @__PURE__ */ e(y, { direction: "row", spacing: 0.75, flexWrap: "wrap", useFlexGap: !0, sx: { mt: 0.75 }, children: t.supportedResources.map((a) => /* @__PURE__ */ e(E, { size: "small", label: a }, a)) })
172
+ ] }) : /* @__PURE__ */ e(h, { variant: "body2", color: "text.secondary", children: "Capability not discovered yet — use “Refresh Capability” to learn what this server supports." })
173
+ ] }) : null }),
174
+ t && /* @__PURE__ */ i(s, { container: !0, spacing: 2, children: [
175
+ u && /* @__PURE__ */ e(s, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
176
+ I,
177
+ {
178
+ icon: /* @__PURE__ */ e(te, {}),
179
+ color: "primary",
180
+ title: "Sync Resources",
181
+ description: "Sync resources from this server into the staging inbox (by type, or a single resource by id).",
182
+ onClick: () => S(!0)
183
+ }
184
+ ) }),
185
+ /* @__PURE__ */ e(s, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
186
+ I,
187
+ {
188
+ icon: /* @__PURE__ */ e(ie, {}),
189
+ color: "info",
190
+ title: "Staging Inbox",
191
+ description: "View synced raw resources and their processing status; process or reprocess into the system.",
192
+ onClick: () => r(`/ui/medplat/admin/fhirResource/${n}/staging`)
193
+ }
194
+ ) }),
195
+ u && /* @__PURE__ */ i($, { children: [
196
+ /* @__PURE__ */ e(s, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
197
+ I,
198
+ {
199
+ icon: /* @__PURE__ */ e(re, {}),
200
+ color: "secondary",
201
+ title: "Refresh Capability",
202
+ description: "Re-query GET /metadata to refresh the FHIR version and supported resources/operations.",
203
+ onClick: B,
204
+ disabled: T
205
+ }
206
+ ) }),
207
+ /* @__PURE__ */ e(s, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
208
+ I,
209
+ {
210
+ icon: /* @__PURE__ */ e(ne, {}),
211
+ color: "warning",
212
+ title: "Edit Server",
213
+ description: "Update the base URL, authentication credentials, or active status of this server.",
214
+ onClick: () => x(!0)
215
+ }
216
+ ) }),
217
+ /* @__PURE__ */ e(s, { item: !0, xs: 12, sm: 6, md: 4, children: /* @__PURE__ */ e(
218
+ I,
219
+ {
220
+ icon: /* @__PURE__ */ e(ae, {}),
221
+ color: "error",
222
+ title: "Delete Server",
223
+ description: "Remove this server and all of its staged resources. This action cannot be undone.",
224
+ onClick: H
225
+ }
226
+ ) })
227
+ ] })
228
+ ] }),
229
+ v && /* @__PURE__ */ e(
230
+ Re,
231
+ {
232
+ open: v,
233
+ server: t,
234
+ onClose: () => x(!1),
235
+ onSaved: l
236
+ }
237
+ ),
238
+ k && /* @__PURE__ */ e(
239
+ Ce,
240
+ {
241
+ open: k,
242
+ server: t,
243
+ onClose: () => S(!1),
244
+ onDone: l
245
+ }
246
+ ),
247
+ /* @__PURE__ */ e(ge, { confirm: w, onClose: () => C(null) })
248
+ ] }) });
249
+ }
250
+ export {
251
+ Le as default
252
+ };
253
+ //# sourceMappingURL=FhirServerProfile-CUOwC6Wb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FhirServerProfile-CUOwC6Wb.js","sources":["../src/views/FhirResource/AddEditFhirServerModal.jsx","../src/views/FhirResource/FhirServerProfile.jsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport {\n Dialog, DialogTitle, DialogContent, DialogActions, Button,\n} from \"@mui/material\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport { createServer, updateServer } from \"../../services/FhirResource\";\nimport ServerFormFields, { validateServerForm } from \"./components/ServerFormFields\";\n\nconst emptyForm = () => ({\n name: \"\", baseUrl: \"\", authType: \"NONE\",\n authUsername: \"\", authHeaderName: \"\", authSecret: \"\", isActive: true, hasSecret: false,\n});\n\nfunction AddEditFhirServerModal({ open, server, onClose, onSaved }) {\n const isEdit = Boolean(server?.id);\n const [form, setForm] = useState(emptyForm());\n const [errors, setErrors] = useState({});\n const [busy, setBusy] = useState(false);\n\n useEffect(() => {\n if (server) {\n setForm({\n name: server.name ?? \"\",\n baseUrl: server.baseUrl ?? \"\",\n authType: server.authType ?? \"NONE\",\n authUsername: server.authUsername ?? \"\",\n authHeaderName: server.authHeaderName ?? \"\",\n authSecret: \"\",\n hasSecret: Boolean(server.hasSecret),\n isActive: server.isActive ?? true,\n });\n } else {\n setForm(emptyForm());\n }\n setErrors({});\n }, [server, open]);\n\n const handleSave = async () => {\n const errs = validateServerForm(form, { isEdit });\n setErrors(errs);\n if (Object.keys(errs).length) return;\n setBusy(true);\n try {\n if (isEdit) {\n await updateServer(server.id, form);\n showToast({ type: \"success\", message: \"Server updated.\" });\n } else {\n await createServer(form);\n showToast({ type: \"success\", message: \"Server created.\" });\n }\n onSaved?.();\n onClose();\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Failed to save server.\" });\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>{isEdit ? \"Edit FHIR Server\" : \"Add FHIR Server\"}</DialogTitle>\n <DialogContent dividers>\n <ServerFormFields value={form} onChange={setForm} isEdit={isEdit} errors={errors} />\n </DialogContent>\n <DialogActions sx={{ px: 3, pb: 2 }}>\n <Button onClick={onClose} disabled={busy}>Cancel</Button>\n <Button variant=\"contained\" onClick={handleSave} disabled={busy}>\n {isEdit ? \"Update\" : \"Save\"}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default AddEditFhirServerModal;\n","import { useEffect, useState, useCallback } from \"react\";\nimport { useParams, useNavigate } from \"react-router\";\nimport {\n Box, Stack, Typography, Skeleton, Chip, Paper, Divider, IconButton, Tooltip,\n Card, CardActionArea, CardContent, Grid,\n} from \"@mui/material\";\nimport ArrowBackRoundedIcon from \"@mui/icons-material/ArrowBackRounded\";\nimport SyncRoundedIcon from \"@mui/icons-material/SyncRounded\";\nimport CloudSyncRoundedIcon from \"@mui/icons-material/CloudSyncRounded\";\nimport InboxRoundedIcon from \"@mui/icons-material/InboxRounded\";\nimport EditRoundedIcon from \"@mui/icons-material/EditRounded\";\nimport DeleteOutlineRoundedIcon from \"@mui/icons-material/DeleteOutlineRounded\";\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 { retrieveServerById, refreshCapability, deleteServer } from \"../../services/FhirResource\";\nimport { FhirPageHeader, StatusChip, MonoText, ConfirmModal } from \"./components/FhirUi\";\nimport { FhirGuard, useFhirPermissions } from \"./components/permissions\";\nimport AddEditFhirServerModal from \"./AddEditFhirServerModal\";\nimport SyncDialog from \"./SyncDialog\";\n\nfunction InfoTile({ label, children }) {\n return (\n <Box>\n <Typography variant=\"overline\" color=\"text.secondary\" sx={{ fontWeight: 700, lineHeight: 1 }}>{label}</Typography>\n <Box sx={{ mt: 0.5 }}>{children}</Box>\n </Box>\n );\n}\n\nfunction ActionCard({ icon, title, description, color = \"primary\", onClick, disabled }) {\n return (\n <Card variant=\"outlined\" sx={{ height: \"100%\", borderRadius: 1.5, opacity: disabled ? 0.6 : 1 }}>\n <CardActionArea onClick={onClick} disabled={disabled} sx={{ height: \"100%\", p: 0.5 }}>\n <CardContent>\n <Stack direction=\"row\" spacing={1.5} alignItems=\"flex-start\">\n <Box sx={{\n width: 40, height: 40, borderRadius: 1.5, flexShrink: 0,\n display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\n bgcolor: `${color}.main`, color: \"#fff\",\n }}>\n {icon}\n </Box>\n <Box>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 800 }}>{title}</Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">{description}</Typography>\n </Box>\n </Stack>\n </CardContent>\n </CardActionArea>\n </Card>\n );\n}\n\nfunction FhirServerProfile() {\n const { serverId } = useParams();\n const navigate = useNavigate();\n const { canManage } = useFhirPermissions();\n\n const [server, setServer] = useState(null);\n const [loading, setLoading] = useState(false);\n const [busy, setBusy] = useState(false);\n const [editOpen, setEditOpen] = useState(false);\n const [syncOpen, setSyncOpen] = useState(false);\n const [confirm, setConfirm] = useState(null);\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const res = await retrieveServerById(serverId);\n setServer(res?.data);\n } catch {\n showToast({ type: \"error\", message: \"Failed to load server.\" });\n } finally {\n setLoading(false);\n }\n }, [serverId]);\n\n useEffect(() => { load(); }, [load]);\n\n const handleRefreshCapability = async () => {\n setBusy(true);\n try {\n await refreshCapability(serverId);\n showToast({ type: \"success\", message: \"Capability refreshed.\" });\n load();\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Could not reach /metadata.\" });\n } finally {\n setBusy(false);\n }\n };\n\n const askDelete = () => setConfirm({\n title: \"Delete FHIR Server\",\n description: `Delete \"${server.name}\" (${server.baseUrl})? All of its staged resources will also be removed. This cannot be undone.`,\n onConfirm: async () => {\n try {\n await deleteServer(serverId);\n showToast({ type: \"success\", message: `Server \"${server.name}\" deleted.` });\n navigate(\"/ui/medplat/admin/fhirResource\");\n } catch (err) {\n showToast({ type: \"error\", message: err?.response?.data?.message ?? \"Failed to delete server.\" });\n }\n },\n });\n\n const authLabel = server?.authType && server.authType !== \"NONE\"\n ? `${server.authType}${server.hasSecret ? \"\" : \" (no secret)\"}`\n : \"None (public)\";\n\n return (\n <FhirGuard>\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={() => navigate(\"/ui/medplat/admin/fhirResource\")}>\n <ArrowBackRoundedIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <span>{server ? server.name : \"Server\"}</span>\n </Stack>\n }\n subtitle=\"Server profile — connection, discovered capability, and everything you can do with it.\"\n />\n\n {/* Rich detail card */}\n <Paper variant=\"outlined\" sx={{ p: 3, mb: 3, borderRadius: 2 }}>\n {loading ? (\n <Skeleton height={120} />\n ) : server ? (\n <Stack spacing={2.5}>\n <Stack direction={{ xs: \"column\", md: \"row\" }} justifyContent=\"space-between\" spacing={2}>\n <Stack direction=\"row\" spacing={1.5} alignItems=\"center\">\n <Typography variant=\"h6\" sx={{ fontWeight: 800 }}>{server.name}</Typography>\n <StatusChip value={server.isActive ? \"ACTIVE\" : \"INACTIVE\"} />\n <Chip\n size=\"small\"\n icon={server.authType && server.authType !== \"NONE\" ? <LockRoundedIcon /> : <LockOpenRoundedIcon />}\n label={authLabel}\n variant=\"outlined\"\n sx={{ height: 24 }}\n />\n </Stack>\n </Stack>\n\n <MonoText muted>{server.baseUrl}</MonoText>\n\n <Divider />\n\n <Grid container spacing={3}>\n <Grid item xs={6} md={3}>\n <InfoTile label=\"FHIR Version\">\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{server.fhirVersion ?? \"—\"}</Typography>\n </InfoTile>\n </Grid>\n <Grid item xs={6} md={3}>\n <InfoTile label=\"Resource Types\">\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>{server.supportedResources?.length ?? 0}</Typography>\n </InfoTile>\n </Grid>\n <Grid item xs={6} md={3}>\n <InfoTile label=\"$expand\">\n <Chip size=\"small\" label={server.supportsExpand ? \"Supported\" : \"Not supported\"}\n color={server.supportsExpand ? \"success\" : \"default\"} variant=\"outlined\" sx={{ height: 22 }} />\n </InfoTile>\n </Grid>\n <Grid item xs={6} md={3}>\n <InfoTile label=\"Capability Synced\">\n <Typography variant=\"body2\">\n {server.capabilitySyncedAt ? moment(server.capabilitySyncedAt).fromNow() : \"Never\"}\n </Typography>\n </InfoTile>\n </Grid>\n </Grid>\n\n {server.supportedResources?.length ? (\n <Box>\n <Typography variant=\"overline\" 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 ) : (\n <Typography variant=\"body2\" color=\"text.secondary\">\n Capability not discovered yet — use “Refresh Capability” to learn what this server supports.\n </Typography>\n )}\n </Stack>\n ) : null}\n </Paper>\n\n {/* Action cards */}\n {server && (\n <Grid container spacing={2}>\n {canManage && (\n <Grid item xs={12} sm={6} md={4}>\n <ActionCard\n icon={<SyncRoundedIcon />} color=\"primary\"\n title=\"Sync Resources\"\n description=\"Sync resources from this server into the staging inbox (by type, or a single resource by id).\"\n onClick={() => setSyncOpen(true)}\n />\n </Grid>\n )}\n <Grid item xs={12} sm={6} md={4}>\n <ActionCard\n icon={<InboxRoundedIcon />} color=\"info\"\n title=\"Staging Inbox\"\n description=\"View synced raw resources and their processing status; process or reprocess into the system.\"\n onClick={() => navigate(`/ui/medplat/admin/fhirResource/${serverId}/staging`)}\n />\n </Grid>\n {canManage && (\n <>\n <Grid item xs={12} sm={6} md={4}>\n <ActionCard\n icon={<CloudSyncRoundedIcon />} color=\"secondary\"\n title=\"Refresh Capability\"\n description=\"Re-query GET /metadata to refresh the FHIR version and supported resources/operations.\"\n onClick={handleRefreshCapability} disabled={busy}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <ActionCard\n icon={<EditRoundedIcon />} color=\"warning\"\n title=\"Edit Server\"\n description=\"Update the base URL, authentication credentials, or active status of this server.\"\n onClick={() => setEditOpen(true)}\n />\n </Grid>\n <Grid item xs={12} sm={6} md={4}>\n <ActionCard\n icon={<DeleteOutlineRoundedIcon />} color=\"error\"\n title=\"Delete Server\"\n description=\"Remove this server and all of its staged resources. This action cannot be undone.\"\n onClick={askDelete}\n />\n </Grid>\n </>\n )}\n </Grid>\n )}\n\n {editOpen && (\n <AddEditFhirServerModal\n open={editOpen}\n server={server}\n onClose={() => setEditOpen(false)}\n onSaved={load}\n />\n )}\n\n {syncOpen && (\n <SyncDialog\n open={syncOpen}\n server={server}\n onClose={() => setSyncOpen(false)}\n onDone={load}\n />\n )}\n\n <ConfirmModal confirm={confirm} onClose={() => setConfirm(null)} />\n </Box>\n </FhirGuard>\n );\n}\n\nexport default FhirServerProfile;\n"],"names":["emptyForm","AddEditFhirServerModal","open","server","onClose","onSaved","isEdit","form","setForm","useState","errors","setErrors","busy","setBusy","useEffect","Dialog","jsx","DialogTitle","DialogContent","ServerFormFields","jsxs","DialogActions","Button","errs","validateServerForm","updateServer","showToast","createServer","err","_b","_a","InfoTile","label","children","Box","Typography","ActionCard","icon","title","description","color","onClick","disabled","Card","CardActionArea","CardContent","Stack","FhirServerProfile","serverId","useParams","navigate","useNavigate","canManage","useFhirPermissions","setServer","loading","setLoading","editOpen","setEditOpen","syncOpen","setSyncOpen","confirm","setConfirm","load","useCallback","res","retrieveServerById","handleRefreshCapability","refreshCapability","askDelete","deleteServer","authLabel","FhirGuard","FhirPageHeader","Tooltip","IconButton","ArrowBackRoundedIcon","Paper","Skeleton","StatusChip","Chip","LockRoundedIcon","LockOpenRoundedIcon","MonoText","Divider","Grid","moment","r","SyncRoundedIcon","InboxRoundedIcon","Fragment","CloudSyncRoundedIcon","EditRoundedIcon","DeleteOutlineRoundedIcon","SyncDialog","ConfirmModal"],"mappings":"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"}