@digia-engage/core 2.0.3 → 2.2.0
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/DigiaEngageReactNative.podspec +1 -1
- package/android/.project +28 -0
- package/android/bin/.gradle/8.13/fileHashes/fileHashes.lock +0 -0
- package/android/bin/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/bin/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/bin/.project +34 -0
- package/android/bin/build/generated/source/buildConfig/debug/com/digia/engage/rn/BuildConfig.class +0 -0
- package/android/bin/build/generated/source/codegen/java/com/digia/engage/rn/NativeDigiaEngageSpec.class +0 -0
- package/android/bin/build.gradle +97 -0
- package/android/bin/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/bin/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/bin/gradle.properties +2 -0
- package/android/bin/gradlew +185 -0
- package/android/bin/gradlew.bat +89 -0
- package/android/bin/local.properties +1 -0
- package/android/bin/settings.gradle +25 -0
- package/android/bin/src/main/AndroidManifest.xml +2 -0
- package/android/bin/src/main/java/com/digia/engage/rn/DigiaAnchorViewManager.kt +90 -0
- package/android/bin/src/main/java/com/digia/engage/rn/DigiaModule.kt +309 -0
- package/android/bin/src/main/java/com/digia/engage/rn/DigiaPackage.kt +70 -0
- package/android/bin/src/main/java/com/digia/engage/rn/DigiaSlotViewManager.kt +183 -0
- package/android/bin/src/main/java/com/digia/engage/rn/DigiaViewManager.kt +64 -0
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/digia/engage/rn/DigiaModule.kt +37 -13
- package/ios/DigiaEngageModule.m +25 -26
- package/ios/DigiaModule.swift +71 -10
- package/lib/commonjs/Digia.js +13 -2
- package/lib/commonjs/Digia.js.map +1 -1
- package/lib/commonjs/DigiaAnchorView.js +7 -3
- package/lib/commonjs/DigiaAnchorView.js.map +1 -1
- package/lib/commonjs/DigiaGuideController.js.map +1 -1
- package/lib/commonjs/DigiaProvider.js +70 -26
- package/lib/commonjs/DigiaProvider.js.map +1 -1
- package/lib/commonjs/digiaAnchorRegistry.js +15 -1
- package/lib/commonjs/digiaAnchorRegistry.js.map +1 -1
- package/lib/commonjs/interpolate.js +41 -0
- package/lib/commonjs/interpolate.js.map +1 -0
- package/lib/module/Digia.js +13 -2
- package/lib/module/Digia.js.map +1 -1
- package/lib/module/DigiaAnchorView.js +7 -3
- package/lib/module/DigiaAnchorView.js.map +1 -1
- package/lib/module/DigiaGuideController.js.map +1 -1
- package/lib/module/DigiaProvider.js +72 -27
- package/lib/module/DigiaProvider.js.map +1 -1
- package/lib/module/digiaAnchorRegistry.js +15 -1
- package/lib/module/digiaAnchorRegistry.js.map +1 -1
- package/lib/module/interpolate.js +34 -0
- package/lib/module/interpolate.js.map +1 -0
- package/lib/typescript/Digia.d.ts +1 -0
- package/lib/typescript/Digia.d.ts.map +1 -1
- package/lib/typescript/DigiaGuideController.d.ts +2 -0
- package/lib/typescript/DigiaGuideController.d.ts.map +1 -1
- package/lib/typescript/DigiaProvider.d.ts.map +1 -1
- package/lib/typescript/digiaAnchorRegistry.d.ts +4 -0
- package/lib/typescript/digiaAnchorRegistry.d.ts.map +1 -1
- package/lib/typescript/interpolate.d.ts +4 -0
- package/lib/typescript/interpolate.d.ts.map +1 -0
- package/package.json +4 -5
- package/react-native.config.js +1 -1
- package/src/Digia.ts +15 -2
- package/src/DigiaAnchorView.tsx +8 -1
- package/src/DigiaGuideController.ts +2 -0
- package/src/DigiaProvider.tsx +185 -145
- package/src/digiaAnchorRegistry.ts +16 -1
- package/src/interpolate.ts +44 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const PLACEHOLDER_PATTERN = /\{\{\s*([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/g;
|
|
2
|
+
export function interpolateVariables(text, variables) {
|
|
3
|
+
if (!variables) return text;
|
|
4
|
+
return text.replace(PLACEHOLDER_PATTERN, (match, name) => {
|
|
5
|
+
const value = variables[name];
|
|
6
|
+
return value === undefined ? '' : value;
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export function parseVariableMap(raw) {
|
|
10
|
+
const source = parseVariableSource(raw);
|
|
11
|
+
if (!source) return undefined;
|
|
12
|
+
const variables = {};
|
|
13
|
+
for (const [key, value] of Object.entries(source)) {
|
|
14
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key)) continue;
|
|
15
|
+
if (typeof value === 'string') variables[key] = value;else if (typeof value === 'number' || typeof value === 'boolean') variables[key] = String(value);
|
|
16
|
+
}
|
|
17
|
+
return Object.keys(variables).length > 0 ? variables : undefined;
|
|
18
|
+
}
|
|
19
|
+
function parseVariableSource(raw) {
|
|
20
|
+
if (!raw) return undefined;
|
|
21
|
+
if (typeof raw === 'string') {
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
return isPlainObject(parsed) ? parsed : undefined;
|
|
25
|
+
} catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return isPlainObject(raw) ? raw : undefined;
|
|
30
|
+
}
|
|
31
|
+
function isPlainObject(value) {
|
|
32
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=interpolate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PLACEHOLDER_PATTERN","interpolateVariables","text","variables","replace","match","name","value","undefined","parseVariableMap","raw","source","parseVariableSource","key","Object","entries","test","String","keys","length","parsed","JSON","parse","isPlainObject","Array","isArray"],"sourceRoot":"../../src","sources":["interpolate.ts"],"mappings":"AAEA,MAAMA,mBAAmB,GAAG,yCAAyC;AAErE,OAAO,SAASC,oBAAoBA,CAChCC,IAAY,EACZC,SAAkC,EAC5B;EACN,IAAI,CAACA,SAAS,EAAE,OAAOD,IAAI;EAC3B,OAAOA,IAAI,CAACE,OAAO,CAACJ,mBAAmB,EAAE,CAACK,KAAK,EAAEC,IAAY,KAAK;IAC9D,MAAMC,KAAK,GAAGJ,SAAS,CAACG,IAAI,CAAC;IAC7B,OAAOC,KAAK,KAAKC,SAAS,GAAG,EAAE,GAAGD,KAAK;EAC3C,CAAC,CAAC;AACN;AAEA,OAAO,SAASE,gBAAgBA,CAACC,GAAY,EAA2B;EACpE,MAAMC,MAAM,GAAGC,mBAAmB,CAACF,GAAG,CAAC;EACvC,IAAI,CAACC,MAAM,EAAE,OAAOH,SAAS;EAE7B,MAAML,SAAsB,GAAG,CAAC,CAAC;EACjC,KAAK,MAAM,CAACU,GAAG,EAAEN,KAAK,CAAC,IAAIO,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;IAC/C,IAAI,CAAC,0BAA0B,CAACK,IAAI,CAACH,GAAG,CAAC,EAAE;IAC3C,IAAI,OAAON,KAAK,KAAK,QAAQ,EAAEJ,SAAS,CAACU,GAAG,CAAC,GAAGN,KAAK,CAAC,KACjD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,SAAS,EAAEJ,SAAS,CAACU,GAAG,CAAC,GAAGI,MAAM,CAACV,KAAK,CAAC;EACpG;EACA,OAAOO,MAAM,CAACI,IAAI,CAACf,SAAS,CAAC,CAACgB,MAAM,GAAG,CAAC,GAAGhB,SAAS,GAAGK,SAAS;AACpE;AAEA,SAASI,mBAAmBA,CAACF,GAAY,EAAuC;EAC5E,IAAI,CAACA,GAAG,EAAE,OAAOF,SAAS;EAC1B,IAAI,OAAOE,GAAG,KAAK,QAAQ,EAAE;IACzB,IAAI;MACA,MAAMU,MAAM,GAAGC,IAAI,CAACC,KAAK,CAACZ,GAAG,CAAC;MAC9B,OAAOa,aAAa,CAACH,MAAM,CAAC,GAAGA,MAAM,GAAGZ,SAAS;IACrD,CAAC,CAAC,MAAM;MACJ,OAAOA,SAAS;IACpB;EACJ;EACA,OAAOe,aAAa,CAACb,GAAG,CAAC,GAAGA,GAAG,GAAGF,SAAS;AAC/C;AAEA,SAASe,aAAaA,CAAChB,KAAc,EAAoC;EACrE,OAAO,CAAC,CAACA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACiB,KAAK,CAACC,OAAO,CAAClB,KAAK,CAAC;AACxE","ignoreList":[]}
|
|
@@ -94,6 +94,7 @@ declare class DigiaClass implements DigiaDelegate {
|
|
|
94
94
|
private _extractApiResponse;
|
|
95
95
|
private _emitSlotWidth;
|
|
96
96
|
private _extractCampaignKey;
|
|
97
|
+
private _extractVariables;
|
|
97
98
|
private _extractString;
|
|
98
99
|
private _parseTemplateConfig;
|
|
99
100
|
private _loadOrCreateDeviceId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Digia.d.ts","sourceRoot":"","sources":["../../src/Digia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"Digia.d.ts","sourceRoot":"","sources":["../../src/Digia.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,OAAO,KAAK,EAGR,WAAW,EACX,aAAa,EAEb,WAAW,EAIX,YAAY,EACf,MAAM,SAAS,CAAC;AAgBjB,cAAM,UAAW,YAAW,aAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkC;IAG3D,OAAO,CAAC,kBAAkB,CAAS;IAGnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkC;IAClE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;IAE3D;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA8BpD;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAgBnC;;;OAGG;IACH,UAAU,CAAC,UAAU,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI;IAMlD;;;;;;OAMG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMpC,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAMpE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIzC;;;;OAIG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAOK,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAkF/D,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAQ/C;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,uBAAuB;IA8B/B,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,kBAAkB;YAOZ,qBAAqB;YAgCrB,QAAQ;IAmBtB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,oBAAoB;YAkBd,qBAAqB;YAiBrB,kBAAkB;IAI1B,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB5D,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5F,OAAO,CAAC,IAAI;CAMf;AAED,eAAO,MAAM,KAAK,YAAmB,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { GuideLifecycleEvent } from './types';
|
|
2
2
|
import type { TemplateConfig } from './templateTypes';
|
|
3
|
+
import type { VariableMap } from './interpolate';
|
|
3
4
|
export interface DigiaGuideRequest {
|
|
4
5
|
payloadId: string;
|
|
5
6
|
campaignKey: string;
|
|
6
7
|
/** Digia backend UUID for this campaign (from the campaign store _id field). */
|
|
7
8
|
campaignId: string;
|
|
9
|
+
variables?: VariableMap;
|
|
8
10
|
config: TemplateConfig;
|
|
9
11
|
onExperienceEvent: (event: GuideLifecycleEvent) => void;
|
|
10
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DigiaGuideController.d.ts","sourceRoot":"","sources":["../../src/DigiaGuideController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"DigiaGuideController.d.ts","sourceRoot":"","sources":["../../src/DigiaGuideController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,MAAM,EAAE,cAAc,CAAC;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC3D;AAED,KAAK,yBAAyB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,yBAAyB,KAAK,IAAI,CAAC;AAErE,cAAM,oBAAoB;IACtB,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,cAAc,CAAkC;IAExD,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAUnD,KAAK,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO;IAU1C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAS/B,OAAO,CAAC,aAAa;CAMxB;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DigiaProvider.d.ts","sourceRoot":"","sources":["../../src/DigiaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DigiaProvider.d.ts","sourceRoot":"","sources":["../../src/DigiaProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AAgxBnG,wBAAgB,SAAS,sBAExB"}
|
|
@@ -5,11 +5,15 @@ type AnchorLayout = {
|
|
|
5
5
|
height: number;
|
|
6
6
|
};
|
|
7
7
|
type Listener = (layout: AnchorLayout) => void;
|
|
8
|
+
type MeasureCallback = () => void;
|
|
8
9
|
export type { AnchorLayout };
|
|
9
10
|
export declare const digiaAnchorRegistry: {
|
|
10
11
|
setLayout: (key: string, layout: AnchorLayout) => void;
|
|
11
12
|
getLayout: (key: string) => AnchorLayout | undefined;
|
|
12
13
|
subscribe: (key: string, listener: Listener) => () => void;
|
|
13
14
|
remove: (key: string) => void;
|
|
15
|
+
registerMeasure: (key: string, cb: MeasureCallback) => void;
|
|
16
|
+
unregisterMeasure: (key: string, cb: MeasureCallback) => void;
|
|
17
|
+
remeasure: (key: string) => void;
|
|
14
18
|
};
|
|
15
19
|
//# sourceMappingURL=digiaAnchorRegistry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"digiaAnchorRegistry.d.ts","sourceRoot":"","sources":["../../src/digiaAnchorRegistry.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AACnF,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"digiaAnchorRegistry.d.ts","sourceRoot":"","sources":["../../src/digiaAnchorRegistry.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AACnF,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAA;AAC9C,KAAK,eAAe,GAAG,MAAM,IAAI,CAAA;AAsCjC,YAAY,EAAE,YAAY,EAAE,CAAA;AAC5B,eAAO,MAAM,mBAAmB;qBAjCR,MAAM,UAAU,YAAY;qBAK5B,MAAM,KAAG,YAAY,GAAG,SAAS;qBAEjC,MAAM,YAAY,QAAQ,KAAG,MAAM,IAAI;kBAO1C,MAAM;2BAMG,MAAM,MAAM,eAAe;6BAIzB,MAAM,MAAM,eAAe;qBAInC,MAAM;CAK+F,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type VariableMap = Record<string, string>;
|
|
2
|
+
export declare function interpolateVariables(text: string, variables: VariableMap | undefined): string;
|
|
3
|
+
export declare function parseVariableMap(raw: unknown): VariableMap | undefined;
|
|
4
|
+
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../../src/interpolate.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAIjD,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,WAAW,GAAG,SAAS,GACnC,MAAM,CAMR;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,GAAG,SAAS,CAWtE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digia-engage/core",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "React Native bridge for Digia Engage – renders native Android Compose UI inside React Native apps",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"module": "src/index.ts",
|
|
@@ -46,16 +46,15 @@
|
|
|
46
46
|
"license": "MIT",
|
|
47
47
|
"dependencies": {
|
|
48
48
|
"@react-native-async-storage/async-storage": "^2.1.2",
|
|
49
|
-
"react-native-uuid": "^2.0.3"
|
|
49
|
+
"react-native-uuid": "^2.0.3",
|
|
50
|
+
"@edwardloopez/react-native-coachmark": "^0.5.3",
|
|
51
|
+
"@floating-ui/core": "^1.0.0"
|
|
50
52
|
},
|
|
51
53
|
"peerDependencies": {
|
|
52
|
-
"@floating-ui/core": "^1.0.0",
|
|
53
54
|
"react-native-reanimated": ">=3.0.0",
|
|
54
55
|
"react-native-svg": ">=13.0.0"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
|
57
|
-
"@edwardloopez/react-native-coachmark": "^0.5.3",
|
|
58
|
-
"@floating-ui/core": "^1.7.5",
|
|
59
58
|
"@react-native/eslint-config": "^0.73.0",
|
|
60
59
|
"@types/react": "^18.2.0",
|
|
61
60
|
"@types/react-native": "^0.73.0",
|
package/react-native.config.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* react-native.config.js
|
|
3
3
|
*
|
|
4
|
-
* Configures React Native CLI auto-linking for @digia/
|
|
4
|
+
* Configures React Native CLI auto-linking for @digia-engage/core.
|
|
5
5
|
* This tells the RN CLI where to find the Android library module and the
|
|
6
6
|
* iOS podspec so that `npx react-native link` / auto-linking works without
|
|
7
7
|
* any manual steps in host app project files.
|
package/src/Digia.ts
CHANGED
|
@@ -19,6 +19,7 @@ import { DeviceEventEmitter } from 'react-native';
|
|
|
19
19
|
import { nativeDigiaModule } from './NativeDigiaEngage';
|
|
20
20
|
import { digiaHealthReporter, HealthEventType } from './DigiaHealthReporter';
|
|
21
21
|
import { digiaGuideController } from './DigiaGuideController';
|
|
22
|
+
import { parseVariableMap } from './interpolate';
|
|
22
23
|
import { digiaActionHandler } from './actionHandler';
|
|
23
24
|
import uuid from 'react-native-uuid';
|
|
24
25
|
import { frequencyStore } from './frequencyStore';
|
|
@@ -234,6 +235,7 @@ class DigiaClass implements DigiaDelegate {
|
|
|
234
235
|
payloadId: payload.id,
|
|
235
236
|
campaignKey,
|
|
236
237
|
campaignId: digiaId,
|
|
238
|
+
variables: this._extractVariables(payload),
|
|
237
239
|
config,
|
|
238
240
|
onExperienceEvent: (event) => this._onGuideLifecycleEvent(event, payload.id, campaignKey, digiaId),
|
|
239
241
|
});
|
|
@@ -505,12 +507,12 @@ class DigiaClass implements DigiaDelegate {
|
|
|
505
507
|
}
|
|
506
508
|
|
|
507
509
|
private _extractCampaignKey(payload: InAppPayload): string | null {
|
|
508
|
-
const fromContent = this._extractString(payload.content, 'digiaKey', 'campaign_key', 'campaignKey');
|
|
510
|
+
const fromContent = this._extractString(payload.content, 'digia_campaign_key', 'digiaKey', 'campaign_key', 'campaignKey');
|
|
509
511
|
if (fromContent) return fromContent;
|
|
510
512
|
|
|
511
513
|
const args = payload.content.args;
|
|
512
514
|
if (args && typeof args === 'object' && !Array.isArray(args)) {
|
|
513
|
-
const fromArgs = this._extractString(args as Record<string, unknown>, 'digiaKey', 'campaign_key', 'campaignKey');
|
|
515
|
+
const fromArgs = this._extractString(args as Record<string, unknown>, 'digia_campaign_key', 'digiaKey', 'campaign_key', 'campaignKey');
|
|
514
516
|
if (fromArgs) return fromArgs;
|
|
515
517
|
}
|
|
516
518
|
|
|
@@ -518,6 +520,17 @@ class DigiaClass implements DigiaDelegate {
|
|
|
518
520
|
return null;
|
|
519
521
|
}
|
|
520
522
|
|
|
523
|
+
private _extractVariables(payload: InAppPayload): Record<string, string> | undefined {
|
|
524
|
+
const fromContent = parseVariableMap(payload.content.variables);
|
|
525
|
+
if (fromContent) return fromContent;
|
|
526
|
+
|
|
527
|
+
const args = payload.content.args;
|
|
528
|
+
if (args && typeof args === 'object' && !Array.isArray(args)) {
|
|
529
|
+
return parseVariableMap((args as Record<string, unknown>).variables);
|
|
530
|
+
}
|
|
531
|
+
return undefined;
|
|
532
|
+
}
|
|
533
|
+
|
|
521
534
|
private _extractString(data: Record<string, unknown>, ...keys: string[]): string | null {
|
|
522
535
|
for (const key of keys) {
|
|
523
536
|
const value = data[key];
|
package/src/DigiaAnchorView.tsx
CHANGED
|
@@ -37,7 +37,13 @@ function JsMeasureAnchor({ anchorKey, children, style, ...rest }: Props) {
|
|
|
37
37
|
});
|
|
38
38
|
}, [anchorKey]);
|
|
39
39
|
|
|
40
|
-
useEffect(() =>
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
digiaAnchorRegistry.registerMeasure(anchorKey, measure);
|
|
42
|
+
return () => {
|
|
43
|
+
digiaAnchorRegistry.unregisterMeasure(anchorKey, measure);
|
|
44
|
+
nativeDigiaModule.unregisterAnchor(anchorKey);
|
|
45
|
+
};
|
|
46
|
+
}, [anchorKey, measure]);
|
|
41
47
|
|
|
42
48
|
return (
|
|
43
49
|
<View ref={ref} onLayout={measure} style={style} {...rest}>
|
|
@@ -45,3 +51,4 @@ function JsMeasureAnchor({ anchorKey, children, style, ...rest }: Props) {
|
|
|
45
51
|
</View>
|
|
46
52
|
);
|
|
47
53
|
}
|
|
54
|
+
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { GuideLifecycleEvent } from './types';
|
|
2
2
|
import type { TemplateConfig } from './templateTypes';
|
|
3
|
+
import type { VariableMap } from './interpolate';
|
|
3
4
|
|
|
4
5
|
export interface DigiaGuideRequest {
|
|
5
6
|
payloadId: string;
|
|
6
7
|
campaignKey: string;
|
|
7
8
|
/** Digia backend UUID for this campaign (from the campaign store _id field). */
|
|
8
9
|
campaignId: string;
|
|
10
|
+
variables?: VariableMap;
|
|
9
11
|
config: TemplateConfig;
|
|
10
12
|
onExperienceEvent: (event: GuideLifecycleEvent) => void;
|
|
11
13
|
}
|