@gen-epix/ui-client-casedb 4.3.0 → 4.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/Dashboard.js +613 -666
- package/dist/_chunks/Dashboard.js.map +1 -1
- package/dist/_chunks/LegendaItem.js.map +1 -1
- package/dist/_chunks/UploadUtil.js +4 -6
- package/dist/_chunks/UploadUtil.js.map +1 -1
- package/dist/_chunks/_baseClone.js +1 -1
- package/dist/_chunks/_baseClone.js.map +1 -1
- package/dist/_chunks/cloneDeep.js +1 -1
- package/dist/_chunks/cloneDeep.js.map +1 -1
- package/dist/_chunks/esm.js +93 -101
- package/dist/_chunks/esm.js.map +1 -1
- package/dist/_chunks/react.js +1 -1
- package/dist/_chunks/react.js.map +1 -1
- package/dist/_chunks/shallow.js +2 -2
- package/dist/_chunks/shallow.js.map +1 -1
- package/dist/_chunks/sync.js +4 -4
- package/dist/_chunks/sync.js.map +1 -1
- package/dist/_chunks/vanilla.js +1 -1
- package/dist/_chunks/vanilla.js.map +1 -1
- package/dist/_chunks/yup.js +2 -2
- package/dist/_chunks/yup.js.map +1 -1
- package/dist/components/app/CaseDbApp/CaseDbApp.d.ts +1 -1
- package/dist/components/ui/AddCasesToEventDialog/AddCasesToEventDialogSuccessNotificationMessage.d.ts +1 -1
- package/dist/components/ui/CaseContentForm/CaseContentForm.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/CaseCaseSetInfo.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/CaseContent.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/CaseInfoForm.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/CaseSharingForm.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/CaseSharingInfo.d.ts +1 -1
- package/dist/components/ui/CaseInfoDialog/ReadOnlyCaseContent.d.ts +1 -1
- package/dist/components/ui/CaseSetInfoDialog/CaseSetContent.d.ts +1 -1
- package/dist/components/ui/CaseSetInfoDialog/CaseSetDescription.d.ts +1 -1
- package/dist/components/ui/CaseSetInfoDialog/CaseSetForm.d.ts +1 -1
- package/dist/components/ui/CaseSetInfoDialog/CaseSetSharingForm.d.ts +1 -1
- package/dist/components/ui/CaseSetInfoDialog/CaseSetSharingInfo.d.ts +1 -1
- package/dist/components/ui/CaseSummary/CaseSummary.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoAccessRights.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoColAccessRights.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoData.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoDialogContent.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoRegions.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoTrees.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoValues.d.ts +1 -1
- package/dist/components/ui/CaseTypeInfoDialog/CaseTypeInfoVariableDetails.d.ts +1 -1
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarning.d.ts +1 -1
- package/dist/components/ui/CasesAlreadyInCaseSetWarning/CasesAlreadyInCaseSetWarningCaseSetLink.d.ts +1 -1
- package/dist/components/ui/CompletCaseTypeLoader/CompletCaseTypeLoader.d.ts +1 -1
- package/dist/components/ui/ContextMenu/ContextMenu.d.ts +1 -1
- package/dist/components/ui/ContextMenu/index.js +1 -1
- package/dist/components/ui/ContextMenu/index.js.map +1 -1
- package/dist/components/ui/CreateEventDialog/CreateEventDialogSuccessNotificationMessage.d.ts +1 -1
- package/dist/components/ui/CreateEventDialog/index.js +1 -1
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
- package/dist/components/ui/CustomTabPanel/CustomTabPanel.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardContent.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardDownloadSidebarItem.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardGeneralSettingsForm.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardLayoutRenderer.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardLayoutSettingsForm.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardSearch.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardSearchSettings.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardSettingsSidebarItem.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardWidget.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardWidgetPlaceHolder.d.ts +1 -1
- package/dist/components/ui/Dashboard/DashboardWidgetSettingsForm.d.ts +1 -1
- package/dist/components/ui/Dashboard/context/DashboardContextProvider.d.ts +1 -1
- package/dist/components/ui/DashboardEditCases/DashboardEditCases.d.ts +1 -1
- package/dist/components/ui/DashboardStoreLoader/DashboardStoreLoader.d.ts +1 -1
- package/dist/components/ui/DashboardStoreLoader/DashboardStoreLoaderContent.d.ts +1 -1
- package/dist/components/ui/DataCollectionAccessInfo/DataCollectionAccessInfo.d.ts +1 -1
- package/dist/components/ui/EpiCurveWidget/EpiCurveBarChart.d.ts +1 -1
- package/dist/components/ui/EpiCurveWidget/EpiCurveStackedAreaChart.d.ts +1 -1
- package/dist/components/ui/EpiCurveWidget/EpiCurveWidget.d.ts +1 -1
- package/dist/components/ui/Grouping/Grouping.d.ts +1 -1
- package/dist/components/ui/HistogramWidget/HistogramWidget.d.ts +1 -1
- package/dist/components/ui/HistogramWidget/index.js +1 -1
- package/dist/components/ui/HistogramWidget/index.js.map +1 -1
- package/dist/components/ui/HomePageTrends/HomePageTrendCard.d.ts +1 -1
- package/dist/components/ui/HomePageTrends/HomePageTrends.d.ts +1 -1
- package/dist/components/ui/LegendaItem/LegendaItem.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidget.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidgetIsInEventCell.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidgetIsOwnCaseCell.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidgetPrimaryMenu.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidgetSecondaryMenu.d.ts +1 -1
- package/dist/components/ui/LineListWidget/LineListWidgetTitle.d.ts +1 -1
- package/dist/components/ui/MapWidget/MapWidget.d.ts +1 -1
- package/dist/components/ui/PanelSeparator/PanelSeparatorHorizontal.d.ts +1 -1
- package/dist/components/ui/PanelSeparator/PanelSeparatorVertical.d.ts +1 -1
- package/dist/components/ui/PanelSeparator/index.js +50 -2
- package/dist/components/ui/PanelSeparator/index.js.map +1 -0
- package/dist/components/ui/TreeDescription/TreeDescription.d.ts +1 -1
- package/dist/components/ui/TreeWidget/TreeWidget.d.ts +1 -1
- package/dist/components/ui/Upload/Upload.d.ts +1 -1
- package/dist/components/ui/Upload/UploadCaseResultTable.d.ts +1 -1
- package/dist/components/ui/Upload/UploadCreateCases.d.ts +1 -1
- package/dist/components/ui/Upload/UploadMapColumns.d.ts +1 -1
- package/dist/components/ui/Upload/UploadMapSequences.d.ts +1 -1
- package/dist/components/ui/Upload/UploadNavigation.d.ts +1 -1
- package/dist/components/ui/Upload/UploadPreviewNavigation.d.ts +1 -1
- package/dist/components/ui/Upload/UploadSelectFile.d.ts +1 -1
- package/dist/components/ui/Upload/UploadSelectSequenceFiles.d.ts +1 -1
- package/dist/components/ui/UserRightsDialog/UserRightsDialogCaseAccessPolicy.d.ts +1 -1
- package/dist/components/ui/Warning/Warning.d.ts +1 -1
- package/dist/components/ui/WidgetHeaderIconButton/WidgetHeaderIconButton.d.ts +1 -1
- package/dist/components/ui/WidgetMenu/WidgetMenu.d.ts +1 -1
- package/dist/components/ui/WidgetUnavailable/WidgetUnavailable.d.ts +1 -1
- package/dist/context/caseAbac/CaseAbacContextProvider.d.ts +1 -1
- package/dist/context/caseTypeAbac/CaseTypeAbacContextProvider.d.ts +1 -1
- package/dist/pages/CaseDbUsersAdminPage/CaseDbUsersAdminPage.d.ts +1 -1
- package/dist/pages/CaseSetCategoryAdminPage/CaseSetCategoryAdminPage.d.ts +1 -1
- package/dist/pages/CaseSetStatusAdminPage/CaseSetStatusAdminPage.d.ts +1 -1
- package/dist/pages/CaseTypeSetCategoriesAdminPage/CaseTypeSetCategoriesAdminPage.d.ts +1 -1
- package/dist/pages/CaseTypeSetsAdminPage/CaseTypeSetsAdminPage.d.ts +1 -1
- package/dist/pages/CaseTypesAdminPage/CaseTypesAdminPage.d.ts +1 -1
- package/dist/pages/CasesDetailPage/CasesDetailPage.d.ts +1 -1
- package/dist/pages/CasesDetailPage/index.js +16 -16
- package/dist/pages/CasesPage/CasesPage.d.ts +1 -1
- package/dist/pages/ColSetsAdminPage/ColSetsAdminPage.d.ts +1 -1
- package/dist/pages/ColsAdminPage/ColsAdminPage.d.ts +1 -1
- package/dist/pages/ColsAdminPage/index.js +77 -77
- package/dist/pages/ColsAdminPage/index.js.map +1 -1
- package/dist/pages/ConceptRelationsAdminPage/ConceptRelationsAdminPage.d.ts +1 -1
- package/dist/pages/ConceptSetsAdminPage/ConceptSetsAdminPage.d.ts +1 -1
- package/dist/pages/ConceptsAdminPage/ConceptsAdminPage.d.ts +1 -1
- package/dist/pages/ConceptsAdminPage/index.js +31 -31
- package/dist/pages/DataCollectionSetsAdminPage/DataCollectionSetsAdminPage.d.ts +1 -1
- package/dist/pages/DataCollectionVisualizationPage/DataCollectionVisualizationPage.d.ts +1 -1
- package/dist/pages/DataCollectionVisualizationPage/index.js +1 -1
- package/dist/pages/DataCollectionVisualizationPage/index.js.map +1 -1
- package/dist/pages/DataCollectionsAdminPage/DataCollectionsAdminPage.d.ts +1 -1
- package/dist/pages/DimsAdminPage/DimsAdminPage.d.ts +1 -1
- package/dist/pages/DimsAdminPage/index.js +46 -46
- package/dist/pages/DiseasesAdminPage/DiseasesAdminPage.d.ts +1 -1
- package/dist/pages/EtiologicalAgentsAdminPage/EtiologicalAgentsAdminPage.d.ts +1 -1
- package/dist/pages/EtiologiesAdminPage/EtiologiesAdminPage.d.ts +1 -1
- package/dist/pages/EventsDetailPage/EventsDetailPage.d.ts +1 -1
- package/dist/pages/EventsDetailPage/index.js +18 -18
- package/dist/pages/EventsPage/EventsPage.d.ts +1 -1
- package/dist/pages/HomePage/HomePage.d.ts +1 -1
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/OrganizationAccessCasePoliciesAdminPage.d.ts +1 -1
- package/dist/pages/OrganizationShareCasePoliciesAdminPage/OrganizationShareCasePoliciesAdminPage.d.ts +1 -1
- package/dist/pages/RefColsAdminPage/RefColsAdminPage.d.ts +1 -1
- package/dist/pages/RefColsAdminPage/index.js +94 -94
- package/dist/pages/RefDimsAdminPage/RefDimsAdminPage.d.ts +1 -1
- package/dist/pages/RegionRelationsAdminPage/RegionRelationsAdminPage.d.ts +1 -1
- package/dist/pages/RegionSetShapesAdminPage/RegionSetShapesAdminPage.d.ts +1 -1
- package/dist/pages/RegionSetShapesAdminPage/index.js +26 -26
- package/dist/pages/RegionSetsAdminPage/RegionSetsAdminPage.d.ts +1 -1
- package/dist/pages/RegionsAdminPage/RegionsAdminPage.d.ts +1 -1
- package/dist/pages/RegionsAdminPage/index.js +33 -33
- package/dist/pages/TrendsPage/TrendsPage.d.ts +1 -1
- package/dist/pages/UploadPage/UploadPage.d.ts +1 -1
- package/dist/pages/UserAccessCasePoliciesAdminPage/UserAccessCasePoliciesAdminPage.d.ts +1 -1
- package/dist/pages/UserEffectiveRightsAdminPage/UserEffectiveRightsAdminPage.d.ts +1 -1
- package/dist/pages/UserEffectiveRightsAdminPage/index.js +56 -56
- package/dist/pages/UserEffectiveRightsAdminPage/index.js.map +1 -1
- package/dist/pages/UserEffectiveRightsTesterAdminPage/UserEffectiveRightsTesterAdminPage.d.ts +1 -1
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +45 -45
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
- package/dist/pages/UserShareCasePoliciesAdminPage/UserShareCasePoliciesAdminPage.d.ts +1 -1
- package/dist/utils/CaseDbStandardConfigUtil/index.js +1 -5
- package/dist/utils/CaseDbStandardConfigUtil/index.js.map +1 -1
- package/dist/utils/MapUtil/index.js +1 -1
- package/dist/utils/MapUtil/index.js.map +1 -1
- package/package.json +33 -28
- package/dist/_chunks/PanelSeparator.js +0 -1666
- package/dist/_chunks/PanelSeparator.js.map +0 -1
- package/dist/_chunks/chunk-OB3PAWPO.js +0 -1162
- package/dist/_chunks/chunk-OB3PAWPO.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const Grouping: () => import(
|
|
1
|
+
export declare const Grouping: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const HistogramWidget: () => import(
|
|
1
|
+
export declare const HistogramWidget: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/HistogramWidget/HistogramWidget.tsx"],"sourcesContent":["import {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n useTheme,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { EChartsType } from 'echarts';\nimport {\n LegendComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport type { EChartsReactProps } from 'echarts-for-react';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n CaseDbCol,\n CaseDbColType,\n} from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport { BarChart } from 'echarts/charts';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { useTranslation } from 'react-i18next';\nimport round from 'lodash/round';\nimport intersection from 'lodash/intersection';\n\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport type { ContextMenuConfigWithPosition } from '../ContextMenu';\nimport { ContextMenu } from '../ContextMenu';\nimport { DashboardWidget } from '../Dashboard';\nimport { WidgetUnavailable } from '../WidgetUnavailable';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport type { HistogramWidgetData } from '../../../models/dashboard';\nimport {\n HISTOGRAM_ALLOWED_COL_TYPES,\n HistogramUtil,\n} from '../../../utils/HistogramUtil';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { CaseUtil } from '../../../utils/CaseUtil';\n\nregisterECharts([TooltipComponent, BarChart, LegendComponent, CanvasRenderer]);\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nexport const HistogramWidget = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n const chartRef = useRef<EChartsReact>(null);\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const echartsOpts = useMemo(() => ({\n nonce: ConfigService.getInstance().config.nonce,\n }), []);\n const dashboardStore = use(DashboardStoreContext);\n const dashboardContext = use(DashboardContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValues = useStore(dashboardStore, (state) => state.setFilterValues);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const histogramWidgetData = useStore(dashboardStore, (state) => state.getWidgetData<HistogramWidgetData>(DASHBOARD_COMPONENT_NAME.HISTOGRAM));\n const [focussedColValues, setFocussedColValues] = useState<{ a: string; b: string }>(null);\n\n const allowedColTypes = useMemo<CaseDbColType[]>(() => {\n return HISTOGRAM_ALLOWED_COL_TYPES;\n }, []);\n\n const allowedCols = useMemo(() => {\n return HistogramUtil.getAllowedCols(completeCaseType, allowedColTypes);\n }, [allowedColTypes, completeCaseType]);\n\n const [aCol, setACol] = useState<CaseDbCol | null>(histogramWidgetData.colAId ? completeCaseType?.cols[histogramWidgetData.colAId] ?? null : null);\n const [bCol, setBCol] = useState<CaseDbCol | null>(histogramWidgetData.colBId ? completeCaseType?.cols[histogramWidgetData.colBId] ?? null : null);\n\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithPosition | null>(null);\n\n const onEpiContextMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n setFocussedColValues(null);\n }, []);\n\n const lineListCaseCount = useMemo(() => {\n return DashboardUtil.getCaseCount(sortedData);\n }, [sortedData]);\n\n const defaultCols = useMemo(() => {\n return HistogramUtil.getDefaultCols(allowedCols, completeCaseType);\n }, [allowedCols, completeCaseType]);\n\n\n const canShowWidget = allowedCols.length > 1 && defaultCols?.newColA && defaultCols?.newColB;\n const shouldShowGraph = canShowWidget && aCol && bCol && lineListCaseCount > 0;\n\n const onMenuItemClick = useCallback((x: CaseDbCol, y: CaseDbCol) => {\n setACol(x);\n setBCol(y);\n updateWidgetData(DASHBOARD_COMPONENT_NAME.HISTOGRAM, {\n colAId: x.id,\n colBId: y.id,\n });\n }, [updateWidgetData]);\n\n\n useEffect(() => {\n if (aCol && bCol) {\n return;\n }\n if (!defaultCols) {\n return;\n }\n const { newColA, newColB } = defaultCols;\n\n setACol(newColA);\n setBCol(newColB);\n\n updateWidgetData(DASHBOARD_COMPONENT_NAME.HISTOGRAM, {\n colAId: newColA.id,\n colBId: newColB.id,\n });\n }, [aCol, allowedCols, bCol, completeCaseType, defaultCols, updateWidgetData]);\n\n const [conceptsA, conceptsB] = useMemo(() => {\n return HistogramUtil.getConcepts(aCol, bCol, completeCaseType);\n }, [aCol, bCol, completeCaseType]);\n\n const series = useMemo(() => {\n return HistogramUtil.getSeries(aCol, bCol, completeCaseType, sortedData, conceptsA, conceptsB);\n }, [aCol, bCol, completeCaseType, sortedData, conceptsA, conceptsB]);\n\n const histogramCaseCount = useMemo(() => {\n return HistogramUtil.getCaseCount(series);\n }, [series]);\n\n const missingCasesCount = lineListCaseCount - histogramCaseCount;\n const missingCasesPercentage = missingCasesCount > 0 ? round(missingCasesCount / lineListCaseCount * 100, 1) : 0;\n\n const widgetUnavailableReason = useMemo<ReactElement | string>(() => {\n if (shouldShowGraph) {\n return;\n }\n if (!defaultCols || allowedCols.length < 2) {\n return t`No two compatible columns found to display a histogram.`;\n }\n if (!lineListCaseCount) {\n return t`No cases found.`;\n }\n if (!histogramCaseCount) {\n return t`No cases found with valid values for the selected columns to display a histogram.`;\n }\n return null;\n }, [allowedCols.length, defaultCols, histogramCaseCount, lineListCaseCount, shouldShowGraph, t]);\n\n const colors = useMemo(() => {\n return HistogramUtil.getColors(aCol, completeCaseType, sortedData);\n }, [completeCaseType, aCol, sortedData]);\n\n const getOptions = useCallback(() => {\n if (!shouldShowGraph) {\n return null;\n }\n\n return HistogramUtil.getChartOptions({\n aCol,\n bCol,\n colors,\n conceptsA,\n conceptsB,\n series,\n t,\n theme,\n });\n }, [shouldShowGraph, colors, theme, conceptsB, series, conceptsA, aCol, bCol, t]);\n\n const titleMenu = useMemo<MenuItemData | string>(() => {\n let label: string;\n if (aCol && bCol) {\n label = t('Histogram: {{aColLabel}} and {{bColLabel}}', { aColLabel: aCol.label, bColLabel: bCol.label });\n } else {\n label = t`Histogram`;\n }\n\n if (!defaultCols?.newColA || !defaultCols?.newColB) {\n return label;\n }\n\n const mainMenu: MenuItemData = {\n disabled: !canShowWidget || allowedCols.length < 2,\n items: [],\n label,\n };\n\n\n allowedCols.forEach(x => {\n const subMenu: MenuItemData = {\n active: aCol?.id === x.id || undefined,\n items: [],\n label: t('Grouping: {{label}}', { label: x.label }),\n };\n allowedCols.forEach(y => {\n if (x.id === y.id) {\n return;\n }\n subMenu.items.push({\n active: (aCol?.id === x.id || undefined) && (bCol?.id === y.id || undefined),\n callback: () => {\n onMenuItemClick(x, y);\n },\n label: t('X-Axis: {{label}}', { label: y.label }),\n });\n });\n mainMenu.items.push(subMenu);\n });\n\n\n return mainMenu;\n }, [aCol, bCol, canShowWidget, allowedCols, defaultCols?.newColA, defaultCols?.newColB, t, onMenuItemClick]);\n\n const onChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n if (!aCol || !bCol) {\n return;\n }\n const dom = chart.getDom();\n dom?.setAttribute('aria-label', t('Histogram showing the number of cases for {{aColLabel}} and {{bColLabel}}', { aColLabel: aCol?.label, bColLabel: bCol?.label }));\n dom?.setAttribute('role', 'img');\n }, [aCol, bCol, t]);\n\n\n useEffect(() => {\n const emitDownloadOptions = () => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n disabled: !canShowWidget,\n items: [\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Histogram`, chartRef.current.getEchartsInstance(), 'png', completeCaseType, t),\n disabled: !shouldShowGraph,\n label: t`Save as PNG`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Histogram`, chartRef.current.getEchartsInstance(), 'jpeg', completeCaseType, t),\n disabled: !shouldShowGraph,\n label: t`Save as JPEG`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n zoneLabel: t`Histogram`,\n });\n };\n emitDownloadOptions();\n const eventBusManager = EventBusService.getInstance();\n eventBusManager.addEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n return () => {\n eventBusManager.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n zoneLabel: t`Histogram`,\n });\n eventBusManager.removeEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n };\n }, [completeCaseType, shouldShowGraph, canShowWidget, t]);\n\n const highlight = useCallback((caseIds: string[]) => {\n dashboardContext.highlight({\n caseIds,\n origin: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n });\n }, [dashboardContext]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n\n const getCaseIdsFromPayload = (payload: unknown): string[] => {\n const colValues = HistogramUtil.getColValuesFromPayload(payload, conceptsA, conceptsB);\n if (!colValues) {\n return [];\n }\n const caseIds = sortedData.filter(caseDbCase => {\n const aValue = CaseUtil.getRowValue(caseDbCase.content, aCol, completeCaseType);\n const bValue = CaseUtil.getRowValue(caseDbCase.content, bCol, completeCaseType);\n return colValues.a === aValue.raw && colValues.b === bValue.raw;\n }).map(caseDbCase => caseDbCase.id);\n return caseIds;\n };\n\n return {\n globalout: () => {\n highlight([]);\n },\n mouseout: () => {\n highlight([]);\n },\n mouseover: (payload: unknown) => {\n highlight(getCaseIdsFromPayload(payload));\n },\n mouseup: (payload: unknown) => {\n const { event } = payload as { event: { event: MouseEvent } };\n setFocussedColValues(HistogramUtil.getColValuesFromPayload(payload, conceptsA, conceptsB));\n setContextMenuConfig({\n caseIds: getCaseIdsFromPayload(payload),\n mouseEvent: event.event,\n position: {\n left: (event.event).clientX,\n top: (event.event).clientY,\n },\n });\n },\n };\n }, [aCol, bCol, completeCaseType, conceptsA, conceptsB, highlight, sortedData]);\n\n const onShowOnlyFocussedColValuesMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (!focussedColValues || !aCol || !bCol) {\n return;\n }\n await setFilterValues({\n [aCol.id]: [focussedColValues.a],\n [bCol.id]: [focussedColValues.b],\n });\n\n onMenuClose();\n }, [aCol, bCol, focussedColValues, setFilterValues]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n const conceptALabel = conceptsA.find(concept => concept.id === focussedColValues?.a)?.name;\n const conceptBLabel = conceptsB.find(concept => concept.id === focussedColValues?.b)?.name;\n if (!conceptALabel || !conceptBLabel) {\n return null;\n }\n if (!focussedColValues) {\n return null;\n }\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => await onShowOnlyFocussedColValuesMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {t('Filter (show only {{conceptALabel}} and {{conceptBLabel}})', { conceptALabel, conceptBLabel })}\n </ListItemText>\n </MenuItem>\n );\n }, [conceptsA, conceptsB, focussedColValues, onShowOnlyFocussedColValuesMenuItemClick, t]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.HISTOGRAM) {\n return;\n }\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting?.caseIds?.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargetsByDataIndex = new Map<number, Set<number>>();\n series?.forEach((serie, serieIndex) => {\n const castedSerie = serie as { data: unknown[]; xCaseIds: string[][] };\n castedSerie.xCaseIds?.forEach((caseIds: string[], dataIndex: number) => {\n if (intersection(caseIds, highlighting.caseIds).length) {\n const seriesIndices = highlightTargetsByDataIndex.get(dataIndex) ?? new Set<number>();\n seriesIndices.add(serieIndex);\n highlightTargetsByDataIndex.set(dataIndex, seriesIndices);\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n const highlightBatch: Array<{ dataIndex: number; notBlur?: boolean; seriesIndex?: number }> = [];\n highlightTargetsByDataIndex.forEach((seriesIndices, dataIndex) => {\n if (seriesIndices.size === series?.length) {\n highlightBatch.push({\n dataIndex,\n });\n return;\n }\n\n seriesIndices.forEach((seriesIndex) => {\n highlightBatch.push({\n dataIndex,\n seriesIndex,\n });\n });\n });\n\n highlightBatch.forEach((target, index) => {\n if (index > 0) {\n target.notBlur = true;\n }\n });\n\n instance.dispatchAction({\n batch: highlightBatch,\n type: 'highlight',\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, series]);\n\n return (\n <DashboardWidget\n expandDisabled={!canShowWidget}\n title={titleMenu}\n warningMessage={canShowWidget && histogramCaseCount > 0 && missingCasesCount > 0 ? t('Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)', { missingCasesCount, missingCasesPercentage }) : undefined}\n widgetName={DASHBOARD_COMPONENT_NAME.HISTOGRAM}\n >\n {!canShowWidget && (\n <WidgetUnavailable\n reason={widgetUnavailableReason}\n widgetLabel={t`histogram`}\n />\n )}\n {canShowWidget && (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n }}\n >\n {shouldShowGraph && (\n <EChartsReact\n echarts={echartsCore}\n notMerge\n onChartReady={onChartReady}\n onEvents={onEvents}\n option={getOptions()}\n opts={echartsOpts as unknown}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n )}\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onEpiContextMenuClose}\n />\n </Box>\n )}\n </DashboardWidget>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/HistogramWidget/HistogramWidget.tsx"],"sourcesContent":["import {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n useTheme,\n} from '@mui/material';\nimport type { ReactElement } from 'react';\nimport {\n use,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport type { EChartsType } from 'echarts';\nimport {\n LegendComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport {\n dispose,\n getInstanceByDom,\n init,\n use as registerECharts,\n} from 'echarts/core';\nimport type { EChartsReactProps } from 'echarts-for-react';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport EChartsReact from 'echarts-for-react';\nimport type {\n CaseDbCol,\n CaseDbColType,\n} from '@gen-epix/api-casedb';\nimport type { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport { BarChart } from 'echarts/charts';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { useTranslation } from 'react-i18next';\nimport round from 'lodash/round';\nimport intersection from 'lodash/intersection';\n\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport type { ContextMenuConfigWithPosition } from '../ContextMenu';\nimport { ContextMenu } from '../ContextMenu';\nimport { DashboardWidget } from '../Dashboard';\nimport { WidgetUnavailable } from '../WidgetUnavailable';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport { DashboardUtil } from '../../../utils/DashboardUtil';\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { CaseDbDownloadUtil } from '../../../utils/CaseDbDownloadUtil';\nimport type { HistogramWidgetData } from '../../../models/dashboard';\nimport {\n HISTOGRAM_ALLOWED_COL_TYPES,\n HistogramUtil,\n} from '../../../utils/HistogramUtil';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\nimport { CaseUtil } from '../../../utils/CaseUtil';\n\nregisterECharts([TooltipComponent, BarChart, LegendComponent, CanvasRenderer]);\n\nconst echartsCore = {\n dispose,\n getInstanceByDom,\n init,\n};\n\nexport const HistogramWidget = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n const chartRef = useRef<EChartsReact>(null);\n const chartInstanceRef = useRef<EChartsType | null>(null);\n const echartsOpts = useMemo(() => ({\n nonce: ConfigService.getInstance().config.nonce,\n }), []);\n const dashboardStore = use(DashboardStoreContext);\n const dashboardContext = use(DashboardContext);\n const completeCaseType = useStore(dashboardStore, (state) => state.completeCaseType);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValues = useStore(dashboardStore, (state) => state.setFilterValues);\n const updateWidgetData = useStore(dashboardStore, (state) => state.updateWidgetData);\n const histogramWidgetData = useStore(dashboardStore, (state) => state.getWidgetData<HistogramWidgetData>(DASHBOARD_COMPONENT_NAME.HISTOGRAM));\n const [focussedColValues, setFocussedColValues] = useState<{ a: string; b: string }>(null);\n\n const allowedColTypes = useMemo<CaseDbColType[]>(() => {\n return HISTOGRAM_ALLOWED_COL_TYPES;\n }, []);\n\n const allowedCols = useMemo(() => {\n return HistogramUtil.getAllowedCols(completeCaseType, allowedColTypes);\n }, [allowedColTypes, completeCaseType]);\n\n const [aCol, setACol] = useState<CaseDbCol | null>(histogramWidgetData.colAId ? completeCaseType?.cols[histogramWidgetData.colAId] ?? null : null);\n const [bCol, setBCol] = useState<CaseDbCol | null>(histogramWidgetData.colBId ? completeCaseType?.cols[histogramWidgetData.colBId] ?? null : null);\n\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithPosition | null>(null);\n\n const onEpiContextMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n setFocussedColValues(null);\n }, []);\n\n const lineListCaseCount = useMemo(() => {\n return DashboardUtil.getCaseCount(sortedData);\n }, [sortedData]);\n\n const defaultCols = useMemo(() => {\n return HistogramUtil.getDefaultCols(allowedCols, completeCaseType);\n }, [allowedCols, completeCaseType]);\n\n\n const canShowWidget = allowedCols.length > 1 && defaultCols?.newColA && defaultCols?.newColB;\n const shouldShowGraph = canShowWidget && aCol && bCol && lineListCaseCount > 0;\n\n const onMenuItemClick = useCallback((x: CaseDbCol, y: CaseDbCol) => {\n setACol(x);\n setBCol(y);\n updateWidgetData(DASHBOARD_COMPONENT_NAME.HISTOGRAM, {\n colAId: x.id,\n colBId: y.id,\n });\n }, [updateWidgetData]);\n\n\n useEffect(() => {\n if (aCol && bCol) {\n return;\n }\n if (!defaultCols) {\n return;\n }\n const { newColA, newColB } = defaultCols;\n\n setACol(newColA);\n setBCol(newColB);\n\n updateWidgetData(DASHBOARD_COMPONENT_NAME.HISTOGRAM, {\n colAId: newColA.id,\n colBId: newColB.id,\n });\n }, [aCol, allowedCols, bCol, completeCaseType, defaultCols, updateWidgetData]);\n\n const [conceptsA, conceptsB] = useMemo(() => {\n return HistogramUtil.getConcepts(aCol, bCol, completeCaseType);\n }, [aCol, bCol, completeCaseType]);\n\n const series = useMemo(() => {\n return HistogramUtil.getSeries(aCol, bCol, completeCaseType, sortedData, conceptsA, conceptsB);\n }, [aCol, bCol, completeCaseType, sortedData, conceptsA, conceptsB]);\n\n const histogramCaseCount = useMemo(() => {\n return HistogramUtil.getCaseCount(series);\n }, [series]);\n\n const missingCasesCount = lineListCaseCount - histogramCaseCount;\n const missingCasesPercentage = missingCasesCount > 0 ? round(missingCasesCount / lineListCaseCount * 100, 1) : 0;\n\n const widgetUnavailableReason = useMemo<ReactElement | string>(() => {\n if (shouldShowGraph) {\n return;\n }\n if (!defaultCols || allowedCols.length < 2) {\n return t`No two compatible columns found to display a histogram.`;\n }\n if (!lineListCaseCount) {\n return t`No cases found.`;\n }\n if (!histogramCaseCount) {\n return t`No cases found with valid values for the selected columns to display a histogram.`;\n }\n return null;\n }, [allowedCols.length, defaultCols, histogramCaseCount, lineListCaseCount, shouldShowGraph, t]);\n\n const colors = useMemo(() => {\n return HistogramUtil.getColors(aCol, completeCaseType, sortedData);\n }, [completeCaseType, aCol, sortedData]);\n\n const getOptions = useCallback(() => {\n if (!shouldShowGraph) {\n return null;\n }\n\n return HistogramUtil.getChartOptions({\n aCol,\n bCol,\n colors,\n conceptsA,\n conceptsB,\n series,\n t,\n theme,\n });\n }, [shouldShowGraph, colors, theme, conceptsB, series, conceptsA, aCol, bCol, t]);\n\n const titleMenu = useMemo<MenuItemData | string>(() => {\n let label: string;\n if (aCol && bCol) {\n label = t('Histogram: {{aColLabel}} and {{bColLabel}}', { aColLabel: aCol.label, bColLabel: bCol.label });\n } else {\n label = t`Histogram`;\n }\n\n if (!defaultCols?.newColA || !defaultCols?.newColB) {\n return label;\n }\n\n const mainMenu: MenuItemData = {\n disabled: !canShowWidget || allowedCols.length < 2,\n items: [],\n label,\n };\n\n\n allowedCols.forEach(x => {\n const subMenu: MenuItemData = {\n active: aCol?.id === x.id || undefined,\n items: [],\n label: t('Grouping: {{label}}', { label: x.label }),\n };\n allowedCols.forEach(y => {\n if (x.id === y.id) {\n return;\n }\n subMenu.items.push({\n active: (aCol?.id === x.id || undefined) && (bCol?.id === y.id || undefined),\n callback: () => {\n onMenuItemClick(x, y);\n },\n label: t('X-Axis: {{label}}', { label: y.label }),\n });\n });\n mainMenu.items.push(subMenu);\n });\n\n\n return mainMenu;\n }, [aCol, bCol, canShowWidget, allowedCols, defaultCols?.newColA, defaultCols?.newColB, t, onMenuItemClick]);\n\n const onChartReady = useCallback((chart: EChartsType) => {\n chartInstanceRef.current = chart;\n if (!aCol || !bCol) {\n return;\n }\n const dom = chart.getDom();\n dom?.setAttribute('aria-label', t('Histogram showing the number of cases for {{aColLabel}} and {{bColLabel}}', { aColLabel: aCol?.label, bColLabel: bCol?.label }));\n dom?.setAttribute('role', 'img');\n }, [aCol, bCol, t]);\n\n\n useEffect(() => {\n const emitDownloadOptions = () => {\n EventBusService.getInstance().emit('onDownloadOptionsChanged', {\n disabled: !canShowWidget,\n items: [\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Histogram`, chartRef.current.getEchartsInstance(), 'png', completeCaseType, t),\n disabled: !shouldShowGraph,\n label: t`Save as PNG`,\n },\n {\n callback: () => CaseDbDownloadUtil.downloadEchartsImage(t`Histogram`, chartRef.current.getEchartsInstance(), 'jpeg', completeCaseType, t),\n disabled: !shouldShowGraph,\n label: t`Save as JPEG`,\n },\n ],\n zone: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n zoneLabel: t`Histogram`,\n });\n };\n emitDownloadOptions();\n const eventBusManager = EventBusService.getInstance();\n eventBusManager.addEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n return () => {\n eventBusManager.emit('onDownloadOptionsChanged', {\n items: null,\n zone: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n zoneLabel: t`Histogram`,\n });\n eventBusManager.removeEventListener('onDownloadOptionsRequested', emitDownloadOptions);\n };\n }, [completeCaseType, shouldShowGraph, canShowWidget, t]);\n\n const highlight = useCallback((caseIds: string[]) => {\n dashboardContext.highlight({\n caseIds,\n origin: DASHBOARD_COMPONENT_NAME.HISTOGRAM,\n });\n }, [dashboardContext]);\n\n const onEvents = useMemo<EChartsReactProps['onEvents']>(() => {\n\n const getCaseIdsFromPayload = (payload: unknown): string[] => {\n const colValues = HistogramUtil.getColValuesFromPayload(payload, conceptsA, conceptsB);\n if (!colValues) {\n return [];\n }\n const caseIds = sortedData.filter(caseDbCase => {\n const aValue = CaseUtil.getRowValue(caseDbCase.content, aCol, completeCaseType);\n const bValue = CaseUtil.getRowValue(caseDbCase.content, bCol, completeCaseType);\n return colValues.a === aValue.raw && colValues.b === bValue.raw;\n }).map(caseDbCase => caseDbCase.id);\n return caseIds;\n };\n\n return {\n globalout: () => {\n highlight([]);\n },\n mouseout: () => {\n highlight([]);\n },\n mouseover: (payload: unknown) => {\n highlight(getCaseIdsFromPayload(payload));\n },\n mouseup: (payload: unknown) => {\n const { event } = payload as { event: { event: MouseEvent } };\n setFocussedColValues(HistogramUtil.getColValuesFromPayload(payload, conceptsA, conceptsB));\n setContextMenuConfig({\n caseIds: getCaseIdsFromPayload(payload),\n mouseEvent: event.event,\n position: {\n left: (event.event).clientX,\n top: (event.event).clientY,\n },\n });\n },\n };\n }, [aCol, bCol, completeCaseType, conceptsA, conceptsB, highlight, sortedData]);\n\n const onShowOnlyFocussedColValuesMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (!focussedColValues || !aCol || !bCol) {\n return;\n }\n await setFilterValues({\n [aCol.id]: [focussedColValues.a],\n [bCol.id]: [focussedColValues.b],\n });\n\n onMenuClose();\n }, [aCol, bCol, focussedColValues, setFilterValues]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n const conceptALabel = conceptsA.find(concept => concept.id === focussedColValues?.a)?.name;\n const conceptBLabel = conceptsB.find(concept => concept.id === focussedColValues?.b)?.name;\n if (!conceptALabel || !conceptBLabel) {\n return null;\n }\n if (!focussedColValues) {\n return null;\n }\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => await onShowOnlyFocussedColValuesMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {t('Filter (show only {{conceptALabel}} and {{conceptBLabel}})', { conceptALabel, conceptBLabel })}\n </ListItemText>\n </MenuItem>\n );\n }, [conceptsA, conceptsB, focussedColValues, onShowOnlyFocussedColValuesMenuItemClick, t]);\n\n useEffect(() => {\n const unsubscribe = dashboardContext.highlightSubject.subscribe((highlighting) => {\n if (highlighting.origin === DASHBOARD_COMPONENT_NAME.HISTOGRAM) {\n return;\n }\n const instance = chartInstanceRef.current;\n if (!instance) {\n return;\n }\n\n if (!highlighting?.caseIds?.length) {\n instance.dispatchAction({\n type: 'downplay',\n });\n return;\n }\n\n const highlightTargetsByDataIndex = new Map<number, Set<number>>();\n series?.forEach((serie, serieIndex) => {\n const castedSerie = serie as { data: unknown[]; xCaseIds: string[][] };\n castedSerie.xCaseIds?.forEach((caseIds: string[], dataIndex: number) => {\n if (intersection(caseIds, highlighting.caseIds).length) {\n const seriesIndices = highlightTargetsByDataIndex.get(dataIndex) ?? new Set<number>();\n seriesIndices.add(serieIndex);\n highlightTargetsByDataIndex.set(dataIndex, seriesIndices);\n }\n });\n });\n\n instance.dispatchAction({\n type: 'downplay',\n });\n\n const highlightBatch: Array<{ dataIndex: number; notBlur?: boolean; seriesIndex?: number }> = [];\n highlightTargetsByDataIndex.forEach((seriesIndices, dataIndex) => {\n if (seriesIndices.size === series?.length) {\n highlightBatch.push({\n dataIndex,\n });\n return;\n }\n\n seriesIndices.forEach((seriesIndex) => {\n highlightBatch.push({\n dataIndex,\n seriesIndex,\n });\n });\n });\n\n highlightBatch.forEach((target, index) => {\n if (index > 0) {\n target.notBlur = true;\n }\n });\n\n instance.dispatchAction({\n batch: highlightBatch,\n type: 'highlight',\n });\n });\n\n return () => {\n unsubscribe();\n };\n }, [dashboardContext, series]);\n\n return (\n <DashboardWidget\n expandDisabled={!canShowWidget}\n title={titleMenu}\n warningMessage={canShowWidget && histogramCaseCount > 0 && missingCasesCount > 0 ? t('Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)', { missingCasesCount, missingCasesPercentage }) : undefined}\n widgetName={DASHBOARD_COMPONENT_NAME.HISTOGRAM}\n >\n {!canShowWidget && (\n <WidgetUnavailable\n reason={widgetUnavailableReason}\n widgetLabel={t`histogram`}\n />\n )}\n {canShowWidget && (\n <Box\n sx={{\n height: '100%',\n position: 'relative',\n }}\n >\n {shouldShowGraph && (\n <EChartsReact\n echarts={echartsCore}\n notMerge\n onChartReady={onChartReady}\n onEvents={onEvents}\n option={getOptions()}\n opts={echartsOpts as unknown}\n ref={chartRef}\n style={{\n height: '100%',\n position: 'absolute',\n width: '100%',\n }}\n />\n )}\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onEpiContextMenuClose}\n />\n </Box>\n )}\n </DashboardWidget>\n );\n};\n"],"mappings":"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"}
|
|
@@ -6,4 +6,4 @@ export type HomagePageTrendCardProps = {
|
|
|
6
6
|
readonly sinceLabel: string;
|
|
7
7
|
readonly value: number;
|
|
8
8
|
};
|
|
9
|
-
export declare const HomePageTrendCard: ({ callback, callbackLabel, diffPercentage, header, sinceLabel, value }: HomagePageTrendCardProps) => import(
|
|
9
|
+
export declare const HomePageTrendCard: ({ callback, callbackLabel, diffPercentage, header, sinceLabel, value }: HomagePageTrendCardProps) => import('react').JSX.Element;
|
|
@@ -7,4 +7,4 @@ export type LegendaItemProps = {
|
|
|
7
7
|
readonly tooltip?: boolean;
|
|
8
8
|
readonly tooltipProps?: Partial<TooltipProps>;
|
|
9
9
|
};
|
|
10
|
-
export declare const LegendaItem: ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => import(
|
|
10
|
+
export declare const LegendaItem: ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LineListWidget: () => import(
|
|
1
|
+
export declare const LineListWidget: () => import('react').JSX.Element;
|
|
@@ -2,5 +2,5 @@ import { CaseDbCase } from '@gen-epix/api-casedb';
|
|
|
2
2
|
type LineListWidgetIsInEventCellProps = {
|
|
3
3
|
readonly row: CaseDbCase;
|
|
4
4
|
};
|
|
5
|
-
export declare const LineListWidgetIsInEventCell: import('react').MemoExoticComponent<({ row }: LineListWidgetIsInEventCellProps) => import(
|
|
5
|
+
export declare const LineListWidgetIsInEventCell: import('react').MemoExoticComponent<({ row }: LineListWidgetIsInEventCellProps) => import('react').JSX.Element>;
|
|
6
6
|
export {};
|
|
@@ -2,5 +2,5 @@ import { CaseDbCase } from '@gen-epix/api-casedb';
|
|
|
2
2
|
type LineListWidgetIsOwnCaseCellProps = {
|
|
3
3
|
readonly row: CaseDbCase;
|
|
4
4
|
};
|
|
5
|
-
export declare const LineListWidgetIsOwnCaseCell: import('react').MemoExoticComponent<({ row }: LineListWidgetIsOwnCaseCellProps) => import(
|
|
5
|
+
export declare const LineListWidgetIsOwnCaseCell: import('react').MemoExoticComponent<({ row }: LineListWidgetIsOwnCaseCellProps) => import('react').JSX.Element>;
|
|
6
6
|
export {};
|
|
@@ -2,4 +2,4 @@ import { CaseDbCaseSet } from '@gen-epix/api-casedb';
|
|
|
2
2
|
export type LineListWidgetPrimaryMenuProps = {
|
|
3
3
|
readonly caseSet?: CaseDbCaseSet;
|
|
4
4
|
};
|
|
5
|
-
export declare const LineListWidgetPrimaryMenu: ({ caseSet, }: LineListWidgetPrimaryMenuProps) => import(
|
|
5
|
+
export declare const LineListWidgetPrimaryMenu: ({ caseSet, }: LineListWidgetPrimaryMenuProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LineListWidgetSecondaryMenu: () => import(
|
|
1
|
+
export declare const LineListWidgetSecondaryMenu: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const LineListWidgetTitle: () => import(
|
|
1
|
+
export declare const LineListWidgetTitle: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const MapWidget: () => import(
|
|
1
|
+
export declare const MapWidget: () => import('react').JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { SeparatorProps } from 'react-resizable-panels';
|
|
2
|
-
export declare const PanelSeparatorHorizontal: (props: SeparatorProps) => import(
|
|
2
|
+
export declare const PanelSeparatorHorizontal: (props: SeparatorProps) => import('react').JSX.Element;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { SeparatorProps } from 'react-resizable-panels';
|
|
2
|
-
export declare const PanelSeparatorVertical: (props: SeparatorProps) => import(
|
|
2
|
+
export declare const PanelSeparatorVertical: (props: SeparatorProps) => import('react').JSX.Element;
|
|
@@ -1,2 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Box as e, styled as t, useTheme as n } from "@mui/material";
|
|
2
|
+
import { useTranslation as r } from "react-i18next";
|
|
3
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
4
|
+
import { Separator as a } from "react-resizable-panels";
|
|
5
|
+
//#region src/components/ui/PanelSeparator/PanelSeparatorHorizontal.tsx
|
|
6
|
+
var o = t(a)(() => ({})), s = (t) => {
|
|
7
|
+
let a = n(), { t: s } = r();
|
|
8
|
+
return /* @__PURE__ */ i(o, {
|
|
9
|
+
...t,
|
|
10
|
+
"aria-label": s("Horizontal separator"),
|
|
11
|
+
sx: {
|
|
12
|
+
"&:hover > div": {
|
|
13
|
+
background: a.palette.primary.main,
|
|
14
|
+
height: "3px",
|
|
15
|
+
margin: "4px 0"
|
|
16
|
+
},
|
|
17
|
+
height: "11px"
|
|
18
|
+
},
|
|
19
|
+
children: /* @__PURE__ */ i(e, { sx: {
|
|
20
|
+
background: a.palette.divider,
|
|
21
|
+
height: "1px",
|
|
22
|
+
margin: "5px 0",
|
|
23
|
+
width: "100%"
|
|
24
|
+
} })
|
|
25
|
+
});
|
|
26
|
+
}, c = t(a)(() => ({})), l = (t) => {
|
|
27
|
+
let a = n(), { t: o } = r();
|
|
28
|
+
return /* @__PURE__ */ i(c, {
|
|
29
|
+
...t,
|
|
30
|
+
"aria-label": o("Vertical separator"),
|
|
31
|
+
sx: {
|
|
32
|
+
"&:hover > div": {
|
|
33
|
+
background: a.palette.primary.main,
|
|
34
|
+
margin: "0 4px ",
|
|
35
|
+
width: "3px"
|
|
36
|
+
},
|
|
37
|
+
width: "11px"
|
|
38
|
+
},
|
|
39
|
+
children: /* @__PURE__ */ i(e, { sx: {
|
|
40
|
+
background: a.palette.divider,
|
|
41
|
+
height: "100%",
|
|
42
|
+
margin: "0 5px",
|
|
43
|
+
width: "1px"
|
|
44
|
+
} })
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
//#endregion
|
|
48
|
+
export { s as PanelSeparatorHorizontal, l as PanelSeparatorVertical };
|
|
49
|
+
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/PanelSeparator/PanelSeparatorHorizontal.tsx","../../../../src/components/ui/PanelSeparator/PanelSeparatorVertical.tsx"],"sourcesContent":["import {\n Box,\n styled,\n useTheme,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type { SeparatorProps } from 'react-resizable-panels';\nimport { Separator } from 'react-resizable-panels';\n\nconst StyledSeparator = styled(Separator)(() => ({}));\n\nexport const PanelSeparatorHorizontal = (props: SeparatorProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n return (\n <StyledSeparator\n {...props}\n aria-label={t('Horizontal separator')}\n sx={{\n '&:hover > div': {\n background: theme.palette.primary.main,\n height: '3px',\n margin: '4px 0',\n },\n height: '11px',\n }}\n >\n <Box\n sx={{\n background: theme.palette.divider,\n height: '1px',\n margin: '5px 0',\n width: '100%',\n }}\n />\n </StyledSeparator>\n );\n};\n","import {\n Box,\n styled,\n useTheme,\n} from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport type { SeparatorProps } from 'react-resizable-panels';\nimport { Separator } from 'react-resizable-panels';\n\nconst StyledSeparator = styled(Separator)(() => ({}));\n\nexport const PanelSeparatorVertical = (props: SeparatorProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n return (\n <StyledSeparator\n {...props}\n aria-label={t('Vertical separator')}\n sx={{\n '&:hover > div': {\n background: theme.palette.primary.main,\n margin: '0 4px ',\n width: '3px',\n },\n width: '11px',\n }}\n >\n <Box\n sx={{\n background: theme.palette.divider,\n height: '100%',\n margin: '0 5px',\n width: '1px',\n }}\n />\n </StyledSeparator>\n );\n};\n"],"mappings":";;;;;AASA,IAAM,IAAkB,EAAO,CAAS,CAAC,QAAQ,CAAC,EAAE,GAEvC,KAA4B,MAA0B;CACjE,IAAM,IAAQ,EAAS,GACjB,EAAE,SAAM,EAAe;CAC7B,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,cAAY,EAAE,sBAAsB;EACpC,IAAI;GACF,iBAAiB;IACf,YAAY,EAAM,QAAQ,QAAQ;IAClC,QAAQ;IACR,QAAQ;GACV;GACA,QAAQ;EACV;EAEA,UAAA,kBAAC,GAAD,EACE,IAAI;GACF,YAAY,EAAM,QAAQ;GAC1B,QAAQ;GACR,QAAQ;GACR,OAAO;EACT,EACD,CAAA;CACc,CAAA;AAErB,GC5BM,IAAkB,EAAO,CAAS,CAAC,QAAQ,CAAC,EAAE,GAEvC,KAA0B,MAA0B;CAC/D,IAAM,IAAQ,EAAS,GACjB,EAAE,SAAM,EAAe;CAE7B,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,cAAY,EAAE,oBAAoB;EAClC,IAAI;GACF,iBAAiB;IACf,YAAY,EAAM,QAAQ,QAAQ;IAClC,QAAQ;IACR,OAAO;GACT;GACA,OAAO;EACT;EAEA,UAAA,kBAAC,GAAD,EACE,IAAI;GACF,YAAY,EAAM,QAAQ;GAC1B,QAAQ;GACR,QAAQ;GACR,OAAO;EACT,EACD,CAAA;CACc,CAAA;AAErB"}
|
|
@@ -2,4 +2,4 @@ import { TreeConfiguration } from '../../../models/dashboard';
|
|
|
2
2
|
export type TreeDescriptionProps = {
|
|
3
3
|
readonly treeConfiguration: TreeConfiguration;
|
|
4
4
|
};
|
|
5
|
-
export declare const TreeDescription: ({ treeConfiguration, }: TreeDescriptionProps) => import(
|
|
5
|
+
export declare const TreeDescription: ({ treeConfiguration, }: TreeDescriptionProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const TreeWidget: () => import(
|
|
1
|
+
export declare const TreeWidget: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const Upload: () => import(
|
|
1
|
+
export declare const Upload: () => import('react').JSX.Element;
|
|
@@ -15,4 +15,4 @@ export type UploadCaseResultTableProps = {
|
|
|
15
15
|
}) => void;
|
|
16
16
|
readonly tableStore: StoreApi<TableStore<CaseDbCaseUploadResult>>;
|
|
17
17
|
};
|
|
18
|
-
export declare const UploadCaseResultTable: ({ caseRightsColMap, caseUploadResults, completeCaseType, getOriginalCellValue, onCaseContentEditSubmit, onColContentEditSubmit, tableStore }: UploadCaseResultTableProps) => import(
|
|
18
|
+
export declare const UploadCaseResultTable: ({ caseRightsColMap, caseUploadResults, completeCaseType, getOriginalCellValue, onCaseContentEditSubmit, onColContentEditSubmit, tableStore }: UploadCaseResultTableProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UploadCreateCases: () => import(
|
|
1
|
+
export declare const UploadCreateCases: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UploadMapColumns: () => import(
|
|
1
|
+
export declare const UploadMapColumns: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UploadMapSequences: () => import(
|
|
1
|
+
export declare const UploadMapSequences: () => import('react').JSX.Element;
|
|
@@ -7,4 +7,4 @@ export type UploadNavigationProps = {
|
|
|
7
7
|
readonly proceedDisabled?: boolean;
|
|
8
8
|
readonly proceedLabel?: string;
|
|
9
9
|
};
|
|
10
|
-
export declare const UploadNavigation: ({ backLabel, onGoBackButtonClick: onGoBack, onProceedButtonClick: onProceedButtonClick, proceedDisabled, proceedLabel, }: UploadNavigationProps) => import(
|
|
10
|
+
export declare const UploadNavigation: ({ backLabel, onGoBackButtonClick: onGoBack, onProceedButtonClick: onProceedButtonClick, proceedDisabled, proceedLabel, }: UploadNavigationProps) => import('react').JSX.Element;
|
|
@@ -2,4 +2,4 @@ export type UploadPreviewNavigationProps = {
|
|
|
2
2
|
readonly onGoBackButtonClick: () => void;
|
|
3
3
|
readonly onProceedButtonClick: () => void;
|
|
4
4
|
};
|
|
5
|
-
export declare const UploadPreviewNavigation: ({ onGoBackButtonClick, onProceedButtonClick }: UploadPreviewNavigationProps) => import(
|
|
5
|
+
export declare const UploadPreviewNavigation: ({ onGoBackButtonClick, onProceedButtonClick }: UploadPreviewNavigationProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UploadSelectFile: () => import(
|
|
1
|
+
export declare const UploadSelectFile: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const UploadSelectSequenceFiles: () => import(
|
|
1
|
+
export declare const UploadSelectSequenceFiles: () => import('react').JSX.Element;
|
|
@@ -2,4 +2,4 @@ import { CaseDbUser } from '@gen-epix/api-casedb';
|
|
|
2
2
|
export type UserRightsDialogCaseAccessPolicyProps = {
|
|
3
3
|
readonly user: CaseDbUser;
|
|
4
4
|
};
|
|
5
|
-
export declare const UserRightsDialogCaseAccessPolicy: ({ user }: UserRightsDialogCaseAccessPolicyProps) => import(
|
|
5
|
+
export declare const UserRightsDialogCaseAccessPolicy: ({ user }: UserRightsDialogCaseAccessPolicyProps) => import('react').JSX.Element;
|
|
@@ -2,4 +2,4 @@ import { IconButtonProps } from '@mui/material';
|
|
|
2
2
|
export interface WidgetHeaderIconButtonProps extends IconButtonProps {
|
|
3
3
|
readonly label: string;
|
|
4
4
|
}
|
|
5
|
-
export declare const WidgetHeaderIconButton: ({ label, ...props }: WidgetHeaderIconButtonProps) => import(
|
|
5
|
+
export declare const WidgetHeaderIconButton: ({ label, ...props }: WidgetHeaderIconButtonProps) => import('react').JSX.Element;
|
|
@@ -3,4 +3,4 @@ import { MenuItemData } from '@gen-epix/ui-core-components/models/nestedMenu';
|
|
|
3
3
|
export type WidgetMenuProps = {
|
|
4
4
|
readonly menu: MenuItemData[] | ReactNode;
|
|
5
5
|
};
|
|
6
|
-
export declare const WidgetMenu: ({ menu, }: WidgetMenuProps) => import(
|
|
6
|
+
export declare const WidgetMenu: ({ menu, }: WidgetMenuProps) => import('react').JSX.Element;
|
|
@@ -3,4 +3,4 @@ export type WidgetUnavailableProps = {
|
|
|
3
3
|
readonly reason?: ReactElement | string;
|
|
4
4
|
readonly widgetLabel: string;
|
|
5
5
|
};
|
|
6
|
-
export declare const WidgetUnavailable: ({ reason, widgetLabel }: WidgetUnavailableProps) => import(
|
|
6
|
+
export declare const WidgetUnavailable: ({ reason, widgetLabel }: WidgetUnavailableProps) => import('react').JSX.Element;
|
|
@@ -3,4 +3,4 @@ import { CaseAbacContext } from './CaseAbacContext';
|
|
|
3
3
|
export type CaseAbacContextProviderProps = PropsWithChildren<{
|
|
4
4
|
readonly caseAbac: CaseAbacContext;
|
|
5
5
|
}>;
|
|
6
|
-
export declare const CaseAbacContextProvider: (props: CaseAbacContextProviderProps) => import(
|
|
6
|
+
export declare const CaseAbacContextProvider: (props: CaseAbacContextProviderProps) => import('react').JSX.Element;
|
|
@@ -3,4 +3,4 @@ import { CaseTypeAbacContext } from './CaseTypeAbacContext';
|
|
|
3
3
|
export type CaseTypeAbacContextProviderProps = PropsWithChildren<{
|
|
4
4
|
readonly caseTypeAbac: CaseTypeAbacContext;
|
|
5
5
|
}>;
|
|
6
|
-
export declare const CaseTypeAbacContextProvider: (props: CaseTypeAbacContextProviderProps) => import(
|
|
6
|
+
export declare const CaseTypeAbacContextProvider: (props: CaseTypeAbacContextProviderProps) => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseDbUsersAdminPage: () => import(
|
|
1
|
+
export declare const CaseDbUsersAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseSetCategoryAdminPage: () => import(
|
|
1
|
+
export declare const CaseSetCategoryAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseSetStatusAdminPage: () => import(
|
|
1
|
+
export declare const CaseSetStatusAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseTypeSetCategoriesAdminPage: () => import(
|
|
1
|
+
export declare const CaseTypeSetCategoriesAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseTypeSetsAdminPage: () => import(
|
|
1
|
+
export declare const CaseTypeSetsAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CaseTypesAdminPage: () => import(
|
|
1
|
+
export declare const CaseTypesAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CasesDetailPage: () => import(
|
|
1
|
+
export declare const CasesDetailPage: () => import('react').JSX.Element;
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
import { CASEDB_QUERY_KEY as e } from "../../constants/query.js";
|
|
2
2
|
import { n as t } from "../../_chunks/Dashboard.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
3
|
+
import { CaseDbCaseApi as n } from "@gen-epix/api-casedb";
|
|
4
|
+
import { useEffect as r, useMemo as i } from "react";
|
|
5
|
+
import { useTranslation as a } from "react-i18next";
|
|
6
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
7
|
+
import { ResponseHandler as s } from "@gen-epix/ui-client-common/components/ui/ResponseHandler";
|
|
8
|
+
import { useItemQuery as c } from "@gen-epix/ui-client-common/hooks/useItemQuery";
|
|
9
|
+
import { TestIdUtil as l } from "@gen-epix/ui-core/utils/TestIdUtil";
|
|
10
|
+
import { useParams as u } from "react-router-dom";
|
|
11
11
|
import { PageContainer as d } from "@gen-epix/ui-client-common/components/ui/PageContainer";
|
|
12
12
|
import { useUpdateBreadcrumb as f } from "@gen-epix/ui-client-common/hooks/useUpdateBreadcrumb";
|
|
13
13
|
//#region src/pages/CasesDetailPage/CasesDetailPage.tsx
|
|
14
14
|
var p = () => {
|
|
15
|
-
let { t: p } =
|
|
15
|
+
let { t: p } = a(), { caseTypeId: m, slug: h } = u(), g = f("Case type"), { data: _, error: v, isLoading: y } = c({
|
|
16
16
|
baseQueryKey: e.CASE_TYPES,
|
|
17
17
|
itemId: m,
|
|
18
|
-
useQueryOptions: { queryFn: async ({ signal: e }) => (await
|
|
19
|
-
}), b =
|
|
20
|
-
return
|
|
18
|
+
useQueryOptions: { queryFn: async ({ signal: e }) => (await n.getInstance().caseTypesGetOne(m, { signal: e })).data }
|
|
19
|
+
}), b = i(() => _?.name ? _?.name : p`Case`, [_, p]);
|
|
20
|
+
return r(() => {
|
|
21
21
|
g(b);
|
|
22
|
-
}, [b, g]), /* @__PURE__ */
|
|
22
|
+
}, [b, g]), /* @__PURE__ */ o(d, {
|
|
23
23
|
fullHeight: !0,
|
|
24
24
|
fullWidth: !0,
|
|
25
25
|
showBreadcrumbs: !0,
|
|
26
|
-
testIdAttributes:
|
|
26
|
+
testIdAttributes: l.createAttributes("CasesDetailPage", {
|
|
27
27
|
"case-type-id": m,
|
|
28
28
|
slug: h
|
|
29
29
|
}),
|
|
30
30
|
title: b,
|
|
31
|
-
children: /* @__PURE__ */ s
|
|
31
|
+
children: /* @__PURE__ */ o(s, {
|
|
32
32
|
error: v,
|
|
33
33
|
isLoading: y,
|
|
34
|
-
children: /* @__PURE__ */
|
|
34
|
+
children: /* @__PURE__ */ o(t, { caseTypeId: m })
|
|
35
35
|
})
|
|
36
36
|
});
|
|
37
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CasesPage: () => import(
|
|
1
|
+
export declare const CasesPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ColSetsAdminPage: () => import(
|
|
1
|
+
export declare const ColSetsAdminPage: () => import('react').JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ColsAdminPage: () => import(
|
|
1
|
+
export declare const ColsAdminPage: () => import('react').JSX.Element;
|