fix: resolve semantic documentation deep links
Module Package Release / publish-packages (push) Successful in 12s
Module Package Release / publish-packages (push) Successful in 12s
This commit is contained in:
@@ -1083,7 +1083,7 @@ def _semantic_documentation_topics(
|
||||
"route": route,
|
||||
"route_anchor": route_anchor,
|
||||
"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)
|
||||
|
||||
|
||||
def _semantic_help_context(entry: object) -> str:
|
||||
def _semantic_help_context(
|
||||
entry: object,
|
||||
*,
|
||||
route_anchor: object | None,
|
||||
) -> str:
|
||||
values = [
|
||||
"semantic",
|
||||
str(getattr(entry, "subject_module_id")),
|
||||
str(getattr(entry, "subject_kind")),
|
||||
str(getattr(entry, "subject_id")),
|
||||
]
|
||||
if getattr(entry, "anchor_kind", None) and getattr(entry, "anchor_id", None):
|
||||
values.extend(
|
||||
(
|
||||
str(getattr(entry, "anchor_kind")),
|
||||
str(getattr(entry, "anchor_id")),
|
||||
)
|
||||
)
|
||||
if route_anchor:
|
||||
values.append(str(route_anchor))
|
||||
return ".".join(values)
|
||||
|
||||
|
||||
|
||||
@@ -83,7 +83,17 @@ export default function SemanticDocumentationPage({ settings }: { settings: ApiS
|
||||
setEntries(nextEntries);
|
||||
const requestedEntry = searchParams.get("entryId");
|
||||
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) {
|
||||
setError(adminErrorMessage(reason));
|
||||
} finally {
|
||||
@@ -155,8 +165,8 @@ export default function SemanticDocumentationPage({ settings }: { settings: ApiS
|
||||
setSearchParams({ entryId: entry.id, locale: entry.locale }, { replace: true });
|
||||
}
|
||||
|
||||
function selectNew(subject: SemanticSubjectDescriptor) {
|
||||
const existing = entries.find((entry) => entry.locale === locale && sameSubject(entry.subject, subject.reference));
|
||||
function selectNew(subject: SemanticSubjectDescriptor, availableEntries = entries) {
|
||||
const existing = availableEntries.find((entry) => entry.locale === locale && sameSubject(entry.subject, subject.reference));
|
||||
if (existing) {
|
||||
selectExisting(existing);
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user