2026-10-24 23:19:17 +00:00
|
|
|
import { BrowserLink } from "@metis/core/client";
|
|
|
|
|
import { useQuery } from "@tanstack/react-query";
|
|
|
|
|
import { useTranslation } from "react-i18next";
|
|
|
|
|
|
2026-10-25 19:39:06 +00:00
|
|
|
import { useGlobalSoftwareCatalog } from "../global-software-catalog-context";
|
2026-10-24 23:19:17 +00:00
|
|
|
|
|
|
|
|
import { GlobalApplicationFeedback } from "./global-application-feedback";
|
|
|
|
|
|
|
|
|
|
export function GlobalApplicationCoincidences({ name }: { name: string }) {
|
2026-10-25 19:39:06 +00:00
|
|
|
const {
|
|
|
|
|
api: globalApplicationsApi,
|
|
|
|
|
keys: globalApplicationKeys,
|
|
|
|
|
text,
|
|
|
|
|
} = useGlobalSoftwareCatalog();
|
2026-10-24 23:19:17 +00:00
|
|
|
const { t } = useTranslation("resources");
|
|
|
|
|
const queryData = { search: name.trim(), sort: "name", direction: "asc", pageSize: 10 } as const;
|
|
|
|
|
const query = useQuery({
|
|
|
|
|
queryKey: globalApplicationKeys.list(queryData),
|
|
|
|
|
queryFn: () => globalApplicationsApi.list(queryData),
|
|
|
|
|
enabled: queryData.search.length > 0,
|
|
|
|
|
retry: false,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="space-y-2 text-sm">
|
|
|
|
|
<GlobalApplicationFeedback error={query.error} />
|
2026-10-25 19:39:06 +00:00
|
|
|
{query.isFetching && <p role="status">{t(`${text}.duplicateLoading`)}</p>}
|
2026-10-24 23:19:17 +00:00
|
|
|
{query.data && query.data.items.length > 0 && (
|
|
|
|
|
<>
|
2026-10-25 19:39:06 +00:00
|
|
|
<p>{t(`${text}.duplicates`)}</p>
|
2026-10-24 23:19:17 +00:00
|
|
|
<ul className="list-inside list-disc">
|
|
|
|
|
{query.data.items.map((item) => (
|
|
|
|
|
<li key={item.id}>
|
|
|
|
|
<BrowserLink
|
|
|
|
|
href={`/catalogs/global-applications/${item.id}`}
|
|
|
|
|
rel="noopener noreferrer"
|
|
|
|
|
target="_blank"
|
|
|
|
|
>
|
|
|
|
|
{item.name} · {item.provider ?? "—"}
|
|
|
|
|
</BrowserLink>
|
|
|
|
|
</li>
|
|
|
|
|
))}
|
|
|
|
|
</ul>
|
|
|
|
|
</>
|
|
|
|
|
)}
|
|
|
|
|
<BrowserLink
|
|
|
|
|
href={`/catalogs/global-applications?q=${encodeURIComponent(queryData.search)}`}
|
|
|
|
|
rel="noopener noreferrer"
|
|
|
|
|
target="_blank"
|
|
|
|
|
>
|
2026-10-25 19:39:06 +00:00
|
|
|
{t(`${text}.reviewCatalog`)}
|
2026-10-24 23:19:17 +00:00
|
|
|
</BrowserLink>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|