@webex/cc-digital-channels 0.0.0-next.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/dist/digital-channels/DigitalChannelsComponent.js +59 -0
- package/dist/digital-channels/DigitalChannelsComponent.js.map +1 -0
- package/dist/digital-channels/digital-channels.types.js +3 -0
- package/dist/digital-channels/digital-channels.types.js.map +1 -0
- package/dist/digital-channels/index.js +46 -0
- package/dist/digital-channels/index.js.map +1 -0
- package/dist/helper.js +107 -0
- package/dist/helper.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.LICENSE.txt +36 -0
- package/dist/index.js.map +1 -0
- package/dist/types/digital-channels/DigitalChannelsComponent.d.ts +9 -0
- package/dist/types/digital-channels/digital-channels.types.d.ts +30 -0
- package/dist/types/digital-channels/index.d.ts +4 -0
- package/dist/types/helper.d.ts +18 -0
- package/dist/types/index.d.ts +3 -0
- package/package.json +72 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.DigitalChannelsComponent = void 0;
|
|
40
|
+
const react_1 = __importStar(require("react"));
|
|
41
|
+
const cc_digital_interactions_1 = __importDefault(require("cc-digital-interactions"));
|
|
42
|
+
require("@momentum-ui/web-components");
|
|
43
|
+
/**
|
|
44
|
+
* Presentation component for Digital Channels.
|
|
45
|
+
* Renders the Engage widget with proper theming.
|
|
46
|
+
*/
|
|
47
|
+
const DigitalChannelsComponent = ({ conversationId, jwtToken, dataCenter, currentTheme = 'LIGHT', }) => {
|
|
48
|
+
// Create a stable key based on critical props to force remount when they change
|
|
49
|
+
// This prevents issues with the Froala editor trying to cleanup/reinitialize improperly
|
|
50
|
+
const componentKey = (0, react_1.useMemo)(() => {
|
|
51
|
+
return `${conversationId}-${jwtToken.slice(-8)}-${dataCenter}`;
|
|
52
|
+
}, [conversationId, jwtToken, dataCenter]);
|
|
53
|
+
const isDarkTheme = currentTheme === 'DARK';
|
|
54
|
+
return (react_1.default.createElement("div", null,
|
|
55
|
+
react_1.default.createElement("md-theme", Object.assign({ id: "app-theme", theme: "momentumV2" }, (isDarkTheme ? { darktheme: true } : { lighttheme: true })),
|
|
56
|
+
react_1.default.createElement(cc_digital_interactions_1.default, { key: componentKey, conversationId: conversationId, jwtToken: jwtToken, dataCenter: dataCenter, interactionId: "", readonly: false, theme: isDarkTheme ? 'dark' : 'light', isVisualRebrand: true }))));
|
|
57
|
+
};
|
|
58
|
+
exports.DigitalChannelsComponent = DigitalChannelsComponent;
|
|
59
|
+
//# sourceMappingURL=DigitalChannelsComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DigitalChannelsComponent.js","sourceRoot":"","sources":["../../src/digital-channels/DigitalChannelsComponent.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAqC;AACrC,sFAA6C;AAE7C,uCAAqC;AAGrC;;;GAGG;AACH,MAAM,wBAAwB,GAA2D,CAAC,EACxF,cAAc,EACd,QAAQ,EACR,UAAU,EACV,YAAY,GAAG,OAAO,GACvB,EAAE,EAAE;IACH,gFAAgF;IAChF,wFAAwF;IACxF,MAAM,YAAY,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QAChC,OAAO,GAAG,cAAc,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC;IACjE,CAAC,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;IAE3C,MAAM,WAAW,GAAG,YAAY,KAAK,MAAM,CAAC;IAE5C,OAAO,CACL;QACE,0DAAU,EAAE,EAAC,WAAW,EAAC,KAAK,EAAC,YAAY,IAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC;YACpG,8BAAC,iCAAM,IACL,GAAG,EAAE,YAAY,EACjB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAC,EAAE,EAChB,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACrC,eAAe,EAAE,IAAI,GACrB,CACO,CACP,CACP,CAAC;AACJ,CAAC,CAAC;AAEM,4DAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"digital-channels.types.js","sourceRoot":"","sources":["../../src/digital-channels/digital-channels.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DigitalChannels = void 0;
|
|
7
|
+
const react_1 = __importDefault(require("react"));
|
|
8
|
+
const mobx_react_lite_1 = require("mobx-react-lite");
|
|
9
|
+
const react_error_boundary_1 = require("react-error-boundary");
|
|
10
|
+
const cc_store_1 = __importDefault(require("@webex/cc-store"));
|
|
11
|
+
const helper_1 = require("../helper");
|
|
12
|
+
const DigitalChannelsComponent_1 = require("./DigitalChannelsComponent");
|
|
13
|
+
const DigitalChannelsInternal = (0, mobx_react_lite_1.observer)(({ currentTheme }) => {
|
|
14
|
+
const { logger, currentTask, isDigitalChannelsInitialized, setDigitalChannelsInitialized, getAccessToken, dataCenter } = cc_store_1.default;
|
|
15
|
+
// Fetch JWT token and conversation ID
|
|
16
|
+
const { jwtToken, conversationId, hasError } = (0, helper_1.useDigitalChannelsData)({
|
|
17
|
+
getAccessToken,
|
|
18
|
+
currentTask,
|
|
19
|
+
logger,
|
|
20
|
+
});
|
|
21
|
+
// Initialize Digital Channels app once we have all required data
|
|
22
|
+
const { initialized } = (0, helper_1.useDigitalChannelsInit)({
|
|
23
|
+
currentTask: currentTask || {},
|
|
24
|
+
jwtToken: jwtToken || '',
|
|
25
|
+
dataCenter: dataCenter || '',
|
|
26
|
+
logger,
|
|
27
|
+
isDigitalChannelsInitialized,
|
|
28
|
+
setDigitalChannelsInitialized,
|
|
29
|
+
// Skip initialization if we don't have required data
|
|
30
|
+
skipInit: !currentTask || !jwtToken || !dataCenter,
|
|
31
|
+
});
|
|
32
|
+
// Early return after all hooks are called
|
|
33
|
+
if (!currentTask || !jwtToken || !dataCenter || hasError || !initialized || !conversationId) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return (react_1.default.createElement(DigitalChannelsComponent_1.DigitalChannelsComponent, { conversationId: conversationId, jwtToken: jwtToken, dataCenter: dataCenter, currentTheme: currentTheme }));
|
|
37
|
+
});
|
|
38
|
+
const DigitalChannels = (props) => {
|
|
39
|
+
return (react_1.default.createElement(react_error_boundary_1.ErrorBoundary, { fallbackRender: () => react_1.default.createElement(react_1.default.Fragment, null), onError: (error) => {
|
|
40
|
+
if (cc_store_1.default.onErrorCallback)
|
|
41
|
+
cc_store_1.default.onErrorCallback('DigitalChannels', error);
|
|
42
|
+
} },
|
|
43
|
+
react_1.default.createElement(DigitalChannelsInternal, Object.assign({}, props))));
|
|
44
|
+
};
|
|
45
|
+
exports.DigitalChannels = DigitalChannels;
|
|
46
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/digital-channels/index.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,qDAAyC;AACzC,+DAAmD;AAEnD,+DAAoC;AACpC,sCAAyE;AACzE,yEAAoE;AAGpE,MAAM,uBAAuB,GAAkD,IAAA,0BAAQ,EAAC,CAAC,EAAC,YAAY,EAAC,EAAE,EAAE;IACzG,MAAM,EAAC,MAAM,EAAE,WAAW,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,cAAc,EAAE,UAAU,EAAC,GAClH,kBAAK,CAAC;IAER,sCAAsC;IACtC,MAAM,EAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAC,GAAG,IAAA,+BAAsB,EAAC;QAClE,cAAc;QACd,WAAW;QACX,MAAM;KACP,CAAC,CAAC;IAEH,iEAAiE;IACjE,MAAM,EAAC,WAAW,EAAC,GAAG,IAAA,+BAAsB,EAAC;QAC3C,WAAW,EAAE,WAAW,IAAK,EAAyB;QACtD,QAAQ,EAAE,QAAQ,IAAI,EAAE;QACxB,UAAU,EAAE,UAAU,IAAI,EAAE;QAC5B,MAAM;QACN,4BAA4B;QAC5B,6BAA6B;QAC7B,qDAAqD;QACrD,QAAQ,EAAE,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU;KACnD,CAAC,CAAC;IAEH,0CAA0C;IAC1C,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,8BAAC,mDAAwB,IACvB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,GAC1B,CACH,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAkD,CAAC,KAAK,EAAE,EAAE;IAC/E,OAAO,CACL,8BAAC,oCAAa,IACZ,cAAc,EAAE,GAAG,EAAE,CAAC,6DAAK,EAC3B,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE;YACxB,IAAI,kBAAK,CAAC,eAAe;gBAAE,kBAAK,CAAC,eAAe,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAC7E,CAAC;QAED,8BAAC,uBAAuB,oBAAK,KAAK,EAAI,CACxB,CACjB,CAAC;AACJ,CAAC,CAAC;AAEM,0CAAe"}
|
package/dist/helper.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.useDigitalChannelsData = exports.useDigitalChannelsInit = void 0;
|
|
13
|
+
const react_1 = require("react");
|
|
14
|
+
const cc_digital_interactions_1 = require("cc-digital-interactions");
|
|
15
|
+
/**
|
|
16
|
+
* Hook to handle Digital Channels initialization.
|
|
17
|
+
* Ensures initialization happens only once per session using store flag.
|
|
18
|
+
*/
|
|
19
|
+
const useDigitalChannelsInit = (props) => {
|
|
20
|
+
const { currentTask, jwtToken, dataCenter, logger, isDigitalChannelsInitialized, setDigitalChannelsInitialized, skipInit = false, } = props;
|
|
21
|
+
const [initialized, setInitialized] = (0, react_1.useState)(isDigitalChannelsInitialized);
|
|
22
|
+
(0, react_1.useEffect)(() => {
|
|
23
|
+
// Skip initialization if required data is not available
|
|
24
|
+
if (skipInit) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const initialize = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
28
|
+
// Initialize the digital channels app only once per session
|
|
29
|
+
if (!isDigitalChannelsInitialized) {
|
|
30
|
+
logger.log(`[DIGITAL_CHANNELS_INIT] Starting Digital Channels initialization for the FIRST TIME (dataCenter: ${dataCenter})...`, {
|
|
31
|
+
module: 'cc-digital-channels',
|
|
32
|
+
method: 'useDigitalChannelsInit',
|
|
33
|
+
});
|
|
34
|
+
try {
|
|
35
|
+
yield (0, cc_digital_interactions_1.initializeApp)(dataCenter, jwtToken);
|
|
36
|
+
setDigitalChannelsInitialized(true);
|
|
37
|
+
setInitialized(true);
|
|
38
|
+
logger.log('[DIGITAL_CHANNELS_INIT] ✅ Digital Channels app initialized SUCCESSFULLY', {
|
|
39
|
+
module: 'cc-digital-channels',
|
|
40
|
+
method: 'useDigitalChannelsInit',
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
45
|
+
logger.error(`[DIGITAL_CHANNELS_INIT] ❌ Failed to initialize Digital Channels app: ${errorMessage}`, {
|
|
46
|
+
module: 'cc-digital-channels',
|
|
47
|
+
method: 'useDigitalChannelsInit',
|
|
48
|
+
error,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger.log('[DIGITAL_CHANNELS_INIT] ✅ App already initialized. Skipping re-initialization.', {
|
|
54
|
+
module: 'cc-digital-channels',
|
|
55
|
+
method: 'useDigitalChannelsInit',
|
|
56
|
+
});
|
|
57
|
+
setInitialized(true);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
initialize();
|
|
61
|
+
}, [currentTask, skipInit, jwtToken]);
|
|
62
|
+
return { initialized };
|
|
63
|
+
};
|
|
64
|
+
exports.useDigitalChannelsInit = useDigitalChannelsInit;
|
|
65
|
+
/**
|
|
66
|
+
* Hook to handle fetching Digital Channels data (token and conversationId).
|
|
67
|
+
* Centralizes token fetching logic to keep the component clean.
|
|
68
|
+
*/
|
|
69
|
+
const useDigitalChannelsData = (props) => {
|
|
70
|
+
const { getAccessToken, currentTask, logger } = props;
|
|
71
|
+
const [jwtToken, setJwtToken] = (0, react_1.useState)('');
|
|
72
|
+
const [tokenError, setTokenError] = (0, react_1.useState)(false);
|
|
73
|
+
// Fetch access token from the store
|
|
74
|
+
(0, react_1.useEffect)(() => {
|
|
75
|
+
const fetchToken = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
76
|
+
try {
|
|
77
|
+
const token = yield getAccessToken();
|
|
78
|
+
setJwtToken(token);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger === null || logger === void 0 ? void 0 : logger.error('[DIGITAL_CHANNELS] ❌ Failed to get access token', {
|
|
82
|
+
module: 'cc-digital-channels',
|
|
83
|
+
method: 'useDigitalChannelsData.fetchToken',
|
|
84
|
+
error,
|
|
85
|
+
});
|
|
86
|
+
setTokenError(true);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
fetchToken();
|
|
90
|
+
}, [getAccessToken, logger]);
|
|
91
|
+
// Extract conversationId from currentTask (always call this, return empty string if no task)
|
|
92
|
+
const conversationId = (0, react_1.useMemo)(() => {
|
|
93
|
+
var _a;
|
|
94
|
+
if (!currentTask)
|
|
95
|
+
return '';
|
|
96
|
+
return (((_a = currentTask.data.interaction.callAssociatedDetails) === null || _a === void 0 ? void 0 : _a.mediaResourceId) || '');
|
|
97
|
+
}, [currentTask]);
|
|
98
|
+
const hasError = tokenError;
|
|
99
|
+
return {
|
|
100
|
+
jwtToken,
|
|
101
|
+
conversationId,
|
|
102
|
+
tokenError,
|
|
103
|
+
hasError,
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
exports.useDigitalChannelsData = useDigitalChannelsData;
|
|
107
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../src/helper.ts"],"names":[],"mappings":"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"}
|