Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FIX: Deep link fails if anchor content contains nested element #1645

Merged
merged 4 commits into from Jun 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
39 changes: 23 additions & 16 deletions frontend-html/src/model/actions/Global/onRootElementClick.ts
Expand Up @@ -20,27 +20,34 @@ along with ORIGAM. If not, see <http://www.gnu.org/licenses/>.
import { flow } from "mobx";
import { handleError } from "../handleError";
import { executeWeblink } from "./executeWeblink";
import React from "react";

export function onRootElementClick(ctx: any) {
return flow(function*onRootElementClick(event: any): Generator {
return flow(function*onRootElementClick(event: React.MouseEvent<HTMLElement>): Generator {
try {
const {target} = event;
const {nodeName} = target;

if (`${nodeName}`.toLowerCase() === "a") {
const href = target.getAttribute("href");
if (href && `${href}`.startsWith("web+origam-link://")) {
const actionUrl = href.replace("web+origam-link://", "");
event.preventDefault();
const urlParts = actionUrl.split("?");
const urlPath = urlParts[0];
const urlParams = new URLSearchParams(urlParts[1] || "");
const urlQuery: {[key: string]: any} = {};
for (let key of urlParams.keys()){
urlQuery[key] = urlParams.get(key);
let potentialLinkNode = event.target as any;
while(potentialLinkNode)
{
const {nodeName} = potentialLinkNode;
if(!nodeName){
return;
}
if (`${nodeName}`.toLowerCase() === "a") {
const href = potentialLinkNode.getAttribute("href");
if (href && `${href}`.startsWith("web+origam-link://")) {
const actionUrl = href.replace("web+origam-link://", "");
event.preventDefault();
const urlParts = actionUrl.split("?");
const urlPath = urlParts[0];
const urlParams = new URLSearchParams(urlParts[1] || "");
const urlQuery: {[key: string]: any} = {};
for (let key of urlParams.keys()){
urlQuery[key] = urlParams.get(key);
}
return yield* executeWeblink(ctx)(urlPath, urlQuery);
}
yield*executeWeblink(ctx)(urlPath, urlQuery);
}
potentialLinkNode = potentialLinkNode.parentElement;
}
} catch (e) {
yield*handleError(ctx)(e);
Expand Down
@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<x:file
xmlns:x="http://schemas.origam.com/model-persistence/1.0.0"
xmlns:adl="http://schemas.origam.com/Origam.Schema.LookupModel.AbstractDataLookup/6.0.0"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:dlmb="http://schemas.origam.com/Origam.Schema.LookupModel.DataLookupMenuBinding/6.0.0"
xmlns:dsdl="http://schemas.origam.com/Origam.Schema.LookupModel.DataServiceDataLookup/6.0.0">
<dsdl:DataLookup
asi:abstract="false"
adl:alwaysAllowReturnToForm="false"
x:id="53c6ce34-22a8-4ff4-a9af-8067b135422d"
adl:isFilteredServerside="true"
adl:isTree="false"
adl:listDataStructure="Widgets/DataStructure/Widgets/LookupAllDataTypes.origam#LookupAllDataTypes/71ef0806-6153-46fb-8e36-6f4c5d70cccb"
adl:listDisplayMember="Text1"
adl:listMethod="Widgets/DataStructure/Widgets/LookupAllDataTypes.origam#LookupAllDataTypes/GetId/b7403f66-240b-4ec9-b4b0-ae11e268fda5"
adl:listValueMember="Id"
asi:name="AllDataTypes_LinkId"
adl:searchByFirstColumnOnly="false"
adl:serversideFilterParameter="AllDataTypes_parId"
adl:suppressEmptyColumns="false"
adl:valueDataStructure="Widgets/DataStructure/Widgets/LookupAllDataTypes.origam#LookupAllDataTypes/71ef0806-6153-46fb-8e36-6f4c5d70cccb"
adl:valueDisplayMember="Text1"
adl:valueMethod="Widgets/DataStructure/Widgets/LookupAllDataTypes.origam#LookupAllDataTypes/GetId/b7403f66-240b-4ec9-b4b0-ae11e268fda5"
adl:valueValueMember="Id">
<dlmb:DataLookupMenuBinding
asi:abstract="false"
x:id="812f044f-1641-431c-a72e-6e797f5cd689"
dlmb:level="100"
dlmb:menuItem="Widgets/Menu/Menu.origam#Menu/Widgets/AllDataTypes/423a08e5-b1cf-4341-a342-d9b57667d1b9"
asi:name="MenuBinding"
dlmb:roles="*" />
</dsdl:DataLookup>
</x:file>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<x:file
xmlns:x="http://schemas.origam.com/model-persistence/1.0.0"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:dlc="http://schemas.origam.com/Origam.Schema.MenuModel.DeepLinkCategory/1.0.1">
<dlc:DeepLinkCategory
asi:abstract="false"
x:id="f282855d-0ad5-49b3-94e3-5d18ec3fa300"
dlc:label="AllDataTypesLink"
dlc:lookup="Widgets/DataLookup/Widgets/AllDataTypes_LinkId.origam#AllDataTypes_LinkId/53c6ce34-22a8-4ff4-a9af-8067b135422d"
asi:name="AllDataTypesLink"
dlc:roles="*" />
</x:file>
13 changes: 13 additions & 0 deletions model-tests/model/Widgets/Menu/Menu.origam
Expand Up @@ -4,7 +4,20 @@
xmlns:ami="http://schemas.origam.com/Origam.Schema.MenuModel.AbstractMenuItem/6.0.2"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:frmi="http://schemas.origam.com/Origam.Schema.MenuModel.FormReferenceMenuItem/6.0.0"
xmlns:rrmi="http://schemas.origam.com/Origam.Schema.MenuModel.ReportReferenceMenuItem/6.0.0"
xmlns:s="http://schemas.origam.com/Origam.Schema.MenuModel.Submenu/6.0.0">
<rrmi:MenuItem
asi:abstract="false"
ami:alwaysOpenNew="false"
ami:displayName="LinkReport"
rrmi:exportFormatType="HTML"
x:id="3dc51183-a78e-4663-bd41-97b230de7b7d"
asi:name="LinkReport"
ami:openExclusively="false"
ami:order="100"
x:parentId="147775f5-451d-4efd-8634-7f27a2cf50a6"
rrmi:report="Widgets/Report/LinkReport.origam#LinkReport/1802bcc1-dff2-420c-b26a-af6041702622"
ami:roles="*" />
<s:MenuItem
asi:abstract="false"
ami:displayName="Widgets"
Expand Down
20 changes: 20 additions & 0 deletions model-tests/model/Widgets/Page/LinkReportAPI.origam
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<x:file
xmlns:x="http://schemas.origam.com/model-persistence/1.0.0"
xmlns:ap="http://schemas.origam.com/Origam.Schema.GuiModel.AbstractPage/6.0.0"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:xdp="http://schemas.origam.com/Origam.Schema.GuiModel.XsltDataPage/6.0.0">
<xdp:Page
asi:abstract="false"
ap:allowDelete="false"
ap:allowPut="false"
xdp:disableConstraintForInputValidation="false"
x:id="364acf08-c352-447f-b419-100de0f96795"
ap:mimeType="text/html"
asi:name="LinkReportAPI"
xdp:omitJsonRootElement="false"
xdp:processGetReadRowLevelRules="false"
ap:roles="*"
xdp:transformation="Widgets/Transformation/Widgets/LinkReportHtml.origam#LinkReportHtml/c286449e-09ed-42d1-9a25-45937026bc05"
ap:url="api/public/link-report" />
</x:file>
15 changes: 15 additions & 0 deletions model-tests/model/Widgets/Report/LinkReport.origam
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<x:file
xmlns:x="http://schemas.origam.com/model-persistence/1.0.0"
xmlns:ar="http://schemas.origam.com/Origam.Schema.GuiModel.AbstractReport/6.0.0"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:wr1="http://schemas.origam.com/Origam.Schema.GuiModel.WebReport/6.0.1">
<wr1:Report
asi:abstract="false"
wr1:forceExternalUrl="false"
x:id="1802bcc1-dff2-420c-b26a-af6041702622"
wr1:isUrlEscaped="false"
asi:name="LinkReport"
wr1:openMethod="OrigamTab"
wr1:url="/api/public/link-report" />
</x:file>
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<x:file
xmlns:x="http://schemas.origam.com/model-persistence/1.0.0"
xmlns:asi="http://schemas.origam.com/Origam.Schema.AbstractSchemaItem/6.0.0"
xmlns:at="http://schemas.origam.com/Origam.Schema.EntityModel.AbstractTransformation/6.0.0"
xmlns:xt="http://schemas.origam.com/Origam.Schema.EntityModel.XslTransformation/6.0.0">
<xt:Transformation
asi:abstract="false"
xt:engineType="XslCompiledTransform"
x:id="c286449e-09ed-42d1-9a25-45937026bc05"
asi:name="LinkReportHtml"
xt:text="-***-ExternalFile:LinkReportHtml.origam___text___c286449e-09ed-42d1-9a25-45937026bc05.xslt" />
</x:file>
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:AS="http://schema.advantages.cz/AsapFunctions"
xmlns:date="http://exslt.org/dates-and-times" exclude-result-prefixes="AS date">

<xsl:template match="ROOT">
<div>
<a href="web+origam-link://objectTag?categoryId=AllDataTypesLink&amp;objectId=0bd6ae5a-b31c-4b2f-8af5-bdd4ab7a984e">
<div>
TEST
</div>
</a>
</div>
</xsl:template>

</xsl:stylesheet>