@botonic/plugin-flow-builder 0.21.0-alpha.9 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/action.js +21 -32
- package/lib/cjs/action.js.map +1 -1
- package/lib/cjs/content-fields/content-fields-base.d.ts +2 -1
- package/lib/cjs/content-fields/content-fields-base.js +6 -1
- package/lib/cjs/content-fields/content-fields-base.js.map +1 -1
- package/lib/cjs/content-fields/flow-button.js +4 -2
- package/lib/cjs/content-fields/flow-button.js.map +1 -1
- package/lib/cjs/content-fields/flow-video.d.ts +8 -0
- package/lib/cjs/content-fields/flow-video.js +26 -0
- package/lib/cjs/content-fields/flow-video.js.map +1 -0
- package/lib/cjs/content-fields/index.d.ts +1 -0
- package/lib/cjs/content-fields/index.js +3 -1
- package/lib/cjs/content-fields/index.js.map +1 -1
- package/lib/cjs/content-fields/types.d.ts +2 -1
- package/lib/cjs/flow-builder-models.d.ts +26 -4
- package/lib/cjs/flow-builder-models.js +2 -0
- package/lib/cjs/flow-builder-models.js.map +1 -1
- package/lib/cjs/handoff.d.ts +2 -1
- package/lib/cjs/handoff.js +21 -14
- package/lib/cjs/handoff.js.map +1 -1
- package/lib/cjs/helpers.d.ts +5 -0
- package/lib/cjs/helpers.js +14 -0
- package/lib/cjs/helpers.js.map +1 -0
- package/lib/cjs/index.d.ts +8 -3
- package/lib/cjs/index.js +35 -17
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/action.js +22 -33
- package/lib/esm/action.js.map +1 -1
- package/lib/esm/content-fields/content-fields-base.d.ts +2 -1
- package/lib/esm/content-fields/content-fields-base.js +6 -1
- package/lib/esm/content-fields/content-fields-base.js.map +1 -1
- package/lib/esm/content-fields/flow-button.js +4 -2
- package/lib/esm/content-fields/flow-button.js.map +1 -1
- package/lib/esm/content-fields/flow-video.d.ts +8 -0
- package/lib/esm/content-fields/flow-video.js +21 -0
- package/lib/esm/content-fields/flow-video.js.map +1 -0
- package/lib/esm/content-fields/index.d.ts +1 -0
- package/lib/esm/content-fields/index.js +1 -0
- package/lib/esm/content-fields/index.js.map +1 -1
- package/lib/esm/content-fields/types.d.ts +2 -1
- package/lib/esm/flow-builder-models.d.ts +26 -4
- package/lib/esm/flow-builder-models.js +2 -0
- package/lib/esm/flow-builder-models.js.map +1 -1
- package/lib/esm/handoff.d.ts +2 -1
- package/lib/esm/handoff.js +21 -14
- package/lib/esm/handoff.js.map +1 -1
- package/lib/esm/helpers.d.ts +5 -0
- package/lib/esm/helpers.js +10 -0
- package/lib/esm/helpers.js.map +1 -0
- package/lib/esm/index.d.ts +8 -3
- package/lib/esm/index.js +36 -18
- package/lib/esm/index.js.map +1 -1
- package/package.json +3 -4
- package/src/action.tsx +25 -35
- package/src/content-fields/content-fields-base.ts +11 -2
- package/src/content-fields/flow-button.tsx +3 -1
- package/src/content-fields/flow-video.tsx +22 -0
- package/src/content-fields/index.ts +1 -0
- package/src/content-fields/types.ts +2 -1
- package/src/flow-builder-models.ts +30 -2
- package/src/handoff.ts +25 -16
- package/src/helpers.ts +18 -0
- package/src/index.ts +52 -21
package/lib/esm/action.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/action.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAOhD,MAAM,OAAO,iBAAkB,SAAQ,KAAK,CAAC,SAAiC;IAG5E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAsB;QAC7C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3D,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAA;QACrC,IAAI,eAAe,GAAuB,OAAO,CAAA;QACjD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE;YACpD,eAAe,GAAG,MAAM,iBAAiB,CAAC,UAAU,EAAE,CAAA;SACvD;QACD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,kBAAkB,CAC9D,OAAO,CAAC,KAAK,EACb,MAAM,CACP,CAAA;YACD,IAAI,aAAa;gBAAE,eAAe,GAAG,aAAa,CAAA;YAClD,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,CAChE,OAAO,CAAC,KAAK,EACb,MAAM,CACP,CAAA;YACD,IAAI,cAAc;gBAAE,eAAe,GAAG,cAAc,CAAA;SACrD;QACD,IAAI,CAAC,eAAe,EAAE;YACpB,eAAe,GAAG,MAAM,iBAAiB,CAAC,aAAa,EAAE,CAAA;SAC1D;QAED,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CAAC,WAAW,CACnE,eAAe,EACf,MAAM,CACP,CAAA;QAED,IAAI,WAAW;YAAE,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;QAE9D,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;IAClC,CAAC;IAED,MAAM;QACJ,aAAa;QACb,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAC5C,OAAO,QAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;IACpE,CAAC;;AAxCM,6BAAW,GAAG,cAAc,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { MediaFileLocale, TextLocale } from '../flow-builder-models';
|
|
1
|
+
import { MediaFileLocale, TextLocale, VideoLocale } from '../flow-builder-models';
|
|
2
2
|
export declare abstract class ContentFieldsBase {
|
|
3
3
|
private readonly id;
|
|
4
4
|
constructor(id: string);
|
|
5
5
|
static getTextByLocale(locale: string, text: TextLocale[]): string;
|
|
6
6
|
static getImageByLocale(locale: string, image: MediaFileLocale[]): string;
|
|
7
|
+
static getVideoByLocale(locale: string, video: VideoLocale[]): string;
|
|
7
8
|
}
|
|
@@ -9,8 +9,13 @@ export class ContentFieldsBase {
|
|
|
9
9
|
}
|
|
10
10
|
static getImageByLocale(locale, image) {
|
|
11
11
|
var _a;
|
|
12
|
-
const result = image.find(
|
|
12
|
+
const result = image.find(i => i.locale === locale);
|
|
13
13
|
return (_a = result === null || result === void 0 ? void 0 : result.file) !== null && _a !== void 0 ? _a : '';
|
|
14
14
|
}
|
|
15
|
+
static getVideoByLocale(locale, video) {
|
|
16
|
+
var _a;
|
|
17
|
+
const result = video.find(v => v.locale === locale);
|
|
18
|
+
return (_a = result === null || result === void 0 ? void 0 : result.url) !== null && _a !== void 0 ? _a : '';
|
|
19
|
+
}
|
|
15
20
|
}
|
|
16
21
|
//# sourceMappingURL=content-fields-base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-fields-base.js","sourceRoot":"","sources":["../../../src/content-fields/content-fields-base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"content-fields-base.js","sourceRoot":"","sources":["../../../src/content-fields/content-fields-base.ts"],"names":[],"mappings":"AAMA,MAAM,OAAgB,iBAAiB;IACrC,YAA6B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAE3C,MAAM,CAAC,eAAe,CAAC,MAAc,EAAE,IAAkB;;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QAClD,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,mCAAI,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAwB;;QAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QACnD,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,mCAAI,EAAE,CAAA;IAC3B,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAoB;;QAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;QACnD,OAAO,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,mCAAI,EAAE,CAAA;IAC1B,CAAC;CACF"}
|
|
@@ -8,10 +8,12 @@ export class FlowButton extends ContentFieldsBase {
|
|
|
8
8
|
this.text = '';
|
|
9
9
|
}
|
|
10
10
|
static fromHubtypeCMS(component, locale) {
|
|
11
|
-
var _a;
|
|
11
|
+
var _a, _b;
|
|
12
12
|
const newButton = new FlowButton(component.id);
|
|
13
13
|
newButton.text = FlowButton.getTextByLocale(locale, component.text);
|
|
14
|
-
newButton.payload =
|
|
14
|
+
newButton.payload = component.target
|
|
15
|
+
? component.target.id
|
|
16
|
+
: (_b = (_a = component.payload) === null || _a === void 0 ? void 0 : _a.find(payload => payload.locale === locale)) === null || _b === void 0 ? void 0 : _b.id;
|
|
15
17
|
if (component.url) {
|
|
16
18
|
const urlButton = component.url.find(url => url.locale === locale);
|
|
17
19
|
if (urlButton)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-button.js","sourceRoot":"","sources":["../../../src/content-fields/flow-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAsB,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAAjD;;QACS,SAAI,GAAG,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"flow-button.js","sourceRoot":"","sources":["../../../src/content-fields/flow-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAsB,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAAjD;;QACS,SAAI,GAAG,EAAE,CAAA;IAoClB,CAAC;IAhCC,MAAM,CAAC,cAAc,CAAC,SAAmB,EAAE,MAAc;;QACvD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC9C,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;QACnE,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM;YAClC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YACrB,CAAC,CAAC,MAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,0CAAE,EAAE,CAAA;QACrE,IAAI,SAAS,CAAC,GAAG,EAAE;YACjB,MAAM,SAAS,GAAI,SAAS,CAAC,GAAW,CAAC,IAAI,CAC3C,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM,CAC7B,CAAA;YACD,IAAI,SAAS;gBAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAA;SACrD;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,YAAY,CAAC,KAAa,EAAE,WAAwB;QAClD,IAAI,WAAW,KAAK,WAAW,CAAC,WAAW,EAAE;YAC3C,OAAO,CACL,oBAAC,KAAK,IAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IACrC,IAAI,CAAC,IAAI,CACJ,CACT,CAAA;SACF;QACD,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,IAAI,IAAI,CAAC,GAAG;YAAE,KAAK,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAA;QACvC,OAAO;QACL,aAAa;QACb,oBAAC,MAAM,kBAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,IAAM,KAAK,GACjD,IAAI,CAAC,IAAI,CACH,CACV,CAAA;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { VideoNode } from '../flow-builder-models';
|
|
2
|
+
import { ContentFieldsBase } from './content-fields-base';
|
|
3
|
+
export declare class FlowVideo extends ContentFieldsBase {
|
|
4
|
+
src: string;
|
|
5
|
+
code: string;
|
|
6
|
+
static fromHubtypeCMS(component: VideoNode, locale: string): FlowVideo;
|
|
7
|
+
toBotonic(index: number): JSX.Element;
|
|
8
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Video } from '@botonic/react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { ContentFieldsBase } from './content-fields-base';
|
|
4
|
+
export class FlowVideo extends ContentFieldsBase {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.src = '';
|
|
8
|
+
this.code = '';
|
|
9
|
+
}
|
|
10
|
+
static fromHubtypeCMS(component, locale) {
|
|
11
|
+
const newVideo = new FlowVideo(component.id);
|
|
12
|
+
newVideo.code = component.code;
|
|
13
|
+
newVideo.src = this.getVideoByLocale(locale, component.content.video);
|
|
14
|
+
return newVideo;
|
|
15
|
+
}
|
|
16
|
+
toBotonic(index) {
|
|
17
|
+
// @ts-ignore
|
|
18
|
+
return React.createElement(Video, { key: index, src: this.src });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=flow-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-video.js","sourceRoot":"","sources":["../../../src/content-fields/flow-video.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AACtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAEzD,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAAhD;;QACS,QAAG,GAAG,EAAE,CAAA;QACR,SAAI,GAAG,EAAE,CAAA;IAalB,CAAC;IAXC,MAAM,CAAC,cAAc,CAAC,SAAoB,EAAE,MAAc;QACxD,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC5C,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAA;QAC9B,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QACrE,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,aAAa;QACb,OAAO,oBAAC,KAAK,IAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAI,CAAA;IAC7C,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/content-fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/content-fields/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FlowCarousel } from './flow-carousel';
|
|
2
2
|
import { FlowImage } from './flow-image';
|
|
3
3
|
import { FlowText } from './flow-text';
|
|
4
|
-
|
|
4
|
+
import { FlowVideo } from './flow-video';
|
|
5
|
+
export type FlowContent = FlowText | FlowImage | FlowCarousel | FlowVideo;
|
|
@@ -16,7 +16,9 @@ export declare enum NodeType {
|
|
|
16
16
|
START_UP = "start-up",
|
|
17
17
|
URL = "url",
|
|
18
18
|
PAYLOAD = "payload",
|
|
19
|
-
FUNCTION = "function"
|
|
19
|
+
FUNCTION = "function",
|
|
20
|
+
FALLBACK = "fallback",
|
|
21
|
+
VIDEO = "video"
|
|
20
22
|
}
|
|
21
23
|
export interface BaseNode {
|
|
22
24
|
id: string;
|
|
@@ -57,8 +59,8 @@ export interface Button {
|
|
|
57
59
|
text: TextLocale[];
|
|
58
60
|
target?: NodeLink;
|
|
59
61
|
hidden: string;
|
|
60
|
-
url?: UrlLocale;
|
|
61
|
-
payload?: PayloadLocale;
|
|
62
|
+
url?: UrlLocale[];
|
|
63
|
+
payload?: PayloadLocale[];
|
|
62
64
|
}
|
|
63
65
|
export interface TextNodeContent {
|
|
64
66
|
text: TextLocale[];
|
|
@@ -171,4 +173,24 @@ export interface FunctionNode extends Node {
|
|
|
171
173
|
type: NodeType.FUNCTION;
|
|
172
174
|
content: FunctionNodeContent;
|
|
173
175
|
}
|
|
174
|
-
export
|
|
176
|
+
export interface FallbackNodeContent {
|
|
177
|
+
first_message: NodeLink;
|
|
178
|
+
second_message: NodeLink;
|
|
179
|
+
}
|
|
180
|
+
export interface FallbackNode extends Node {
|
|
181
|
+
type: NodeType.FALLBACK;
|
|
182
|
+
content: FallbackNodeContent;
|
|
183
|
+
}
|
|
184
|
+
export interface VideoLocale {
|
|
185
|
+
url: string;
|
|
186
|
+
is_embedded?: boolean;
|
|
187
|
+
locale: string;
|
|
188
|
+
}
|
|
189
|
+
export interface VideoNodeContent {
|
|
190
|
+
video: VideoLocale[];
|
|
191
|
+
}
|
|
192
|
+
export interface VideoNode extends Node {
|
|
193
|
+
type: NodeType.VIDEO;
|
|
194
|
+
content: VideoNodeContent;
|
|
195
|
+
}
|
|
196
|
+
export type NodeComponent = TextNode | ImageNode | CarouselNode | HandoffNode | KeywordNode | IntentNode | UrlNode | StartNode | PayloadNode | FunctionNode | FallbackNode | VideoNode;
|
|
@@ -10,6 +10,8 @@ export var NodeType;
|
|
|
10
10
|
NodeType["URL"] = "url";
|
|
11
11
|
NodeType["PAYLOAD"] = "payload";
|
|
12
12
|
NodeType["FUNCTION"] = "function";
|
|
13
|
+
NodeType["FALLBACK"] = "fallback";
|
|
14
|
+
NodeType["VIDEO"] = "video";
|
|
13
15
|
})(NodeType || (NodeType = {}));
|
|
14
16
|
export var ButtonStyle;
|
|
15
17
|
(function (ButtonStyle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow-builder-models.js","sourceRoot":"","sources":["../../src/flow-builder-models.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"flow-builder-models.js","sourceRoot":"","sources":["../../src/flow-builder-models.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,QAaX;AAbD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;IACnB,+BAAmB,CAAA;IACnB,6BAAiB,CAAA;IACjB,iCAAqB,CAAA;IACrB,uBAAW,CAAA;IACX,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;IACrB,2BAAe,CAAA;AACjB,CAAC,EAbW,QAAQ,KAAR,QAAQ,QAanB;AA6BD,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,0CAA2B,CAAA;AAC7B,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB"}
|
package/lib/esm/handoff.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { ActionRequest } from '@botonic/react';
|
|
2
|
-
|
|
2
|
+
import { HandoffNode } from './flow-builder-models';
|
|
3
|
+
export declare function doHandoff(request: ActionRequest, locale: string, handoffNode: HandoffNode): Promise<void>;
|
package/lib/esm/handoff.js
CHANGED
|
@@ -1,20 +1,27 @@
|
|
|
1
1
|
import { HandOffBuilder } from '@botonic/core';
|
|
2
|
-
|
|
2
|
+
import { getFlowBuilderPlugin } from './helpers';
|
|
3
|
+
export async function doHandoff(request, locale, handoffNode) {
|
|
3
4
|
var _a;
|
|
5
|
+
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins);
|
|
6
|
+
const handoffTargetNode = await flowBuilderPlugin.getHandoffContent((_a = handoffNode.target) === null || _a === void 0 ? void 0 : _a.id);
|
|
4
7
|
// @ts-ignore
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
//
|
|
17
|
-
|
|
8
|
+
const handOffBuilder = new HandOffBuilder(request.session); // handOffBuilder.withQueue(handoffNode.content.queue)
|
|
9
|
+
const handoffQueues = handoffNode.content.queue;
|
|
10
|
+
const queueFound = handoffQueues.find(q => q.locale === locale);
|
|
11
|
+
if (queueFound)
|
|
12
|
+
handOffBuilder.withQueue(queueFound.id);
|
|
13
|
+
// TODO: Retrieve params from FlowBuilder
|
|
14
|
+
// const handoffParams = {
|
|
15
|
+
// agentEmail: 'test@gmail.com',
|
|
16
|
+
// note: 'This is a note that will be attached to the case as a reminder',
|
|
17
|
+
// }
|
|
18
|
+
// if (handoffParams.note) {
|
|
19
|
+
// handOffBuilder.withNote(handoffParams.note)
|
|
20
|
+
// }
|
|
21
|
+
// if (handoffParams.agentEmail) {
|
|
22
|
+
// handOffBuilder.withAgentEmail(handoffParams.agentEmail)
|
|
23
|
+
// }
|
|
24
|
+
handOffBuilder.withOnFinishPayload(handoffTargetNode.id);
|
|
18
25
|
await handOffBuilder.handOff();
|
|
19
26
|
}
|
|
20
27
|
//# sourceMappingURL=handoff.js.map
|
package/lib/esm/handoff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAsB,EACtB,MAAc,EACd,WAAwB;;IAExB,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/D,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,CAAC,iBAAiB,CACjE,MAAA,WAAW,CAAC,MAAM,0CAAE,EAAE,CACvB,CAAA;IACD,aAAa;IACb,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA,CAAC,sDAAsD;IACjH,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAA;IAC/C,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;IAC/D,IAAI,UAAU;QAAE,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IACvD,yCAAyC;IACzC,0BAA0B;IAC1B,kCAAkC;IAClC,4EAA4E;IAC5E,IAAI;IAEJ,4BAA4B;IAC5B,gDAAgD;IAChD,IAAI;IAEJ,kCAAkC;IAClC,4DAA4D;IAC5D,IAAI;IAEJ,cAAc,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACxD,MAAM,cAAc,CAAC,OAAO,EAAE,CAAA;AAChC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const FLOW_BUILDER_PLUGIN_NAME = 'BotonicPluginFlowBuilder';
|
|
2
|
+
export function getFlowBuilderPlugin(plugins) {
|
|
3
|
+
const flowBuilderPlugin = Object.values(plugins).find(
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
plugin => plugin.name === FLOW_BUILDER_PLUGIN_NAME);
|
|
6
|
+
if (!flowBuilderPlugin)
|
|
7
|
+
throw new Error(`You must include '@botonic/plugin-flow-builder' in your plugins file.`);
|
|
8
|
+
return flowBuilderPlugin;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAGA,MAAM,wBAAwB,GAAG,0BAA0B,CAAA;AAE3D,MAAM,UAAU,oBAAoB,CAAC,OAEpC;IACC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI;IACnD,aAAa;IACb,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,wBAAwB,CACvB,CAAA;IAC7B,IAAI,CAAC,iBAAiB;QACpB,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAA;IACH,OAAO,iBAAiB,CAAA;AAC1B,CAAC"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -21,12 +21,17 @@ export default class BotonicPluginFlowBuilder implements Plugin {
|
|
|
21
21
|
pre(request: PluginPreRequest): Promise<void>;
|
|
22
22
|
post(_request: PluginPostRequest): Promise<void>;
|
|
23
23
|
getContent(id: string): Promise<NodeComponent>;
|
|
24
|
-
getHandoffContent(): Promise<HandoffNode>;
|
|
24
|
+
getHandoffContent(handoffTargetId: string | undefined): Promise<HandoffNode>;
|
|
25
25
|
getFlowContent(hubtypeContent: NodeComponent, locale: string): FlowContent | undefined;
|
|
26
26
|
getStartId(): Promise<string>;
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
getFallbackId(): Promise<string>;
|
|
28
|
+
getContents(id: string, locale: string, prevContents?: FlowContent[]): Promise<{
|
|
29
|
+
contents: FlowContent[];
|
|
30
|
+
handoffNode: HandoffNode;
|
|
31
|
+
}>;
|
|
32
|
+
getPayloadByIntent(input: Input, locale: string): Promise<string | undefined>;
|
|
29
33
|
hasIntent(node: IntentNode, intent: string, locale: string): boolean;
|
|
34
|
+
hasMetConfidenceThreshold(node: IntentNode, predictedConfidence: number): boolean;
|
|
30
35
|
getPayloadByKeyword(input: Input, locale: string): Promise<string | undefined>;
|
|
31
36
|
matchKeywords(node: KeywordNode, input: string, locale: string): boolean;
|
|
32
37
|
containsAnyKeywords(input: string, keywords: string[]): boolean;
|
package/lib/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
|
-
import { FlowCarousel, FlowImage, FlowText, } from './content-fields';
|
|
2
|
+
import { FlowCarousel, FlowImage, FlowText, FlowVideo, } from './content-fields';
|
|
3
3
|
import { NodeType, } from './flow-builder-models';
|
|
4
4
|
import { DEFAULT_FUNCTIONS } from './functions';
|
|
5
5
|
export default class BotonicPluginFlowBuilder {
|
|
@@ -13,10 +13,10 @@ export default class BotonicPluginFlowBuilder {
|
|
|
13
13
|
this.functions = Object.assign(Object.assign({}, DEFAULT_FUNCTIONS), customFunctions);
|
|
14
14
|
}
|
|
15
15
|
async readFlowContent() {
|
|
16
|
-
const
|
|
16
|
+
const { data } = await axios.get(this.flowUrl, {
|
|
17
17
|
headers: { Authorization: `Bearer ${this.getAccessToken()}` },
|
|
18
18
|
});
|
|
19
|
-
return
|
|
19
|
+
return data;
|
|
20
20
|
}
|
|
21
21
|
async pre(request) {
|
|
22
22
|
this.currentRequest = request;
|
|
@@ -30,9 +30,9 @@ export default class BotonicPluginFlowBuilder {
|
|
|
30
30
|
throw Error(`Node with id: '${id}' not found`);
|
|
31
31
|
return content;
|
|
32
32
|
}
|
|
33
|
-
async getHandoffContent() {
|
|
33
|
+
async getHandoffContent(handoffTargetId) {
|
|
34
34
|
const flow = await this.flow;
|
|
35
|
-
const content = flow.nodes.find(node => node.
|
|
35
|
+
const content = flow.nodes.find(node => node.id === handoffTargetId);
|
|
36
36
|
if (!content)
|
|
37
37
|
throw Error(`Handoff node not found`);
|
|
38
38
|
return content;
|
|
@@ -45,6 +45,8 @@ export default class BotonicPluginFlowBuilder {
|
|
|
45
45
|
return FlowImage.fromHubtypeCMS(hubtypeContent, locale);
|
|
46
46
|
case NodeType.CAROUSEL:
|
|
47
47
|
return FlowCarousel.fromHubtypeCMS(hubtypeContent, locale);
|
|
48
|
+
case NodeType.VIDEO:
|
|
49
|
+
return FlowVideo.fromHubtypeCMS(hubtypeContent, locale);
|
|
48
50
|
default:
|
|
49
51
|
return undefined;
|
|
50
52
|
}
|
|
@@ -52,14 +54,26 @@ export default class BotonicPluginFlowBuilder {
|
|
|
52
54
|
async getStartId() {
|
|
53
55
|
const flow = await this.flow;
|
|
54
56
|
const startNode = flow.nodes.find(node => node.type === NodeType.START_UP);
|
|
55
|
-
if (!startNode)
|
|
57
|
+
if (!startNode)
|
|
56
58
|
throw new Error('start-up id must be defined');
|
|
57
|
-
}
|
|
58
59
|
return startNode.target.id;
|
|
59
60
|
}
|
|
61
|
+
async getFallbackId() {
|
|
62
|
+
const flow = await this.flow;
|
|
63
|
+
const fallbackNode = flow.nodes.find(node => node.type === NodeType.FALLBACK);
|
|
64
|
+
if (!fallbackNode)
|
|
65
|
+
throw new Error('fallback node must be defined');
|
|
66
|
+
const fallbackFirstMessage = fallbackNode.content.first_message;
|
|
67
|
+
const fallbackSecondMessage = fallbackNode.content.second_message;
|
|
68
|
+
if (!fallbackSecondMessage)
|
|
69
|
+
return fallbackFirstMessage.id;
|
|
70
|
+
const fallbackIds = [fallbackFirstMessage.id, fallbackSecondMessage.id];
|
|
71
|
+
return fallbackIds[Math.floor(Math.random() * fallbackIds.length)];
|
|
72
|
+
}
|
|
60
73
|
async getContents(id, locale, prevContents) {
|
|
61
74
|
const contents = prevContents || [];
|
|
62
75
|
const hubtypeContent = await this.getContent(id);
|
|
76
|
+
const isHandoff = hubtypeContent.type === NodeType.HANDOFF;
|
|
63
77
|
if (hubtypeContent.content.elements) {
|
|
64
78
|
for (const i in hubtypeContent.content.elements) {
|
|
65
79
|
const button = hubtypeContent.content.elements[i].button;
|
|
@@ -94,20 +108,21 @@ export default class BotonicPluginFlowBuilder {
|
|
|
94
108
|
}
|
|
95
109
|
// execute function
|
|
96
110
|
// return this.getContents(function result_mapping target, locale, contents)
|
|
97
|
-
return contents;
|
|
111
|
+
return { contents, handoffNode: isHandoff && hubtypeContent };
|
|
98
112
|
}
|
|
99
|
-
async
|
|
113
|
+
async getPayloadByIntent(input, locale) {
|
|
100
114
|
var _a;
|
|
101
115
|
try {
|
|
102
116
|
const flow = await this.flow;
|
|
103
117
|
const intents = flow.nodes.filter(node => node.type === NodeType.INTENT);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
118
|
+
const inputIntent = input.intent;
|
|
119
|
+
const inputConfidence = input.confidence;
|
|
120
|
+
if (inputIntent) {
|
|
121
|
+
const matchedIntentNode = intents.find(node => inputIntent &&
|
|
122
|
+
this.hasIntent(node, inputIntent, locale) &&
|
|
123
|
+
inputConfidence &&
|
|
124
|
+
this.hasMetConfidenceThreshold(node, inputConfidence));
|
|
125
|
+
return (_a = matchedIntentNode === null || matchedIntentNode === void 0 ? void 0 : matchedIntentNode.target) === null || _a === void 0 ? void 0 : _a.id;
|
|
111
126
|
}
|
|
112
127
|
}
|
|
113
128
|
catch (error) {
|
|
@@ -116,8 +131,11 @@ export default class BotonicPluginFlowBuilder {
|
|
|
116
131
|
return undefined;
|
|
117
132
|
}
|
|
118
133
|
hasIntent(node, intent, locale) {
|
|
119
|
-
|
|
120
|
-
|
|
134
|
+
return node.content.intents.some(i => i.locale === locale && i.values.includes(intent));
|
|
135
|
+
}
|
|
136
|
+
hasMetConfidenceThreshold(node, predictedConfidence) {
|
|
137
|
+
const nodeConfidence = node.content.confidence / 100;
|
|
138
|
+
return predictedConfidence >= nodeConfidence;
|
|
121
139
|
}
|
|
122
140
|
async getPayloadByKeyword(input, locale) {
|
|
123
141
|
var _a;
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EACL,YAAY,EAEZ,SAAS,EACT,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/plugin-flow-builder",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.1",
|
|
4
4
|
"main": "./lib/cjs/index.js",
|
|
5
5
|
"module": "./lib/esm/index.js",
|
|
6
6
|
"description": "Use Flow Builder to show your contents",
|
|
@@ -29,7 +29,6 @@
|
|
|
29
29
|
"README.md"
|
|
30
30
|
],
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@types/minipass": "^3.3.5",
|
|
33
32
|
"@types/node": "^18.13.0",
|
|
34
33
|
"@types/react": "^18.0.28",
|
|
35
34
|
"typescript": "^4.9.5"
|
|
@@ -48,7 +47,7 @@
|
|
|
48
47
|
},
|
|
49
48
|
"dependencies": {
|
|
50
49
|
"@babel/runtime": "^7.20.13",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
50
|
+
"axios": "^1.3.4",
|
|
51
|
+
"@botonic/react": "^0.21.2"
|
|
53
52
|
}
|
|
54
53
|
}
|
package/src/action.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ActionRequest, RequestContext
|
|
1
|
+
import { ActionRequest, RequestContext } from '@botonic/react'
|
|
2
2
|
import React from 'react'
|
|
3
3
|
|
|
4
4
|
import { FlowContent } from './content-fields'
|
|
5
5
|
import { doHandoff } from './handoff'
|
|
6
|
-
import
|
|
6
|
+
import { getFlowBuilderPlugin } from './helpers'
|
|
7
7
|
|
|
8
8
|
type FlowBuilderActionProps = {
|
|
9
9
|
content?: FlowContent[]
|
|
@@ -14,52 +14,42 @@ export class FlowBuilderAction extends React.Component<FlowBuilderActionProps> {
|
|
|
14
14
|
static contextType = RequestContext
|
|
15
15
|
|
|
16
16
|
static async botonicInit(request: ActionRequest): Promise<any> {
|
|
17
|
-
const flowBuilderPlugin = request.plugins
|
|
18
|
-
.hubtypeFlowBuilder as BotonicPluginFlowBuilder
|
|
17
|
+
const flowBuilderPlugin = getFlowBuilderPlugin(request.plugins)
|
|
19
18
|
const locale = flowBuilderPlugin.getLocale(request.session)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
const payload = request.input.payload
|
|
20
|
+
let targetContentId: string | undefined = payload
|
|
21
|
+
if (!payload && request.session.is_first_interaction) {
|
|
22
|
+
targetContentId = await flowBuilderPlugin.getStartId()
|
|
23
|
+
}
|
|
24
|
+
if (!payload) {
|
|
25
|
+
const intentPayload = await flowBuilderPlugin.getPayloadByIntent(
|
|
26
26
|
request.input,
|
|
27
27
|
locale
|
|
28
28
|
)
|
|
29
|
-
if (intentPayload)
|
|
30
|
-
payload = intentPayload
|
|
31
|
-
}
|
|
29
|
+
if (intentPayload) targetContentId = intentPayload
|
|
32
30
|
const keywordPayload = await flowBuilderPlugin.getPayloadByKeyword(
|
|
33
31
|
request.input,
|
|
34
32
|
locale
|
|
35
33
|
)
|
|
36
|
-
if (keywordPayload)
|
|
37
|
-
payload = keywordPayload
|
|
38
|
-
}
|
|
34
|
+
if (keywordPayload) targetContentId = keywordPayload
|
|
39
35
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (content.length === 0) {
|
|
44
|
-
const handoffParams = {
|
|
45
|
-
queue: 'Test', // TODO: Take it from the flow
|
|
46
|
-
agentEmail: 'test@gmail.com',
|
|
47
|
-
note: 'This is a note that will be attached to the case as a reminder',
|
|
48
|
-
}
|
|
49
|
-
await doHandoff(request, handoffParams.queue, handoffParams.note)
|
|
50
|
-
const isHandoff = true
|
|
51
|
-
return { isHandoff }
|
|
36
|
+
if (!targetContentId) {
|
|
37
|
+
targetContentId = await flowBuilderPlugin.getFallbackId()
|
|
52
38
|
}
|
|
53
|
-
|
|
39
|
+
|
|
40
|
+
const { contents, handoffNode } = await flowBuilderPlugin.getContents(
|
|
41
|
+
targetContentId,
|
|
42
|
+
locale
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
if (handoffNode) await doHandoff(request, locale, handoffNode)
|
|
46
|
+
|
|
47
|
+
return { contents, handoffNode }
|
|
54
48
|
}
|
|
55
49
|
|
|
56
50
|
render(): JSX.Element | JSX.Element[] {
|
|
57
51
|
// @ts-ignore
|
|
58
|
-
const {
|
|
59
|
-
|
|
60
|
-
return <Text>You are being transferred to an agent!</Text>
|
|
61
|
-
} else {
|
|
62
|
-
return contents!.map((content, index) => content.toBotonic(index))
|
|
63
|
-
}
|
|
52
|
+
const { contents, handoffNode } = this.props
|
|
53
|
+
return contents!.map((content, index) => content.toBotonic(index))
|
|
64
54
|
}
|
|
65
55
|
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
MediaFileLocale,
|
|
3
|
+
TextLocale,
|
|
4
|
+
VideoLocale,
|
|
5
|
+
} from '../flow-builder-models'
|
|
2
6
|
|
|
3
7
|
export abstract class ContentFieldsBase {
|
|
4
8
|
constructor(private readonly id: string) {}
|
|
@@ -9,7 +13,12 @@ export abstract class ContentFieldsBase {
|
|
|
9
13
|
}
|
|
10
14
|
|
|
11
15
|
static getImageByLocale(locale: string, image: MediaFileLocale[]): string {
|
|
12
|
-
const result = image.find(
|
|
16
|
+
const result = image.find(i => i.locale === locale)
|
|
13
17
|
return result?.file ?? ''
|
|
14
18
|
}
|
|
19
|
+
|
|
20
|
+
static getVideoByLocale(locale: string, video: VideoLocale[]): string {
|
|
21
|
+
const result = video.find(v => v.locale === locale)
|
|
22
|
+
return result?.url ?? ''
|
|
23
|
+
}
|
|
15
24
|
}
|
|
@@ -12,7 +12,9 @@ export class FlowButton extends ContentFieldsBase {
|
|
|
12
12
|
static fromHubtypeCMS(component: FbButton, locale: string): FlowButton {
|
|
13
13
|
const newButton = new FlowButton(component.id)
|
|
14
14
|
newButton.text = FlowButton.getTextByLocale(locale, component.text)
|
|
15
|
-
newButton.payload = component.target
|
|
15
|
+
newButton.payload = component.target
|
|
16
|
+
? component.target.id
|
|
17
|
+
: component.payload?.find(payload => payload.locale === locale)?.id
|
|
16
18
|
if (component.url) {
|
|
17
19
|
const urlButton = (component.url as any).find(
|
|
18
20
|
url => url.locale === locale
|