Skip to content

Commit 45b5f83

Browse files
authored
Merge pull request #17 from contentstack/bugs/asset-reference
Asset reference resolve without include embed
2 parents 4949935 + af3f507 commit 45b5f83

File tree

6 files changed

+158
-23
lines changed

6 files changed

+158
-23
lines changed

.github/workflows/npm-publish.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# This workflow will publish a package to GitHub Packages when a release is created
2+
# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages
3+
4+
name: Publish package to NPM repository
5+
on:
6+
release:
7+
types: [created]
8+
9+
jobs:
10+
publish-npm:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
- uses: actions/setup-node@v3
15+
with:
16+
node-version: '12.x'
17+
registry-url: 'https://registry.npmjs.org'
18+
- run: npm ci
19+
- run: npm publish
20+
env:
21+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
22+
publish-git:
23+
runs-on: ubuntu-latest
24+
steps:
25+
- uses: actions/checkout@v3
26+
- uses: actions/setup-node@v3
27+
with:
28+
node-version: '12.x'
29+
registry-url: 'https://registry.npmjs.org'
30+
scope: '@contentstack'
31+
- run: npm ci
32+
- run: npm publish
33+
env:
34+
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

__test__/reference-to-html.test.ts

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import { findEmbeddedItems } from '../src/helper/find-embeded-object'
44
import { Metadata } from '../src/Models/metadata-model'
55
import Node from '../src/nodes/node'
66
import NodeType from '../src/nodes/node-type'
7+
import { Next, RenderOption } from '../src/options'
78
import { defaultOptions } from '../src/options/default-options'
89
import { assetReferenceJson, embeddedAssetJsonEntry, embeddedEntryJsonEntry, entryReferenceBlockJson, entryReferenceInlineJson, entryReferenceLinkJson } from './mock/json-element-mock'
910
import { embeddedAssetWithRenderOption, embeddedObjectDefaultRender, embeddedObjectWithRenderOption } from './mock/render-options'
1011
describe('Reference Node To HTML', () => {
1112
it('Should return blank for undefined entry', done => {
12-
const node = assetReferenceJson.children[0] as undefined as Node
13+
const node = assetReferenceJson.children[0] as unknown as Node
1314
const renderOption = {}
1415

1516
const resultHTML = referenceToHTML(node, renderOption)
@@ -47,7 +48,7 @@ describe('Reference Node To HTML', () => {
4748
})
4849

4950
it('Should return HTML for embedded asset', done => {
50-
const node = assetReferenceJson.children[0] as undefined as Node
51+
const node = assetReferenceJson.children[0] as unknown as Node
5152
const renderOption = {}
5253

5354
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
@@ -59,7 +60,7 @@ describe('Reference Node To HTML', () => {
5960
})
6061

6162
it('Should return HTML for embedded block entry', done => {
62-
const node = entryReferenceBlockJson.children[0] as undefined as Node
63+
const node = entryReferenceBlockJson.children[0] as unknown as Node
6364
const renderOption = {}
6465

6566
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
@@ -70,7 +71,7 @@ describe('Reference Node To HTML', () => {
7071
})
7172

7273
it('Should return HTML for embedded link entry', done => {
73-
const node = entryReferenceLinkJson.children[0] as undefined as Node
74+
const node = entryReferenceLinkJson.children[0] as unknown as Node
7475
const renderOption = {}
7576

7677
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
@@ -81,7 +82,7 @@ describe('Reference Node To HTML', () => {
8182
})
8283

8384
it('Should return HTML for embedded inline entry', done => {
84-
const node = entryReferenceInlineJson.children[0] as undefined as Node
85+
const node = entryReferenceInlineJson.children[0] as unknown as Node
8586
const renderOption = {}
8687

8788
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
@@ -93,8 +94,8 @@ describe('Reference Node To HTML', () => {
9394

9495
// Custom render option
9596
it('Should return custom HTML for embedded asset', done => {
96-
const node = assetReferenceJson.children[0] as undefined as Node
97-
const renderOption = embeddedAssetWithRenderOption.renderOption
97+
const node = assetReferenceJson.children[0] as unknown as Node
98+
const renderOption = embeddedAssetWithRenderOption.renderOption as RenderOption
9899

99100
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
100101
return findEmbeddedItems(metadata, embeddedAssetJsonEntry)[0]
@@ -104,8 +105,8 @@ describe('Reference Node To HTML', () => {
104105
})
105106

106107
it('Should return custom HTML for embedded block entry', done => {
107-
const node = entryReferenceBlockJson.children[0] as undefined as Node
108-
const renderOption = embeddedObjectWithRenderOption.renderOption
108+
const node = entryReferenceBlockJson.children[0] as unknown as Node
109+
const renderOption = embeddedObjectWithRenderOption.renderOption as RenderOption
109110

110111
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
111112
return findEmbeddedItems(metadata, embeddedEntryJsonEntry)[0]
@@ -115,8 +116,8 @@ describe('Reference Node To HTML', () => {
115116
})
116117

117118
it('Should return custom HTML for embedded inline entry', done => {
118-
const node = entryReferenceInlineJson.children[0] as undefined as Node
119-
const renderOption = embeddedObjectWithRenderOption.renderOption
119+
const node = entryReferenceInlineJson.children[0] as unknown as Node
120+
const renderOption = embeddedObjectWithRenderOption.renderOption as RenderOption
120121

121122
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
122123
return findEmbeddedItems(metadata, embeddedEntryJsonEntry)[0]
@@ -126,8 +127,8 @@ describe('Reference Node To HTML', () => {
126127
})
127128

128129
it('Should return custom default HTML for embedded inline entry', done => {
129-
const node = entryReferenceBlockJson.children[0] as undefined as Node
130-
const renderOption = embeddedObjectDefaultRender.renderOption
130+
const node = entryReferenceBlockJson.children[0] as unknown as Node
131+
const renderOption = embeddedObjectDefaultRender.renderOption as RenderOption
131132

132133
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
133134
return findEmbeddedItems(metadata, embeddedEntryJsonEntry)[0]
@@ -138,4 +139,32 @@ describe('Reference Node To HTML', () => {
138139
</div>`)
139140
done()
140141
})
142+
143+
it('Should return image for undefined node asset', done => {
144+
const node = assetReferenceJson.children[0] as unknown as Node
145+
const renderOption = {
146+
'reference' : (node: Node, next: Next) => {
147+
return `<img src=${node.attrs['asset-link']}>`;
148+
}
149+
}
150+
151+
const resultHTML = referenceToHTML(node, renderOption)
152+
expect(resultHTML).toEqual('<img src=https://image.url/11.jpg>')
153+
done()
154+
})
155+
156+
it('Should return HTML for embedded link entry', done => {
157+
const node = entryReferenceLinkJson.children[0] as unknown as Node
158+
const renderOption = {
159+
'reference' : (node: Node, next: Next) => {
160+
return `<a href=\"${node.attrs['entry-uid']}\">${node.attrs.href}</a>`;
161+
}
162+
}
163+
164+
const resultHTML = referenceToHTML(node, renderOption, (metadata: Metadata) => {
165+
return findEmbeddedItems(metadata, { uid: 'uid' })[0]
166+
})
167+
expect(resultHTML).toEqual('<a href=\"entry_uid_20\">/copy-of-entry-final-02</a>')
168+
done()
169+
})
141170
})

package-lock.json

Lines changed: 69 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@contentstack/utils",
3-
"version": "1.1.2",
3+
"version": "1.1.3",
44
"description": "Contentstack utilities for Javascript",
55
"main": "dist/index.es.js",
66
"types": "dist/types/index.d.ts",
@@ -58,7 +58,7 @@
5858
"typescript": "^4.6.3"
5959
},
6060
"dependencies": {
61-
"node-html-parser": "^1.4.9"
61+
"node-html-parser": "^5.4.1"
6262
},
6363
"babel": {
6464
"presets": [

src/entry-editable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export function addTags(entry: EntryModel, contentTypeUid: string, tagsAsObject:
66
}
77

88
function getTag(content: object, prefix: string, tagsAsObject: boolean, locale: string): object {
9-
let tags: any = {}
9+
const tags: any = {}
1010
Object.entries(content).forEach(([key, value]) => {
1111
switch (typeof value) {
1212
case "object":

src/helper/enumerate-entries.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,20 @@ export function referenceToHTML(node: Node,
7070
renderOption: RenderOption,
7171
renderEmbed?: (metadata: Metadata) => EmbeddedItem | EntryNode
7272
): string {
73+
function sendToRenderOption(referenceNode: Node): string {
74+
return (renderOption[referenceNode.type] as RenderNode)(referenceNode, undefined)
75+
}
76+
if (!renderEmbed && renderOption[node.type] !== undefined) {
77+
return sendToRenderOption(node)
78+
}
7379
if (!renderEmbed) {
7480
return ''
7581
}
7682
const metadata = nodeToMetadata(node.attrs, ((node.children && node.children.length > 0) ? node.children[0]: {}) as unknown as TextNode)
77-
const item = renderEmbed(metadata)
83+
const item = renderEmbed(metadata)
84+
if (!item && renderOption[node.type] !== undefined) {
85+
return sendToRenderOption(node)
86+
}
7887
return findRenderString(item, metadata, renderOption)
7988
}
8089

0 commit comments

Comments
 (0)