Skip to content

Commit 14f36a4

Browse files
committed
feat: 🎉 Live preview editable tags functionality added
1 parent 2efdd1c commit 14f36a4

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"url": "https://github.com/contentstack/contentstack-utils-javascript.git"
1919
},
2020
"scripts": {
21-
"test": "jest --config jestconfig.json",
21+
"test": "jest --config jestconfig.json ./__test__/entry-editable.test.ts",
2222
"test:badges": "npm run test && jest-coverage-badges --output ./badges",
2323
"test:debug": "jest --watchAll --config jestconfig.json --runInBand",
2424
"prebuild": "rimraf dist",

src/entry-editable.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { EntryModel } from ".";
2+
3+
export function addTags(entry: EntryModel, contentTypeUid: string, tagsAsObject: boolean, locale: string = 'en-us') : void {
4+
entry["$"] = getTag(entry, `${contentTypeUid}.${entry.uid}.${locale}`, tagsAsObject, locale)
5+
}
6+
7+
function getTag(content: object, prefix: string, tagsAsObject: boolean, locale: string): object {
8+
let tags: any = {}
9+
Object.entries(content).forEach(([key, value]) => {
10+
switch (typeof value) {
11+
case "object":
12+
if (Array.isArray(value)) {
13+
value.forEach((obj, index) => {
14+
if (obj._content_type_uid !== undefined && obj.uid !== undefined) {
15+
value[index]['$'] = getTag(obj, `${obj._content_type_uid}.${obj.uid}.${obj.locale || locale}`, tagsAsObject, locale)
16+
}else {
17+
if (typeof obj === "object") {
18+
obj['$'] = getTag(obj, `${prefix}.${key}.${index}`, tagsAsObject, locale)
19+
} else {
20+
tags[key] = getTagsValue(`${prefix}.${key}`, tagsAsObject)
21+
}
22+
}
23+
})
24+
}else {
25+
value["$"] = getTag(value, `${prefix}.${key}`, tagsAsObject, locale)
26+
}
27+
break;
28+
default:
29+
tags[key] = getTagsValue(`${prefix}.${key}`, tagsAsObject)
30+
}
31+
})
32+
return tags
33+
}
34+
35+
function getTagsValue (dataValue:string, tagsAsObject: boolean): any {
36+
if (tagsAsObject) {
37+
return { "data-cslp": dataValue };
38+
} else {
39+
return `data-cslp=${dataValue}`;
40+
}
41+
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ export { default as Document } from './nodes/document'
1212
export { default as TextNode } from './nodes/text';
1313
export { jsonToHTML } from './json-to-html'
1414
export { GQL } from './gql'
15+
export { addTags as addEditableTags } from './entry-editable'

0 commit comments

Comments
 (0)