datahub/datahub-web-react/src/app/embed/lookup/useGetEntityByUrl.ts
2023-05-19 18:42:46 +00:00

45 lines
1.4 KiB
TypeScript

import { useMemo } from 'react';
import { useGetSearchResultsForMultipleQuery } from '../../../graphql/search.generated';
import { FilterOperator } from '../../../types.generated';
import { UnionType } from '../../search/utils/constants';
import { generateOrFilters } from '../../search/utils/generateOrFilters';
const URL_FIELDS = ['externalUrl', 'chartUrl', 'dashboardUrl'] as const;
const useGetEntityByUrl = (externalUrl: string) => {
const { data, loading, error } = useGetSearchResultsForMultipleQuery({
variables: {
input: {
query: '*',
start: 0,
count: 2,
orFilters: generateOrFilters(
UnionType.OR,
URL_FIELDS.map((field) => ({
field,
values: [externalUrl],
condition: FilterOperator.Equal,
})),
),
},
},
});
const entities = data?.searchAcrossEntities?.searchResults.map((result) => result.entity) ?? [];
const count = entities.length;
const entity = count === 1 ? entities[0] : null;
return useMemo(
() =>
({
count,
entity,
loading,
error,
} as const),
[count, entity, error, loading],
);
};
export default useGetEntityByUrl;