@gen-epix/ui-client-casedb 4.0.2 → 4.2.0

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 (69) hide show
  1. package/dist/_chunks/AddCasesToEventDialog.js +98 -98
  2. package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
  3. package/dist/_chunks/CaseContentForm.js +10 -10
  4. package/dist/_chunks/CaseDbDownloadUtil.js +1 -1
  5. package/dist/_chunks/CaseDbDownloadUtil.js.map +1 -1
  6. package/dist/_chunks/CaseInfoDialog.js +222 -222
  7. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  8. package/dist/_chunks/CaseSetInfoDialog.js +222 -222
  9. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  10. package/dist/_chunks/CasesAlreadyInCaseSetWarning.js.map +1 -1
  11. package/dist/_chunks/Dashboard.js +296 -295
  12. package/dist/_chunks/Dashboard.js.map +1 -1
  13. package/dist/_chunks/FindSimilarCasesDialog.js +81 -81
  14. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  15. package/dist/_chunks/HomePageTrends.js.map +1 -1
  16. package/dist/_chunks/LegendaItem.js.map +1 -1
  17. package/dist/_chunks/LineListWidget.js +46 -45
  18. package/dist/_chunks/LineListWidget.js.map +1 -1
  19. package/dist/_chunks/PanelSeparator.js +3 -3
  20. package/dist/_chunks/PanelSeparator.js.map +1 -1
  21. package/dist/_chunks/Upload.js +422 -418
  22. package/dist/_chunks/Upload.js.map +1 -1
  23. package/dist/_chunks/UploadUtil.js +44 -40
  24. package/dist/_chunks/UploadUtil.js.map +1 -1
  25. package/dist/_chunks/chunk-BV7QT456.js +1 -1
  26. package/dist/_chunks/chunk-BV7QT456.js.map +1 -1
  27. package/dist/_chunks/cloneDeep.js +1 -1
  28. package/dist/_chunks/cloneDeep.js.map +1 -1
  29. package/dist/_chunks/dashboardStore.js.map +1 -1
  30. package/dist/_chunks/esm.js +3 -3
  31. package/dist/_chunks/esm.js.map +1 -1
  32. package/dist/_chunks/index.module.js +1 -1
  33. package/dist/_chunks/index.module.js.map +1 -1
  34. package/dist/_chunks/react.js +1 -1
  35. package/dist/_chunks/react.js.map +1 -1
  36. package/dist/_chunks/shallow.js +2 -2
  37. package/dist/_chunks/shallow.js.map +1 -1
  38. package/dist/_chunks/vanilla.js +1 -1
  39. package/dist/_chunks/vanilla.js.map +1 -1
  40. package/dist/_chunks/yup.js +24 -24
  41. package/dist/_chunks/yup.js.map +1 -1
  42. package/dist/classes/services/EventBusService/EventBusService.d.ts +9 -2
  43. package/dist/classes/services/EventBusService/index.js.map +1 -1
  44. package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
  45. package/dist/components/ui/CreateEventDialog/index.js +40 -40
  46. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  47. package/dist/components/ui/MapWidget/index.js.map +1 -1
  48. package/dist/components/ui/RemoveCasesFromEventDialog/index.js.map +1 -1
  49. package/dist/components/ui/SequenceDownloadDialog/index.js +57 -44
  50. package/dist/components/ui/SequenceDownloadDialog/index.js.map +1 -1
  51. package/dist/components/ui/TreeWidget/index.js +8 -2
  52. package/dist/components/ui/TreeWidget/index.js.map +1 -1
  53. package/dist/locale/en.json +0 -11
  54. package/dist/locale/nl.json +0 -11
  55. package/dist/models/config.d.ts +2 -0
  56. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
  57. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  58. package/dist/utils/UploadUtil/UploadUtil.d.ts +1 -0
  59. package/package.json +68 -75
  60. package/dist/_chunks/index.esm.js +0 -1465
  61. package/dist/_chunks/index.esm.js.map +0 -1
  62. package/dist/components/ui/FileSelector/FileSelector.d.ts +0 -7
  63. package/dist/components/ui/FileSelector/index.d.ts +0 -1
  64. package/dist/components/ui/FileSelector/index.js +0 -206
  65. package/dist/components/ui/FileSelector/index.js.map +0 -1
  66. package/dist/utils/FileUtil/FileUtil.d.ts +0 -5
  67. package/dist/utils/FileUtil/index.d.ts +0 -1
  68. package/dist/utils/FileUtil/index.js +0 -15
  69. package/dist/utils/FileUtil/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"HomePageTrends.js","names":[],"sources":["../../src/components/ui/HomePageTrends/HomePageTrendCard.tsx","../../src/components/ui/HomePageTrends/HomePageTrends.tsx"],"sourcesContent":["import { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport {\n Box,\n Button,\n Card,\n CardActions,\n CardContent,\n darken,\n Typography,\n useTheme,\n} from '@mui/material';\nimport { t } from 'i18next';\nimport { useCallback } from 'react';\n\n\nexport type HomagePageTrendCardProps = {\n readonly callback?: () => void;\n readonly callbackLabel?: string;\n readonly diffPercentage: number;\n readonly header: string;\n readonly sinceLabel: string;\n readonly value: number;\n};\n\nexport const HomePageTrendCard = ({ callback, callbackLabel, diffPercentage, header, sinceLabel, value }: HomagePageTrendCardProps) => {\n const theme = useTheme();\n\n const onCallbackButtonClick = useCallback(() => {\n callback();\n }, [callback]);\n\n return (\n <Card\n {...TestIdUtil.createAttributes('HomePageTrendCard', { header })}\n elevation={1}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n }}\n >\n <CardContent\n sx={{\n paddingBottom: 0,\n }}\n >\n <Typography\n component={'h3'}\n sx={{\n display: 'block',\n fontSize: '1rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {header}\n </Typography>\n <Typography\n {...TestIdUtil.createAttributes('HomePageTrendCard-value')}\n sx={{ fontSize: '1.8rem' }}\n >\n {value.toLocaleString()}\n </Typography>\n </CardContent>\n {callback && callbackLabel && (\n <CardActions\n sx={{\n justifyContent: 'flex-end',\n }}\n >\n <Button\n {...TestIdUtil.createAttributes('HomePageTrendCard-button')}\n onClick={onCallbackButtonClick}\n size={'small'}\n variant={'outlined'}\n >\n {callbackLabel}\n </Button>\n </CardActions>\n )}\n <Box\n sx={{\n background: theme.palette.grey['100'],\n justifyContent: 'flex-end',\n padding: 1,\n }}\n >\n <Box\n sx={{\n marginX: 1,\n }}\n >\n {diffPercentage === 0 && (\n <Typography>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage-label')}\n component={'span'}\n sx={{\n color: theme.palette.text.secondary,\n fontWeight: 'bold',\n }}\n >\n {t('No change')}\n </Box>\n </Typography>\n )}\n {diffPercentage !== 0 && (\n <Typography>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage')}\n component={'span'}\n sx={{\n color: diffPercentage > 0 ? darken(theme.palette.success.main, 0.4) : theme.palette.error.main,\n fontWeight: 'bold',\n }}\n >\n {diffPercentage > 0 ? '+' : ''}\n {diffPercentage.toLocaleString()}\n {'%'}\n\n </Box>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage-label')}\n component={'span'}\n >\n {' '}\n {sinceLabel}\n </Box>\n </Typography>\n )}\n </Box>\n </Box>\n </Card>\n );\n};\n","import {\n Box,\n Button,\n Skeleton,\n Typography,\n useTheme,\n} from '@mui/material';\nimport {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport round from 'lodash/round';\nimport type {\n CaseDbApiPermission,\n CaseDbCaseStats,\n CaseDbEpiFilter,\n CaseDbRetrieveCaseTypeStatsRequestBody,\n CaseDbTypedDatetimeRangeFilter,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport { AxiosUtil } from '@gen-epix/ui-client-common/utils/AxiosUtil';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { LoadableUtil } from '@gen-epix/ui-client-common/utils/LoadableUtil';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { RouterService } from '@gen-epix/ui-client-common/classes/services/RouterService';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { withPermissions } from '@gen-epix/ui-client-common/hoc/withPermissions';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetsQuery } from '../../../dataHooks/useCaseSetsQuery';\nimport { useCaseTypeMapQuery } from '../../../dataHooks/useCaseTypesQuery';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport type { CaseDbConfig } from '../../../models/config';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { HomePageTrendCard } from './HomePageTrendCard';\n\ntype CaseStatsWithDiff = {\n diffPercentage: number;\n} & CaseDbCaseStats;\n\ntype Statistic = {\n callback?: () => void;\n callbackLabel?: string;\n diffPercentage: number;\n header: string;\n value: number;\n};\n\nexport const HomePageTrends = withPermissions<CaseDbApiPermission>(() => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n const dateTimeRangeFilter = useMemo<CaseDbTypedDatetimeRangeFilter>(() => ({\n type: 'DATETIME_RANGE',\n upper_bound: ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceDate(),\n upper_bound_censor: '<=',\n } satisfies CaseDbTypedDatetimeRangeFilter), []);\n\n const caseSetQueryFilter = useMemo<CaseDbEpiFilter>(() => ({\n key: 'case_set_date',\n type: 'DATETIME_RANGE',\n upper_bound: ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceDate(),\n upper_bound_censor: '<=',\n } satisfies CaseDbEpiFilter), []);\n\n const caseTypeStatsQueryNow = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().retrieveCaseTypeStats({}, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_TYPE_STATS),\n });\n\n const retrieveTypeCaseStatsRequestBody = useMemo<CaseDbRetrieveCaseTypeStatsRequestBody>(() => {\n if (!caseTypeStatsQueryNow.data) {\n return undefined;\n }\n return {\n case_type_ids: caseTypeStatsQueryNow.data?.filter(stat => stat.n_cases > 0).map(stat => stat.case_type_id),\n datetime_range_filter: dateTimeRangeFilter,\n };\n }, [dateTimeRangeFilter, caseTypeStatsQueryNow.data]);\n\n const caseTypeStatsQueryPast = useQueryMemo({\n enabled: !!retrieveTypeCaseStatsRequestBody,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().retrieveCaseTypeStats(retrieveTypeCaseStatsRequestBody ?? {}, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_TYPE_STATS, retrieveTypeCaseStatsRequestBody ?? {}),\n });\n const caseSetsNowQuery = useCaseSetsQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n\n const { data: caseSetsThenData, ...caseSetsThenQuery } = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(caseSetQueryFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, caseSetQueryFilter),\n });\n\n const loadables = useArray([\n caseTypeStatsQueryNow,\n caseTypeStatsQueryPast,\n caseTypeMapQuery,\n caseSetsNowQuery,\n caseSetsThenQuery,\n ]);\n\n const statistics = useMemo<Statistic[]>(() => {\n const s: Statistic[] = [];\n\n if (LoadableUtil.isSomeLoading(loadables) || LoadableUtil.hasSomeError(loadables) || !caseTypeStatsQueryNow.data?.length || !caseTypeStatsQueryPast.data?.length) {\n return s;\n }\n\n const nowTotalCases = caseTypeStatsQueryNow.data?.reduce((acc, stat) => acc + stat.n_cases, 0) ?? 0;\n const thenTotalCases = caseTypeStatsQueryPast.data?.reduce((acc, stat) => acc + stat.n_cases, 0) ?? 0;\n\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate('/cases');\n },\n callbackLabel: t`View all cases`,\n diffPercentage: round((nowTotalCases - thenTotalCases) / (thenTotalCases || 1) * 100, 2),\n header: 'Cases',\n value: nowTotalCases,\n },\n );\n\n const numberOfCaseSetsNow = caseSetsNowQuery.data.length;\n const numberOfCaseSetsThen = caseSetsThenData.length;\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate('/events');\n },\n callbackLabel: t`View all events`,\n diffPercentage: round((numberOfCaseSetsNow - numberOfCaseSetsThen) / (numberOfCaseSetsThen || 1) * 100, 2),\n header: 'Events',\n value: numberOfCaseSetsNow,\n },\n );\n\n const caseStatsThenByCaseTypeId = new Map<string, CaseDbCaseStats>(caseTypeStatsQueryPast.data?.map(stat => [stat.case_type_id, stat]));\n const sortedStats = caseTypeStatsQueryNow?.data?.map<CaseStatsWithDiff>(stat => {\n const nowNCases = stat.n_cases;\n const thenNCases = caseStatsThenByCaseTypeId.get(stat.case_type_id)?.n_cases ?? 0;\n const diff = nowNCases - thenNCases;\n let diffPercentage: number;\n if (thenNCases > 0) {\n diffPercentage = round((diff / thenNCases) * 100, 2);\n } else {\n diffPercentage = 0;\n }\n return ({\n ...stat,\n diffPercentage,\n });\n }).sort((a, b) => b.diffPercentage - a.diffPercentage);\n\n for (let i = 0; i < 6; i += 1) {\n if (sortedStats?.[i]) {\n const caseType = caseTypeMapQuery.map?.get(sortedStats?.[i].case_type_id ?? '');\n const caseTypeName = caseType?.name;\n if (caseTypeName) {\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate(CaseTypeUtil.createCaseTypeLink(caseType));\n },\n callbackLabel: t`View cases`,\n diffPercentage: sortedStats[i].diffPercentage,\n header: t('{{caseTypeName}} cases', { caseTypeName, number: i + 1 }),\n value: sortedStats[i].n_cases,\n },\n );\n }\n }\n }\n\n return s;\n }, [caseSetsNowQuery.data?.length, caseSetsThenData?.length, caseTypeMapQuery.map, caseTypeStatsQueryNow.data, caseTypeStatsQueryPast.data, loadables, t]);\n\n const onViewMoreTrendsButtonClick = useCallback(async () => {\n await RouterService.getInstance().router.navigate('/trends');\n }, []);\n\n if (AxiosUtil.isAxiosForbiddenError(LoadableUtil.findFirstError(loadables))) {\n return null;\n }\n\n return (\n <Box>\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <Box>\n <Typography\n variant={'h2'}\n >\n {t`Trends summary`}\n </Typography>\n </Box>\n <Box>\n <Button\n color={'primary'}\n disabled\n onClick={onViewMoreTrendsButtonClick}\n variant={'outlined'}\n >\n {t`View more trends`}\n </Button>\n </Box>\n </Box>\n </Box>\n <ResponseHandler\n inlineSpinner\n loadables={loadables}\n loadingContent={(\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateColumns: 'repeat(1, 1fr)',\n marginBottom: 2,\n [theme.breakpoints.up('md')]: {\n gridTemplateColumns: 'repeat(4, 1fr)',\n },\n [theme.breakpoints.up('sm')]: {\n gridTemplateColumns: 'repeat(2, 1fr)',\n },\n }}\n >\n {[...Array<string>(8)].map((_, index) => (\n <Box\n // eslint-disable-next-line @eslint-react/no-array-index-key\n key={index}\n sx={{\n alignItems: 'center',\n display: 'flex',\n height: 165.75,\n justifyContent: 'center',\n }}\n >\n <Skeleton\n animation={'pulse'}\n height={'100%'}\n variant={'rounded'}\n width={'100%'}\n />\n </Box>\n ))}\n </Box>\n )}\n shouldHideActionButtons\n >\n {statistics.length === 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Typography>\n {t`No trends available.`}\n </Typography>\n </Box>\n )}\n {statistics.length > 0 && (\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateColumns: 'repeat(1, 1fr)',\n marginBottom: 2,\n [theme.breakpoints.up('md')]: {\n gridTemplateColumns: 'repeat(4, 1fr)',\n },\n [theme.breakpoints.up('sm')]: {\n gridTemplateColumns: 'repeat(2, 1fr)',\n },\n }}\n >\n {statistics.map(statistic => (\n <HomePageTrendCard\n callback={statistic.callback}\n callbackLabel={statistic.callbackLabel}\n diffPercentage={statistic.diffPercentage}\n header={statistic.header}\n key={statistic.header}\n sinceLabel={ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceLabel(t)}\n value={statistic.value}\n />\n ))}\n </Box>\n )}\n </ResponseHandler>\n </Box>\n );\n}, {\n requiredPermissions: [\n { command_name: CaseDbCommandName.RetrieveCaseTypeStatsCommand, permission_type: CaseDbPermissionType.EXECUTE },\n { command_name: CaseDbCommandName.CaseSetCrudCommand, permission_type: CaseDbPermissionType.READ },\n { command_name: CaseDbCommandName.CaseTypeCrudCommand, permission_type: CaseDbPermissionType.READ },\n ],\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"HomePageTrends.js","names":[],"sources":["../../src/components/ui/HomePageTrends/HomePageTrendCard.tsx","../../src/components/ui/HomePageTrends/HomePageTrends.tsx"],"sourcesContent":["import { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport {\n Box,\n Button,\n Card,\n CardActions,\n CardContent,\n darken,\n Typography,\n useTheme,\n} from '@mui/material';\nimport { t } from 'i18next';\nimport { useCallback } from 'react';\n\n\nexport type HomagePageTrendCardProps = {\n readonly callback?: () => void;\n readonly callbackLabel?: string;\n readonly diffPercentage: number;\n readonly header: string;\n readonly sinceLabel: string;\n readonly value: number;\n};\n\nexport const HomePageTrendCard = ({ callback, callbackLabel, diffPercentage, header, sinceLabel, value }: HomagePageTrendCardProps) => {\n const theme = useTheme();\n\n const onCallbackButtonClick = useCallback(() => {\n callback();\n }, [callback]);\n\n return (\n <Card\n {...TestIdUtil.createAttributes('HomePageTrendCard', { header })}\n elevation={1}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n }}\n >\n <CardContent\n sx={{\n paddingBottom: 0,\n }}\n >\n <Typography\n component={'h3'}\n sx={{\n display: 'block',\n fontSize: '1rem',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {header}\n </Typography>\n <Typography\n {...TestIdUtil.createAttributes('HomePageTrendCard-value')}\n sx={{ fontSize: '1.8rem' }}\n >\n {value.toLocaleString()}\n </Typography>\n </CardContent>\n {callback && callbackLabel && (\n <CardActions\n sx={{\n justifyContent: 'flex-end',\n }}\n >\n <Button\n {...TestIdUtil.createAttributes('HomePageTrendCard-button')}\n onClick={onCallbackButtonClick}\n size={'small'}\n variant={'outlined'}\n >\n {callbackLabel}\n </Button>\n </CardActions>\n )}\n <Box\n sx={{\n background: theme.palette.grey['100'],\n justifyContent: 'flex-end',\n padding: 1,\n }}\n >\n <Box\n sx={{\n marginX: 1,\n }}\n >\n {diffPercentage === 0 && (\n <Typography>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage-label')}\n component={'span'}\n sx={{\n color: theme.palette.text.secondary,\n fontWeight: 'bold',\n }}\n >\n {t('No change')}\n </Box>\n </Typography>\n )}\n {diffPercentage !== 0 && (\n <Typography>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage')}\n component={'span'}\n sx={{\n color: diffPercentage > 0 ? darken(theme.palette.success.main, 0.4) : theme.palette.error.main,\n fontWeight: 'bold',\n }}\n >\n {diffPercentage > 0 ? '+' : ''}\n {diffPercentage.toLocaleString()}\n {'%'}\n\n </Box>\n <Box\n {...TestIdUtil.createAttributes('HomePageTrendCard-diffPercentage-label')}\n component={'span'}\n >\n {' '}\n {sinceLabel}\n </Box>\n </Typography>\n )}\n </Box>\n </Box>\n </Card>\n );\n};\n","import {\n Box,\n Button,\n Skeleton,\n Typography,\n useTheme,\n} from '@mui/material';\nimport {\n useCallback,\n useMemo,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport round from 'lodash/round';\nimport type {\n CaseDbApiPermission,\n CaseDbCaseStats,\n CaseDbDatetimeRangeFilter,\n CaseDbRetrieveCaseTypeStatsRequestBody,\n} from '@gen-epix/api-casedb';\nimport {\n CaseDbCaseApi,\n CaseDbCommandName,\n CaseDbPermissionType,\n} from '@gen-epix/api-casedb';\nimport { AxiosUtil } from '@gen-epix/ui-client-common/utils/AxiosUtil';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { LoadableUtil } from '@gen-epix/ui-client-common/utils/LoadableUtil';\nimport { QueryClientService } from '@gen-epix/ui-client-common/classes/services/QueryClientService';\nimport { ResponseHandler } from '@gen-epix/ui-client-common/components/ui/ResponseHandler';\nimport { RouterService } from '@gen-epix/ui-client-common/classes/services/RouterService';\nimport { useQueryMemo } from '@gen-epix/ui-client-common/hooks/useQueryMemo';\nimport { withPermissions } from '@gen-epix/ui-client-common/hoc/withPermissions';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\n\nimport { useCaseSetsQuery } from '../../../dataHooks/useCaseSetsQuery';\nimport { useCaseTypeMapQuery } from '../../../dataHooks/useCaseTypesQuery';\nimport { CaseTypeUtil } from '../../../utils/CaseTypeUtil';\nimport type { CaseDbConfig } from '../../../models/config';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { HomePageTrendCard } from './HomePageTrendCard';\n\ntype CaseStatsWithDiff = {\n diffPercentage: number;\n} & CaseDbCaseStats;\n\ntype Statistic = {\n callback?: () => void;\n callbackLabel?: string;\n diffPercentage: number;\n header: string;\n value: number;\n};\n\nexport const HomePageTrends = withPermissions<CaseDbApiPermission>(() => {\n const theme = useTheme();\n const { t } = useTranslation();\n\n const dateTimeRangeFilter = useMemo<CaseDbDatetimeRangeFilter>(() => ({\n type: 'DATETIME_RANGE',\n upper_bound: ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceDate(),\n upper_bound_censor: '<=',\n } satisfies CaseDbDatetimeRangeFilter), []);\n\n const caseSetQueryFilter = useMemo<CaseDbDatetimeRangeFilter>(() => ({\n key: 'case_set_date',\n type: 'DATETIME_RANGE',\n upper_bound: ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceDate(),\n upper_bound_censor: '<=',\n } satisfies CaseDbDatetimeRangeFilter), []);\n\n const caseTypeStatsQueryNow = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().retrieveCaseTypeStats({}, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_TYPE_STATS),\n });\n\n const retrieveTypeCaseStatsRequestBody = useMemo<CaseDbRetrieveCaseTypeStatsRequestBody>(() => {\n if (!caseTypeStatsQueryNow.data) {\n return undefined;\n }\n return {\n case_type_ids: caseTypeStatsQueryNow.data?.filter(stat => stat.n_cases > 0).map(stat => stat.case_type_id),\n datetime_range_filter: dateTimeRangeFilter,\n };\n }, [dateTimeRangeFilter, caseTypeStatsQueryNow.data]);\n\n const caseTypeStatsQueryPast = useQueryMemo({\n enabled: !!retrieveTypeCaseStatsRequestBody,\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().retrieveCaseTypeStats(retrieveTypeCaseStatsRequestBody ?? {}, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_TYPE_STATS, retrieveTypeCaseStatsRequestBody ?? {}),\n });\n const caseSetsNowQuery = useCaseSetsQuery();\n const caseTypeMapQuery = useCaseTypeMapQuery();\n\n const { data: caseSetsThenData, ...caseSetsThenQuery } = useQueryMemo({\n queryFn: async ({ signal }) => {\n const response = await CaseDbCaseApi.getInstance().caseSetsPostQuery(caseSetQueryFilter, null, null, { signal });\n return response.data;\n },\n queryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS, caseSetQueryFilter),\n });\n\n const loadables = useArray([\n caseTypeStatsQueryNow,\n caseTypeStatsQueryPast,\n caseTypeMapQuery,\n caseSetsNowQuery,\n caseSetsThenQuery,\n ]);\n\n const statistics = useMemo<Statistic[]>(() => {\n const s: Statistic[] = [];\n\n if (LoadableUtil.isSomeLoading(loadables) || LoadableUtil.hasSomeError(loadables) || !caseTypeStatsQueryNow.data?.length || !caseTypeStatsQueryPast.data?.length) {\n return s;\n }\n\n const nowTotalCases = caseTypeStatsQueryNow.data?.reduce((acc, stat) => acc + stat.n_cases, 0) ?? 0;\n const thenTotalCases = caseTypeStatsQueryPast.data?.reduce((acc, stat) => acc + stat.n_cases, 0) ?? 0;\n\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate('/cases');\n },\n callbackLabel: t`View all cases`,\n diffPercentage: round((nowTotalCases - thenTotalCases) / (thenTotalCases || 1) * 100, 2),\n header: 'Cases',\n value: nowTotalCases,\n },\n );\n\n const numberOfCaseSetsNow = caseSetsNowQuery.data.length;\n const numberOfCaseSetsThen = caseSetsThenData.length;\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate('/events');\n },\n callbackLabel: t`View all events`,\n diffPercentage: round((numberOfCaseSetsNow - numberOfCaseSetsThen) / (numberOfCaseSetsThen || 1) * 100, 2),\n header: 'Events',\n value: numberOfCaseSetsNow,\n },\n );\n\n const caseStatsThenByCaseTypeId = new Map<string, CaseDbCaseStats>(caseTypeStatsQueryPast.data?.map(stat => [stat.case_type_id, stat]));\n const sortedStats = caseTypeStatsQueryNow?.data?.map<CaseStatsWithDiff>(stat => {\n const nowNCases = stat.n_cases;\n const thenNCases = caseStatsThenByCaseTypeId.get(stat.case_type_id)?.n_cases ?? 0;\n const diff = nowNCases - thenNCases;\n let diffPercentage: number;\n if (thenNCases > 0) {\n diffPercentage = round((diff / thenNCases) * 100, 2);\n } else {\n diffPercentage = 0;\n }\n return ({\n ...stat,\n diffPercentage,\n });\n }).sort((a, b) => b.diffPercentage - a.diffPercentage);\n\n for (let i = 0; i < 6; i += 1) {\n if (sortedStats?.[i]) {\n const caseType = caseTypeMapQuery.map?.get(sortedStats?.[i].case_type_id ?? '');\n const caseTypeName = caseType?.name;\n if (caseTypeName) {\n s.push(\n {\n callback: async () => {\n await RouterService.getInstance().router.navigate(CaseTypeUtil.createCaseTypeLink(caseType));\n },\n callbackLabel: t`View cases`,\n diffPercentage: sortedStats[i].diffPercentage,\n header: t('{{caseTypeName}} cases', { caseTypeName, number: i + 1 }),\n value: sortedStats[i].n_cases,\n },\n );\n }\n }\n }\n\n return s;\n }, [caseSetsNowQuery.data?.length, caseSetsThenData?.length, caseTypeMapQuery.map, caseTypeStatsQueryNow.data, caseTypeStatsQueryPast.data, loadables, t]);\n\n const onViewMoreTrendsButtonClick = useCallback(async () => {\n await RouterService.getInstance().router.navigate('/trends');\n }, []);\n\n if (AxiosUtil.isAxiosForbiddenError(LoadableUtil.findFirstError(loadables))) {\n return null;\n }\n\n return (\n <Box>\n <Box\n sx={{\n marginBottom: 1,\n }}\n >\n <Box\n sx={{\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n }}\n >\n <Box>\n <Typography\n variant={'h2'}\n >\n {t`Trends summary`}\n </Typography>\n </Box>\n <Box>\n <Button\n color={'primary'}\n disabled\n onClick={onViewMoreTrendsButtonClick}\n variant={'outlined'}\n >\n {t`View more trends`}\n </Button>\n </Box>\n </Box>\n </Box>\n <ResponseHandler\n inlineSpinner\n loadables={loadables}\n loadingContent={(\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateColumns: 'repeat(1, 1fr)',\n marginBottom: 2,\n [theme.breakpoints.up('md')]: {\n gridTemplateColumns: 'repeat(4, 1fr)',\n },\n [theme.breakpoints.up('sm')]: {\n gridTemplateColumns: 'repeat(2, 1fr)',\n },\n }}\n >\n {[...Array<string>(8)].map((_, index) => (\n <Box\n // eslint-disable-next-line @eslint-react/no-array-index-key\n key={index}\n sx={{\n alignItems: 'center',\n display: 'flex',\n height: 165.75,\n justifyContent: 'center',\n }}\n >\n <Skeleton\n animation={'pulse'}\n height={'100%'}\n variant={'rounded'}\n width={'100%'}\n />\n </Box>\n ))}\n </Box>\n )}\n shouldHideActionButtons\n >\n {statistics.length === 0 && (\n <Box\n sx={{\n marginY: 2,\n }}\n >\n <Typography>\n {t`No trends available.`}\n </Typography>\n </Box>\n )}\n {statistics.length > 0 && (\n <Box\n sx={{\n display: 'grid',\n gap: 2,\n gridTemplateColumns: 'repeat(1, 1fr)',\n marginBottom: 2,\n [theme.breakpoints.up('md')]: {\n gridTemplateColumns: 'repeat(4, 1fr)',\n },\n [theme.breakpoints.up('sm')]: {\n gridTemplateColumns: 'repeat(2, 1fr)',\n },\n }}\n >\n {statistics.map(statistic => (\n <HomePageTrendCard\n callback={statistic.callback}\n callbackLabel={statistic.callbackLabel}\n diffPercentage={statistic.diffPercentage}\n header={statistic.header}\n key={statistic.header}\n sinceLabel={ConfigService.getInstance<CaseDbConfig>().config.trends.homePage.getSinceLabel(t)}\n value={statistic.value}\n />\n ))}\n </Box>\n )}\n </ResponseHandler>\n </Box>\n );\n}, {\n requiredPermissions: [\n { command_name: CaseDbCommandName.RetrieveCaseTypeStatsCommand, permission_type: CaseDbPermissionType.EXECUTE },\n { command_name: CaseDbCommandName.CaseSetCrudCommand, permission_type: CaseDbPermissionType.READ },\n { command_name: CaseDbCommandName.CaseTypeCrudCommand, permission_type: CaseDbPermissionType.READ },\n ],\n});\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LegendaItem.js","names":["useSyncExternalStoreExports"],"sources":["../../builtin:esm-external-require-react","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.2.8/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.2.18_immer@11.1.18_react@19.2.8_use-sync-external-store@1.6.0_react@19.2.8_/node_modules/zustand/esm/traditional.mjs","../../src/components/ui/Dashboard/context/DashboardContext.tsx","../../src/components/ui/LegendaItem/LegendaItem.tsx"],"sourcesContent":["import * as m from 'react';module.exports = { ...m };","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { createContext } from 'react';\nimport type { Subject } from '@gen-epix/ui-core/classes/Subject';\n\nimport type {\n Highlighting,\n LineListRangeSubjectValue,\n LinkedScrollSubjectValue,\n} from '../../../../models/caseDb';\n\nexport type DashboardContextValue = {\n caseSet?: CaseDbCaseSet;\n highlight: (highlighting: Highlighting) => void;\n highlightSubject: Subject<Highlighting>;\n lineListRangeSubject: Subject<LineListRangeSubjectValue>;\n linkedScrollSubject: Subject<LinkedScrollSubjectValue>;\n reset: () => void;\n};\n\nexport const DashboardContext = createContext<DashboardContextValue>(null);\n","import type { TooltipProps } from '@mui/material';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport type {\n MouseEvent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport isArray from 'lodash/isArray';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\n\nimport type { CaseDbConfig } from '../../../models/config';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport type { StratificationLegendaItem } from '../../../models/stratification';\nimport {\n STRATIFICATION_MODE,\n STRATIFICATION_SELECTED,\n} from '../../../models/stratification';\nimport { ContextMenu } from '../ContextMenu';\nimport type { ContextMenuConfigWithAnchor } from '../ContextMenu';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\n\nexport type LegendaItemProps = {\n readonly children?: ReactNode;\n readonly item: StratificationLegendaItem;\n readonly tooltip?: boolean;\n readonly tooltipProps?: Partial<TooltipProps>;\n};\n\nexport const LegendaItem = ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n const dashboardContext = use(DashboardContext);\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filters = useStoreWithEqualityFn(dashboardStore, (state) => state.filters, (a, b) => JSON.stringify(a.map(filter => filter.filterValue)) === JSON.stringify(b.map(filter => filter.filterValue)));\n const [focussedLegendaItem, setFocussedLegendaItem] = useState<StratificationLegendaItem>(null);\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithAnchor | null>(null);\n\n const parseIdsFromAnchorElement = useCallback((element: Element): string[] => {\n if (!stratification?.caseIdColors) {\n return [];\n }\n\n const caseIds: string[] = [];\n const color = element.getAttribute('data-color');\n\n Object.entries(stratification.caseIdColors).forEach(([caseId, rowColor]) => {\n if (rowColor === color) {\n caseIds.push(caseId);\n }\n });\n\n return caseIds;\n }, [stratification]);\n\n const onClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n setFocussedLegendaItem(item);\n setContextMenuConfig({\n anchorElement: event.currentTarget,\n mouseEvent: event.nativeEvent,\n parseIdsFromAnchorElement,\n });\n }, [item, parseIdsFromAnchorElement]);\n\n const onMouseOver = useCallback(() => {\n dashboardContext.highlight({\n caseIds: Object.entries(stratification?.caseIdColors).filter(([_itemId, itemColor]) => itemColor === item.color).map(([itemId]) => itemId),\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [item.color, stratification, dashboardContext]);\n\n const onMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [dashboardContext]);\n\n const onNodeMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n }, []);\n\n const onShowOnlySelectedLegendaItemMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (focussedLegendaItem.rowValue.raw === STRATIFICATION_SELECTED.SELECTED.toString()) {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n } else {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n }\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n const filter = filters.find(f => f.id === stratification.col.id);\n if (filter) {\n const filterValue = isArray(filter.initialFilterValue) ? [focussedLegendaItem.rowValue.raw] : focussedLegendaItem.rowValue.raw;\n await setFilterValue(stratification.col.id, filterValue);\n }\n } else {\n // not implemented\n }\n\n onMenuClose();\n }, [filters, focussedLegendaItem, setFilterValue, stratification]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedLegendaItem) {\n return null;\n }\n let label: string;\n\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (!focussedLegendaItem.caseIds?.length || focussedLegendaItem.caseIds?.length === sortedData.length) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem?.rowValue?.raw === STRATIFICATION_SELECTED.SELECTED.toString() ? t('selected rows') : t('unselected rows') });\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n if (!focussedLegendaItem || focussedLegendaItem?.rowValue?.isMissing || !stratification?.col?.id) {\n return null;\n }\n const filter = filters.find(f => f.id === stratification.col.id);\n if (!filter) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem.rowValue.short });\n } else {\n return null;\n }\n\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => onShowOnlySelectedLegendaItemMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {label}\n </ListItemText>\n </MenuItem>\n );\n }, [filters, focussedLegendaItem, onShowOnlySelectedLegendaItemMenuItemClick, stratification, t, sortedData]);\n\n const disabled = stratification?.mode === STRATIFICATION_MODE.FIELD && item.caseIds.length === 0;\n\n const innerContent = useMemo(() => {\n const value = item.rowValue.isMissing ? ConfigService.getInstance<CaseDbConfig>().config.epi.DATA_MISSING_CHARACTER : item.rowValue.short;\n return (\n <Box\n sx={{\n alignItems: 'center',\n cursor: disabled ? 'initial' : 'pointer',\n display: 'flex',\n opacity: disabled ? 0.3 : 1,\n }}\n >\n <Box\n sx={{\n background: item.color,\n height: theme.spacing(2),\n marginRight: theme.spacing(1),\n minHeight: theme.spacing(2),\n minWidth: theme.spacing(2),\n outline: `1px solid ${theme.palette.background.paper}`,\n width: theme.spacing(2),\n }}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {children || value}\n </Box>\n </Box>\n );\n }, [children, disabled, item.color, item.rowValue.isMissing, item.rowValue.short, theme]);\n\n return (\n <>\n <Box\n component={'div'}\n data-color={item.color}\n onClick={disabled ? undefined : onClick}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {tooltip && (\n <Tooltip\n {...tooltipProps}\n title={item.rowValue.full}\n >\n {innerContent}\n </Tooltip>\n )}\n {!tooltip && innerContent}\n </Box>\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onNodeMenuClose}\n />\n </>\n );\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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"}
1
+ {"version":3,"file":"LegendaItem.js","names":["useSyncExternalStoreExports"],"sources":["../../builtin:esm-external-require-react","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/shim/index.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../../../node_modules/.pnpm/use-sync-external-store@1.6.0_react@19.3.0/node_modules/use-sync-external-store/shim/with-selector.js","../../../../node_modules/.pnpm/zustand@5.0.15_@types+react@19.3.0_immer@11.1.18_react@19.3.0_use-sync-external-store@1.6.0_react@19.3.0_/node_modules/zustand/esm/traditional.mjs","../../src/components/ui/Dashboard/context/DashboardContext.tsx","../../src/components/ui/LegendaItem/LegendaItem.tsx"],"sourcesContent":["import * as m from 'react';module.exports = { ...m };","/**\n * @license React\n * use-sync-external-store-shim.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nfunction useSyncExternalStore$2(subscribe, getSnapshot) {\n var value = getSnapshot(),\n _useState = useState({ inst: { value: value, getSnapshot: getSnapshot } }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n}\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n}\nfunction useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n}\nvar shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\nexports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\");\nfunction is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\nexports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n};\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","import type { CaseDbCaseSet } from '@gen-epix/api-casedb';\nimport { createContext } from 'react';\nimport type { Subject } from '@gen-epix/ui-core/classes/Subject';\n\nimport type {\n Highlighting,\n LineListRangeSubjectValue,\n LinkedScrollSubjectValue,\n} from '../../../../models/caseDb';\n\nexport type DashboardContextValue = {\n caseSet?: CaseDbCaseSet;\n highlight: (highlighting: Highlighting) => void;\n highlightSubject: Subject<Highlighting>;\n lineListRangeSubject: Subject<LineListRangeSubjectValue>;\n linkedScrollSubject: Subject<LinkedScrollSubjectValue>;\n reset: () => void;\n};\n\nexport const DashboardContext = createContext<DashboardContextValue>(null);\n","import type { TooltipProps } from '@mui/material';\nimport {\n Box,\n ListItemIcon,\n ListItemText,\n MenuItem,\n Tooltip,\n useTheme,\n} from '@mui/material';\nimport { ConfigService } from '@gen-epix/ui-client-common/classes/services/ConfigService';\nimport { useStore } from 'zustand';\nimport FilterAltIcon from '@mui/icons-material/FilterAlt';\nimport type {\n MouseEvent,\n ReactElement,\n ReactNode,\n} from 'react';\nimport {\n use,\n useCallback,\n useMemo,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport isArray from 'lodash/isArray';\nimport { useStoreWithEqualityFn } from 'zustand/traditional';\n\nimport type { CaseDbConfig } from '../../../models/config';\nimport { DashboardStoreContext } from '../../../stores/dashboardStore';\nimport type { StratificationLegendaItem } from '../../../models/stratification';\nimport {\n STRATIFICATION_MODE,\n STRATIFICATION_SELECTED,\n} from '../../../models/stratification';\nimport { ContextMenu } from '../ContextMenu';\nimport type { ContextMenuConfigWithAnchor } from '../ContextMenu';\nimport { DASHBOARD_COMPONENT_NAME } from '../../../constants/dashboard';\nimport { DashboardContext } from '../Dashboard/context/DashboardContext';\n\nexport type LegendaItemProps = {\n readonly children?: ReactNode;\n readonly item: StratificationLegendaItem;\n readonly tooltip?: boolean;\n readonly tooltipProps?: Partial<TooltipProps>;\n};\n\nexport const LegendaItem = ({ children, item, tooltip, tooltipProps }: LegendaItemProps) => {\n const theme = useTheme();\n const { t } = useTranslation();\n const dashboardContext = use(DashboardContext);\n const dashboardStore = use(DashboardStoreContext);\n const stratification = useStore(dashboardStore, (state) => state.stratification);\n const sortedData = useStore(dashboardStore, (state) => state.sortedData);\n const setFilterValue = useStore(dashboardStore, (state) => state.setFilterValue);\n const filters = useStoreWithEqualityFn(dashboardStore, (state) => state.filters, (a, b) => JSON.stringify(a.map(filter => filter.filterValue)) === JSON.stringify(b.map(filter => filter.filterValue)));\n const [focussedLegendaItem, setFocussedLegendaItem] = useState<StratificationLegendaItem>(null);\n const [contextMenuConfig, setContextMenuConfig] = useState<ContextMenuConfigWithAnchor | null>(null);\n\n const parseIdsFromAnchorElement = useCallback((element: Element): string[] => {\n if (!stratification?.caseIdColors) {\n return [];\n }\n\n const caseIds: string[] = [];\n const color = element.getAttribute('data-color');\n\n Object.entries(stratification.caseIdColors).forEach(([caseId, rowColor]) => {\n if (rowColor === color) {\n caseIds.push(caseId);\n }\n });\n\n return caseIds;\n }, [stratification]);\n\n const onClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n setFocussedLegendaItem(item);\n setContextMenuConfig({\n anchorElement: event.currentTarget,\n mouseEvent: event.nativeEvent,\n parseIdsFromAnchorElement,\n });\n }, [item, parseIdsFromAnchorElement]);\n\n const onMouseOver = useCallback(() => {\n dashboardContext.highlight({\n caseIds: Object.entries(stratification?.caseIdColors).filter(([_itemId, itemColor]) => itemColor === item.color).map(([itemId]) => itemId),\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [item.color, stratification, dashboardContext]);\n\n const onMouseLeave = useCallback(() => {\n dashboardContext.highlight({\n caseIds: [],\n origin: DASHBOARD_COMPONENT_NAME.LEGENDA,\n });\n }, [dashboardContext]);\n\n const onNodeMenuClose = useCallback(() => {\n setContextMenuConfig(null);\n }, []);\n\n const onShowOnlySelectedLegendaItemMenuItemClick = useCallback(async (onMenuClose: () => void) => {\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (focussedLegendaItem.rowValue.raw === STRATIFICATION_SELECTED.SELECTED.toString()) {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n } else {\n await setFilterValue('selected', focussedLegendaItem.caseIds);\n }\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n const filter = filters.find(f => f.id === stratification.col.id);\n if (filter) {\n const filterValue = isArray(filter.initialFilterValue) ? [focussedLegendaItem.rowValue.raw] : focussedLegendaItem.rowValue.raw;\n await setFilterValue(stratification.col.id, filterValue);\n }\n } else {\n // not implemented\n }\n\n onMenuClose();\n }, [filters, focussedLegendaItem, setFilterValue, stratification]);\n\n const getEpiContextMenuExtraItems = useCallback((onMenuClose: () => void): ReactElement => {\n if (!focussedLegendaItem) {\n return null;\n }\n let label: string;\n\n if (stratification?.mode === STRATIFICATION_MODE.SELECTION) {\n if (!focussedLegendaItem.caseIds?.length || focussedLegendaItem.caseIds?.length === sortedData.length) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem?.rowValue?.raw === STRATIFICATION_SELECTED.SELECTED.toString() ? t('selected rows') : t('unselected rows') });\n } else if (stratification?.mode === STRATIFICATION_MODE.FIELD) {\n if (!focussedLegendaItem || focussedLegendaItem?.rowValue?.isMissing || !stratification?.col?.id) {\n return null;\n }\n const filter = filters.find(f => f.id === stratification.col.id);\n if (!filter) {\n return null;\n }\n label = t('Filter (show only {{label}})', { label: focussedLegendaItem.rowValue.short });\n } else {\n return null;\n }\n\n return (\n <MenuItem\n divider\n // eslint-disable-next-line @eslint-react/kit/jsx-no-bind\n onClick={async () => onShowOnlySelectedLegendaItemMenuItemClick(onMenuClose)}\n >\n <ListItemIcon>\n <FilterAltIcon fontSize={'small'} />\n </ListItemIcon>\n <ListItemText>\n {label}\n </ListItemText>\n </MenuItem>\n );\n }, [filters, focussedLegendaItem, onShowOnlySelectedLegendaItemMenuItemClick, stratification, t, sortedData]);\n\n const disabled = stratification?.mode === STRATIFICATION_MODE.FIELD && item.caseIds.length === 0;\n\n const innerContent = useMemo(() => {\n const value = item.rowValue.isMissing ? ConfigService.getInstance<CaseDbConfig>().config.epi.DATA_MISSING_CHARACTER : item.rowValue.short;\n return (\n <Box\n sx={{\n alignItems: 'center',\n cursor: disabled ? 'initial' : 'pointer',\n display: 'flex',\n opacity: disabled ? 0.3 : 1,\n }}\n >\n <Box\n sx={{\n background: item.color,\n height: theme.spacing(2),\n marginRight: theme.spacing(1),\n minHeight: theme.spacing(2),\n minWidth: theme.spacing(2),\n outline: `1px solid ${theme.palette.background.paper}`,\n width: theme.spacing(2),\n }}\n />\n <Box\n sx={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {children || value}\n </Box>\n </Box>\n );\n }, [children, disabled, item.color, item.rowValue.isMissing, item.rowValue.short, theme]);\n\n return (\n <>\n <Box\n component={'div'}\n data-color={item.color}\n onClick={disabled ? undefined : onClick}\n onMouseLeave={onMouseLeave}\n onMouseOver={onMouseOver}\n >\n {tooltip && (\n <Tooltip\n {...tooltipProps}\n title={item.rowValue.full}\n >\n {innerContent}\n </Tooltip>\n )}\n {!tooltip && innerContent}\n </Box>\n <ContextMenu\n config={contextMenuConfig}\n getExtraItems={getEpiContextMenuExtraItems}\n onMenuClose={onNodeMenuClose}\n />\n </>\n );\n};\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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"}
@@ -249,52 +249,53 @@ var de = I(({ row: e }) => {
249
249
  let { t: e } = H(), t = L(u), n = l(t, m((e) => e.sortedData)), r = l(t, m((e) => e.completeCaseType)), i = R(() => t.getState().getCurrentColumnVisualSettings().filter((e) => e.isVisible).map((e) => e.id), [t]);
250
250
  z(() => {
251
251
  let a = (t) => {
252
+ let a = [{
253
+ disabled: !n?.length,
254
+ items: [
255
+ {
256
+ callback: async () => p.downloadAsExcel(n, i(), r, e),
257
+ label: e`Download as Excel`
258
+ },
259
+ {
260
+ callback: () => p.downloadAsCsv(n, i(), r, e),
261
+ label: e`Download as CSV`
262
+ },
263
+ {
264
+ callback: () => f.getInstance().emit("openSequenceDownloadDialog", { cases: n }),
265
+ label: e`Download sequences`
266
+ },
267
+ {
268
+ callback: () => null,
269
+ disabled: !0,
270
+ label: e`Download allele profiles`
271
+ }
272
+ ],
273
+ label: e`All rows`
274
+ }, {
275
+ disabled: t.length === 0,
276
+ items: [
277
+ {
278
+ callback: async () => p.downloadAsExcel(o.getSelectedRows(n, t), i(), r, e),
279
+ label: e`Download as Excel`
280
+ },
281
+ {
282
+ callback: () => p.downloadAsCsv(o.getSelectedRows(n, t), i(), r, e),
283
+ label: e`Download as CSV`
284
+ },
285
+ {
286
+ callback: () => f.getInstance().emit("openSequenceDownloadDialog", { cases: n.filter((e) => t.includes(e.id)) }),
287
+ label: e`Download sequences`
288
+ },
289
+ {
290
+ callback: () => null,
291
+ disabled: !0,
292
+ label: e`Download allele profiles`
293
+ }
294
+ ],
295
+ label: e`Selected rows`
296
+ }];
252
297
  f.getInstance().emit("onDownloadOptionsChanged", {
253
- items: [{
254
- disabled: !n?.length,
255
- items: [
256
- {
257
- callback: async () => p.downloadAsExcel(n, i(), r, e),
258
- label: e`Download as Excel`
259
- },
260
- {
261
- callback: () => p.downloadAsCsv(n, i(), r, e),
262
- label: e`Download as CSV`
263
- },
264
- {
265
- callback: () => f.getInstance().emit("openSequenceDownloadDialog", { cases: n }),
266
- label: e`Download sequences`
267
- },
268
- {
269
- callback: () => null,
270
- disabled: !0,
271
- label: e`Download allele profiles`
272
- }
273
- ],
274
- label: e`All rows`
275
- }, {
276
- disabled: t.length === 0,
277
- items: [
278
- {
279
- callback: async () => p.downloadAsExcel(o.getSelectedRows(n, t), i(), r, e),
280
- label: e`Download as Excel`
281
- },
282
- {
283
- callback: () => p.downloadAsCsv(o.getSelectedRows(n, t), i(), r, e),
284
- label: e`Download as CSV`
285
- },
286
- {
287
- callback: () => f.getInstance().emit("openSequenceDownloadDialog", { cases: n.filter((e) => t.includes(e.id)) }),
288
- label: e`Download sequences`
289
- },
290
- {
291
- callback: () => null,
292
- disabled: !0,
293
- label: e`Download allele profiles`
294
- }
295
- ],
296
- label: e`Selected rows`
297
- }],
298
+ items: a,
298
299
  zone: c.LINE_LIST,
299
300
  zoneLabel: e`Line list`
300
301
  });