@gen-epix/ui-client-casedb 4.1.0 → 4.3.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 (63) 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/CaseInfoDialog.js +242 -241
  5. package/dist/_chunks/CaseInfoDialog.js.map +1 -1
  6. package/dist/_chunks/CaseSetInfoDialog.js +224 -224
  7. package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
  8. package/dist/_chunks/Dashboard.js +549 -550
  9. package/dist/_chunks/Dashboard.js.map +1 -1
  10. package/dist/_chunks/FindSimilarCasesDialog.js +76 -76
  11. package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
  12. package/dist/_chunks/LegendaItem.js.map +1 -1
  13. package/dist/_chunks/LineListWidget.js +138 -136
  14. package/dist/_chunks/LineListWidget.js.map +1 -1
  15. package/dist/_chunks/PanelSeparator.js +3 -3
  16. package/dist/_chunks/PanelSeparator.js.map +1 -1
  17. package/dist/_chunks/Upload.js +318 -318
  18. package/dist/_chunks/Upload.js.map +1 -1
  19. package/dist/_chunks/{chunk-BV7QT456.js → chunk-OB3PAWPO.js} +3 -3
  20. package/dist/_chunks/chunk-OB3PAWPO.js.map +1 -0
  21. package/dist/_chunks/cloneDeep.js +1 -1
  22. package/dist/_chunks/cloneDeep.js.map +1 -1
  23. package/dist/_chunks/esm.js +3 -3
  24. package/dist/_chunks/esm.js.map +1 -1
  25. package/dist/_chunks/index.module.js +1 -1
  26. package/dist/_chunks/index.module.js.map +1 -1
  27. package/dist/_chunks/react.js +1 -1
  28. package/dist/_chunks/react.js.map +1 -1
  29. package/dist/_chunks/shallow.js +2 -2
  30. package/dist/_chunks/shallow.js.map +1 -1
  31. package/dist/_chunks/vanilla.js +1 -1
  32. package/dist/_chunks/vanilla.js.map +1 -1
  33. package/dist/_chunks/yup.js +24 -24
  34. package/dist/_chunks/yup.js.map +1 -1
  35. package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
  36. package/dist/components/ui/CreateEventDialog/index.js +40 -40
  37. package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
  38. package/dist/components/ui/HistogramWidget/index.js +161 -162
  39. package/dist/components/ui/HistogramWidget/index.js.map +1 -1
  40. package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
  41. package/dist/locale/en.json +6 -0
  42. package/dist/locale/nl.json +7 -1
  43. package/dist/pages/CasesDetailPage/index.js +1 -1
  44. package/dist/pages/ColsAdminPage/index.js +1 -1
  45. package/dist/pages/ConceptsAdminPage/index.js +1 -1
  46. package/dist/pages/DimsAdminPage/index.js +1 -1
  47. package/dist/pages/EventsDetailPage/index.js +1 -1
  48. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +120 -86
  49. package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
  50. package/dist/pages/RefColsAdminPage/index.js +1 -1
  51. package/dist/pages/RegionSetShapesAdminPage/index.js +1 -1
  52. package/dist/pages/RegionsAdminPage/index.js +1 -1
  53. package/dist/pages/UserEffectiveRightsAdminPage/index.js +1 -1
  54. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
  55. package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
  56. package/dist/routes/index.js +93 -91
  57. package/dist/routes/index.js.map +1 -1
  58. package/dist/setup/setup.js +2 -3
  59. package/dist/setup/setup.js.map +1 -1
  60. package/package.json +73 -72
  61. package/dist/_chunks/chunk-BV7QT456.js.map +0 -1
  62. package/dist/_chunks/index.esm.js +0 -1465
  63. package/dist/_chunks/index.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/CreateEventDialog/CreateEventDialog.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport SaveIcon from '@mui/icons-material/Save';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n boolean,\n object,\n string,\n} from 'yup';\nimport {\n useForm,\n useWatch,\n} from 'react-hook-form';\nimport type { Resolver } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport {\n Alert,\n Box,\n} from '@mui/material';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\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 { useCreateMutation } from '@gen-epix/ui-client-common/hooks/useCreateMutation';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { GenericForm } from '@gen-epix/ui-core-form/components/helpers/GenericForm';\nimport type {\n AutoCompleteOption,\n FormFieldDefinition,\n} from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { useCaseSetCategoryOptionsQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusOptionsQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { useCaseTypeOptionsQuery } from '../../../dataHooks/useCaseTypesQuery';\nimport { useDataCollectionOptionsQuery } from '../../../dataHooks/useDataCollectionsQuery';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { CasesAlreadyInCaseSetWarning } from '../CasesAlreadyInCaseSetWarning';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CreateEventDialogSuccessNotificationMessage } from './CreateEventDialogSuccessNotificationMessage';\n\nexport interface CreateEventDialogOpenProps {\n readonly completeCaseType?: CaseDbCompleteCaseType;\n readonly rows?: CaseDbCase[];\n}\n\nexport interface CreateEventDialogProps extends WithDialogRenderProps<CreateEventDialogOpenProps> {\n}\n\nexport type CreateEventDialogRefMethods = WithDialogRefMethods<CreateEventDialogProps, CreateEventDialogOpenProps>;\n\ntype FormFields = {\n case_set_category_id: string;\n case_set_status_id: string;\n case_type_id: string;\n code: string;\n create_in_data_collection_id: string;\n description: string;\n name: string;\n share_in_data_collection_ids: string[];\n shouldApplySharingToCases: boolean;\n};\n\nexport const CreateEventDialog = withDialog<CreateEventDialogProps, CreateEventDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: CreateEventDialogProps,\n): ReactElement => {\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const caseSetCategoryOptionsQuery = useCaseSetCategoryOptionsQuery();\n const caseSetStatusOptionsQuery = useCaseSetStatusOptionsQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n const { t } = useTranslation();\n const formId = useId();\n\n const schema = useMemo(() => object<FormFields>().shape({\n case_set_category_id: string().uuid4().required(),\n case_set_status_id: string().uuid4().required(),\n case_type_id: string().uuid4().required(),\n code: SchemaUtil.code,\n create_in_data_collection_id: string().uuid4().required(),\n description: SchemaUtil.description.required(),\n name: SchemaUtil.name,\n share_in_data_collection_ids: array().of(string().uuid4()),\n shouldApplySharingToCases: boolean().required(),\n }), []);\n\n const formMethods = useForm<FormFields>({\n resolver: yupResolver(schema) as Resolver<FormFields>,\n values: {\n case_set_category_id: null,\n case_set_status_id: null,\n case_type_id: openProps.completeCaseType?.id ?? null,\n code: '',\n create_in_data_collection_id: null,\n description: '',\n name: openProps.completeCaseType ? t('New {{eventName}} event', { eventName: openProps.completeCaseType.name }) : '',\n share_in_data_collection_ids: [],\n shouldApplySharingToCases: true,\n },\n });\n const { control, handleSubmit, setValue } = formMethods;\n\n const { case_type_id: userSelectedCaseTypeId, create_in_data_collection_id: createdInDataCollectionId, share_in_data_collection_ids: sharedInDataCollectionIds } = useWatch({ control });\n\n const sanitizedCompleteCaseTypeId = openProps.completeCaseType?.id ?? userSelectedCaseTypeId;\n\n const { data: loadedCompleteCaseType, error: completeCaseTypeError, isLoading: isCompleteCaseTypeLoading } = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.COMPLETE_CASE_TYPES,\n itemId: sanitizedCompleteCaseTypeId,\n useQueryOptions: {\n enabled: !openProps.completeCaseType && !!sanitizedCompleteCaseTypeId,\n queryFn: async ({ signal }) => {\n return (await CaseDbCaseApi.getInstance().completeCaseTypesGetOne(sanitizedCompleteCaseTypeId, { signal })).data;\n },\n },\n });\n\n const completeCaseType = openProps.completeCaseType ?? loadedCompleteCaseType;\n\n const createInDataCollectionOptions = useMemo<AutoCompleteOption[]>(() => {\n if (!completeCaseType || !dataCollectionOptionsQuery.options?.length) {\n return [];\n }\n return dataCollectionOptionsQuery.options.filter(option => {\n const dataCollectionId = option.value;\n return completeCaseType.case_type_access_abacs[dataCollectionId]?.is_private && completeCaseType.case_type_access_abacs[dataCollectionId]?.add_case_set;\n });\n }, [completeCaseType, dataCollectionOptionsQuery.options]);\n\n const shareInDataCollectionOptions = useMemo<AutoCompleteOption[]>(() => {\n if (!completeCaseType) {\n return [];\n }\n return dataCollectionOptionsQuery.options.filter(option => {\n const dataCollectionId = option.value;\n return createdInDataCollectionId !== dataCollectionId && completeCaseType.case_type_access_abacs[dataCollectionId]?.add_case_set;\n });\n }, [completeCaseType, createdInDataCollectionId, dataCollectionOptionsQuery.options]);\n\n useEffect(() => {\n // Validate if the createdInDataCollectionId is in the shareInDataCollectionIds\n // If it is, remove it from the shareInDataCollectionIds\n if (sharedInDataCollectionIds?.length && sharedInDataCollectionIds.includes(createdInDataCollectionId)) {\n setValue('share_in_data_collection_ids', sharedInDataCollectionIds.filter(id => id !== createdInDataCollectionId));\n }\n }, [createdInDataCollectionId, setValue, sharedInDataCollectionIds]);\n\n useEffect(() => {\n if (openProps.completeCaseType) {\n return;\n }\n setValue('create_in_data_collection_id', null);\n setValue('share_in_data_collection_ids', []);\n }, [completeCaseType, openProps.completeCaseType, setValue]);\n\n useEffect(() => {\n if (dataCollectionOptionsQuery.isLoading || !createInDataCollectionOptions?.length) {\n return;\n }\n\n if (createInDataCollectionOptions?.length === 1) {\n setValue('create_in_data_collection_id', createInDataCollectionOptions[0].value as string);\n }\n }, [createInDataCollectionOptions, dataCollectionOptionsQuery.isLoading, setValue]);\n\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!openProps.completeCaseType,\n label: t`Case type`,\n loading: caseTypeOptionsQuery.isLoading,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Create in data collection`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n name: 'create_in_data_collection_id',\n options: createInDataCollectionOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Share in data collections`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n multiple: true,\n name: 'share_in_data_collection_ids',\n options: shareInDataCollectionOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.BOOLEAN,\n disabled: sharedInDataCollectionIds.length === 0 || !openProps.rows?.length,\n label: t`Should the same sharing be applied to the cases in the event?`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n name: 'shouldApplySharingToCases',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Event name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Event code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Category`,\n loading: caseSetCategoryOptionsQuery.isLoading,\n name: 'case_set_category_id',\n options: caseSetCategoryOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Status`,\n loading: caseSetStatusOptionsQuery.isLoading,\n name: 'case_set_status_id',\n options: caseSetStatusOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [caseSetCategoryOptionsQuery.isLoading, caseSetCategoryOptionsQuery.options, caseSetStatusOptionsQuery.isLoading, caseSetStatusOptionsQuery.options, caseTypeOptionsQuery.isLoading, caseTypeOptionsQuery.options, createInDataCollectionOptions, dataCollectionOptionsQuery.isLoading, isCompleteCaseTypeLoading, openProps.completeCaseType, openProps.rows?.length, shareInDataCollectionOptions, sharedInDataCollectionIds.length, t]);\n\n const loadables = useArray([\n caseTypeOptionsQuery,\n caseSetCategoryOptionsQuery,\n caseSetStatusOptionsQuery,\n dataCollectionOptionsQuery,\n ]);\n\n\n const isLoading = LoadableUtil.isSomeLoading(loadables);\n\n const onSuccess = useCallback(async (item: CaseDbCaseSet, variables: FormFields) => {\n if (variables.shouldApplySharingToCases) {\n await CaseUtil.applyDataCollectionLinks({\n caseIds: openProps.rows ? openProps.rows.map(row => row.id) : undefined,\n caseSetDataCollectionIds: variables.share_in_data_collection_ids,\n caseSetId: item.id,\n caseTypeId: completeCaseType.id,\n });\n }\n EventBusService.getInstance().emit('onEventCreated');\n onClose();\n }, [completeCaseType?.id, onClose, openProps.rows]);\n\n const onError = useCallback(() => {\n EventBusService.getInstance().emit('onEventCreated');\n onClose();\n }, [onClose]);\n\n const { isMutating: isCreating, mutate: mutateCreate } = useCreateMutation<CaseDbCaseSet, FormFields>({\n associationQueryKeys: [\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SETS]),\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SET_MEMBERS], true),\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.DATA_COLLECTION_SET_MEMBERS], true),\n ],\n getErrorNotificationMessage: (item, _error) => t('Failed to create event: {{name}}', { name: item.name }),\n getProgressNotificationMessage: (variables) => t('Creating event: {{name}}...', { name: variables.name }),\n getSuccessNotificationMessage: (item) => (\n <CreateEventDialogSuccessNotificationMessage\n caseSet={item}\n isCreating\n />\n ),\n onError,\n onSuccess,\n queryFn: async (formData: FormFields): Promise<CaseDbCaseSet> => {\n const caseSetResult = (await CaseDbCaseApi.getInstance().createCaseSet({\n case_ids: openProps.rows?.map(row => row.id) ?? [],\n case_set: {\n case_set_category_id: formData.case_set_category_id,\n case_set_status_id: formData.case_set_status_id,\n case_type_id: formData.case_type_id,\n code: formData.code,\n created_in_data_collection_id: formData.create_in_data_collection_id,\n description: formData.description,\n name: formData.name,\n },\n data_collection_ids: formData.share_in_data_collection_ids,\n })).data;\n\n return caseSetResult;\n },\n resourceQueryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS),\n });\n\n const isFormDisabled = useMemo(() => {\n return isLoading || caseTypeOptionsQuery.options?.length === 0 || dataCollectionOptionsQuery.options?.length === 0;\n }, [isLoading, caseTypeOptionsQuery.options?.length, dataCollectionOptionsQuery.options?.length]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n if (isLoading || !isFormDisabled) {\n actions.push({\n ...TestIdUtil.createAttributes('CreateEventDialog-saveButton'),\n autoFocus: true,\n color: 'secondary',\n disabled: isLoading || isCreating,\n form: formId,\n label: t`Save`,\n loading: isLoading,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n });\n }\n onActionsChange(actions);\n }, [formId, isCreating, isLoading, onActionsChange, t, caseTypeOptionsQuery.options?.length, isFormDisabled]);\n\n const onFormSubmit = useCallback((formData: FormFields) => {\n mutateCreate(formData);\n }, [mutateCreate]);\n\n useEffect(() => {\n if (openProps.completeCaseType) {\n if (openProps.rows?.length) {\n onTitleChange(t('Create new event from {{numCases}} selected {{caseTypeName}} cases', { caseTypeName: openProps.completeCaseType.name, numCases: openProps.rows.length }));\n } else {\n onTitleChange(t('Create event'));\n }\n } else {\n onTitleChange(t('Create event'));\n }\n }, [onTitleChange, openProps, t]);\n\n return (\n <ResponseHandler\n error={completeCaseTypeError}\n inlineSpinner\n isLoading={isCreating}\n loadables={loadables}\n >\n {isFormDisabled ? (\n <Box>\n <Alert severity={'error'}>\n {t`You do not have the required permissions to create an event. Contact your organization administrator for assistance.`}\n </Alert>\n </Box>\n ) : (\n <GenericForm<FormFields>\n disableAll={isFormDisabled}\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n )}\n {openProps.rows?.length > 0 && (\n <CasesAlreadyInCaseSetWarning\n cases={openProps.rows}\n />\n )}\n </ResponseHandler>\n );\n}, {\n fullWidth: true,\n maxWidth: 'lg',\n testId: 'CreateEventDialog',\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/ui/CreateEventDialog/CreateEventDialog.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useId,\n useMemo,\n} from 'react';\nimport type { ReactElement } from 'react';\nimport SaveIcon from '@mui/icons-material/Save';\nimport { useTranslation } from 'react-i18next';\nimport {\n array,\n boolean,\n object,\n string,\n} from 'yup';\nimport {\n useForm,\n useWatch,\n} from 'react-hook-form';\nimport type { Resolver } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport {\n Alert,\n Box,\n} from '@mui/material';\nimport type {\n CaseDbCase,\n CaseDbCaseSet,\n CaseDbCompleteCaseType,\n} from '@gen-epix/api-casedb';\nimport { CaseDbCaseApi } from '@gen-epix/api-casedb';\nimport type { DialogAction } from '@gen-epix/ui-core-components/components/Dialog';\nimport type {\n WithDialogRefMethods,\n WithDialogRenderProps,\n} from '@gen-epix/ui-core-components/hoc/withDialog';\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 { useCreateMutation } from '@gen-epix/ui-client-common/hooks/useCreateMutation';\nimport { useItemQuery } from '@gen-epix/ui-client-common/hooks/useItemQuery';\nimport { withDialog } from '@gen-epix/ui-core-components/hoc/withDialog';\nimport { TestIdUtil } from '@gen-epix/ui-core/utils/TestIdUtil';\nimport { useArray } from '@gen-epix/ui-core/hooks/useArray';\nimport { GenericForm } from '@gen-epix/ui-core-form/components/helpers/GenericForm';\nimport type {\n AutoCompleteOption,\n FormFieldDefinition,\n} from '@gen-epix/ui-core-form/models/form';\nimport { FORM_FIELD_DEFINITION_TYPE } from '@gen-epix/ui-core-form/models/form';\nimport { SchemaUtil } from '@gen-epix/ui-core-form/utils/SchemaUtil';\n\nimport { EventBusService } from '../../../classes/services/EventBusService';\nimport { useCaseSetCategoryOptionsQuery } from '../../../dataHooks/useCaseSetCategoriesQuery';\nimport { useCaseSetStatusOptionsQuery } from '../../../dataHooks/useCaseSetStatusesQuery';\nimport { useCaseTypeOptionsQuery } from '../../../dataHooks/useCaseTypesQuery';\nimport { useDataCollectionOptionsQuery } from '../../../dataHooks/useDataCollectionsQuery';\nimport { CaseUtil } from '../../../utils/CaseUtil';\nimport { CasesAlreadyInCaseSetWarning } from '../CasesAlreadyInCaseSetWarning';\nimport { CASEDB_QUERY_KEY } from '../../../constants/query';\n\nimport { CreateEventDialogSuccessNotificationMessage } from './CreateEventDialogSuccessNotificationMessage';\n\nexport interface CreateEventDialogOpenProps {\n readonly completeCaseType?: CaseDbCompleteCaseType;\n readonly rows?: CaseDbCase[];\n}\n\nexport interface CreateEventDialogProps extends WithDialogRenderProps<CreateEventDialogOpenProps> {\n}\n\nexport type CreateEventDialogRefMethods = WithDialogRefMethods<CreateEventDialogProps, CreateEventDialogOpenProps>;\n\ntype FormFields = {\n case_set_category_id: string;\n case_set_status_id: string;\n case_type_id: string;\n code: string;\n create_in_data_collection_id: string;\n description: string;\n name: string;\n share_in_data_collection_ids: string[];\n shouldApplySharingToCases: boolean;\n};\n\nexport const CreateEventDialog = withDialog<CreateEventDialogProps, CreateEventDialogOpenProps>((\n {\n onActionsChange,\n onClose,\n onTitleChange,\n openProps,\n }: CreateEventDialogProps,\n): ReactElement => {\n const caseTypeOptionsQuery = useCaseTypeOptionsQuery();\n const caseSetCategoryOptionsQuery = useCaseSetCategoryOptionsQuery();\n const caseSetStatusOptionsQuery = useCaseSetStatusOptionsQuery();\n const dataCollectionOptionsQuery = useDataCollectionOptionsQuery();\n const { t } = useTranslation();\n const formId = useId();\n\n const schema = useMemo(() => object<FormFields>().shape({\n case_set_category_id: string().uuid4().required(),\n case_set_status_id: string().uuid4().required(),\n case_type_id: string().uuid4().required(),\n code: SchemaUtil.code,\n create_in_data_collection_id: string().uuid4().required(),\n description: SchemaUtil.description.required(),\n name: SchemaUtil.name,\n share_in_data_collection_ids: array().of(string().uuid4()),\n shouldApplySharingToCases: boolean().required(),\n }), []);\n\n const formMethods = useForm<FormFields>({\n resolver: yupResolver(schema) as Resolver<FormFields>,\n values: {\n case_set_category_id: null,\n case_set_status_id: null,\n case_type_id: openProps.completeCaseType?.id ?? null,\n code: '',\n create_in_data_collection_id: null,\n description: '',\n name: openProps.completeCaseType ? t('New {{eventName}} event', { eventName: openProps.completeCaseType.name }) : '',\n share_in_data_collection_ids: [],\n shouldApplySharingToCases: true,\n },\n });\n const { control, handleSubmit, setValue } = formMethods;\n\n const { case_type_id: userSelectedCaseTypeId, create_in_data_collection_id: createdInDataCollectionId, share_in_data_collection_ids: sharedInDataCollectionIds } = useWatch({ control });\n\n const sanitizedCompleteCaseTypeId = openProps.completeCaseType?.id ?? userSelectedCaseTypeId;\n\n const { data: loadedCompleteCaseType, error: completeCaseTypeError, isLoading: isCompleteCaseTypeLoading } = useItemQuery({\n baseQueryKey: CASEDB_QUERY_KEY.COMPLETE_CASE_TYPES,\n itemId: sanitizedCompleteCaseTypeId,\n useQueryOptions: {\n enabled: !openProps.completeCaseType && !!sanitizedCompleteCaseTypeId,\n queryFn: async ({ signal }) => {\n return (await CaseDbCaseApi.getInstance().completeCaseTypesGetOne(sanitizedCompleteCaseTypeId, { signal })).data;\n },\n },\n });\n\n const completeCaseType = openProps.completeCaseType ?? loadedCompleteCaseType;\n\n const createInDataCollectionOptions = useMemo<AutoCompleteOption[]>(() => {\n if (!completeCaseType || !dataCollectionOptionsQuery.options?.length) {\n return [];\n }\n return dataCollectionOptionsQuery.options.filter(option => {\n const dataCollectionId = option.value;\n return completeCaseType.case_type_access_abacs[dataCollectionId]?.is_private && completeCaseType.case_type_access_abacs[dataCollectionId]?.add_case_set;\n });\n }, [completeCaseType, dataCollectionOptionsQuery.options]);\n\n const shareInDataCollectionOptions = useMemo<AutoCompleteOption[]>(() => {\n if (!completeCaseType) {\n return [];\n }\n return dataCollectionOptionsQuery.options.filter(option => {\n const dataCollectionId = option.value;\n return createdInDataCollectionId !== dataCollectionId && completeCaseType.case_type_access_abacs[dataCollectionId]?.add_case_set;\n });\n }, [completeCaseType, createdInDataCollectionId, dataCollectionOptionsQuery.options]);\n\n useEffect(() => {\n // Validate if the createdInDataCollectionId is in the shareInDataCollectionIds\n // If it is, remove it from the shareInDataCollectionIds\n if (sharedInDataCollectionIds?.length && sharedInDataCollectionIds.includes(createdInDataCollectionId)) {\n setValue('share_in_data_collection_ids', sharedInDataCollectionIds.filter(id => id !== createdInDataCollectionId));\n }\n }, [createdInDataCollectionId, setValue, sharedInDataCollectionIds]);\n\n useEffect(() => {\n if (openProps.completeCaseType) {\n return;\n }\n setValue('create_in_data_collection_id', null);\n setValue('share_in_data_collection_ids', []);\n }, [completeCaseType, openProps.completeCaseType, setValue]);\n\n useEffect(() => {\n if (dataCollectionOptionsQuery.isLoading || !createInDataCollectionOptions?.length) {\n return;\n }\n\n if (createInDataCollectionOptions?.length === 1) {\n setValue('create_in_data_collection_id', createInDataCollectionOptions[0].value as string);\n }\n }, [createInDataCollectionOptions, dataCollectionOptionsQuery.isLoading, setValue]);\n\n\n const formFieldDefinitions = useMemo<FormFieldDefinition<FormFields>[]>(() => {\n return [\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n disabled: !!openProps.completeCaseType,\n label: t`Case type`,\n loading: caseTypeOptionsQuery.isLoading,\n name: 'case_type_id',\n options: caseTypeOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Create in data collection`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n name: 'create_in_data_collection_id',\n options: createInDataCollectionOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Share in data collections`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n multiple: true,\n name: 'share_in_data_collection_ids',\n options: shareInDataCollectionOptions,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.BOOLEAN,\n disabled: sharedInDataCollectionIds.length === 0 || !openProps.rows?.length,\n label: t`Should the same sharing be applied to the cases in the event?`,\n loading: dataCollectionOptionsQuery.isLoading || isCompleteCaseTypeLoading,\n name: 'shouldApplySharingToCases',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Event name`,\n name: 'name',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.TEXTFIELD,\n label: t`Event code`,\n name: 'code',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.RICH_TEXT,\n label: t`Description`,\n name: 'description',\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Category`,\n loading: caseSetCategoryOptionsQuery.isLoading,\n name: 'case_set_category_id',\n options: caseSetCategoryOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n {\n definition: FORM_FIELD_DEFINITION_TYPE.AUTOCOMPLETE,\n label: t`Status`,\n loading: caseSetStatusOptionsQuery.isLoading,\n name: 'case_set_status_id',\n options: caseSetStatusOptionsQuery.options,\n } as const satisfies FormFieldDefinition<FormFields>,\n ] as const;\n }, [caseSetCategoryOptionsQuery.isLoading, caseSetCategoryOptionsQuery.options, caseSetStatusOptionsQuery.isLoading, caseSetStatusOptionsQuery.options, caseTypeOptionsQuery.isLoading, caseTypeOptionsQuery.options, createInDataCollectionOptions, dataCollectionOptionsQuery.isLoading, isCompleteCaseTypeLoading, openProps.completeCaseType, openProps.rows?.length, shareInDataCollectionOptions, sharedInDataCollectionIds.length, t]);\n\n const loadables = useArray([\n caseTypeOptionsQuery,\n caseSetCategoryOptionsQuery,\n caseSetStatusOptionsQuery,\n dataCollectionOptionsQuery,\n ]);\n\n\n const isLoading = LoadableUtil.isSomeLoading(loadables);\n\n const onSuccess = useCallback(async (item: CaseDbCaseSet, variables: FormFields) => {\n if (variables.shouldApplySharingToCases) {\n await CaseUtil.applyDataCollectionLinks({\n caseIds: openProps.rows ? openProps.rows.map(row => row.id) : undefined,\n caseSetDataCollectionIds: variables.share_in_data_collection_ids,\n caseSetId: item.id,\n caseTypeId: completeCaseType.id,\n });\n }\n EventBusService.getInstance().emit('onEventCreated');\n onClose();\n }, [completeCaseType?.id, onClose, openProps.rows]);\n\n const onError = useCallback(() => {\n EventBusService.getInstance().emit('onEventCreated');\n onClose();\n }, [onClose]);\n\n const { isMutating: isCreating, mutate: mutateCreate } = useCreateMutation<CaseDbCaseSet, FormFields>({\n associationQueryKeys: [\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SETS]),\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.CASE_SET_MEMBERS], true),\n ...QueryClientService.getInstance().getQueryKeyDependencies([CASEDB_QUERY_KEY.DATA_COLLECTION_SET_MEMBERS], true),\n ],\n getErrorNotificationMessage: (item, _error) => t('Failed to create event: {{name}}', { name: item.name }),\n getProgressNotificationMessage: (variables) => t('Creating event: {{name}}...', { name: variables.name }),\n getSuccessNotificationMessage: (item) => (\n <CreateEventDialogSuccessNotificationMessage\n caseSet={item}\n isCreating\n />\n ),\n onError,\n onSuccess,\n queryFn: async (formData: FormFields): Promise<CaseDbCaseSet> => {\n const caseSetResult = (await CaseDbCaseApi.getInstance().createCaseSet({\n case_ids: openProps.rows?.map(row => row.id) ?? [],\n case_set: {\n case_set_category_id: formData.case_set_category_id,\n case_set_status_id: formData.case_set_status_id,\n case_type_id: formData.case_type_id,\n code: formData.code,\n created_in_data_collection_id: formData.create_in_data_collection_id,\n description: formData.description,\n name: formData.name,\n },\n data_collection_ids: formData.share_in_data_collection_ids,\n })).data;\n\n return caseSetResult;\n },\n resourceQueryKey: QueryClientService.getInstance().getGenericKey(CASEDB_QUERY_KEY.CASE_SETS),\n });\n\n const isFormDisabled = useMemo(() => {\n return isLoading || caseTypeOptionsQuery.options?.length === 0 || dataCollectionOptionsQuery.options?.length === 0;\n }, [isLoading, caseTypeOptionsQuery.options?.length, dataCollectionOptionsQuery.options?.length]);\n\n useEffect(() => {\n const actions: DialogAction[] = [];\n if (isLoading || !isFormDisabled) {\n actions.push({\n ...TestIdUtil.createAttributes('CreateEventDialog-saveButton'),\n autoFocus: true,\n color: 'secondary',\n disabled: isLoading || isCreating,\n form: formId,\n label: t`Save`,\n loading: isLoading,\n startIcon: <SaveIcon />,\n type: 'submit',\n variant: 'contained',\n });\n }\n onActionsChange(actions);\n }, [formId, isCreating, isLoading, onActionsChange, t, caseTypeOptionsQuery.options?.length, isFormDisabled]);\n\n const onFormSubmit = useCallback((formData: FormFields) => {\n mutateCreate(formData);\n }, [mutateCreate]);\n\n useEffect(() => {\n if (openProps.completeCaseType) {\n if (openProps.rows?.length) {\n onTitleChange(t('Create new event from {{numCases}} selected {{caseTypeName}} cases', { caseTypeName: openProps.completeCaseType.name, numCases: openProps.rows.length }));\n } else {\n onTitleChange(t('Create event'));\n }\n } else {\n onTitleChange(t('Create event'));\n }\n }, [onTitleChange, openProps, t]);\n\n return (\n <ResponseHandler\n error={completeCaseTypeError}\n inlineSpinner\n isLoading={isCreating}\n loadables={loadables}\n >\n {isFormDisabled ? (\n <Box>\n <Alert severity={'error'}>\n {t`You do not have the required permissions to create an event. Contact your organization administrator for assistance.`}\n </Alert>\n </Box>\n ) : (\n <GenericForm<FormFields>\n disableAll={isFormDisabled}\n formFieldDefinitions={formFieldDefinitions}\n formId={formId}\n formMethods={formMethods}\n onSubmit={handleSubmit(onFormSubmit)}\n schema={schema}\n />\n )}\n {openProps.rows?.length > 0 && (\n <CasesAlreadyInCaseSetWarning\n cases={openProps.rows}\n />\n )}\n </ResponseHandler>\n );\n}, {\n fullWidth: true,\n maxWidth: 'lg',\n testId: 'CreateEventDialog',\n});\n"],"mappings":"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"}
@@ -3,193 +3,192 @@ import { t } from "../../../_chunks/intersection.js";
3
3
  import { CaseUtil as n } from "../../../utils/CaseUtil/index.js";
4
4
  import { t as r } from "../../../_chunks/round.js";
5
5
  import { DashboardUtil as i } from "../../../utils/DashboardUtil/index.js";
6
- import { HISTOGRAM_ALLOWED_COL_TYPES as a, HistogramUtil as o } from "../../../utils/HistogramUtil/index.js";
7
- import { DASHBOARD_COMPONENT_NAME as s } from "../../../constants/dashboard.js";
8
- import { a as c, c as l, f as u, h as d, l as f, m as p, n as m, p as h, t as g } from "../../../_chunks/esm.js";
9
- import { t as _ } from "../../../_chunks/react.js";
10
- import { t as ee } from "../../../_chunks/dashboardStore.js";
11
- import { ContextMenu as te } from "../ContextMenu/index.js";
12
- import { WidgetUnavailable as v } from "../WidgetUnavailable/index.js";
13
- import { EventBusService as y } from "../../../classes/services/EventBusService/index.js";
14
- import { t as b } from "../../../_chunks/CaseDbDownloadUtil.js";
15
- import { n as ne } from "../../../_chunks/LegendaItem.js";
16
- import { t as re } from "../../../_chunks/Dashboard.js";
17
- import { ConfigService as ie } from "@gen-epix/ui-client-common/classes/services/ConfigService";
18
- import { ListItemIcon as ae, ListItemText as oe, MenuItem as se, useTheme as ce } from "@mui/material";
19
- import { use as x, useCallback as S, useEffect as C, useMemo as w, useRef as T, useState as E } from "react";
20
- import { useTranslation as le } from "react-i18next";
21
- import ue from "@mui/icons-material/FilterAlt";
22
- import { jsx as D, jsxs as O } from "react/jsx-runtime";
23
- import { Box as de } from "@mui/system";
6
+ import { HISTOGRAM_ALLOWED_COL_TYPES as ee, HistogramUtil as a } from "../../../utils/HistogramUtil/index.js";
7
+ import { DASHBOARD_COMPONENT_NAME as o } from "../../../constants/dashboard.js";
8
+ import { a as s, c, f as l, h as u, l as d, m as f, n as p, p as m, t as te } from "../../../_chunks/esm.js";
9
+ import { t as h } from "../../../_chunks/react.js";
10
+ import { t as g } from "../../../_chunks/dashboardStore.js";
11
+ import { ContextMenu as _ } from "../ContextMenu/index.js";
12
+ import { WidgetUnavailable as ne } from "../WidgetUnavailable/index.js";
13
+ import { EventBusService as v } from "../../../classes/services/EventBusService/index.js";
14
+ import { t as y } from "../../../_chunks/CaseDbDownloadUtil.js";
15
+ import { n as re } from "../../../_chunks/LegendaItem.js";
16
+ import { t as ie } from "../../../_chunks/Dashboard.js";
17
+ import { ConfigService as ae } from "@gen-epix/ui-client-common/classes/services/ConfigService";
18
+ import { Box as oe, ListItemIcon as se, ListItemText as ce, MenuItem as le, useTheme as ue } from "@mui/material";
19
+ import { use as b, useCallback as x, useEffect as S, useMemo as C, useRef as w, useState as T } from "react";
20
+ import { useTranslation as E } from "react-i18next";
21
+ import D from "@mui/icons-material/FilterAlt";
22
+ import { jsx as O, jsxs as k } from "react/jsx-runtime";
24
23
  //#region src/components/ui/HistogramWidget/HistogramWidget.tsx
25
- var fe = /* @__PURE__ */ e(r(), 1), pe = /* @__PURE__ */ e(t(), 1);
26
- u([
27
- f,
24
+ var de = /* @__PURE__ */ e(r(), 1), fe = /* @__PURE__ */ e(t(), 1);
25
+ l([
26
+ d,
27
+ s,
28
28
  c,
29
- l,
30
- m
29
+ p
31
30
  ]);
32
- var me = {
33
- dispose: h,
34
- getInstanceByDom: p,
35
- init: d
36
- }, k = () => {
37
- let { t: e } = le(), t = ce(), r = T(null), c = T(null), l = w(() => ({ nonce: ie.getInstance().config.nonce }), []), u = x(ee), d = x(ne), f = _(u, (e) => e.completeCaseType), p = _(u, (e) => e.sortedData), m = _(u, (e) => e.setFilterValues), h = _(u, (e) => e.updateWidgetData), k = _(u, (e) => e.getWidgetData(s.HISTOGRAM)), [A, j] = E(null), M = w(() => a, []), N = w(() => o.getAllowedCols(f, M), [M, f]), [P, F] = E(k.colAId ? f?.cols[k.colAId] ?? null : null), [I, L] = E(k.colBId ? f?.cols[k.colBId] ?? null : null), [R, z] = E(null), he = S(() => {
38
- z(null), j(null);
39
- }, []), B = w(() => i.getCaseCount(p), [p]), V = w(() => o.getDefaultCols(N, f), [N, f]), H = N.length > 1 && V?.newColA && V?.newColB, U = H && P && I && B > 0, W = S((e, t) => {
40
- F(e), L(t), h(s.HISTOGRAM, {
31
+ var pe = {
32
+ dispose: m,
33
+ getInstanceByDom: f,
34
+ init: u
35
+ }, A = () => {
36
+ let { t: e } = E(), t = ue(), r = w(null), s = w(null), c = C(() => ({ nonce: ae.getInstance().config.nonce }), []), l = b(g), u = b(re), d = h(l, (e) => e.completeCaseType), f = h(l, (e) => e.sortedData), p = h(l, (e) => e.setFilterValues), m = h(l, (e) => e.updateWidgetData), A = h(l, (e) => e.getWidgetData(o.HISTOGRAM)), [j, M] = T(null), N = C(() => ee, []), P = C(() => a.getAllowedCols(d, N), [N, d]), [F, I] = T(A.colAId ? d?.cols[A.colAId] ?? null : null), [L, R] = T(A.colBId ? d?.cols[A.colBId] ?? null : null), [z, B] = T(null), me = x(() => {
37
+ B(null), M(null);
38
+ }, []), V = C(() => i.getCaseCount(f), [f]), H = C(() => a.getDefaultCols(P, d), [P, d]), U = P.length > 1 && H?.newColA && H?.newColB, W = U && F && L && V > 0, G = x((e, t) => {
39
+ I(e), R(t), m(o.HISTOGRAM, {
41
40
  colAId: e.id,
42
41
  colBId: t.id
43
42
  });
44
- }, [h]);
45
- C(() => {
46
- if (P && I || !V) return;
47
- let { newColA: e, newColB: t } = V;
48
- F(e), L(t), h(s.HISTOGRAM, {
43
+ }, [m]);
44
+ S(() => {
45
+ if (F && L || !H) return;
46
+ let { newColA: e, newColB: t } = H;
47
+ I(e), R(t), m(o.HISTOGRAM, {
49
48
  colAId: e.id,
50
49
  colBId: t.id
51
50
  });
52
51
  }, [
52
+ F,
53
53
  P,
54
- N,
55
- I,
56
- f,
57
- V,
58
- h
54
+ L,
55
+ d,
56
+ H,
57
+ m
59
58
  ]);
60
- let [G, K] = w(() => o.getConcepts(P, I, f), [
61
- P,
62
- I,
63
- f
64
- ]), q = w(() => o.getSeries(P, I, f, p, G, K), [
65
- P,
66
- I,
59
+ let [K, q] = C(() => a.getConcepts(F, L, d), [
60
+ F,
61
+ L,
62
+ d
63
+ ]), J = C(() => a.getSeries(F, L, d, f, K, q), [
64
+ F,
65
+ L,
66
+ d,
67
67
  f,
68
- p,
69
- G,
70
- K
71
- ]), J = w(() => o.getCaseCount(q), [q]), Y = B - J, ge = Y > 0 ? (0, fe.default)(Y / B * 100, 1) : 0, _e = w(() => {
72
- if (!U) return !V || N.length < 2 ? e`No two compatible columns found to display a histogram.` : B ? J ? null : e`No cases found with valid values for the selected columns to display a histogram.` : e`No cases found.`;
68
+ K,
69
+ q
70
+ ]), Y = C(() => a.getCaseCount(J), [J]), X = V - Y, he = X > 0 ? (0, de.default)(X / V * 100, 1) : 0, ge = C(() => {
71
+ if (!W) return !H || P.length < 2 ? e`No two compatible columns found to display a histogram.` : V ? Y ? null : e`No cases found with valid values for the selected columns to display a histogram.` : e`No cases found.`;
73
72
  }, [
74
- N.length,
73
+ P.length,
74
+ H,
75
+ Y,
75
76
  V,
76
- J,
77
- B,
78
- U,
77
+ W,
79
78
  e
80
- ]), X = w(() => o.getColors(P, f, p), [
81
- f,
82
- P,
83
- p
84
- ]), ve = S(() => U ? o.getChartOptions({
85
- aCol: P,
86
- bCol: I,
87
- colors: X,
88
- conceptsA: G,
89
- conceptsB: K,
90
- series: q,
79
+ ]), Z = C(() => a.getColors(F, d, f), [
80
+ d,
81
+ F,
82
+ f
83
+ ]), _e = x(() => W ? a.getChartOptions({
84
+ aCol: F,
85
+ bCol: L,
86
+ colors: Z,
87
+ conceptsA: K,
88
+ conceptsB: q,
89
+ series: J,
91
90
  t: e,
92
91
  theme: t
93
92
  }) : null, [
94
- U,
95
- X,
93
+ W,
94
+ Z,
96
95
  t,
97
- K,
98
96
  q,
99
- G,
100
- P,
101
- I,
97
+ J,
98
+ K,
99
+ F,
100
+ L,
102
101
  e
103
- ]), Z = w(() => {
102
+ ]), ve = C(() => {
104
103
  let t;
105
- if (t = P && I ? e("Histogram: {{aColLabel}} and {{bColLabel}}", {
106
- aColLabel: P.label,
107
- bColLabel: I.label
108
- }) : e`Histogram`, !V?.newColA || !V?.newColB) return t;
104
+ if (t = F && L ? e("Histogram: {{aColLabel}} and {{bColLabel}}", {
105
+ aColLabel: F.label,
106
+ bColLabel: L.label
107
+ }) : e`Histogram`, !H?.newColA || !H?.newColB) return t;
109
108
  let n = {
110
- disabled: !H || N.length < 2,
109
+ disabled: !U || P.length < 2,
111
110
  items: [],
112
111
  label: t
113
112
  };
114
- return N.forEach((t) => {
113
+ return P.forEach((t) => {
115
114
  let r = {
116
- active: P?.id === t.id || void 0,
115
+ active: F?.id === t.id || void 0,
117
116
  items: [],
118
117
  label: e("Grouping: {{label}}", { label: t.label })
119
118
  };
120
- N.forEach((n) => {
119
+ P.forEach((n) => {
121
120
  t.id !== n.id && r.items.push({
122
- active: (P?.id === t.id || void 0) && (I?.id === n.id || void 0),
121
+ active: (F?.id === t.id || void 0) && (L?.id === n.id || void 0),
123
122
  callback: () => {
124
- W(t, n);
123
+ G(t, n);
125
124
  },
126
125
  label: e("X-Axis: {{label}}", { label: n.label })
127
126
  });
128
127
  }), n.items.push(r);
129
128
  }), n;
130
129
  }, [
130
+ F,
131
+ L,
132
+ U,
131
133
  P,
132
- I,
133
- H,
134
- N,
135
- V?.newColA,
136
- V?.newColB,
134
+ H?.newColA,
135
+ H?.newColB,
137
136
  e,
138
- W
139
- ]), ye = S((t) => {
140
- if (c.current = t, !P || !I) return;
137
+ G
138
+ ]), ye = x((t) => {
139
+ if (s.current = t, !F || !L) return;
141
140
  let n = t.getDom();
142
141
  n?.setAttribute("aria-label", e("Histogram showing the number of cases for {{aColLabel}} and {{bColLabel}}", {
143
- aColLabel: P?.label,
144
- bColLabel: I?.label
142
+ aColLabel: F?.label,
143
+ bColLabel: L?.label
145
144
  })), n?.setAttribute("role", "img");
146
145
  }, [
147
- P,
148
- I,
146
+ F,
147
+ L,
149
148
  e
150
149
  ]);
151
- C(() => {
150
+ S(() => {
152
151
  let t = () => {
153
- y.getInstance().emit("onDownloadOptionsChanged", {
154
- disabled: !H,
152
+ v.getInstance().emit("onDownloadOptionsChanged", {
153
+ disabled: !U,
155
154
  items: [{
156
- callback: () => b.downloadEchartsImage(e`Histogram`, r.current.getEchartsInstance(), "png", f, e),
157
- disabled: !U,
155
+ callback: () => y.downloadEchartsImage(e`Histogram`, r.current.getEchartsInstance(), "png", d, e),
156
+ disabled: !W,
158
157
  label: e`Save as PNG`
159
158
  }, {
160
- callback: () => b.downloadEchartsImage(e`Histogram`, r.current.getEchartsInstance(), "jpeg", f, e),
161
- disabled: !U,
159
+ callback: () => y.downloadEchartsImage(e`Histogram`, r.current.getEchartsInstance(), "jpeg", d, e),
160
+ disabled: !W,
162
161
  label: e`Save as JPEG`
163
162
  }],
164
- zone: s.HISTOGRAM,
163
+ zone: o.HISTOGRAM,
165
164
  zoneLabel: e`Histogram`
166
165
  });
167
166
  };
168
167
  t();
169
- let n = y.getInstance();
168
+ let n = v.getInstance();
170
169
  return n.addEventListener("onDownloadOptionsRequested", t), () => {
171
170
  n.emit("onDownloadOptionsChanged", {
172
171
  items: null,
173
- zone: s.HISTOGRAM,
172
+ zone: o.HISTOGRAM,
174
173
  zoneLabel: e`Histogram`
175
174
  }), n.removeEventListener("onDownloadOptionsRequested", t);
176
175
  };
177
176
  }, [
178
- f,
177
+ d,
178
+ W,
179
179
  U,
180
- H,
181
180
  e
182
181
  ]);
183
- let Q = S((e) => {
184
- d.highlight({
182
+ let Q = x((e) => {
183
+ u.highlight({
185
184
  caseIds: e,
186
- origin: s.HISTOGRAM
185
+ origin: o.HISTOGRAM
187
186
  });
188
- }, [d]), be = w(() => {
187
+ }, [u]), be = C(() => {
189
188
  let e = (e) => {
190
- let t = o.getColValuesFromPayload(e, G, K);
191
- return t ? p.filter((e) => {
192
- let r = n.getRowValue(e.content, P, f), i = n.getRowValue(e.content, I, f);
189
+ let t = a.getColValuesFromPayload(e, K, q);
190
+ return t ? f.filter((e) => {
191
+ let r = n.getRowValue(e.content, F, d), i = n.getRowValue(e.content, L, d);
193
192
  return t.a === r.raw && t.b === i.raw;
194
193
  }).map((e) => e.id) : [];
195
194
  };
@@ -205,7 +204,7 @@ var me = {
205
204
  },
206
205
  mouseup: (t) => {
207
206
  let { event: n } = t;
208
- j(o.getColValuesFromPayload(t, G, K)), z({
207
+ M(a.getColValuesFromPayload(t, K, q)), B({
209
208
  caseIds: e(t),
210
209
  mouseEvent: n.event,
211
210
  position: {
@@ -216,53 +215,53 @@ var me = {
216
215
  }
217
216
  };
218
217
  }, [
219
- P,
220
- I,
221
- f,
222
- G,
218
+ F,
219
+ L,
220
+ d,
223
221
  K,
222
+ q,
224
223
  Q,
225
- p
226
- ]), $ = S(async (e) => {
227
- !A || !P || !I || (await m({
228
- [P.id]: [A.a],
229
- [I.id]: [A.b]
224
+ f
225
+ ]), $ = x(async (e) => {
226
+ !j || !F || !L || (await p({
227
+ [F.id]: [j.a],
228
+ [L.id]: [j.b]
230
229
  }), e());
231
230
  }, [
232
- P,
233
- I,
234
- A,
235
- m
236
- ]), xe = S((t) => {
237
- let n = G.find((e) => e.id === A?.a)?.name, r = K.find((e) => e.id === A?.b)?.name;
238
- return !n || !r || !A ? null : /* @__PURE__ */ O(se, {
231
+ F,
232
+ L,
233
+ j,
234
+ p
235
+ ]), xe = x((t) => {
236
+ let n = K.find((e) => e.id === j?.a)?.name, r = q.find((e) => e.id === j?.b)?.name;
237
+ return !n || !r || !j ? null : /* @__PURE__ */ k(le, {
239
238
  divider: !0,
240
239
  onClick: async () => await $(t),
241
- children: [/* @__PURE__ */ D(ae, { children: /* @__PURE__ */ D(ue, { fontSize: "small" }) }), /* @__PURE__ */ D(oe, { children: e("Filter (show only {{conceptALabel}} and {{conceptBLabel}})", {
240
+ children: [/* @__PURE__ */ O(se, { children: /* @__PURE__ */ O(D, { fontSize: "small" }) }), /* @__PURE__ */ O(ce, { children: e("Filter (show only {{conceptALabel}} and {{conceptBLabel}})", {
242
241
  conceptALabel: n,
243
242
  conceptBLabel: r
244
243
  }) })]
245
244
  });
246
245
  }, [
247
- G,
248
246
  K,
249
- A,
247
+ q,
248
+ j,
250
249
  $,
251
250
  e
252
251
  ]);
253
- return C(() => {
254
- let e = d.highlightSubject.subscribe((e) => {
255
- if (e.origin === s.HISTOGRAM) return;
256
- let t = c.current;
252
+ return S(() => {
253
+ let e = u.highlightSubject.subscribe((e) => {
254
+ if (e.origin === o.HISTOGRAM) return;
255
+ let t = s.current;
257
256
  if (!t) return;
258
257
  if (!e?.caseIds?.length) {
259
258
  t.dispatchAction({ type: "downplay" });
260
259
  return;
261
260
  }
262
261
  let n = /* @__PURE__ */ new Map();
263
- q?.forEach((t, r) => {
262
+ J?.forEach((t, r) => {
264
263
  t.xCaseIds?.forEach((t, i) => {
265
- if ((0, pe.default)(t, e.caseIds).length) {
264
+ if ((0, fe.default)(t, e.caseIds).length) {
266
265
  let e = n.get(i) ?? /* @__PURE__ */ new Set();
267
266
  e.add(r), n.set(i, e);
268
267
  }
@@ -270,7 +269,7 @@ var me = {
270
269
  }), t.dispatchAction({ type: "downplay" });
271
270
  let r = [];
272
271
  n.forEach((e, t) => {
273
- if (e.size === q?.length) {
272
+ if (e.size === J?.length) {
274
273
  r.push({ dataIndex: t });
275
274
  return;
276
275
  }
@@ -290,44 +289,44 @@ var me = {
290
289
  return () => {
291
290
  e();
292
291
  };
293
- }, [d, q]), /* @__PURE__ */ O(re, {
294
- expandDisabled: !H,
295
- title: Z,
296
- warningMessage: H && J > 0 && Y > 0 ? e("Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)", {
297
- missingCasesCount: Y,
298
- missingCasesPercentage: ge
292
+ }, [u, J]), /* @__PURE__ */ k(ie, {
293
+ expandDisabled: !U,
294
+ title: ve,
295
+ warningMessage: U && Y > 0 && X > 0 ? e("Missing cases: {{missingCasesCount}} ({{missingCasesPercentage}}%)", {
296
+ missingCasesCount: X,
297
+ missingCasesPercentage: he
299
298
  }) : void 0,
300
- widgetName: s.HISTOGRAM,
301
- children: [!H && /* @__PURE__ */ D(v, {
302
- reason: _e,
299
+ widgetName: o.HISTOGRAM,
300
+ children: [!U && /* @__PURE__ */ O(ne, {
301
+ reason: ge,
303
302
  widgetLabel: e`histogram`
304
- }), H && /* @__PURE__ */ O(de, {
303
+ }), U && /* @__PURE__ */ k(oe, {
305
304
  sx: {
306
305
  height: "100%",
307
306
  position: "relative"
308
307
  },
309
- children: [U && /* @__PURE__ */ D(g, {
310
- echarts: me,
308
+ children: [W && /* @__PURE__ */ O(te, {
309
+ echarts: pe,
311
310
  notMerge: !0,
312
311
  onChartReady: ye,
313
312
  onEvents: be,
314
- option: ve(),
315
- opts: l,
313
+ option: _e(),
314
+ opts: c,
316
315
  ref: r,
317
316
  style: {
318
317
  height: "100%",
319
318
  position: "absolute",
320
319
  width: "100%"
321
320
  }
322
- }), /* @__PURE__ */ D(te, {
323
- config: R,
321
+ }), /* @__PURE__ */ O(_, {
322
+ config: z,
324
323
  getExtraItems: xe,
325
- onMenuClose: he
324
+ onMenuClose: me
326
325
  })]
327
326
  })]
328
327
  });
329
328
  };
330
329
  //#endregion
331
- export { k as HistogramWidget };
330
+ export { A as HistogramWidget };
332
331
 
333
332
  //# sourceMappingURL=index.js.map