fix: resolve semantic documentation deep links
Module Package Release / publish-packages (push) Successful in 12s

This commit is contained in:
2026-08-21 15:54:08 +02:00
parent d6db344d81
commit 7984573c81
2 changed files with 21 additions and 12 deletions
+8 -9
View File
@@ -1083,7 +1083,7 @@ def _semantic_documentation_topics(
"route": route, "route": route,
"route_anchor": route_anchor, "route_anchor": route_anchor,
"help_contexts": [ "help_contexts": [
_semantic_help_context(entry), _semantic_help_context(entry, route_anchor=route_anchor),
], ],
}, },
) )
@@ -1091,20 +1091,19 @@ def _semantic_documentation_topics(
return tuple(topics) return tuple(topics)
def _semantic_help_context(entry: object) -> str: def _semantic_help_context(
entry: object,
*,
route_anchor: object | None,
) -> str:
values = [ values = [
"semantic", "semantic",
str(getattr(entry, "subject_module_id")), str(getattr(entry, "subject_module_id")),
str(getattr(entry, "subject_kind")), str(getattr(entry, "subject_kind")),
str(getattr(entry, "subject_id")), str(getattr(entry, "subject_id")),
] ]
if getattr(entry, "anchor_kind", None) and getattr(entry, "anchor_id", None): if route_anchor:
values.extend( values.append(str(route_anchor))
(
str(getattr(entry, "anchor_kind")),
str(getattr(entry, "anchor_id")),
)
)
return ".".join(values) return ".".join(values)
@@ -83,7 +83,17 @@ export default function SemanticDocumentationPage({ settings }: { settings: ApiS
setEntries(nextEntries); setEntries(nextEntries);
const requestedEntry = searchParams.get("entryId"); const requestedEntry = searchParams.get("entryId");
const entry = nextEntries.find((item) => item.id === requestedEntry) ?? selectedEntry; const entry = nextEntries.find((item) => item.id === requestedEntry) ?? selectedEntry;
if (entry) selectExisting(entry, nextSubjects); if (entry) {
selectExisting(entry, nextSubjects);
} else {
const requestedSubject = nextSubjects.find((item) => (
item.reference.module_id === searchParams.get("module")
&& item.reference.subject_kind === searchParams.get("subjectKind")
&& item.reference.subject_id === searchParams.get("subjectId")
&& (item.route_anchor ?? "") === (searchParams.get("routeAnchor") ?? "")
));
if (requestedSubject) selectNew(requestedSubject, nextEntries);
}
} catch (reason) { } catch (reason) {
setError(adminErrorMessage(reason)); setError(adminErrorMessage(reason));
} finally { } finally {
@@ -155,8 +165,8 @@ export default function SemanticDocumentationPage({ settings }: { settings: ApiS
setSearchParams({ entryId: entry.id, locale: entry.locale }, { replace: true }); setSearchParams({ entryId: entry.id, locale: entry.locale }, { replace: true });
} }
function selectNew(subject: SemanticSubjectDescriptor) { function selectNew(subject: SemanticSubjectDescriptor, availableEntries = entries) {
const existing = entries.find((entry) => entry.locale === locale && sameSubject(entry.subject, subject.reference)); const existing = availableEntries.find((entry) => entry.locale === locale && sameSubject(entry.subject, subject.reference));
if (existing) { if (existing) {
selectExisting(existing); selectExisting(existing);
return; return;