@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.
- package/dist/_chunks/AddCasesToEventDialog.js +98 -98
- package/dist/_chunks/AddCasesToEventDialog.js.map +1 -1
- package/dist/_chunks/CaseContentForm.js +10 -10
- package/dist/_chunks/CaseInfoDialog.js +242 -241
- package/dist/_chunks/CaseInfoDialog.js.map +1 -1
- package/dist/_chunks/CaseSetInfoDialog.js +224 -224
- package/dist/_chunks/CaseSetInfoDialog.js.map +1 -1
- package/dist/_chunks/Dashboard.js +549 -550
- package/dist/_chunks/Dashboard.js.map +1 -1
- package/dist/_chunks/FindSimilarCasesDialog.js +76 -76
- package/dist/_chunks/FindSimilarCasesDialog.js.map +1 -1
- package/dist/_chunks/LegendaItem.js.map +1 -1
- package/dist/_chunks/LineListWidget.js +138 -136
- package/dist/_chunks/LineListWidget.js.map +1 -1
- package/dist/_chunks/PanelSeparator.js +3 -3
- package/dist/_chunks/PanelSeparator.js.map +1 -1
- package/dist/_chunks/Upload.js +318 -318
- package/dist/_chunks/Upload.js.map +1 -1
- package/dist/_chunks/{chunk-BV7QT456.js → chunk-OB3PAWPO.js} +3 -3
- package/dist/_chunks/chunk-OB3PAWPO.js.map +1 -0
- package/dist/_chunks/cloneDeep.js +1 -1
- package/dist/_chunks/cloneDeep.js.map +1 -1
- package/dist/_chunks/esm.js +3 -3
- package/dist/_chunks/esm.js.map +1 -1
- package/dist/_chunks/index.module.js +1 -1
- package/dist/_chunks/index.module.js.map +1 -1
- package/dist/_chunks/react.js +1 -1
- package/dist/_chunks/react.js.map +1 -1
- package/dist/_chunks/shallow.js +2 -2
- package/dist/_chunks/shallow.js.map +1 -1
- package/dist/_chunks/vanilla.js +1 -1
- package/dist/_chunks/vanilla.js.map +1 -1
- package/dist/_chunks/yup.js +24 -24
- package/dist/_chunks/yup.js.map +1 -1
- package/dist/components/form/fields/ArrangementEditor/index.js +30 -30
- package/dist/components/ui/CreateEventDialog/index.js +40 -40
- package/dist/components/ui/CreateEventDialog/index.js.map +1 -1
- package/dist/components/ui/HistogramWidget/index.js +161 -162
- package/dist/components/ui/HistogramWidget/index.js.map +1 -1
- package/dist/components/ui/SequenceDownloadDialog/index.js +22 -22
- package/dist/locale/en.json +6 -0
- package/dist/locale/nl.json +7 -1
- package/dist/pages/CasesDetailPage/index.js +1 -1
- package/dist/pages/ColsAdminPage/index.js +1 -1
- package/dist/pages/ConceptsAdminPage/index.js +1 -1
- package/dist/pages/DimsAdminPage/index.js +1 -1
- package/dist/pages/EventsDetailPage/index.js +1 -1
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js +120 -86
- package/dist/pages/OrganizationAccessCasePoliciesAdminPage/index.js.map +1 -1
- package/dist/pages/RefColsAdminPage/index.js +1 -1
- package/dist/pages/RegionSetShapesAdminPage/index.js +1 -1
- package/dist/pages/RegionsAdminPage/index.js +1 -1
- package/dist/pages/UserEffectiveRightsAdminPage/index.js +1 -1
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js +59 -59
- package/dist/pages/UserEffectiveRightsTesterAdminPage/index.js.map +1 -1
- package/dist/routes/index.js +93 -91
- package/dist/routes/index.js.map +1 -1
- package/dist/setup/setup.js +2 -3
- package/dist/setup/setup.js.map +1 -1
- package/package.json +73 -72
- package/dist/_chunks/chunk-BV7QT456.js.map +0 -1
- package/dist/_chunks/index.esm.js +0 -1465
- 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
|
|
7
|
-
import { DASHBOARD_COMPONENT_NAME as
|
|
8
|
-
import { a as
|
|
9
|
-
import { t as
|
|
10
|
-
import { t as
|
|
11
|
-
import { ContextMenu as
|
|
12
|
-
import { WidgetUnavailable as
|
|
13
|
-
import { EventBusService as
|
|
14
|
-
import { t as
|
|
15
|
-
import { n as
|
|
16
|
-
import { t as
|
|
17
|
-
import { ConfigService as
|
|
18
|
-
import { ListItemIcon as
|
|
19
|
-
import { use as
|
|
20
|
-
import { useTranslation as
|
|
21
|
-
import
|
|
22
|
-
import { jsx as
|
|
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
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
var de = /* @__PURE__ */ e(r(), 1), fe = /* @__PURE__ */ e(t(), 1);
|
|
25
|
+
l([
|
|
26
|
+
d,
|
|
27
|
+
s,
|
|
28
28
|
c,
|
|
29
|
-
|
|
30
|
-
m
|
|
29
|
+
p
|
|
31
30
|
]);
|
|
32
|
-
var
|
|
33
|
-
dispose:
|
|
34
|
-
getInstanceByDom:
|
|
35
|
-
init:
|
|
36
|
-
},
|
|
37
|
-
let { t: e } =
|
|
38
|
-
|
|
39
|
-
}, []),
|
|
40
|
-
|
|
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
|
-
}, [
|
|
45
|
-
|
|
46
|
-
if (
|
|
47
|
-
let { newColA: e, newColB: t } =
|
|
48
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
h
|
|
54
|
+
L,
|
|
55
|
+
d,
|
|
56
|
+
H,
|
|
57
|
+
m
|
|
59
58
|
]);
|
|
60
|
-
let [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
]),
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
73
|
+
P.length,
|
|
74
|
+
H,
|
|
75
|
+
Y,
|
|
75
76
|
V,
|
|
76
|
-
|
|
77
|
-
B,
|
|
78
|
-
U,
|
|
77
|
+
W,
|
|
79
78
|
e
|
|
80
|
-
]),
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
]),
|
|
85
|
-
aCol:
|
|
86
|
-
bCol:
|
|
87
|
-
colors:
|
|
88
|
-
conceptsA:
|
|
89
|
-
conceptsB:
|
|
90
|
-
series:
|
|
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
|
-
|
|
95
|
-
|
|
93
|
+
W,
|
|
94
|
+
Z,
|
|
96
95
|
t,
|
|
97
|
-
K,
|
|
98
96
|
q,
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
J,
|
|
98
|
+
K,
|
|
99
|
+
F,
|
|
100
|
+
L,
|
|
102
101
|
e
|
|
103
|
-
]),
|
|
102
|
+
]), ve = C(() => {
|
|
104
103
|
let t;
|
|
105
|
-
if (t =
|
|
106
|
-
aColLabel:
|
|
107
|
-
bColLabel:
|
|
108
|
-
}) : e`Histogram`, !
|
|
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: !
|
|
109
|
+
disabled: !U || P.length < 2,
|
|
111
110
|
items: [],
|
|
112
111
|
label: t
|
|
113
112
|
};
|
|
114
|
-
return
|
|
113
|
+
return P.forEach((t) => {
|
|
115
114
|
let r = {
|
|
116
|
-
active:
|
|
115
|
+
active: F?.id === t.id || void 0,
|
|
117
116
|
items: [],
|
|
118
117
|
label: e("Grouping: {{label}}", { label: t.label })
|
|
119
118
|
};
|
|
120
|
-
|
|
119
|
+
P.forEach((n) => {
|
|
121
120
|
t.id !== n.id && r.items.push({
|
|
122
|
-
active: (
|
|
121
|
+
active: (F?.id === t.id || void 0) && (L?.id === n.id || void 0),
|
|
123
122
|
callback: () => {
|
|
124
|
-
|
|
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
|
-
|
|
133
|
-
H,
|
|
134
|
-
N,
|
|
135
|
-
V?.newColA,
|
|
136
|
-
V?.newColB,
|
|
134
|
+
H?.newColA,
|
|
135
|
+
H?.newColB,
|
|
137
136
|
e,
|
|
138
|
-
|
|
139
|
-
]), ye =
|
|
140
|
-
if (
|
|
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:
|
|
144
|
-
bColLabel:
|
|
142
|
+
aColLabel: F?.label,
|
|
143
|
+
bColLabel: L?.label
|
|
145
144
|
})), n?.setAttribute("role", "img");
|
|
146
145
|
}, [
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
F,
|
|
147
|
+
L,
|
|
149
148
|
e
|
|
150
149
|
]);
|
|
151
|
-
|
|
150
|
+
S(() => {
|
|
152
151
|
let t = () => {
|
|
153
|
-
|
|
154
|
-
disabled: !
|
|
152
|
+
v.getInstance().emit("onDownloadOptionsChanged", {
|
|
153
|
+
disabled: !U,
|
|
155
154
|
items: [{
|
|
156
|
-
callback: () =>
|
|
157
|
-
disabled: !
|
|
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: () =>
|
|
161
|
-
disabled: !
|
|
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:
|
|
163
|
+
zone: o.HISTOGRAM,
|
|
165
164
|
zoneLabel: e`Histogram`
|
|
166
165
|
});
|
|
167
166
|
};
|
|
168
167
|
t();
|
|
169
|
-
let n =
|
|
168
|
+
let n = v.getInstance();
|
|
170
169
|
return n.addEventListener("onDownloadOptionsRequested", t), () => {
|
|
171
170
|
n.emit("onDownloadOptionsChanged", {
|
|
172
171
|
items: null,
|
|
173
|
-
zone:
|
|
172
|
+
zone: o.HISTOGRAM,
|
|
174
173
|
zoneLabel: e`Histogram`
|
|
175
174
|
}), n.removeEventListener("onDownloadOptionsRequested", t);
|
|
176
175
|
};
|
|
177
176
|
}, [
|
|
178
|
-
|
|
177
|
+
d,
|
|
178
|
+
W,
|
|
179
179
|
U,
|
|
180
|
-
H,
|
|
181
180
|
e
|
|
182
181
|
]);
|
|
183
|
-
let Q =
|
|
184
|
-
|
|
182
|
+
let Q = x((e) => {
|
|
183
|
+
u.highlight({
|
|
185
184
|
caseIds: e,
|
|
186
|
-
origin:
|
|
185
|
+
origin: o.HISTOGRAM
|
|
187
186
|
});
|
|
188
|
-
}, [
|
|
187
|
+
}, [u]), be = C(() => {
|
|
189
188
|
let e = (e) => {
|
|
190
|
-
let t =
|
|
191
|
-
return t ?
|
|
192
|
-
let r = n.getRowValue(e.content,
|
|
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
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
G,
|
|
218
|
+
F,
|
|
219
|
+
L,
|
|
220
|
+
d,
|
|
223
221
|
K,
|
|
222
|
+
q,
|
|
224
223
|
Q,
|
|
225
|
-
|
|
226
|
-
]), $ =
|
|
227
|
-
!
|
|
228
|
-
[
|
|
229
|
-
[
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
]), xe =
|
|
237
|
-
let n =
|
|
238
|
-
return !n || !r || !
|
|
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__ */
|
|
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
|
-
|
|
247
|
+
q,
|
|
248
|
+
j,
|
|
250
249
|
$,
|
|
251
250
|
e
|
|
252
251
|
]);
|
|
253
|
-
return
|
|
254
|
-
let e =
|
|
255
|
-
if (e.origin ===
|
|
256
|
-
let t =
|
|
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
|
-
|
|
262
|
+
J?.forEach((t, r) => {
|
|
264
263
|
t.xCaseIds?.forEach((t, i) => {
|
|
265
|
-
if ((0,
|
|
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 ===
|
|
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
|
-
}, [
|
|
294
|
-
expandDisabled: !
|
|
295
|
-
title:
|
|
296
|
-
warningMessage:
|
|
297
|
-
missingCasesCount:
|
|
298
|
-
missingCasesPercentage:
|
|
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:
|
|
301
|
-
children: [!
|
|
302
|
-
reason:
|
|
299
|
+
widgetName: o.HISTOGRAM,
|
|
300
|
+
children: [!U && /* @__PURE__ */ O(ne, {
|
|
301
|
+
reason: ge,
|
|
303
302
|
widgetLabel: e`histogram`
|
|
304
|
-
}),
|
|
303
|
+
}), U && /* @__PURE__ */ k(oe, {
|
|
305
304
|
sx: {
|
|
306
305
|
height: "100%",
|
|
307
306
|
position: "relative"
|
|
308
307
|
},
|
|
309
|
-
children: [
|
|
310
|
-
echarts:
|
|
308
|
+
children: [W && /* @__PURE__ */ O(te, {
|
|
309
|
+
echarts: pe,
|
|
311
310
|
notMerge: !0,
|
|
312
311
|
onChartReady: ye,
|
|
313
312
|
onEvents: be,
|
|
314
|
-
option:
|
|
315
|
-
opts:
|
|
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__ */
|
|
323
|
-
config:
|
|
321
|
+
}), /* @__PURE__ */ O(_, {
|
|
322
|
+
config: z,
|
|
324
323
|
getExtraItems: xe,
|
|
325
|
-
onMenuClose:
|
|
324
|
+
onMenuClose: me
|
|
326
325
|
})]
|
|
327
326
|
})]
|
|
328
327
|
});
|
|
329
328
|
};
|
|
330
329
|
//#endregion
|
|
331
|
-
export {
|
|
330
|
+
export { A as HistogramWidget };
|
|
332
331
|
|
|
333
332
|
//# sourceMappingURL=index.js.map
|