Skip to content

Commit b3c7f04

Browse files
DHFPROD-8097: Alert in Mapping UI when entity title does not match any definitions
1 parent e08f2a2 commit b3c7f04

File tree

4 files changed

+92
-64
lines changed

4 files changed

+92
-64
lines changed

marklogic-data-hub-central/ui/e2e/cypress/integration/curation/curate/matching.spec.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,16 @@ describe("Matching", () => {
4949
cy.resetTestUser();
5050
cy.waitForAsyncRequest();
5151
});
52+
it("Navigate to curate tab and Open Product Detail entity", () => {
53+
cy.waitUntil(() => toolbar.getCurateToolbarIcon()).click();
54+
cy.waitUntil(() => curatePage.getEntityTypePanel("ProductDetail").should("be.visible"));
55+
curatePage.toggleEntityTypeId("ProductDetail");
56+
cy.findByLabelText("mappingNoTitleDisplay").should("be.visible");
57+
curatePage.selectMatchTab("ProductDetail");
58+
cy.findByLabelText("matchingNoTitleDisplay").should("be.visible");
59+
curatePage.selectMergeTab("ProductDetail");
60+
cy.findByLabelText("mergingNoTitleDisplay").should("be.visible");
61+
});
5262
it("Navigate to curate tab and Open Customer entity", () => {
5363
cy.waitUntil(() => toolbar.getCurateToolbarIcon()).click();
5464
cy.waitUntil(() => curatePage.getEntityTypePanel("Customer").should("be.visible"));

marklogic-data-hub-central/ui/src/components/entities/entity-tiles.module.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,9 @@
2727
color: #333333;
2828
margin: 20px 10px 30px 0px;
2929
}
30+
31+
.NoMatchDefTitle {
32+
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
33+
color: #333333;
34+
margin: 20px 10px 30px 25px;
35+
}

marklogic-data-hub-central/ui/src/components/entities/entity-tiles.tsx

Lines changed: 74 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import MatchingCard from "./matching/matching-card";
1010
import CustomCard from "./custom/custom-card";
1111
import "./entity-tiles.scss";
1212
import MergingCard from "./merging/merging-card";
13+
import {MappingStepMessages} from "../../config/tooltips.config";
1314
import {CurationContext} from "../../util/curation-context";
1415

1516

@@ -342,76 +343,86 @@ const EntityTiles = (props) => {
342343
}
343344
};
344345

