diff --git a/public/app/features/correlations/CorrelationsPage.test.tsx b/public/app/features/correlations/CorrelationsPage.test.tsx index f8938a14a94..b9632a3d96f 100644 --- a/public/app/features/correlations/CorrelationsPage.test.tsx +++ b/public/app/features/correlations/CorrelationsPage.test.tsx @@ -33,6 +33,7 @@ import { MockDataSourceSrv, } from './mocks/useCorrelations.mocks'; import { Correlation, CreateCorrelationParams, OmitUnion } from './types'; +import { useCorrelations } from './useCorrelations'; // Set app events up, otherwise plugin modules will fail to load setAppEvents(appEvents); @@ -110,9 +111,17 @@ const renderWithContext = async ( setDataSourceSrv(dsServer); + const { remove, get } = useCorrelations(); + const renderResult = render( - + , { queries: { diff --git a/public/app/features/correlations/CorrelationsPage.tsx b/public/app/features/correlations/CorrelationsPage.tsx index 459f3279053..4862f942b2c 100644 --- a/public/app/features/correlations/CorrelationsPage.tsx +++ b/public/app/features/correlations/CorrelationsPage.tsx @@ -4,7 +4,7 @@ import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { DataSourceInstanceSettings, GrafanaTheme2 } from '@grafana/data'; import { Trans, t } from '@grafana/i18n'; -import { CorrelationData, isFetchError, reportInteraction } from '@grafana/runtime'; +import { CorrelationData, CorrelationsData, isFetchError, reportInteraction } from '@grafana/runtime'; import { Badge, Button, @@ -27,8 +27,17 @@ import { AccessControlAction } from 'app/types/accessControl'; import { AddCorrelationForm } from './Forms/AddCorrelationForm'; import { EditCorrelationForm } from './Forms/EditCorrelationForm'; import { EmptyCorrelationsCTA } from './components/EmptyCorrelationsCTA'; -import type { Correlation, RemoveCorrelationParams } from './types'; -import { useCorrelations } from './useCorrelations'; +import type { Correlation, GetCorrelationsParams, RemoveCorrelationParams } from './types'; + +type CorrelationsPageProps = { + fetchCorrelations: (params: GetCorrelationsParams) => Promise; + correlations?: CorrelationsData; + isLoading: boolean; + removeFn?: (params: RemoveCorrelationParams) => Promise<{ + message: string; + }>; + error?: Error; +}; const sortDatasource: SortByFn = (a, b, column) => a.values[column].name.localeCompare(b.values[column].name); @@ -40,7 +49,8 @@ const loaderWrapper = css({ justifyContent: 'center', }); -export default function CorrelationsPage() { +export default function CorrelationsPage(props: CorrelationsPageProps) { + const { fetchCorrelations, correlations, isLoading, error, removeFn } = props; const navModel = useNavModel('correlations'); const [isAdding, setIsAddingValue] = useState(false); const page = useRef(1); @@ -52,11 +62,6 @@ export default function CorrelationsPage() { } }; - const { - remove, - get: { execute: fetchCorrelations, ...get }, - } = useCorrelations(); - const canWriteCorrelations = contextSrv.hasPermission(AccessControlAction.DataSourcesWrite); const handleAdded = useCallback(() => { @@ -72,7 +77,7 @@ export default function CorrelationsPage() { const handleDelete = useCallback( async (params: RemoveCorrelationParams, isLastRow: boolean) => { - await remove.execute(params); + await removeFn(params); reportInteraction('grafana_correlations_deleted'); if (isLastRow) { @@ -80,7 +85,7 @@ export default function CorrelationsPage() { } fetchCorrelations({ page: page.current }); }, - [remove, fetchCorrelations] + [removeFn, fetchCorrelations] ); useEffect(() => { @@ -145,8 +150,8 @@ export default function CorrelationsPage() { [RowActions, canWriteCorrelations] ); - const data = useMemo(() => get.value, [get.value]); - const showEmptyListCTA = data?.correlations.length === 0 && !isAdding && !get.error; + const data = useMemo(() => correlations, [correlations]); + const showEmptyListCTA = data?.correlations.length === 0 && !isAdding && !error; const addButton = canWriteCorrelations && data?.correlations?.length !== 0 && data !== undefined && !isAdding && (