346+
// Check if entity name has no matching definition
347+
const titleNoDefinition = (selectedEntityName) => {
348+
let entityModels = props.entityModels;
349+
return !entityModels[selectedEntityName].model.definitions.hasOwnProperty(selectedEntityName);
350+
};
351+
345352
const outputCards = (index, entityType, mappingCardData, matchingCardData, mergingCardData, customCardData) => {
346353
let output;
347354
if (viewData[index] === "map-" + entityType) {
348-
output = <div className={styles.cardView}>
349-
<MappingCard data={mappingCardData ? sortStepsByUpdated(mappingCardData.artifacts) : []}
350-
flows={props.flows}
351-
entityTypeTitle={entityType}
352-
deleteMappingArtifact={deleteMappingArtifact}
353-
createMappingArtifact={createMappingArtifact}
354-
updateMappingArtifact={updateMappingArtifact}
355-
canReadWrite={canWriteMapping}
356-
canReadOnly={canReadMapping}
357-
openStep={openStep}
358-
entityModel={props.entityModels[entityType]}
359-
canWriteFlow={props.canWriteFlow}
360-
addStepToFlow={props.addStepToFlow}
361-
addStepToNew={props.addStepToNew}
362-
/>
363-
</div>;
355+
output = (titleNoDefinition(entityType)) ? <div className={styles.NoMatchDefTitle} aria-label={"mappingNoTitleDisplay"}>{MappingStepMessages.titleNoDefinition}</div>
356+
:<div className={styles.cardView}>
357+
<MappingCard data={mappingCardData ? sortStepsByUpdated(mappingCardData.artifacts) : []}
358+
flows={props.flows}
359+
entityTypeTitle={entityType}
360+
deleteMappingArtifact={deleteMappingArtifact}
361+
createMappingArtifact={createMappingArtifact}
362+
updateMappingArtifact={updateMappingArtifact}
363+
canReadWrite={canWriteMapping}
364+
canReadOnly={canReadMapping}
365+
openStep={openStep}
366+
entityModel={props.entityModels[entityType]}
367+
canWriteFlow={props.canWriteFlow}
368+
addStepToFlow={props.addStepToFlow}
369+
addStepToNew={props.addStepToNew}
370+
/>
371+
</div>;
364372
} else if (viewData[index] === "match-" + entityType) {
365-
output = <div className={styles.cardView}>
366-
<MatchingCard
367-
matchingStepsArray={ matchingCardData ? sortStepsByUpdated(matchingCardData.artifacts) : []}
368-
flows={props.flows}
369-
entityName={entityType}
370-
deleteMatchingArtifact={deleteMatchingArtifact}
371-
createMatchingArtifact={createMatchingArtifact}
372-
updateMatchingArtifact={updateMatchingArtifact}
373-
canReadMatchMerge={props.canReadMatchMerge}
374-
canWriteMatchMerge={props.canWriteMatchMerge}
375-
entityModel={props.entityModels[entityType]}
376-
canWriteFlow={props.canWriteFlow}
377-
addStepToFlow={props.addStepToFlow}
378-
addStepToNew={props.addStepToNew}
379-
/>
380-
</div>;
373+
output = (titleNoDefinition(entityType)) ? <div className={styles.NoMatchDefTitle} aria-label={"matchingNoTitleDisplay"}>{MappingStepMessages.titleNoDefinition}</div>
374+
: <div className={styles.cardView}>
375+
<MatchingCard
376+
matchingStepsArray={ matchingCardData ? sortStepsByUpdated(matchingCardData.artifacts) : []}
377+
flows={props.flows}
378+
entityName={entityType}
379+
deleteMatchingArtifact={deleteMatchingArtifact}
380+
createMatchingArtifact={createMatchingArtifact}
381+
updateMatchingArtifact={updateMatchingArtifact}
382+
canReadMatchMerge={props.canReadMatchMerge}
383+
canWriteMatchMerge={props.canWriteMatchMerge}
384+
entityModel={props.entityModels[entityType]}
385+
canWriteFlow={props.canWriteFlow}
386+
addStepToFlow={props.addStepToFlow}
387+
addStepToNew={props.addStepToNew}
388+
/>
389+
</div>;
381390
//TODO:- Enhance below code for merging when working on DHFPROD-4328
382391
} else if (viewData[index] === "merge-" + entityType) {
383-
output = <div className={styles.cardView}>
384-
<MergingCard
385-
mergingStepsArray={ mergingCardData ? sortStepsByUpdated(mergingCardData.artifacts) : []}
386-
flows={props.flows}
387-
entityName={entityType}
388-
entityModel={props.entityModels[entityType]}
389-
canReadMatchMerge={props.canReadMatchMerge}
390-
canWriteMatchMerge={props.canWriteMatchMerge}
391-
deleteMergingArtifact={deleteMergingArtifact}
392-
createMergingArtifact={createMergingArtifact}
393-
updateMergingArtifact={updateMergingArtifact}
394-
addStepToFlow={props.addStepToFlow}
395-
addStepToNew={props.addStepToNew}
396-
canWriteFlow={props.canWriteFlow}
397-
/>
398-
</div>;
392+
output = (titleNoDefinition(entityType)) ? <div className={styles.NoMatchDefTitle} aria-label={"mergingNoTitleDisplay"}>{MappingStepMessages.titleNoDefinition}</div>
393+
: <div className={styles.cardView}>
394+
<MergingCard
395+
mergingStepsArray={ mergingCardData ? sortStepsByUpdated(mergingCardData.artifacts) : []}
396+
flows={props.flows}
397+
entityName={entityType}
398+
entityModel={props.entityModels[entityType]}
399+
canReadMatchMerge={props.canReadMatchMerge}
400+
canWriteMatchMerge={props.canWriteMatchMerge}
401+
deleteMergingArtifact={deleteMergingArtifact}
402+
createMergingArtifact={createMergingArtifact}
403+
updateMergingArtifact={updateMergingArtifact}
404+
addStepToFlow={props.addStepToFlow}
405+
addStepToNew={props.addStepToNew}
406+
canWriteFlow={props.canWriteFlow}
407+
/>
408+
</div>;
399409
} else if (viewData[index] === "custom-" + entityType) {
400-
output = <div className={styles.cardView}>
401-
<div className={styles.customEntityTitle} aria-label={"customEntityTitle"}>You can create Custom steps either manually or using Gradle, then deploy them. Deployed Custom steps appear here. Hub Central only allows running Custom steps, not editing or deleting them.</div>
402-
<CustomCard data={ customCardData ? sortStepsByUpdated(customCardData.artifacts) : []}
403-
flows={props.flows}
404-
entityTypeTitle={entityType}
405-
entityModel={props.entityModels[entityType]}
406-
getArtifactProps={getCustomArtifactProps}
407-
updateCustomArtifact={updateCustomArtifact}
408-
canReadOnly={props.canReadCustom}
409-
canReadWrite = {props.canWriteCustom}
410-
addStepToFlow={props.addStepToFlow}
411-
addStepToNew={props.addStepToNew}
412-
canWriteFlow={props.canWriteFlow}
413-
/>
414-
</div>;
410+
output = (titleNoDefinition(entityType)) ? <div className={styles.NoMatchDefTitle} aria-label={"customNoTitleDisplay"}>{MappingStepMessages.titleNoDefinition}</div>
411+
: <div className={styles.cardView}>
412+
<div className={styles.customEntityTitle} aria-label={"customEntityTitle"}>You can create Custom steps either manually or using Gradle, then deploy them. Deployed Custom steps appear here. Hub Central only allows running Custom steps, not editing or deleting them.</div>
413+
<CustomCard data={ customCardData ? sortStepsByUpdated(customCardData.artifacts) : []}
414+
flows={props.flows}
415+
entityTypeTitle={entityType}
416+
entityModel={props.entityModels[entityType]}
417+
getArtifactProps={getCustomArtifactProps}
418+
updateCustomArtifact={updateCustomArtifact}
419+
canReadOnly={props.canReadCustom}
420+
canReadWrite = {props.canWriteCustom}
421+
addStepToFlow={props.addStepToFlow}
422+
addStepToNew={props.addStepToNew}
423+
canWriteFlow={props.canWriteFlow}
424+
/>
425+
</div>;
415426
} else {
416427
output = <div><br/>This functionality implemented yet.</div>;
417428
}

marklogic-data-hub-central/ui/src/config/tooltips.config.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,8 @@ const MappingStepPlaceholders = {
303303

304304
const MappingStepMessages = {
305305
interceptorMessage: <span>These records are the output of an interceptor configured to run before this step. See <b>Step Settings</b> for more details.</span>,
306-
interceptorError: "An error prevented the interceptor from completing successfully. The source data will be visible once you resolve the error."
306+
interceptorError: "An error prevented the interceptor from completing successfully. The source data will be visible once you resolve the error.",
307+
titleNoDefinition: <span>Unable to add steps because the definition cannot be found for this entity type. To learn more, see <a href="https://docs.marklogic.com/datahub/refs/troubleshooting.html" target="_blank">Troubleshooting</a> in the documentation.</span>
307308
};
308309

309310

0 commit comments

Comments
 (0)